[ZM] Added zm_prison and zm_highrise GSCs

This commit is contained in:
JezuzLizard 2022-03-09 12:30:35 -08:00
parent 8ccce7f949
commit f97389d9da
93 changed files with 39579 additions and 41338 deletions

View File

@ -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
{
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "baseball_to_first_floor_climb" ); dosimpletraverse( "baseball_to_first_floor_climb" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "baseball_to_roof_climb" ); dosimpletraverse( "baseball_to_roof_climb" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "baseball_to_second_floor_climb" ); dosimpletraverse( "baseball_to_second_floor_climb" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_down_cellblock" ); dosimpletraverse( "jump_down_cellblock" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_down_cellblock_norailing" ); dosimpletraverse( "jump_down_cellblock_norailing" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_up_cellblock" ); dosimpletraverse( "jump_up_cellblock" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "climb_over_dock_fence", 1 ); dosimpletraverse( "climb_over_dock_fence", 1 );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "dock_mid_way_jump_up_climb", 1 ); dosimpletraverse( "dock_mid_way_jump_up_climb", 1 );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "dock_tommygun_dropdown", 1 ); dosimpletraverse( "dock_tommygun_dropdown", 1 );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "dock_water_climb_up" ); dosimpletraverse( "dock_water_climb_up" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "golden_gate_jump_up" ); dosimpletraverse( "golden_gate_jump_up" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "prison_gondola_traversal", 1 ); dosimpletraverse( "prison_gondola_traversal", 1 );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_down_127" ); dosimpletraverse( "jump_down_127" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_down_222" ); dosimpletraverse( "jump_down_222" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_down_286" ); dosimpletraverse( "jump_down_286" );
} }

View File

@ -1,14 +1,12 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
if ( isDefined( self.isdog ) && self.isdog ) if ( isdefined( self.isdog ) && self.isdog )
{ dog_jump_down( 72, 7 );
dog_jump_down( 72, 7 ); else
} dosimpletraverse( "jump_down_72" );
else
{
dosimpletraverse( "jump_down_72" );
}
} }

View File

@ -1,14 +1,12 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
if ( isDefined( self.isdog ) && self.isdog ) if ( isdefined( self.isdog ) && self.isdog )
{ dog_jump_down( 96, 7 );
dog_jump_down( 96, 7 ); else
} dosimpletraverse( "jump_down_96" );
else
{
dosimpletraverse( "jump_down_96" );
}
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_up_127" ); dosimpletraverse( "jump_up_127" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "jump_up_222" ); dosimpletraverse( "jump_up_222" );
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/traverse/shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main() main()
{ {
dosimpletraverse( "cellblock_jump_up_climb" ); dosimpletraverse( "cellblock_jump_up_climb" );
} }

View File

@ -1,45 +1,46 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_ai_dogs; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_stats; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/gametypes_zm/_zm_gametype; #include common_scripts\utility;
#include common_scripts/utility; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/gametypes_zm/_hud_util; #include maps\mp\zombies\_zm_stats;
#include maps/mp/_utility; #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(); maps\mp\gametypes_zm\_zm_gametype::main();
level.onprecachegametype = ::onprecachegametype; level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype; level.onstartgametype = ::onstartgametype;
level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func; 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; 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::post_gametype_main( "zstandard" );
} }
onprecachegametype() //checked matches cerberus output onprecachegametype()
{ {
level.playersuicideallowed = 1; level.playersuicideallowed = 1;
level.canplayersuicide = ::canplayersuicide; level.canplayersuicide = ::canplayersuicide;
level.suicide_weapon = "death_self_zm"; level.suicide_weapon = "death_self_zm";
precacheitem( "death_self_zm" ); precacheitem( "death_self_zm" );
maps/mp/zombies/_zm_ai_dogs::init(); maps\mp\zombies\_zm_ai_dogs::init();
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" ); 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::setup_classic_gametype();
maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main ); maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
} }
zstandard_main() //checked matches cerberus output zstandard_main()
{ {
level.dog_rounds_allowed = getgametypesetting( "allowdogs" ); level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
if ( level.dog_rounds_allowed )
{ if ( level.dog_rounds_allowed )
maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds(); maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds();
}
level thread maps/mp/zombies/_zm::round_start(); level thread maps\mp\zombies\_zm::round_start();
level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies(); level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies();
} }

View File

@ -1,304 +1,314 @@
//checked includes changed to match cerberus output // T6 GSC SOURCE
#include maps/mp/zm_prison_sq_wth; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_prison_sq_fc; #include maps\mp\_utility;
#include maps/mp/zm_prison_sq_final; #include common_scripts\utility;
#include maps/mp/zombies/_zm_powerups; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_magicbox; #include maps\mp\zm_alcatraz_utility;
#include maps/mp/zm_alcatraz_travel; #include maps\mp\zombies\_zm_craftables;
#include maps/mp/zm_alcatraz_traps; #include maps\mp\zm_alcatraz_craftables;
#include maps/mp/zm_prison; #include maps\mp\zombies\_zm_ai_brutus;
#include maps/mp/zm_alcatraz_sq; #include maps\mp\zombies\_zm_afterlife;
#include maps/mp/zm_prison_sq_bg; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/zm_prison_spoon; #include maps\mp\zombies\_zm_game_module;
#include maps/mp/zm_prison_achievement; #include maps\mp\zm_prison_achievement;
#include maps/mp/zombies/_zm_game_module; #include maps\mp\zm_prison_spoon;
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\zm_prison_sq_bg;
#include maps/mp/zombies/_zm_afterlife; #include maps\mp\zm_alcatraz_sq;
#include maps/mp/zombies/_zm_ai_brutus; #include maps\mp\zm_prison;
#include maps/mp/zm_alcatraz_craftables; #include maps\mp\zm_alcatraz_traps;
#include maps/mp/zombies/_zm_craftables; #include maps\mp\zm_alcatraz_travel;
#include maps/mp/zm_alcatraz_utility; #include maps\mp\zombies\_zm_magicbox;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_powerups;
#include common_scripts/utility; #include maps\mp\zm_prison_sq_final;
#include maps/mp/_utility; #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 ) if ( isdefined( level.createfx_enabled ) && level.createfx_enabled )
{ return;
return;
} maps\mp\zombies\_zm_craftables::init();
maps/mp/zombies/_zm_craftables::init(); maps\mp\zm_alcatraz_craftables::include_craftables();
maps/mp/zm_alcatraz_craftables::include_craftables(); maps\mp\zm_alcatraz_craftables::init_craftables();
maps/mp/zm_alcatraz_craftables::init_craftables(); maps\mp\zombies\_zm_ai_brutus::precache();
maps/mp/zombies/_zm_ai_brutus::precache(); maps\mp\zombies\_zm_afterlife::init();
maps/mp/zombies/_zm_afterlife::init(); precacheshader( "waypoint_kill_red" );
precacheshader( "waypoint_kill_red" ); level._effect["powerup_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
level._effect[ "powerup_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
} }
main() //checked changed to match cerberus output main()
{ {
level thread sq_main_controller(); level thread sq_main_controller();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "zclassic" ); 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_game_module::set_current_game_module( level.game_module_standard_index );
maps/mp/zombies/_zm_ai_brutus::init(); maps\mp\zombies\_zm_ai_brutus::init();
level thread maps/mp/zombies/_zm_craftables::think_craftables(); level thread maps\mp\zombies\_zm_craftables::think_craftables();
maps/mp/zm_prison_achievement::init(); maps\mp\zm_prison_achievement::init();
level thread maps/mp/zm_prison_spoon::init(); level thread maps\mp\zm_prison_spoon::init();
level thread maps/mp/zm_prison_sq_bg::init(); level thread maps\mp\zm_prison_sq_bg::init();
a_grief_clips = getentarray( "grief_clips", "targetname" ); a_grief_clips = getentarray( "grief_clips", "targetname" );
foreach ( clip in a_grief_clips )
{ foreach ( clip in a_grief_clips )
clip connectpaths(); {
clip delete(); clip connectpaths();
} clip delete();
level thread give_afterlife(); }
level thread maps/mp/zm_alcatraz_sq::start_alcatraz_sidequest();
onplayerconnect_callback( ::player_quest_vfx ); level thread give_afterlife();
flag_wait( "initial_blackscreen_passed" ); level thread maps\mp\zm_alcatraz_sq::start_alcatraz_sidequest();
level notify( "Pack_A_Punch_on" ); onplayerconnect_callback( ::player_quest_vfx );
flag_wait( "start_zombie_round_logic" ); flag_wait( "initial_blackscreen_passed" );
level thread maps/mp/zm_prison::delete_perk_machine_clip(); level notify( "Pack_A_Punch_on" );
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs(); flag_wait( "start_zombie_round_logic" );
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs(); level thread maps\mp\zm_prison::delete_perk_machine_clip();
level thread maps/mp/zm_alcatraz_traps::init_tower_trap_trigs(); level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps/mp/zm_alcatraz_travel::init_alcatraz_zipline(); level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
level thread power_on_perk_machines(); level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs();
level thread afterlife_powerups(); level thread maps\mp\zm_alcatraz_travel::init_alcatraz_zipline();
level thread afterlife_intro_door(); level thread power_on_perk_machines();
level thread afterlife_cell_door_1(); level thread afterlife_powerups();
level thread afterlife_cell_door_2(); level thread afterlife_intro_door();
level thread blundergat_upgrade_station(); 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" ); chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = []; level.chests = [];
level.chests[ level.chests.size ] = chest1; level.chests[level.chests.size] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); 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 ); onplayerconnect_callback( maps\mp\zombies\_zm_afterlife::init_player );
flag_wait( "initial_players_connected" ); flag_wait( "initial_players_connected" );
wait 0.5; wait 0.5;
n_start_pos = 1; n_start_pos = 1;
a_players = getplayers(); a_players = getplayers();
foreach ( player in a_players )
{ foreach ( player in a_players )
if ( isDefined( player.afterlife ) && !player.afterlife ) {
{ if ( isdefined( player.afterlife ) && !player.afterlife )
player thread fake_kill_player( n_start_pos ); {
n_start_pos++; 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_remove();
self.afterlife = 1; self.afterlife = 1;
self thread afterlife_laststand(); self thread afterlife_laststand();
self waittill( "player_fake_corpse_created" );
self thread afterlife_tutorial(); self waittill( "player_fake_corpse_created" );
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
trace_start = e_corpse_location.origin; self thread afterlife_tutorial();
trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, -1 ), 100 ); e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
corpse_trace = physicstrace( trace_start, trace_end, vectorScale( ( -1, -1, 0 ), 10 ), vectorScale( ( 1, 1, 0 ), 10 ), self.e_afterlife_corpse ); trace_start = e_corpse_location.origin;
self.e_afterlife_corpse.origin = corpse_trace[ "position" ]; trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 );
vec_to_target = self.e_afterlife_corpse.origin - self.origin; corpse_trace = physicstrace( trace_start, trace_end, vectorscale( ( -1, -1, 0 ), 10.0 ), vectorscale( ( 1, 1, 0 ), 10.0 ), self.e_afterlife_corpse );
vec_to_target = vectorToAngles( vec_to_target ); self.e_afterlife_corpse.origin = corpse_trace["position"];
vec_to_target = ( 0, vec_to_target[ 1 ], 0 ); vec_to_target = self.e_afterlife_corpse.origin - self.origin;
self setplayerangles( vec_to_target ); vec_to_target = vectortoangles( vec_to_target );
self notify( "al_all_setup" ); 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" ); self endon( "disconnect" );
level endon( "end_game" ); level endon( "end_game" );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
wait 3; wait 3;
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" ); self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" );
self thread afterlife_tutorial_attack_watch(); self thread afterlife_tutorial_attack_watch();
waittill_notify_or_timeout( "stop_tutorial", 5 ); waittill_notify_or_timeout( "stop_tutorial", 5 );
self thread destroy_tutorial_message(); self thread destroy_tutorial_message();
wait 1; wait 1;
if ( isDefined( self.afterlife ) && self.afterlife )
{ if ( isdefined( self.afterlife ) && self.afterlife )
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" ); {
self thread afterlife_tutorial_jump_watch(); self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
waittill_notify_or_timeout( "stop_tutorial", 5 ); self thread afterlife_tutorial_jump_watch();
self thread destroy_tutorial_message(); 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( "stop_tutorial" );
self endon( "disconnect" ); self endon( "disconnect" );
while ( isDefined( self.afterlife ) && self.afterlife && !self isfiring() )
{ while ( isdefined( self.afterlife ) && self.afterlife && !self isfiring() )
wait 0.05; wait 0.05;
}
wait 0.2; wait 0.2;
self notify( "stop_tutorial" ); self notify( "stop_tutorial" );
} }
afterlife_tutorial_jump_watch() //checked matches cerberus output afterlife_tutorial_jump_watch()
{ {
self endon( "stop_tutorial" ); self endon( "stop_tutorial" );
self endon( "disconnect" ); self endon( "disconnect" );
while ( isDefined( self.afterlife ) && self.afterlife && !self is_jumping() )
{ while ( isdefined( self.afterlife ) && self.afterlife && !self is_jumping() )
wait 0.05; wait 0.05;
}
wait 0.2; wait 0.2;
self notify( "stop_tutorial" ); self notify( "stop_tutorial" );
} }
afterlife_powerups() //checked matches cerberus output afterlife_powerups()
{ {
level._powerup_grab_check = ::cell_grab_check; level._powerup_grab_check = ::cell_grab_check;
s_powerup_loc = getstruct( "powerup_start", "targetname" ); s_powerup_loc = getstruct( "powerup_start", "targetname" );
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
s_powerup_loc = getstruct( "powerup_cell_1", "targetname" ); s_powerup_loc = getstruct( "powerup_cell_1", "targetname" );
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
{ if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" ); spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
} else
else spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" );
{
spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" ); s_powerup_loc = getstruct( "powerup_cell_2", "targetname" );
}
s_powerup_loc = getstruct( "powerup_cell_2", "targetname" ); if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
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, "double_points" ); spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
}
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" ); cell_powerup = getstruct( "powerup_start", "targetname" );
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
{ if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
m_door = getent( "powerup_door", "targetname" ); {
if ( !isDefined( m_door.opened ) ) m_door = getent( "powerup_door", "targetname" );
{
return 0; 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 ) ) ) cell_powerup = getstruct( "powerup_cell_1", "targetname" );
{
m_door = getent( "powerup_cell_door_1", "targetname" ); if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
if ( !isDefined( m_door.opened ) ) {
{ m_door = getent( "powerup_cell_door_1", "targetname" );
return 0;
} 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 ) ) )
{ cell_powerup = getstruct( "powerup_cell_2", "targetname" );
m_door = getent( "powerup_cell_door_2", "targetname" );
if ( !isDefined( m_door.opened ) ) if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
{ {
return 0; m_door = getent( "powerup_cell_door_2", "targetname" );
}
} if ( !isdefined( m_door.opened ) )
return 1; return false;
}
return true;
} }
afterlife_intro_door() //checked matches cerberus output afterlife_intro_door()
{ {
m_door = getent( "powerup_door", "targetname" ); m_door = getent( "powerup_door", "targetname" );
level waittill( "intro_powerup_activate" );
wait 1; level waittill( "intro_powerup_activate" );
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
m_door.opened = 1; wait 1;
m_door movex( 34, 2, 1 ); array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
m_door playsound( "zmb_jail_door" ); m_door.opened = 1;
level waittill( "intro_powerup_restored" ); m_door movex( 34, 2, 1 );
s_powerup_loc = getstruct( "powerup_start", "targetname" ); m_door playsound( "zmb_jail_door" );
spawn_infinite_powerup_drop( s_powerup_loc.origin );
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" ); m_door = getent( "powerup_cell_door_1", "targetname" );
level waittill( "cell_1_powerup_activate" );
wait 1; level waittill( "cell_1_powerup_activate" );
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
m_door.opened = 1; wait 1;
m_door movex( 36, 2, 1 ); array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
m_door playsound( "zmb_jail_door" ); 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" ); m_door = getent( "powerup_cell_door_2", "targetname" );
level waittill( "cell_2_powerup_activate" );
wait 1; level waittill( "cell_2_powerup_activate" );
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
m_door.opened = 1; wait 1;
m_door movex( -34, 2, 1 ); array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
m_door playsound( "zmb_jail_door" ); 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; level._powerup_timeout_override = ::powerup_infinite_time;
if ( isDefined( str_type ) )
{ if ( isdefined( str_type ) )
intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin ); intro_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_type, v_origin );
} else
else intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin );
{
intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin ); level._powerup_timeout_override = undefined;
}
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" ); level waittill_any( "unlock_all_perk_machines", "open_sesame" );
a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" ); a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" );
foreach ( e_shockbox in a_shockboxes )
{ foreach ( e_shockbox in a_shockboxes )
e_shockbox notify( "damage" ); {
wait 1; e_shockbox notify( "damage", 1, level );
} wait 1;
}
} }
sq_main_controller() //checked matches cerberus output sq_main_controller()
{ {
precacheshader( "zm_al_wth_zombie" ); precacheshader( "zm_al_wth_zombie" );
onplayerconnect_callback( maps/mp/zm_prison_sq_final::onplayerconnect_sq_final ); onplayerconnect_callback( maps\mp\zm_prison_sq_final::onplayerconnect_sq_final );
level thread maps/mp/zm_prison_sq_final::stage_one(); level thread maps\mp\zm_prison_sq_final::stage_one();
onplayerconnect_callback( maps/mp/zm_prison_sq_fc::onplayerconnect_sq_fc ); onplayerconnect_callback( maps\mp\zm_prison_sq_fc::onplayerconnect_sq_fc );
level thread maps/mp/zm_prison_sq_fc::watch_for_trigger_condition(); level thread maps\mp\zm_prison_sq_fc::watch_for_trigger_condition();
onplayerconnect_callback( maps/mp/zm_prison_sq_wth::onplayerconnect_sq_wth ); 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" ); flag_wait( "initial_blackscreen_passed" );
wait 1; wait 1;
if ( !flag( "generator_challenge_completed" ) )
{
exploder( 2000 );
}
}
if ( !flag( "generator_challenge_completed" ) )
exploder( 2000 );
}

View File

@ -1,169 +1,150 @@
#include maps/mp/zombies/_zm_spawner; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/_utility; #include common_scripts\utility;
#include common_scripts/utility; #include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_spawner;
zombie_tracking_init() zombie_tracking_init()
{ {
level.zombie_respawned_health = []; level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{ if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1500; level.zombie_tracking_dist = 1500;
}
if ( !isDefined( level.zombie_tracking_high ) ) if ( !isdefined( level.zombie_tracking_high ) )
{ level.zombie_tracking_high = 600;
level.zombie_tracking_high = 600;
} if ( !isdefined( level.zombie_tracking_wait ) )
if ( !isDefined( level.zombie_tracking_wait ) ) level.zombie_tracking_wait = 10;
{
level.zombie_tracking_wait = 10; while ( true )
} {
for ( ;; ) zombies = get_round_enemy_array();
{
while ( 1 ) if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{ {
zombies = get_round_enemy_array(); wait( level.zombie_tracking_wait );
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) continue;
{ }
wait level.zombie_tracking_wait; else
} {
} for ( i = 0; i < zombies.size; i++ )
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 );
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 );
i++; }
}
wait level.zombie_tracking_wait;
}
} }
delete_zombie_noone_looking( how_close, how_high ) delete_zombie_noone_looking( how_close, how_high )
{ {
self endon( "death" ); self endon( "death" );
if ( !isDefined( how_close ) )
{ if ( !isdefined( how_close ) )
how_close = 1500; how_close = 1500;
}
if ( !isDefined( how_high ) ) if ( !isdefined( how_high ) )
{ how_close = 600;
how_close = 600;
} distance_squared_check = how_close * how_close;
distance_squared_check = how_close * how_close; too_far_dist = distance_squared_check * 3;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) ) if ( isdefined( level.zombie_tracking_too_far_dist ) )
{ too_far_dist = level.zombie_tracking_too_far_dist * 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.inview = 0; self.player_close = 0;
self.player_close = 0; players = get_players();
players = get_players();
i = 0; for ( i = 0; i < players.size; i++ )
while ( i < players.size ) {
{ if ( players[i].sessionstate == "spectator" )
if ( players[ i ].sessionstate == "spectator" ) continue;
{
i++; if ( isdefined( level.only_track_targeted_players ) )
continue; {
} if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
else if ( isDefined( level.only_track_targeted_players ) ) continue;
{ }
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
{ can_be_seen = self player_can_see_me( players[i] );
i++;
continue; if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
} self.inview++;
}
else if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
{ self.player_close++;
can_be_seen = self player_can_see_me( players[ i ] ); }
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
{ wait 0.1;
self.inview++;
} if ( self.inview == 0 && self.player_close == 0 )
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high ) {
{ if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
self.player_close++; return;
}
} if ( isdefined( self.electrified ) && self.electrified == 1 )
i++; return;
}
wait 0,1; if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
if ( self.inview == 0 && self.player_close == 0 ) return;
{
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) zombies = getaiarray( "axis" );
{
return; if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth )
} {
if ( isDefined( self.electrified ) && self.electrified == 1 ) if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{ {
return; level.zombie_total++;
} level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 ) }
{ }
return; else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
} {
zombies = getaiarray( "axis" ); if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth ) {
{ level.zombie_total++;
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{ if ( self.health < level.zombie_health )
level.zombie_total++; level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health; }
} }
}
else self maps\mp\zombies\_zm_spawner::reset_attack_spot();
{ self notify( "zombie_delete" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth ) self delete();
{ recalc_zombie_array();
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 ) player_can_see_me( player )
{ {
playerangles = player getplayerangles(); playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles ); playerforwardvec = anglestoforward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec ); playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin; banzaipos = self.origin;
playerpos = player getorigin(); playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos; playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec ); playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{ if ( forwarddotbanzai >= 1 )
anglefromcenter = 0; anglefromcenter = 0;
} else if ( forwarddotbanzai <= -1 )
else if ( forwarddotbanzai <= -1 ) anglefromcenter = 180;
{ else
anglefromcenter = 180; anglefromcenter = acos( forwarddotbanzai );
}
else playerfov = getdvarfloat( "cg_fov" );
{ banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
anglefromcenter = acos( forwarddotbanzai );
} if ( banzaivsplayerfovbuffer <= 0 )
playerfov = getDvarFloat( "cg_fov" ); banzaivsplayerfovbuffer = 0.2;
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 ) playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
{ return playercanseeme;
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
} }

View File

@ -1,18 +1,19 @@
//checked includes changed to match cerberus output // T6 GSC SOURCE
#include maps/mp/zm_alcatraz_classic; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_alcatraz_grief_cellblock; #include common_scripts\utility;
#include maps/mp/zm_prison; #include maps\mp\_utility;
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_game_module; #include maps\mp\zombies\_zm_game_module;
#include maps/mp/zombies/_zm_utility; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/_utility; #include maps\mp\zm_prison;
#include common_scripts/utility; #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; 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( "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_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( "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 ); add_map_location_gamemode( "zgrief", "cellblock", maps\mp\zm_alcatraz_grief_cellblock::precache, maps\mp\zm_alcatraz_grief_cellblock::main );
} }

View File

@ -1,482 +1,498 @@
//checked includes changed to match cerberus output // T6 GSC SOURCE
#include maps/mp/gametypes_zm/zmeat; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_alcatraz_traps; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_game_module; #include common_scripts\utility;
#include maps/mp/zombies/_zm_blockers; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_ai_brutus; #include maps\mp\zombies\_zm_race_utility;
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\zm_prison;
#include maps/mp/zombies/_zm_magicbox; #include maps\mp\zombies\_zm_weapons;
#include maps/mp/zombies/_zm_weapons; #include maps\mp\zombies\_zm_magicbox;
#include maps/mp/zm_prison; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/zombies/_zm_race_utility; #include maps\mp\zombies\_zm_ai_brutus;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_blockers;
#include common_scripts/utility; #include maps\mp\zombies\_zm_game_module;
#include maps/mp/_utility; #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" ); registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
level.givecustomloadout = maps/mp/zm_prison::givecustomloadout; level.givecustomloadout = maps\mp\zm_prison::givecustomloadout;
zgrief_init(); zgrief_init();
} }
zgrief_init() //checked matches cerberus output zgrief_init()
{ {
encounter_init(); encounter_init();
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
if ( level.round_number < 4 && level.gamedifficulty != 0 )
{ if ( level.round_number < 4 && level.gamedifficulty != 0 )
level.zombie_move_speed = 35; 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._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
level.precachecustomcharacters = ::precache_team_characters; level.precachecustomcharacters = ::precache_team_characters;
level.givecustomcharacters = ::give_team_characters; level.givecustomcharacters = ::give_team_characters;
level.gamemode_post_spawn_logic = ::give_player_shiv; 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" ) ) if ( self hasperk( "specialty_additionalprimaryweapon" ) )
{ {
primary_weapons_that_can_be_taken = []; primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
for ( i = 0; i < primaryweapons.size; i++ )
{ 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 ] ) ) {
{ 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 ]; primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
} }
}
if ( primary_weapons_that_can_be_taken.size >= 3 ) 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 ]; weapon_to_take = primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size - 1];
self takeweapon( weapon_to_take ); self takeweapon( weapon_to_take );
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = 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_weapons = self getweaponslist();
self.grief_savedweapon_weaponsammo_clip = []; self.grief_savedweapon_weaponsammo_stock = [];
self.grief_savedweapon_currentweapon = self getcurrentweapon(); self.grief_savedweapon_weaponsammo_clip = [];
self.grief_savedweapon_grenades = self get_player_lethal_grenade(); self.grief_savedweapon_currentweapon = self getcurrentweapon();
if ( isDefined( self.grief_savedweapon_grenades ) ) self.grief_savedweapon_grenades = self get_player_lethal_grenade();
{
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades ); 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 = self get_player_tactical_grenade();
{
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical ); 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++ )
{ 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 ] ); 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 ( isdefined( self.hasriotshield ) && self.hasriotshield )
} self.grief_hasriotshield = 1;
if ( self hasweapon( "claymore_zm" ) )
{ if ( self hasweapon( "claymore_zm" ) )
self.grief_savedweapon_claymore = 1; {
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "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_player_grief_guard_fb" );
precachemodel( "c_zom_oleary_shortsleeve_viewhands" ); precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
precachemodel( "c_zom_player_grief_inmate_fb" ); precachemodel( "c_zom_player_grief_inmate_fb" );
precachemodel( "c_zom_grief_guard_viewhands" ); precachemodel( "c_zom_grief_guard_viewhands" );
} }
give_team_characters() //checked matches cerberus output give_team_characters()
{ {
self detachall(); self detachall();
self set_player_is_female( 0 ); self set_player_is_female( 0 );
if ( !isDefined( self.characterindex ) )
{ if ( !isdefined( self.characterindex ) )
self.characterindex = 1; {
if ( self.team == "axis" ) self.characterindex = 1;
{
self.characterindex = 0; if ( self.team == "axis" )
} self.characterindex = 0;
} }
switch( self.characterindex )
{ switch ( self.characterindex )
case 0: {
case 2: case "2":
self setmodel( "c_zom_player_grief_inmate_fb" ); case "0":
self.voice = "american"; self setmodel( "c_zom_player_grief_inmate_fb" );
self.skeleton = "base"; self.voice = "american";
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); self.skeleton = "base";
self.characterindex = 0; self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
break; self.characterindex = 0;
case 1: break;
case 3: case "3":
self setmodel( "c_zom_player_grief_guard_fb" ); case "1":
self.voice = "american"; self setmodel( "c_zom_player_grief_guard_fb" );
self.skeleton = "base"; self.voice = "american";
self setviewmodel( "c_zom_grief_guard_viewhands" ); self.skeleton = "base";
self.characterindex = 1; self setviewmodel( "c_zom_grief_guard_viewhands" );
break; self.characterindex = 1;
} break;
self setmovespeedscale( 1 ); }
self setsprintduration( 4 );
self setsprintcooldown( 0 ); self setmovespeedscale( 1 );
self setsprintduration( 4 );
self setsprintcooldown( 0 );
} }
give_player_shiv() //checked matches cerberus output give_player_shiv()
{ {
self takeweapon( "knife_zm" ); self takeweapon( "knife_zm" );
self giveweapon( "knife_zm_alcatraz" ); self giveweapon( "knife_zm_alcatraz" );
} }
grief_treasure_chest_init() //checked matches cerberus output grief_treasure_chest_init()
{ {
chest1 = getstruct( "start_chest", "script_noteworthy" ); chest1 = getstruct( "start_chest", "script_noteworthy" );
chest2 = getstruct( "cafe_chest", "script_noteworthy" ); chest2 = getstruct( "cafe_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 ); setdvar( "disableLookAtEntityLogic", 1 );
level.chests = []; level.chests = [];
level.chests[ level.chests.size ] = chest1; level.chests[level.chests.size] = chest1;
level.chests[ level.chests.size ] = chest2; level.chests[level.chests.size] = chest2;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); 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" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" );
grief_treasure_chest_init(); grief_treasure_chest_init();
precacheshader( "zm_al_wth_zombie" ); precacheshader( "zm_al_wth_zombie" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief ); 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::precache();
maps/mp/zombies/_zm_ai_brutus::init(); maps\mp\zombies\_zm_ai_brutus::init();
level.enemy_location_override_func = ::enemy_location_override; level.enemy_location_override_func = ::enemy_location_override;
level._effect[ "butterflies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" ); level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
a_t_door_triggers = getentarray( "zombie_door", "targetname" ); a_t_door_triggers = getentarray( "zombie_door", "targetname" );
triggers = a_t_door_triggers;
i = 0; foreach ( trigger in a_t_door_triggers )
while ( i < triggers.size ) {
{ if ( isdefined( trigger.script_flag ) )
if ( isDefined( triggers[ i ].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" )
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" ) {
{ trigger delete();
triggers[ i ] delete(); continue;
i++; }
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" )
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" ) {
{ continue;
i++; continue;
continue; }
}
if ( isDefined( triggers[ i ].target ) ) if ( isdefined( trigger.target ) )
{ {
str_target = triggers[ i ].target; str_target = trigger.target;
a_door_and_clip = getentarray( str_target, "targetname" ); a_door_and_clip = getentarray( str_target, "targetname" );
foreach ( ent in a_door_and_clip )
{ foreach ( ent in a_door_and_clip )
ent delete(); ent delete();
} }
}
triggers[ i ] delete(); trigger delete();
} }
i++; }
}
a_t_doors = getentarray( "zombie_door", "targetname" ); a_t_doors = getentarray( "zombie_door", "targetname" );
foreach ( t_door in a_t_doors )
{ foreach ( t_door in a_t_doors )
if ( isDefined( t_door.script_flag ) ) {
{ if ( isdefined( t_door.script_flag ) )
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" ) {
{ 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 ); t_door maps\mp\zombies\_zm_blockers::door_opened( self.zombie_cost );
} }
} }
}
zbarriers = getzbarrierarray(); zbarriers = getzbarrierarray();
a_str_zones = []; a_str_zones = [];
a_str_zones[ 0 ] = "zone_start"; a_str_zones[0] = "zone_start";
a_str_zones[ 1 ] = "zone_library"; a_str_zones[1] = "zone_library";
a_str_zones[ 2 ] = "zone_cafeteria"; a_str_zones[2] = "zone_cafeteria";
a_str_zones[ 3 ] = "zone_cafeteria_end"; a_str_zones[3] = "zone_cafeteria_end";
a_str_zones[ 4 ] = "zone_warden_office"; a_str_zones[4] = "zone_warden_office";
a_str_zones[ 5 ] = "zone_cellblock_east"; a_str_zones[5] = "zone_cellblock_east";
a_str_zones[ 6 ] = "zone_cellblock_west_warden"; a_str_zones[6] = "zone_cellblock_west_warden";
a_str_zones[ 7 ] = "zone_cellblock_west_barber"; a_str_zones[7] = "zone_cellblock_west_barber";
a_str_zones[ 8 ] = "zone_cellblock_west"; a_str_zones[8] = "zone_cellblock_west";
a_str_zones[ 9 ] = "zone_cellblock_west_gondola"; a_str_zones[9] = "zone_cellblock_west_gondola";
foreach ( barrier in zbarriers )
{ 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" ) {
{ if ( isdefined( barrier.script_noteworthy ) )
} {
else if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
{ continue;
str_model = barrier.model; }
b_delete_barrier = 1;
if ( isdefined( barrier.script_string ) ) b_delete_barrier = 1;
{
for ( i = 0; i < a_str_zones.size; i++ ) if ( isdefined( barrier.script_string ) )
{ {
if ( str_model == a_str_zones[ i ] ) for ( i = 0; i < a_str_zones.size; i++ )
{ {
b_delete_barrier = 0; if ( barrier.script_string == a_str_zones[i] )
break; {
} b_delete_barrier = 0;
} break;
} }
else if ( b_delete_barrier == 1 ) }
{ }
barrier delete();
} if ( b_delete_barrier == 1 )
} barrier delete();
} }
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp delete(); t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp = getent( "tower_trap_range_trigger", "targetname" ); t_temp delete();
t_temp delete(); t_temp = getent( "tower_trap_range_trigger", "targetname" );
e_model = getent( "trap_control_docks", "targetname" ); t_temp delete();
e_model delete(); e_model = getent( "trap_control_docks", "targetname" );
e_brush = getent( "tower_shockbox_door", "targetname" ); e_model delete();
e_brush delete(); e_brush = getent( "tower_shockbox_door", "targetname" );
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" ); e_brush delete();
foreach ( trigger in a_t_travel_triggers ) a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
{
trigger delete(); 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 ) a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
{
light delete(); 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 ) a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
{
model delete(); 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 ) a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
{
model delete(); 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 ) a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
{
model delete(); foreach ( model in a_e_gondola_gates )
} model delete();
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
foreach ( model in a_e_gondola_doors ) a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
{
model delete(); foreach ( model in a_e_gondola_doors )
} model delete();
m_gondola = getent( "zipline_gondola", "targetname" );
m_gondola delete(); m_gondola = getent( "zipline_gondola", "targetname" );
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" ); m_gondola delete();
t_ride_trigger delete(); t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
a_classic_clips = getentarray( "classic_clips", "targetname" ); t_ride_trigger delete();
foreach ( clip in a_classic_clips ) a_classic_clips = getentarray( "classic_clips", "targetname" );
{
clip connectpaths(); foreach ( clip in a_classic_clips )
clip delete(); {
} clip connectpaths();
a_afterlife_props = getentarray( "afterlife_show", "targetname" ); clip delete();
foreach ( m_prop in a_afterlife_props ) }
{
m_prop delete(); a_afterlife_props = getentarray( "afterlife_show", "targetname" );
}
spork_portal = getent( "afterlife_show_spork", "targetname" ); foreach ( m_prop in a_afterlife_props )
spork_portal delete(); m_prop delete();
a_audio = getentarray( "at_headphones", "script_noteworthy" );
foreach ( model in a_audio ) spork_portal = getent( "afterlife_show_spork", "targetname" );
{ spork_portal delete();
model delete(); a_audio = getentarray( "at_headphones", "script_noteworthy" );
}
m_spoon_pickup = getent( "pickup_spoon", "targetname" ); foreach ( model in a_audio )
m_spoon_pickup delete(); model delete();
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
t_sq_bg delete(); m_spoon_pickup = getent( "pickup_spoon", "targetname" );
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); m_spoon_pickup delete();
foreach ( trigger in t_crafting_table ) t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
{ t_sq_bg delete();
trigger delete(); t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
}
t_warden_fence = getent( "warden_fence_damage", "targetname" ); foreach ( trigger in t_crafting_table )
t_warden_fence delete(); trigger delete();
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_about_to_crash delete(); t_warden_fence = getent( "warden_fence_damage", "targetname" );
m_plane_craftable = getent( "plane_craftable", "targetname" ); t_warden_fence delete();
m_plane_craftable delete(); m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
for ( i = 1; i <= 5; i++ ) m_plane_about_to_crash delete();
{ m_plane_craftable = getent( "plane_craftable", "targetname" );
m_key_lock = getent( "masterkey_lock_" + i, "targetname" ); m_plane_craftable delete();
m_key_lock delete();
} for ( i = 1; i <= 5; i++ )
m_shower_door = getent( "shower_key_door", "targetname" ); {
m_shower_door delete(); m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
m_nixie_door = getent( "nixie_door_left", "targetname" ); m_key_lock delete();
m_nixie_door delete(); }
m_nixie_door = getent( "nixie_door_right", "targetname" );
m_nixie_door delete(); m_shower_door = getent( "shower_key_door", "targetname" );
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" ); m_shower_door delete();
m_nixie_brush delete(); m_nixie_door = getent( "nixie_door_left", "targetname" );
for ( i = 1; i <= 3; i++ ) m_nixie_door delete();
{ m_nixie_door = getent( "nixie_door_right", "targetname" );
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); m_nixie_door delete();
m_nixie_tube delete(); m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
} m_nixie_brush delete();
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door delete(); for ( i = 1; i <= 3; i++ )
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" ); {
e_elevator_clip delete(); m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" ); m_nixie_tube delete();
e_elevator_bottom_gate delete(); }
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
e_elevator_bottom_gate delete(); t_elevator_door = getent( "nixie_elevator_door", "targetname" );
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" ); t_elevator_door delete();
m_docks_puzzle delete(); e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" ); e_elevator_clip delete();
m_docks_puzzle delete(); e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" ); e_elevator_bottom_gate delete();
m_infirmary_case delete(); e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" ); e_elevator_bottom_gate delete();
m_infirmary_case delete(); m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); m_docks_puzzle delete();
fake_plane_part delete(); m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
for ( i = 1; i <= 3; i++ ) m_docks_puzzle delete();
{ m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
m_generator = getent( "generator_panel_" + i, "targetname" ); m_infirmary_case delete();
m_generator delete(); m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
} m_infirmary_case delete();
a_m_generator_core = getentarray( "generator_core", "targetname" ); fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
foreach ( generator in a_m_generator_core ) fake_plane_part delete();
{
generator delete(); for ( i = 1; i <= 3; i++ )
} {
e_playerclip = getent( "electric_chair_playerclip", "targetname" ); m_generator = getent( "generator_panel_" + i, "targetname" );
e_playerclip delete(); m_generator delete();
for ( i = 1; i <= 4; i++ ) }
{
t_use = getent( "trigger_electric_chair_" + i, "targetname" ); a_m_generator_core = getentarray( "generator_core", "targetname" );
t_use delete();
m_chair = getent( "electric_chair_" + i, "targetname" ); foreach ( generator in a_m_generator_core )
m_chair delete(); generator delete();
}
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); e_playerclip = getent( "electric_chair_playerclip", "targetname" );
foreach ( model in a_afterlife_interact ) e_playerclip delete();
{
model turn_afterlife_interact_on(); for ( i = 1; i <= 4; i++ )
wait 0.1; {
} t_use = getent( "trigger_electric_chair_" + i, "targetname" );
flag_wait( "initial_blackscreen_passed" ); t_use delete();
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors(); m_chair = getent( "electric_chair_" + i, "targetname" );
flag_wait( "start_zombie_round_logic" ); m_chair delete();
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs(); }
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
wait 1; a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
level notify( "sleight_on" );
wait_network_frame(); foreach ( model in a_afterlife_interact )
level notify( "doubletap_on" ); {
wait_network_frame(); model turn_afterlife_interact_on();
level notify( "juggernog_on" ); wait 0.1;
wait_network_frame(); }
level notify( "electric_cherry_on" );
wait_network_frame(); flag_wait( "initial_blackscreen_passed" );
level notify( "deadshot_on" ); maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors();
wait_network_frame(); flag_wait( "start_zombie_round_logic" );
level notify( "divetonuke_on" ); level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
wait_network_frame(); level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
level notify( "additionalprimaryweapon_on" ); wait 1;
wait_network_frame(); level notify( "sleight_on" );
level notify( "Pack_A_Punch_on" ); wait_network_frame();
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; location = enemy.origin;
if ( is_true( self.reroute ) )
{ if ( is_true( self.reroute ) )
if ( isDefined( self.reroute_origin ) ) {
{ if ( isdefined( self.reroute_origin ) )
location = self.reroute_origin; location = self.reroute_origin;
} }
}
return location; return location;
} }
magicbox_face_spawn() //checked matches cerberus output magicbox_face_spawn()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( !is_gametype_active( "zgrief" ) )
{ if ( !is_gametype_active( "zgrief" ) )
return; return;
}
while ( 1 ) while ( true )
{ {
self waittill( "user_grabbed_weapon" ); self waittill( "user_grabbed_weapon" );
if ( randomint( 50000 ) == 115 )
{ if ( randomint( 50000 ) == 115 )
self playsoundtoplayer( "zmb_easteregg_face", self ); {
self.wth_elem = newclienthudelem( self ); self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem.horzalign = "fullscreen"; self.wth_elem = newclienthudelem( self );
self.wth_elem.vertalign = "fullscreen"; self.wth_elem.horzalign = "fullscreen";
self.wth_elem.sort = 1000; self.wth_elem.vertalign = "fullscreen";
self.wth_elem.foreground = 0; self.wth_elem.sort = 1000;
self.wth_elem.alpha = 1; self.wth_elem.foreground = 0;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); self.wth_elem.alpha = 1.0;
self.wth_elem.hidewheninmenu = 1; self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
wait 0.25; self.wth_elem.hidewheninmenu = 1;
self.wth_elem destroy(); wait 0.25;
} self.wth_elem destroy();
wait 0.05; }
}
wait 0.05;
}
} }
#using_animtree("fxanim_props");
turn_afterlife_interact_on() 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" ) 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;
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 == "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();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,30 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_magicbox; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_game_module; #include maps\mp\_utility;
#include maps/mp/gametypes_zm/_zm_gametype; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/_utility; #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\gametypes_zm\_zm_gametype::setup_standard_objects( "working" );
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index ); maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" ); flag_wait( "initial_blackscreen_passed" );
flag_set( "power_on" ); flag_set( "power_on" );
zm_treasure_chest_init(); zm_treasure_chest_init();
} }
zm_treasure_chest_init() //checked matches cerberus output zm_treasure_chest_init()
{ {
chest1 = getstruct( "start_chest", "script_noteworthy" ); chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = []; level.chests = [];
level.chests[ level.chests.size ] = chest1; level.chests[level.chests.size] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,209 +1,211 @@
#include maps/mp/zombies/_zm_zonemgr; // T6 GSC SOURCE
#include maps/mp/gametypes_zm/_globallogic_score; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_zonemgr;
init() init()
{ {
level thread achievement_full_lockdown(); level thread achievement_full_lockdown();
level thread achievement_pop_goes_the_weasel(); level thread achievement_pop_goes_the_weasel();
level thread achievement_trapped_in_time(); level thread achievement_trapped_in_time();
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
level.achievement_sound_func = ::achievement_sound_func; level.achievement_sound_func = ::achievement_sound_func;
} }
onplayerconnect() onplayerconnect()
{ {
self thread achievement_no_one_escapes_alive(); self thread achievement_no_one_escapes_alive();
self thread achievement_feed_the_beast(); self thread achievement_feed_the_beast();
self thread achievement_making_the_rounds(); self thread achievement_making_the_rounds();
self thread achievement_acid_drip(); self thread achievement_acid_drip();
self thread achievement_a_burst_of_flavor(); self thread achievement_a_burst_of_flavor();
self thread achievement_paranormal_progress(); self thread achievement_paranormal_progress();
self thread achievement_gg_bridge(); self thread achievement_gg_bridge();
} }
achievement_sound_func( achievement_name_lower ) 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() 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_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_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_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_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_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_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_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_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_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_pop_goes_the_weasel", 0 );
} }
achievement_full_lockdown() achievement_full_lockdown()
{ {
level endon( "end_game" ); level endon( "end_game" );
level.lockdown_track[ "magic_box" ] = 0; level.lockdown_track["magic_box"] = 0;
level.lockdown_track[ "speedcola_perk" ] = 0; level.lockdown_track["speedcola_perk"] = 0;
level.lockdown_track[ "electric_cherry_perk" ] = 0; level.lockdown_track["electric_cherry_perk"] = 0;
level.lockdown_track[ "jugg_perk" ] = 0; level.lockdown_track["jugg_perk"] = 0;
level.lockdown_track[ "deadshot_perk" ] = 0; level.lockdown_track["deadshot_perk"] = 0;
level.lockdown_track[ "tap_perk" ] = 0; level.lockdown_track["tap_perk"] = 0;
level.lockdown_track[ "plane_ramp" ] = 0; level.lockdown_track["plane_ramp"] = 0;
level.lockdown_track[ "craft_shield" ] = 0; level.lockdown_track["craft_shield"] = 0;
level.lockdown_track[ "craft_kit" ] = 0; level.lockdown_track["craft_kit"] = 0;
b_unlock = 0; b_unlock = 0;
while ( b_unlock == 0 )
{ while ( b_unlock == 0 )
level waittill( "brutus_locked_object" ); {
b_unlock = 1; level waittill( "brutus_locked_object" );
_a92 = level.lockdown_track;
_k92 = getFirstArrayKey( _a92 ); b_unlock = 1;
while ( isDefined( _k92 ) )
{ foreach ( b_check in level.lockdown_track )
b_check = _a92[ _k92 ]; {
if ( b_check == 0 ) if ( b_check == 0 )
{ {
b_unlock = 0; b_unlock = 0;
break; break;
} }
else }
{ }
_k92 = getNextArrayKey( _a92, _k92 );
} level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
}
}
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
} }
achievement_trapped_in_time() achievement_trapped_in_time()
{ {
level endon( "end_game" ); level endon( "end_game" );
level.trapped_track[ "acid" ] = 0; level.trapped_track["acid"] = 0;
level.trapped_track[ "fan" ] = 0; level.trapped_track["fan"] = 0;
level.trapped_track[ "tower" ] = 0; level.trapped_track["tower"] = 0;
level.trapped_track[ "tower_upgrade" ] = 0; level.trapped_track["tower_upgrade"] = 0;
b_unlock = 0; b_unlock = 0;
while ( b_unlock == 0 )
{ while ( b_unlock == 0 )
level waittill_either( "trap_activated", "tower_trap_upgraded" ); {
if ( level.round_number >= 10 ) level waittill_either( "trap_activated", "tower_trap_upgraded" );
{
return; if ( level.round_number >= 10 )
} return;
b_unlock = 1;
_a131 = level.trapped_track; b_unlock = 1;
_k131 = getFirstArrayKey( _a131 );
while ( isDefined( _k131 ) ) foreach ( b_check in level.trapped_track )
{ {
b_check = _a131[ _k131 ]; if ( b_check == 0 )
if ( b_check == 0 ) {
{ b_unlock = 0;
b_unlock = 0; break;
break; }
} }
else }
{
_k131 = getNextArrayKey( _a131, _k131 ); level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
}
}
}
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
} }
achievement_pop_goes_the_weasel() achievement_pop_goes_the_weasel()
{ {
level endon( "end_game" ); level endon( "end_game" );
level waittill( "pop_goes_the_weasel_achieved" );
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 ); level waittill( "pop_goes_the_weasel_achieved" );
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
} }
achievement_no_one_escapes_alive() achievement_no_one_escapes_alive()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_at_bridge" );
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" ); self waittill( "player_at_bridge" );
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
} }
achievement_feed_the_beast() achievement_feed_the_beast()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_obtained_tomahawk" );
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" ); self waittill( "player_obtained_tomahawk" );
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
} }
achievement_making_the_rounds() achievement_making_the_rounds()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
n_completed_trips = 0;
while ( n_completed_trips < 3 ) for ( n_completed_trips = 0; n_completed_trips < 3; n_completed_trips++ )
{ self waittill( "player_completed_cycle" );
self waittill( "player_completed_cycle" );
n_completed_trips++; self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
}
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
} }
achievement_acid_drip() achievement_acid_drip()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_obtained_acidgat" );
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" ); self waittill( "player_obtained_acidgat" );
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
} }
achievement_a_burst_of_flavor() achievement_a_burst_of_flavor()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
while ( 1 )
{ while ( true )
self waittill( "electric_cherry_start" ); {
self.cherry_kills = 0; self waittill( "electric_cherry_start" );
self waittill( "electric_cherry_end" );
if ( self.cherry_kills >= 10 ) self.cherry_kills = 0;
{
break; self waittill( "electric_cherry_end" );
}
else if ( self.cherry_kills >= 10 )
{ break;
} }
}
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" ); self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
} }
achievement_paranormal_progress() achievement_paranormal_progress()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_opened_afterlife_door" );
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" ); self waittill( "player_opened_afterlife_door" );
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
} }
achievement_gg_bridge() achievement_gg_bridge()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
while ( 1 )
{ 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" );
{
level waittill( "end_of_round" ); if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) ) {
{ level waittill( "end_of_round" );
break;
} if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
} break;
else }
{ }
}
} self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
} }

View File

@ -1,148 +1,178 @@
#include maps/mp/zombies/_zm_afterlife; // T6 GSC SOURCE
#include maps/mp/zm_prison; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_zonemgr; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include common_scripts\utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zm_prison;
#include maps\mp\zombies\_zm_afterlife;
main_start() main_start()
{ {
level thread spawned_collision_ffotd(); level thread spawned_collision_ffotd();
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 ); t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
t_killbrush_1.script_noteworthy = "kill_brush"; t_killbrush_1.script_noteworthy = "kill_brush";
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 ); t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
t_killbrush_2.script_noteworthy = "kill_brush"; t_killbrush_2.script_noteworthy = "kill_brush";
t_killbrush_3 = spawn( "trigger_box", ( -42, 9348, 1392 ), 0, 200, 100, 128 ); t_killbrush_3 = spawn( "trigger_box", ( -50, 9318, 1392 ), 0, 200, 110, 128 );
t_killbrush_3.script_noteworthy = "kill_brush"; 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() main_end()
{ {
level.equipment_dead_zone_pos = []; level.equipment_dead_zone_pos = [];
level.equipment_dead_zone_rad2 = []; level.equipment_dead_zone_rad2 = [];
level.equipment_dead_zone_pos[ 0 ] = ( 408, 10016, 1128 ); level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
level.equipment_dead_zone_rad2[ 0 ] = 65536; waittillframeend;
level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 ); level.afterlife_give_loadout = ::afterlife_give_loadout_override;
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;
} }
equipment_safe_to_drop_ffotd( weapon ) equipment_safe_to_drop_ffotd( weapon )
{ {
i = 0; for ( i = 0; i < level.equipment_dead_zone_pos.size; i++ )
while ( i < level.equipment_dead_zone_pos.size ) {
{ if ( distancesquared( level.equipment_dead_zone_pos[i], weapon.origin ) < level.equipment_dead_zone_rad2[i] )
if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] ) return 0;
{ }
return 0;
} return self maps\mp\zm_prison::equipment_safe_to_drop( weapon );
i++;
}
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
} }
spawned_collision_ffotd() spawned_collision_ffotd()
{ {
precachemodel( "collision_ai_64x64x10" ); precachemodel( "collision_ai_64x64x10" );
precachemodel( "collision_wall_256x256x10_standard" ); precachemodel( "collision_wall_256x256x10_standard" );
precachemodel( "collision_wall_128x128x10_standard" ); precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_512x512x10_standard" ); precachemodel( "collision_wall_512x512x10_standard" );
precachemodel( "collision_geo_256x256x256_standard" ); precachemodel( "collision_geo_256x256x256_standard" );
precachemodel( "collision_geo_64x64x256_standard" ); precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_geo_128x128x128_standard" ); precachemodel( "collision_geo_128x128x128_standard" );
flag_wait( "start_zombie_round_logic" ); precachemodel( "collision_geo_128x128x10_standard" );
if ( !is_true( level.optimise_for_splitscreen ) ) precachemodel( "collision_geo_64x64x64_standard" );
{ precachemodel( "collision_geo_32x32x128_standard" );
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) ); precachemodel( "p6_zm_al_surgery_cart" );
collision1 setmodel( "collision_ai_64x64x10" ); precachemodel( "p6_zm_al_laundry_bag" );
collision1.angles = ( 0, 270, -90 ); precachemodel( "ch_furniture_teachers_chair1" );
collision1 ghost(); flag_wait( "start_zombie_round_logic" );
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
collision2 setmodel( "collision_wall_256x256x10_standard" ); if ( !is_true( level.optimise_for_splitscreen ) )
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 ); {
collision2 ghost(); collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) ); collision1 setmodel( "collision_ai_64x64x10" );
collision3 setmodel( "collision_wall_128x128x10_standard" ); collision1.angles = ( 0, 270, -90 );
collision3.angles = ( 0, 270, 38,6 ); collision1 ghost();
collision3 ghost(); collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) ); collision2 setmodel( "collision_wall_256x256x10_standard" );
collision4 setmodel( "collision_geo_256x256x256_standard" ); collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 );
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 ); collision2 ghost();
collision4 ghost(); collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) );
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) ); collision3 setmodel( "collision_wall_128x128x10_standard" );
collision5a setmodel( "collision_geo_64x64x256_standard" ); collision3.angles = ( 0, 270, 38.6 );
collision5a.angles = ( 0, 0, 0 ); collision3 ghost();
collision5a ghost(); collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) );
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) ); collision4 setmodel( "collision_geo_256x256x256_standard" );
collision5b setmodel( "collision_geo_64x64x256_standard" ); collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 );
collision5b.angles = ( 0, 0, 0 ); collision4 ghost();
collision5b ghost(); collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
collision6 = spawn( "script_model", ( 554, 8026, 698 ) ); collision5a setmodel( "collision_geo_64x64x256_standard" );
collision6 setmodel( "collision_wall_128x128x10_standard" ); collision5a.angles = ( 0, 0, 0 );
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 ); collision5a ghost();
collision6 ghost(); collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) ); collision5b setmodel( "collision_geo_64x64x256_standard" );
collision7 setmodel( "collision_geo_64x64x256_standard" ); collision5b.angles = ( 0, 0, 0 );
collision7.angles = ( 0, 0, 0 ); collision5b ghost();
collision7 ghost(); collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) ); collision6 setmodel( "collision_wall_128x128x10_standard" );
collision8 setmodel( "collision_geo_64x64x256_standard" ); collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 );
collision8.angles = ( 0, 0, 0 ); collision6 ghost();
collision8 ghost(); collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) ); collision7 setmodel( "collision_geo_64x64x256_standard" );
collision9 setmodel( "collision_ai_64x64x10" ); collision7.angles = ( 0, 0, 0 );
collision9.angles = ( 270, 180, -180 ); collision7 ghost();
collision9 ghost(); collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) ); collision8 setmodel( "collision_geo_64x64x256_standard" );
collision10 setmodel( "collision_geo_128x128x128_standard" ); collision8.angles = ( 0, 0, 0 );
collision10.angles = ( 354,9, 11, 0 ); collision8 ghost();
collision10 ghost(); collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
collision11 = spawn( "script_model", ( -4, 8314, 808 ) ); collision9 setmodel( "collision_ai_64x64x10" );
collision11 setmodel( "collision_wall_128x128x10_standard" ); collision9.angles = ( 270, 180, -180 );
collision11.angles = vectorScale( ( 0, 0, 0 ), 292 ); collision9 ghost();
collision11 ghost(); collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) );
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) ); collision10 setmodel( "collision_geo_128x128x128_standard" );
collision12 setmodel( "collision_wall_512x512x10_standard" ); collision10.angles = ( 354.9, 11, 0 );
collision12.angles = ( 0, 0, 0 ); collision10 ghost();
collision12 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() afterlife_give_loadout_override()
{ {
self thread afterlife_leave_freeze(); self thread afterlife_leave_freeze();
self maps/mp/zombies/_zm_afterlife::afterlife_give_loadout(); self maps\mp\zombies\_zm_afterlife::afterlife_give_loadout();
} }
afterlife_leave_freeze() afterlife_leave_freeze()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self freezecontrols( 1 ); level endon( "end_game" );
wait 0,5; self freezecontrols( 1 );
if ( !is_true( self.hostmigrationcontrolsfrozen ) ) wait 0.5;
{
self freezecontrols( 0 ); if ( !is_true( self.hostmigrationcontrolsfrozen ) )
} self freezecontrols( 0 );
} }

View File

@ -1,144 +1,147 @@
#include maps/mp/_utility; // T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#using_animtree( "fxanim_props" ); #include maps\mp\_utility;
#include maps\mp\createfx\zm_prison_fx;
main() main()
{ {
precache_createfx_fx(); precache_createfx_fx();
precache_scripted_fx(); precache_scripted_fx();
precache_fxanim_props(); precache_fxanim_props();
maps/mp/createfx/zm_prison_fx::main(); maps\mp\createfx\zm_prison_fx::main();
} }
precache_scripted_fx() precache_scripted_fx()
{ {
level._effect[ "elevator_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" ); 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["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["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["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_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_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_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_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_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_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_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_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["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["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_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); 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"] = 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_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_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["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_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_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["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["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" ); level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" );
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); 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_spray"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
level._effect[ "acid_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" ); 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["box_activated"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
level._effect[ "fan_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" ); 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["light_gondola"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" ); 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"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
level._effect[ "tomahawk_trail_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" ); 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"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
level._effect[ "tomahawk_impact_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" ); 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"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
level._effect[ "tomahawk_charge_up_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" ); 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"] = 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_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_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["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_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"] = 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_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["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"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
level._effect[ "hell_portal_close" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" ); 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["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["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["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["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["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["ee_skull_shot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
} }
precache_createfx_fx() precache_createfx_fx()
{ {
level._effect[ "fx_alcatraz_storm_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" ); 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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"] = 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
} }
#using_animtree("fxanim_props");
precache_fxanim_props() precache_fxanim_props()
{ {
level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_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_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_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_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"]["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_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"]["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"]["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"]["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"]["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"]["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"]["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"]["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"]["bodybag_crane"] = %fxanim_zom_al_bodybag_crane_anim;
} }

View File

@ -1,305 +1,294 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_audio; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_stats; #include common_scripts\utility;
#include maps/mp/zombies/_zm_weap_tomahawk; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_zonemgr; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_spawner; #include maps\mp\zombies\_zm_net;
#include maps/mp/zombies/_zm_net; #include maps\mp\zombies\_zm_spawner;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_zonemgr;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_weap_tomahawk;
#include common_scripts/utility; #include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_audio;
//#using_animtree( "fxanim_props" ); init()
init() //checked matches cerberus output
{ {
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{ {
spoon_easy_cleanup(); spoon_easy_cleanup();
return; return;
} }
precachemodel( "t6_wpn_zmb_spoon_world" );
precachemodel( "c_zom_inmate_g_rarmspawn" ); precachemodel( "t6_wpn_zmb_spoon_world" );
level thread wait_for_initial_conditions(); precachemodel( "c_zom_inmate_g_rarmspawn" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func ); level thread wait_for_initial_conditions();
level thread bucket_init(); array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
spork_portal = getent( "afterlife_show_spork", "targetname" ); level thread bucket_init();
spork_portal setinvisibletoall(); spork_portal = getent( "afterlife_show_spork", "targetname" );
level.b_spoon_in_tub = 0; spork_portal setinvisibletoall();
level.n_spoon_kill_count = 0; level.b_spoon_in_tub = 0;
flag_init( "spoon_obtained" ); level.n_spoon_kill_count = 0;
flag_init( "charged_spoon" ); 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 = getent( "afterlife_show_spork", "targetname" );
spork_portal delete(); spork_portal delete();
m_spoon_pickup = getent( "pickup_spoon", "targetname" ); m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete(); m_spoon_pickup delete();
m_spoon = getent( "zap_spoon", "targetname" ); m_spoon = getent( "zap_spoon", "targetname" );
m_spoon delete(); 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(); self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript();
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{ if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
if ( self.damageweapon == "blundersplat_explosive_dart_zm" ) {
{ if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
if ( isplayer( self.attacker ) ) {
{ if ( isplayer( self.attacker ) )
self notify( "killed_by_a_blundersplat" ); self notify( "killed_by_a_blundersplat", self.attacker );
} }
} else if ( self.damageweapon == "bouncing_tomahawk_zm" )
else {
{ if ( isplayer( self.attacker ) )
if ( self.damageweapon == "bouncing_tomahawk_zm" ) self.attacker notify( "got_a_tomahawk_kill" );
{ }
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_with_only_tomahawk ) )
{ if ( isdefined( self.attacker.killed_something_thq ) )
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" ) self.attacker.killed_something_thq = 1;
{
self.attacker.killed_with_only_tomahawk = 0; return 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.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 ) self waittill( "killed_by_a_blundersplat", player );
{
return; if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
} return;
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
{ if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
level.n_spoon_kill_count++; level.n_spoon_kill_count++;
} else
else return;
{
return; if ( level.n_spoon_kill_count >= 50 )
} {
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 = getent( "pickup_spoon", "targetname" );
m_spoon_pickup ghost(); m_spoon_pickup ghost();
m_spoon_pickup ghostindemo(); m_spoon_pickup ghostindemo();
while ( !isDefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
{ while ( !isdefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
wait 1; wait 1;
}
flag_wait( "soul_catchers_charged" ); flag_wait( "soul_catchers_charged" );
m_poster = getent( "poster", "targetname" ); m_poster = getent( "poster", "targetname" );
m_poster.health = 5000; m_poster.health = 5000;
m_poster setcandamage( 1 ); m_poster setcandamage( 1 );
b_poster_knocked_down = 0; b_poster_knocked_down = 0;
while ( !b_poster_knocked_down )
{ 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" ) m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
{
b_poster_knocked_down = 1; if ( weaponname == "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin ); {
m_poster delete(); b_poster_knocked_down = 1;
if ( isDefined( attacker ) && isplayer( attacker ) ) playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
{ m_poster delete();
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
} if ( isdefined( attacker ) && isplayer( attacker ) )
wait 1; attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
} 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"; spork_door = getent( "spork_door", "targetname" );
m_spoon = getent( "zap_spoon", "targetname" ); spork_door.targetname = "afterlife_door";
m_spoon ghostindemo(); spork_portal = getent( "afterlife_show_spork", "targetname" );
m_spoon.health = 50000; spork_portal.targetname = "afterlife_show";
m_spoon setcandamage( 1 ); m_spoon = getent( "zap_spoon", "targetname" );
b_spoon_shocked = 0; m_spoon ghostindemo();
while ( !b_spoon_shocked ) m_spoon.health = 50000;
{ m_spoon setcandamage( 1 );
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname ); b_spoon_shocked = 0;
m_spoon.health += damage;
if ( weaponname == "lightning_hands_zm" ) while ( !b_spoon_shocked )
{ {
b_spoon_shocked = 1; m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
m_spoon delete();
attacker playsound( "zmb_easteregg_laugh" ); m_spoon.health += damage;
}
} if ( weaponname == "lightning_hands_zm" )
m_spoon_pickup show(); {
m_spoon_pickup.health = 10000; b_spoon_shocked = 1;
m_spoon_pickup setcandamage( 1 ); m_spoon delete();
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_spoon; 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" ) ) if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
{ return false;
return 0;
} m_spoon = getent( "pickup_spoon", "targetname" );
m_spoon = getent( "pickup_spoon", "targetname" );
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 ) if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
{ {
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
m_player_spoon = spawn( "script_model", grenade.origin ); m_player_spoon = spawn( "script_model", grenade.origin );
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" ); m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
m_player_spoon linkto( m_tomahawk ); m_player_spoon linkto( m_tomahawk );
self maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 ); 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 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 give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
self thread dip_the_spoon(); self thread dip_the_spoon();
flag_set( "spoon_obtained" ); flag_set( "spoon_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self ); self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
return 1; return true;
} }
return 0;
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 ) ) while ( isdefined( m_tomahawk ) )
{ wait 0.05;
wait 0.05;
} m_player_spoon delete();
m_player_spoon delete();
if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !is_true( self.spoon_in_tub ) ) 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 giveweapon( "spoon_zm_alcatraz" );
self set_player_melee_weapon( "spoon_zm_alcatraz" ); self set_player_melee_weapon( "spoon_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spoon", self ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spoon", self );
weapons = self getweaponslist(); weapons = self getweaponslist();
for ( i = 0; i < weapons.size; i++ )
{ for ( i = 0; i < weapons.size; i++ )
if ( issubstr( weapons[ i ], "knife" ) ) {
{ if ( issubstr( weapons[i], "knife" ) )
self takeweapon( weapons[ i ] ); self takeweapon( weapons[i] );
} }
} }
}
weapons = self getweaponslist(); weapons = self getweaponslist();
wait 1; wait 1.0;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); 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" ); s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 ); level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
level.t_bathtub usetriggerrequirelookat(); level.t_bathtub usetriggerrequirelookat();
level.t_bathtub triggerignoreteam(); level.t_bathtub triggerignoreteam();
level.t_bathtub sethintstring( "" ); level.t_bathtub sethintstring( "" );
level.t_bathtub setcursorhint( "HINT_NOICON" ); level.t_bathtub setcursorhint( "HINT_NOICON" );
} }
wait_for_bucket_activated( player ) //checked matches cerberus output wait_for_bucket_activated( player )
{ {
if ( isDefined( player ) ) if ( isdefined( player ) )
{ {
while ( 1 ) while ( true )
{ {
level.t_bathtub waittill( "trigger", who ); level.t_bathtub waittill( "trigger", who );
if ( who == player )
{ if ( who == player )
return; return;
} }
} }
} else
else level.t_bathtub waittill( "trigger", who );
{
level.t_bathtub waittill( "trigger", who );
}
} }
dip_the_spoon() //checked matches cerberus output dip_the_spoon()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
wait_for_bucket_activated( self ); wait_for_bucket_activated( self );
self takeweapon( "spoon_zm_alcatraz" ); self takeweapon( "spoon_zm_alcatraz" );
self giveweapon( "knife_zm_alcatraz" ); self giveweapon( "knife_zm_alcatraz" );
self set_player_melee_weapon( "knife_zm_alcatraz" ); self set_player_melee_weapon( "knife_zm_alcatraz" );
self.spoon_in_tub = 1; self.spoon_in_tub = 1;
self setclientfieldtoplayer( "spoon_visual_state", 1 ); self setclientfieldtoplayer( "spoon_visual_state", 1 );
wait 5; wait 5;
level.b_spoon_in_tub = 1; level.b_spoon_in_tub = 1;
flag_wait( "charged_spoon" ); flag_wait( "charged_spoon" );
wait 1; wait 1.0;
level.t_bathtub playsound( "zmb_easteregg_laugh" ); level.t_bathtub playsound( "zmb_easteregg_laugh" );
self thread thrust_the_spork(); self thread thrust_the_spork();
} }
thrust_the_spork() //checked matches cerberus output thrust_the_spork()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
wait_for_bucket_activated( self ); wait_for_bucket_activated( self );
self setclientfieldtoplayer( "spoon_visual_state", 2 ); self setclientfieldtoplayer( "spoon_visual_state", 2 );
wait 5; wait 5;
wait_for_bucket_activated( self ); wait_for_bucket_activated( self );
self takeweapon( "knife_zm_alcatraz" ); self takeweapon( "knife_zm_alcatraz" );
self giveweapon( "spork_zm_alcatraz" ); self giveweapon( "spork_zm_alcatraz" );
self set_player_melee_weapon( "spork_zm_alcatraz" ); self set_player_melee_weapon( "spork_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spork", self ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spork", self );
self.spoon_in_tub = undefined; self.spoon_in_tub = undefined;
self setclientfieldtoplayer( "spoon_visual_state", 3 ); self setclientfieldtoplayer( "spoon_visual_state", 3 );
wait 1; wait 1.0;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" ); 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 ) while ( true )
{ {
a_players = getplayers(); a_players = getplayers();
_a377 = a_players;
_k377 = getFirstArrayKey( _a377 ); foreach ( player in a_players )
while ( isDefined( _k377 ) ) {
{ if ( player hasweapon( "bouncing_tomahawk_zm" ) )
player = _a377[ _k377 ]; {
if ( player hasweapon( "bouncing_tomahawk_zm" ) ) flag_set( "soul_catchers_charged" );
{ break;
flag_set( "soul_catchers_charged" ); }
break; }
}
else wait 1.0;
{ }
_k377 = getNextArrayKey( _a377, _k377 );
}
}
wait 1;
#/ #/
}
*/
} }

View File

@ -1,287 +1,289 @@
#include maps/mp/zombies/_zm_weap_tomahawk; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_afterlife; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_audio; #include common_scripts\utility;
#include maps/mp/zombies/_zm_net; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_net;
#include common_scripts/utility; #include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_afterlife;
#include maps\mp\zombies\_zm_weap_tomahawk;
init() init()
{ {
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 ) if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{ {
sq_bg_easy_cleanup(); sq_bg_easy_cleanup();
return; return;
} }
precachemodel( "p6_zm_al_skull_afterlife" );
flag_init( "warden_blundergat_obtained" ); precachemodel( "p6_zm_al_skull_afterlife" );
level thread wait_for_initial_conditions(); flag_init( "warden_blundergat_obtained" );
level thread wait_for_initial_conditions();
} }
sq_bg_easy_cleanup() sq_bg_easy_cleanup()
{ {
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup delete(); t_reward_pickup delete();
} }
wait_for_initial_conditions() wait_for_initial_conditions()
{ {
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" ); t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup sethintstring( "" ); t_reward_pickup sethintstring( "" );
t_reward_pickup setcursorhint( "HINT_NOICON" ); 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 waittill( "bouncing_tomahawk_zm_aquired" );
level.sq_bg_macguffins = [];
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" ); level.sq_bg_macguffins = [];
_a46 = a_s_mcguffin; a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
_k46 = getFirstArrayKey( _a46 );
while ( isDefined( _k46 ) ) foreach ( struct in a_s_mcguffin )
{ {
struct = _a46[ _k46 ]; m_temp = spawn( "script_model", struct.origin, 0 );
m_temp = spawn( "script_model", struct.origin, 0 ); m_temp.targetname = "sq_bg_macguffin";
m_temp.targetname = "sq_bg_macguffin"; m_temp setmodel( struct.model );
m_temp setmodel( struct.model ); m_temp.angles = struct.angles;
m_temp.angles = struct.angles; m_temp ghost();
m_temp ghost(); m_temp ghostindemo();
m_temp ghostindemo(); level.sq_bg_macguffins[level.sq_bg_macguffins.size] = m_temp;
level.sq_bg_macguffins[ level.sq_bg_macguffins.size ] = m_temp; wait_network_frame();
wait_network_frame(); }
_k46 = getNextArrayKey( _a46, _k46 );
} array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
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.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_macguffin; level thread check_sq_bg_progress();
level thread check_sq_bg_progress();
level waittill( "all_macguffins_acquired" ); level waittill( "all_macguffins_acquired" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
t_reward_pickup thread give_sq_bg_reward(); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
t_reward_pickup thread give_sq_bg_reward();
} }
sq_bg_macguffin_think() sq_bg_macguffin_think()
{ {
self endon( "sq_bg_macguffin_received_by_player" ); self endon( "sq_bg_macguffin_received_by_player" );
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop(); self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
self.health = 10000; self.health = 10000;
self setcandamage( 1 ); self setcandamage( 1 );
self setforcenocull(); self setforcenocull();
while ( 1 )
{ while ( true )
self waittill( "damage", amount, attacker ); {
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" ) self waittill( "damage", amount, attacker );
{
playfx( level._effect[ "ee_skull_shot" ], self.origin ); if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
self playsound( "zmb_powerpanel_activate" ); {
self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop(); playfx( level._effect["ee_skull_shot"], self.origin );
self thread wait_and_hide_sq_bg_macguffin(); 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() wait_and_hide_sq_bg_macguffin()
{ {
self notify( "restart_show_timer" ); self notify( "restart_show_timer" );
self endon( "restart_show_timer" ); self endon( "restart_show_timer" );
self endon( "caught_by_tomahawk" ); self endon( "caught_by_tomahawk" );
wait 1,6; wait 1.6;
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop(); self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
} }
tomahawk_the_macguffin( grenade, n_grenade_charge_power ) tomahawk_the_macguffin( grenade, n_grenade_charge_power )
{ {
if ( !isDefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 ) if ( !isdefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
{ return false;
return 0;
} foreach ( macguffin in level.sq_bg_macguffins )
_a119 = level.sq_bg_macguffins; {
_k119 = getFirstArrayKey( _a119 ); if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
while ( isDefined( _k119 ) ) {
{ m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
macguffin = _a119[ _k119 ]; m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 ) macguffin notify( "caught_by_tomahawk" );
{ macguffin.origin = grenade.origin;
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin ); macguffin linkto( m_tomahawk );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power; macguffin thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
macguffin notify( "caught_by_tomahawk" ); self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
macguffin.origin = grenade.origin; self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
macguffin linkto( m_tomahawk ); return true;
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; return false;
}
_k119 = getNextArrayKey( _a119, _k119 );
}
return 0;
} }
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin ) give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
while ( isDefined( m_tomahawk ) )
{ while ( isdefined( m_tomahawk ) )
wait 0,05; wait 0.05;
}
m_macguffin notify( "sq_bg_macguffin_received_by_player" ); m_macguffin notify( "sq_bg_macguffin_received_by_player" );
arrayremovevalue( level.sq_bg_macguffins, m_macguffin ); arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
m_macguffin delete(); m_macguffin delete();
play_sound_at_pos( "purchase", self.origin ); play_sound_at_pos( "purchase", self.origin );
level notify( "sq_bg_macguffin_collected" ); level notify( "sq_bg_macguffin_collected", self );
} }
check_sq_bg_progress() check_sq_bg_progress()
{ {
n_macguffins_total = level.sq_bg_macguffins.size; n_macguffins_total = level.sq_bg_macguffins.size;
n_macguffins_collected = 0; n_macguffins_collected = 0;
while ( 1 )
{ while ( true )
level waittill( "sq_bg_macguffin_collected", player ); {
n_macguffins_collected++; level waittill( "sq_bg_macguffin_collected", player );
if ( n_macguffins_collected >= n_macguffins_total )
{ n_macguffins_collected++;
level notify( "all_macguffins_acquired" );
break; if ( n_macguffins_collected >= n_macguffins_total )
} {
else play_sq_bg_collected_vo( player ); level notify( "all_macguffins_acquired" );
} break;
wait 1; }
player playsound( "zmb_easteregg_laugh" ); else
play_sq_bg_collected_vo( player );
}
wait 1.0;
player playsound( "zmb_easteregg_laugh" );
} }
play_sq_bg_collected_vo( player ) play_sq_bg_collected_vo( player )
{ {
player endon( "disconnect" ); player endon( "disconnect" );
wait 1; wait 1.0;
player thread do_player_general_vox( "quest", "pick_up_easter_egg" ); player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
} }
give_sq_bg_reward() give_sq_bg_reward()
{ {
s_reward_origin = getstruct( "sq_bg_reward", "targetname" ); s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 ); t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
while ( 1 )
{ while ( true )
t_near waittill( "trigger", ent ); {
if ( isplayer( ent ) ) t_near waittill( "trigger", ent );
{
t_near thread sq_bg_spawn_rumble(); if ( isplayer( ent ) )
break; {
} t_near thread sq_bg_spawn_rumble();
else break;
{ }
wait 0,1;
} wait 0.1;
} }
a_players = getplayers();
if ( a_players.size == 1 ) a_players = getplayers();
{
if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) ) if ( a_players.size == 1 )
{ {
str_reward_weapon = "blundersplat_zm"; if ( a_players[0] hasweapon( "blundergat_zm" ) )
str_loc = &"ZM_PRISON_SQ_BS"; {
} str_reward_weapon = "blundersplat_zm";
else str_loc = &"ZM_PRISON_SQ_BS";
{ }
str_reward_weapon = "blundergat_zm"; else
str_loc = &"ZM_PRISON_SQ_BG"; {
} str_reward_weapon = "blundergat_zm";
} str_loc = &"ZM_PRISON_SQ_BG";
else }
{ }
str_reward_weapon = "blundergat_zm"; else
str_loc = &"ZM_PRISON_SQ_BG"; {
} str_reward_weapon = "blundergat_zm";
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles ); str_loc = &"ZM_PRISON_SQ_BG";
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 ); m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
for ( ;; ) m_reward_model moveto( m_reward_model.origin + vectorscale( ( 0, 0, 1 ), 14.0 ), 5 );
{ level setclientfield( "sq_bg_reward_portal", 1 );
while ( 1 ) self sethintstring( str_loc );
{
self waittill( "trigger", player ); while ( true )
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 waittill( "trigger", player );
{
if ( player hasweapon( str_reward_weapon ) ) 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" );
#/ #/
} continue;
} }
else self delete(); else
level setclientfield( "sq_bg_reward_portal", 0 ); {
wait_network_frame(); self delete();
m_reward_model delete(); level setclientfield( "sq_bg_reward_portal", 0 );
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon ); wait_network_frame();
} m_reward_model delete();
} player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
t_near delete(); }
}
}
t_near delete();
} }
sq_bg_spawn_rumble() sq_bg_spawn_rumble()
{ {
a_players = getplayers(); a_players = getplayers();
_a285 = a_players;
_k285 = getFirstArrayKey( _a285 ); foreach ( player in a_players )
while ( isDefined( _k285 ) ) {
{ if ( player istouching( self ) )
player = _a285[ _k285 ]; player setclientfieldtoplayer( "rumble_sq_bg", 1 );
if ( player istouching( self ) ) }
{
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
}
_k285 = getNextArrayKey( _a285, _k285 );
}
} }
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override ) take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
{ {
if ( !isDefined( weapon_limit_override ) ) if ( !isdefined( weapon_limit_override ) )
{ weapon_limit_override = 0;
weapon_limit_override = 0;
} if ( weapon_limit_override == 1 )
if ( weapon_limit_override == 1 ) self takeweapon( current_weapon );
{ else
self takeweapon( current_weapon ); {
} primaries = self getweaponslistprimaries();
else
{ if ( isdefined( primaries ) && primaries.size >= 2 )
primaries = self getweaponslistprimaries(); self takeweapon( current_weapon );
if ( isDefined( primaries ) && primaries.size >= 2 ) }
{
self takeweapon( current_weapon ); self giveweapon( reward_weapon );
} self switchtoweapon( reward_weapon );
} flag_set( "warden_blundergat_obtained" );
self giveweapon( reward_weapon ); self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
self switchtoweapon( reward_weapon );
flag_set( "warden_blundergat_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
} }
debug_sq_bg_quest_starter() debug_sq_bg_quest_starter()
{ {
/# /#
while ( 1 ) while ( true )
{ {
a_players = getplayers(); a_players = getplayers();
_a327 = a_players;
_k327 = getFirstArrayKey( _a327 ); foreach ( player in a_players )
while ( isDefined( _k327 ) ) {
{ if ( player hasweapon( "bouncing_tomahawk_zm" ) )
player = _a327[ _k327 ]; {
if ( player hasweapon( "bouncing_tomahawk_zm" ) ) level notify( "bouncing_tomahawk_zm_aquired" );
{ break;
level notify( "bouncing_tomahawk_zm_aquired" ); }
break; }
}
else wait 1.0;
{ }
_k327 = getNextArrayKey( _a327, _k327 );
}
}
wait 1;
#/ #/
}
} }

View File

@ -1,162 +1,162 @@
#include maps/mp/zombies/_zm; // T6 GSC SOURCE
#include maps/mp/_visionset_mgr; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_net; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_net;
#include maps\mp\_visionset_mgr;
#include maps\mp\zombies\_zm;
onplayerconnect_sq_fc() onplayerconnect_sq_fc()
{ {
if ( !isDefined( level.sq_fc_still_valid ) ) if ( !isdefined( level.sq_fc_still_valid ) )
{ level.sq_fc_still_valid = 1;
level.sq_fc_still_valid = 1;
} if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid ) return;
{
return; self thread watch_for_touching_controls();
}
self thread watch_for_touching_controls();
} }
watch_for_touching_controls() watch_for_touching_controls()
{ {
self endon( "out_of_mana" ); self endon( "out_of_mana" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "al_all_setup" );
wait 1; self waittill( "al_all_setup" );
v_original_origin = ( self.origin[ 0 ], self.origin[ 1 ], 0 );
v_original_angles = self.angles; wait 1;
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 ); v_original_origin = ( self.origin[0], self.origin[1], 0 );
v_original_forward_vec = vectornormalize( v_forward_point - self.origin ); v_original_angles = self.angles;
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid ) v_forward_point = self.origin + anglestoforward( self.angles ) * 10;
{ v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin ); while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
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 ) v_new_forward_point = self.origin + anglestoforward( self.angles ) * 10;
{ v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
level.sq_fc_still_valid = 0; move_length = length( ( self.origin[0], self.origin[1], 0 ) - v_original_origin );
}
wait 0,05; 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;
level notify( "someone_touched_controls" );
wait 0.05;
}
level notify( "someone_touched_controls" );
} }
watch_for_trigger_condition() watch_for_trigger_condition()
{ {
level waittill( "pre_end_game" ); level waittill( "pre_end_game" );
if ( !level.sq_fc_still_valid )
{ if ( !level.sq_fc_still_valid )
return; return;
}
level.sndgameovermusicoverride = "game_over_nomove"; level.sndgameovermusicoverride = "game_over_nomove";
level.custom_intermission = ::player_intermission_prison; level.custom_intermission = ::player_intermission_prison;
players = getplayers(); players = getplayers();
_a94 = players;
_k94 = getFirstArrayKey( _a94 ); foreach ( player in players )
while ( isDefined( _k94 ) ) maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
{
player = _a94[ _k94 ];
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
_k94 = getNextArrayKey( _a94, _k94 );
}
} }
player_intermission_prison() player_intermission_prison()
{ {
self closemenu(); self closemenu();
self closeingamemenu(); self closeingamemenu();
level endon( "stop_intermission" ); level endon( "stop_intermission" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
self notify( "_zombie_game_over" ); self notify( "_zombie_game_over" );
self.score = self.score_total; self.score = self.score_total;
self.sessionstate = "intermission"; self.sessionstate = "intermission";
self.spectatorclient = -1; self.spectatorclient = -1;
self.killcamentity = -1; self.killcamentity = -1;
self.archivetime = 0; self.archivetime = 0;
self.psoffsettime = 0; self.psoffsettime = 0;
self.friendlydamage = undefined; self.friendlydamage = undefined;
points = getstructarray( "dblock_cam", "targetname" ); points = getstructarray( "dblock_cam", "targetname" );
if ( !isDefined( points ) || points.size == 0 )
{ if ( !isdefined( points ) || points.size == 0 )
points = getentarray( "info_intermission", "classname" ); {
if ( points.size < 1 ) points = getentarray( "info_intermission", "classname" );
{
if ( points.size < 1 )
{
/# /#
println( "NO info_intermission POINTS IN MAP" ); println( "NO info_intermission POINTS IN MAP" );
#/ #/
return; return;
} }
} }
self.game_over_bg = newclienthudelem( self );
self.game_over_bg.horzalign = "fullscreen"; self.game_over_bg = newclienthudelem( self );
self.game_over_bg.vertalign = "fullscreen"; self.game_over_bg.horzalign = "fullscreen";
self.game_over_bg setshader( "black", 640, 480 ); self.game_over_bg.vertalign = "fullscreen";
self.game_over_bg.alpha = 1; self.game_over_bg setshader( "black", 640, 480 );
visionsetnaked( "cheat_bw", 0,05 ); self.game_over_bg.alpha = 1;
org = undefined; visionsetnaked( "cheat_bw", 0.05 );
while ( 1 ) org = undefined;
{
points = array_randomize( points ); while ( true )
i = 0; {
while ( i < points.size ) points = array_randomize( points );
{
point = points[ i ]; for ( i = 0; i < points.size; i++ )
if ( !isDefined( org ) ) {
{ point = points[i];
self spawn( point.origin, point.angles );
} if ( !isdefined( org ) )
if ( isDefined( points[ i ].target ) ) self spawn( point.origin, point.angles );
{
if ( !isDefined( org ) ) if ( isdefined( points[i].target ) )
{ {
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) ); if ( !isdefined( org ) )
org setmodel( "tag_origin" ); {
} org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) );
org.origin = points[ i ].origin; org setmodel( "tag_origin" );
org.angles = points[ i ].angles; }
j = 0;
while ( j < get_players().size ) org.origin = points[i].origin;
{ org.angles = points[i].angles;
player = get_players()[ j ];
player camerasetposition( org ); for ( j = 0; j < get_players().size; j++ )
player camerasetlookat(); {
player cameraactivate( 1 ); player = get_players()[j];
j++; player camerasetposition( org );
} player camerasetlookat();
speed = 20; player cameraactivate( 1 );
if ( isDefined( points[ i ].speed ) ) }
{
speed = points[ i ].speed; speed = 20;
}
target_point = getstruct( points[ i ].target, "targetname" ); if ( isdefined( points[i].speed ) )
dist = distance( points[ i ].origin, target_point.origin ); speed = points[i].speed;
time = dist / speed;
q_time = time * 0,25; target_point = getstruct( points[i].target, "targetname" );
if ( q_time > 1 ) dist = distance( points[i].origin, target_point.origin );
{ time = dist / speed;
q_time = 1; q_time = time * 0.25;
}
self.game_over_bg fadeovertime( q_time ); if ( q_time > 1 )
self.game_over_bg.alpha = 0; q_time = 1;
org moveto( target_point.origin, time, q_time, q_time );
org rotateto( target_point.angles, time, q_time, q_time ); self.game_over_bg fadeovertime( q_time );
wait ( time - q_time ); self.game_over_bg.alpha = 0;
self.game_over_bg fadeovertime( q_time ); org moveto( target_point.origin, time, q_time, q_time );
self.game_over_bg.alpha = 1; org rotateto( target_point.angles, time, q_time, q_time );
wait q_time; wait( time - q_time );
i++; self.game_over_bg fadeovertime( q_time );
continue; self.game_over_bg.alpha = 1;
} wait( q_time );
else continue;
{ }
self.game_over_bg fadeovertime( 1 );
self.game_over_bg.alpha = 0; self.game_over_bg fadeovertime( 1 );
wait 5; self.game_over_bg.alpha = 0;
self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 ); wait 5;
} self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 );
i++; }
} }
}
} }

View File

@ -1,108 +1,112 @@
#include maps/mp/zombies/_zm_zonemgr; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_net; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include common_scripts\utility;
#include maps/mp/_utility; #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_zonemgr;
onplayerconnect_sq_wth() onplayerconnect_sq_wth()
{ {
if ( !isDefined( level.wth_lookat_point ) ) if ( !isdefined( level.wth_lookat_point ) )
{ level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
} self thread track_player_eyes();
self thread track_player_eyes(); self thread play_scary_lightning();
self thread play_scary_lightning();
} }
track_player_eyes() track_player_eyes()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
b_saw_the_wth = 0; b_saw_the_wth = 0;
while ( !b_saw_the_wth )
{ while ( !b_saw_the_wth )
n_time = 0; {
while ( self adsbuttonpressed() && n_time < 25 ) n_time = 0;
{
n_time++; while ( self adsbuttonpressed() && n_time < 25 )
wait 0,05; {
} n_time++;
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 ) ) wait 0.05;
{ }
self do_player_general_vox( "general", "scare_react", undefined, 100 );
self playsoundtoplayer( "zmb_easteregg_face", self ); 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.wth_elem = newclienthudelem( self ); {
self.wth_elem.horzalign = "fullscreen"; self do_player_general_vox( "general", "scare_react", undefined, 100 );
self.wth_elem.vertalign = "fullscreen"; self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem.sort = 1000; self.wth_elem = newclienthudelem( self );
self.wth_elem.foreground = 0; self.wth_elem.horzalign = "fullscreen";
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 ); self.wth_elem.vertalign = "fullscreen";
self.wth_elem.hidewheninmenu = 1; self.wth_elem.sort = 1000;
j_time = 0; self.wth_elem.foreground = 0;
while ( self adsbuttonpressed() && j_time < 5 ) self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
{ self.wth_elem.hidewheninmenu = 1;
j_time++; j_time = 0;
wait 0,05;
} while ( self adsbuttonpressed() && j_time < 5 )
self.wth_elem destroy(); {
b_saw_the_wth = 1; j_time++;
} wait 0.05;
wait 0,05; }
}
self.wth_elem destroy();
b_saw_the_wth = 1;
}
wait 0.05;
}
} }
sq_is_weapon_sniper( str_weapon ) sq_is_weapon_sniper( str_weapon )
{ {
a_snipers = array( "dsr50", "barretm82" ); a_snipers = array( "dsr50", "barretm82" );
_a77 = a_snipers;
_k77 = getFirstArrayKey( _a77 ); foreach ( str_sniper in a_snipers )
while ( isDefined( _k77 ) ) {
{ if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
str_sniper = _a77[ _k77 ]; return true;
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) ) }
{
return 1; return false;
}
_k77 = getNextArrayKey( _a77, _k77 );
}
return 0;
} }
play_scary_lightning() play_scary_lightning()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
while ( 1 )
{ 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" ) ) {
{ 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; wait 0.25;
}
if ( randomint( 100000 ) == 1337 ) if ( randomint( 100000 ) == 1337 )
{ {
self.scary_lighting = 1; self.scary_lighting = 1;
level setclientfield( "scripted_lightning_flash", 1 ); level setclientfield( "scripted_lightning_flash", 1 );
wait_network_frame(); wait_network_frame();
self.sl_elem = newclienthudelem( self ); self.sl_elem = newclienthudelem( self );
self.sl_elem.horzalign = "fullscreen"; self.sl_elem.horzalign = "fullscreen";
self.sl_elem.vertalign = "fullscreen"; self.sl_elem.vertalign = "fullscreen";
self.sl_elem.sort = 1000; self.sl_elem.sort = 1000;
self.sl_elem.foreground = 0; self.sl_elem.foreground = 0;
self.sl_elem.alpha = 0,6; self.sl_elem.alpha = 0.6;
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 ); self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.sl_elem.hidewheninmenu = 1; self.sl_elem.hidewheninmenu = 1;
self.sl_elem.alpha = 0; self.sl_elem.alpha = 0.0;
self.sl_elem fadeovertime( 0,1 ); self.sl_elem fadeovertime( 0.1 );
wait_network_frame(); wait_network_frame();
self.sl_elem.alpha = 0,6; self.sl_elem.alpha = 0.6;
self.sl_elem fadeovertime( 0,1 ); self.sl_elem fadeovertime( 0.1 );
wait_network_frame(); wait_network_frame();
self.sl_elem.alpha = 0; self.sl_elem.alpha = 0.0;
self.sl_elem fadeovertime( 0,1 ); self.sl_elem fadeovertime( 0.1 );
wait_network_frame(); wait_network_frame();
self.sl_elem destroy(); self.sl_elem destroy();
self.scary_lightning = 0; self.scary_lightning = 0;
wait 10; wait 10;
level setclientfield( "scripted_lightning_flash", 0 ); level setclientfield( "scripted_lightning_flash", 0 );
} }
wait 1;
} wait 1;
}
} }

View File

@ -1,13 +1,14 @@
//checked includes changed to match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_game_module_utility; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\gametypes_zm\_hud_util;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/gametypes_zm/_hud_util; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_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; 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 ); maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
} }

View File

@ -1,7 +1,9 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_game_module_meat_utility; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\gametypes_zm\_hud_util;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/gametypes_zm/_hud_util; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_utility;

View File

@ -1,43 +1,46 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module_meat; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_game_module_meat_utility; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\gametypes_zm\_hud_util;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/gametypes_zm/_hud_util; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_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"; level.item_meat_name = "item_meat_zm";
precacheitem( level.item_meat_name ); precacheitem( level.item_meat_name );
} }
move_ring( ring ) //checked changed to match cerberus output move_ring( ring )
{ {
positions = getstructarray( ring.target, "targetname" ); positions = getstructarray( ring.target, "targetname" );
positions = array_randomize( positions ); positions = array_randomize( positions );
level endon( "end_game" ); level endon( "end_game" );
while ( 1 )
{ while ( true )
foreach ( position in positions ) {
{ foreach ( position in positions )
self moveto( position.origin, randomintrange( 30, 45 ) ); {
self waittill( "movedone" ); self moveto( position.origin, randomintrange( 30, 45 ) );
}
} self waittill( "movedone" );
}
}
} }
rotate_ring( forward ) //checked matches cerberus output rotate_ring( forward )
{ {
level endon( "end_game" ); level endon( "end_game" );
dir = -360; dir = -360;
if ( forward )
{ if ( forward )
dir = 360; dir = 360;
}
while ( 1 ) while ( true )
{ {
self rotateyaw( dir, 9 ); self rotateyaw( dir, 9 );
wait 9; wait 9;
} }
} }

View File

@ -1,217 +1,209 @@
#include maps/mp/zombies/_zm_magicbox; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_unitrigger; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_weapons; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_magicbox;
init() init()
{ {
registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" ); registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" ); registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" );
registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" ); registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_leaving_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"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" );
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" ); level._effect["lght_marker_flare"] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "system_elements/fx_null" ); level._effect["poltergeist"] = loadfx( "system_elements/fx_null" );
level._effect[ "box_gone_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" ); 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_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_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_locked"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" );
level._effect[ "box_is_leaving" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" ); level._effect["box_is_leaving"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" );
level.using_locked_magicbox = 1; level.using_locked_magicbox = 1;
level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red"; level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red";
precachemodel( level.chest_joker_model ); precachemodel( level.chest_joker_model );
level.chest_joker_custom_movement = ::custom_joker_movement; level.chest_joker_custom_movement = ::custom_joker_movement;
level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state; level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state;
level thread wait_then_create_base_magic_box_fx(); level thread wait_then_create_base_magic_box_fx();
level thread handle_fire_sale(); level thread handle_fire_sale();
} }
custom_joker_movement() custom_joker_movement()
{ {
v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 ); v_origin = self.weapon_model.origin - vectorscale( ( 0, 0, 1 ), 5.0 );
self.weapon_model delete(); self.weapon_model delete();
m_lock = spawn( "script_model", v_origin ); m_lock = spawn( "script_model", v_origin );
m_lock setmodel( level.chest_joker_model ); m_lock setmodel( level.chest_joker_model );
m_lock.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 ); m_lock.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
wait 0,5; wait 0.5;
level notify( "weapon_fly_away_start" ); level notify( "weapon_fly_away_start" );
wait 1; wait 1;
m_lock rotateyaw( 3000, 4, 4 ); m_lock rotateyaw( 3000, 4, 4 );
wait 3; wait 3;
m_lock movez( 20, 0,5, 0,5 ); 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 waittill( "movedone" );
m_lock delete(); m_lock movez( -100, 0.5, 0.5 );
self notify( "box_moving" );
level notify( "weapon_fly_away_end" ); m_lock waittill( "movedone" );
m_lock delete();
self notify( "box_moving" );
level notify( "weapon_fly_away_end" );
} }
wait_then_create_base_magic_box_fx() wait_then_create_base_magic_box_fx()
{ {
while ( !isDefined( level.chests ) ) while ( !isdefined( level.chests ) )
{ wait 0.5;
wait 0,5;
} while ( !isdefined( level.chests[level.chests.size - 1].zbarrier ) )
while ( !isDefined( level.chests[ level.chests.size - 1 ].zbarrier ) ) wait 0.5;
{
wait 0,5; foreach ( chest in level.chests )
} chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
_a92 = level.chests;
_k92 = getFirstArrayKey( _a92 );
while ( isDefined( _k92 ) )
{
chest = _a92[ _k92 ];
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
_k92 = getNextArrayKey( _a92, _k92 );
}
} }
set_magic_box_zbarrier_state( state ) set_magic_box_zbarrier_state( state )
{ {
i = 0; for ( i = 0; i < self getnumzbarrierpieces(); i++ )
while ( i < self getnumzbarrierpieces() ) self hidezbarrierpiece( i );
{
self hidezbarrierpiece( i ); self notify( "zbarrier_state_change" );
i++;
} switch ( state )
self notify( "zbarrier_state_change" ); {
switch( state ) case "away":
{ self showzbarrierpiece( 0 );
case "away": self.state = "away";
self showzbarrierpiece( 0 ); self.owner.is_locked = 0;
self.state = "away"; break;
self.owner.is_locked = 0; case "arriving":
break; self showzbarrierpiece( 1 );
case "arriving": self thread magic_box_arrives();
self showzbarrierpiece( 1 ); self.state = "arriving";
self thread magic_box_arrives(); break;
self.state = "arriving"; case "initial":
break; self showzbarrierpiece( 1 );
case "initial": self thread magic_box_initial();
self showzbarrierpiece( 1 ); thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
self thread magic_box_initial(); self.state = "close";
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think ); break;
self.state = "close"; case "open":
break; self showzbarrierpiece( 2 );
case "open": self thread magic_box_opens();
self showzbarrierpiece( 2 ); self.state = "open";
self thread magic_box_opens(); break;
self.state = "open"; case "close":
break; self showzbarrierpiece( 2 );
case "close": self thread magic_box_closes();
self showzbarrierpiece( 2 ); self.state = "close";
self thread magic_box_closes(); break;
self.state = "close"; case "leaving":
break; self showzbarrierpiece( 1 );
case "leaving": self thread magic_box_leaves();
self showzbarrierpiece( 1 ); self.state = "leaving";
self thread magic_box_leaves(); self.owner.is_locked = 0;
self.state = "leaving"; break;
self.owner.is_locked = 0; default:
break; if ( isdefined( level.custom_magicbox_state_handler ) )
default: self [[ level.custom_magicbox_state_handler ]]( state );
if ( isDefined( level.custom_magicbox_state_handler ) )
{ break;
self [[ level.custom_magicbox_state_handler ]]( state ); }
}
break;
}
} }
magic_box_initial() magic_box_initial()
{ {
self setzbarrierpiecestate( 1, "open" ); self setzbarrierpiecestate( 1, "open" );
wait 1; wait 1;
self setclientfield( "magicbox_amb_fx", 1 ); self setclientfield( "magicbox_amb_fx", 1 );
} }
magic_box_arrives() magic_box_arrives()
{ {
self setclientfield( "magicbox_leaving_fx", 0 ); self setclientfield( "magicbox_leaving_fx", 0 );
self setclientfield( "magicbox_amb_fx", 1 ); self setclientfield( "magicbox_amb_fx", 1 );
self setzbarrierpiecestate( 1, "opening" ); self setzbarrierpiecestate( 1, "opening" );
while ( self getzbarrierpiecestate( 1 ) == "opening" )
{ while ( self getzbarrierpiecestate( 1 ) == "opening" )
wait 0,05; wait 0.05;
}
self notify( "arrived" ); self notify( "arrived" );
self.state = "close"; self.state = "close";
} }
magic_box_leaves() magic_box_leaves()
{ {
self setclientfield( "magicbox_leaving_fx", 1 ); self setclientfield( "magicbox_leaving_fx", 1 );
self setclientfield( "magicbox_open_fx", 0 ); self setclientfield( "magicbox_open_fx", 0 );
self setzbarrierpiecestate( 1, "closing" ); self setzbarrierpiecestate( 1, "closing" );
self playsound( "zmb_hellbox_rise" ); self playsound( "zmb_hellbox_rise" );
while ( self getzbarrierpiecestate( 1 ) == "closing" )
{ while ( self getzbarrierpiecestate( 1 ) == "closing" )
wait 0,1; wait 0.1;
}
self notify( "left" ); self notify( "left" );
self setclientfield( "magicbox_amb_fx", 0 ); self setclientfield( "magicbox_amb_fx", 0 );
} }
magic_box_opens() magic_box_opens()
{ {
self setclientfield( "magicbox_open_fx", 1 ); self setclientfield( "magicbox_open_fx", 1 );
self setzbarrierpiecestate( 2, "opening" ); self setzbarrierpiecestate( 2, "opening" );
self playsound( "zmb_hellbox_open" ); self playsound( "zmb_hellbox_open" );
while ( self getzbarrierpiecestate( 2 ) == "opening" )
{ while ( self getzbarrierpiecestate( 2 ) == "opening" )
wait 0,1; wait 0.1;
}
self notify( "opened" ); self notify( "opened" );
} }
magic_box_closes() magic_box_closes()
{ {
self setzbarrierpiecestate( 2, "closing" ); self setzbarrierpiecestate( 2, "closing" );
self playsound( "zmb_hellbox_close" ); self playsound( "zmb_hellbox_close" );
while ( self getzbarrierpiecestate( 2 ) == "closing" )
{ while ( self getzbarrierpiecestate( 2 ) == "closing" )
wait 0,1; wait 0.1;
}
self notify( "closed" ); self notify( "closed" );
self setclientfield( "magicbox_open_fx", 0 ); self setclientfield( "magicbox_open_fx", 0 );
} }
magic_box_do_weapon_rise() magic_box_do_weapon_rise()
{ {
self endon( "box_hacked_respin" ); self endon( "box_hacked_respin" );
self setzbarrierpiecestate( 3, "closed" ); self setzbarrierpiecestate( 3, "closed" );
self setzbarrierpiecestate( 4, "closed" ); self setzbarrierpiecestate( 4, "closed" );
wait_network_frame(); wait_network_frame();
self zbarrierpieceuseboxriselogic( 3 ); self zbarrierpieceuseboxriselogic( 3 );
self zbarrierpieceuseboxriselogic( 4 ); self zbarrierpieceuseboxriselogic( 4 );
self showzbarrierpiece( 3 ); self showzbarrierpiece( 3 );
self showzbarrierpiece( 4 ); self showzbarrierpiece( 4 );
self setzbarrierpiecestate( 3, "opening" ); self setzbarrierpiecestate( 3, "opening" );
self setzbarrierpiecestate( 4, "opening" ); self setzbarrierpiecestate( 4, "opening" );
while ( self getzbarrierpiecestate( 3 ) != "open" )
{ while ( self getzbarrierpiecestate( 3 ) != "open" )
wait 0,5; wait 0.5;
}
self hidezbarrierpiece( 3 ); self hidezbarrierpiece( 3 );
self hidezbarrierpiece( 4 ); self hidezbarrierpiece( 4 );
} }
handle_fire_sale() handle_fire_sale()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "fire_sale_off" ); level waittill( "fire_sale_off" );
i = 0;
while ( i < level.chests.size ) for ( i = 0; i < level.chests.size; i++ )
{ {
if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) ) if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) )
{ level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 );
level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 0 ); }
} }
i++;
}
}
} }

View File

@ -1,169 +1,172 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/_visionset_mgr; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_perks; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_net; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_net;
#include maps/mp/_utility; #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_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_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_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_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_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
} }
init_divetonuke() //checked matches cerberus output init_divetonuke()
{ {
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); 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" ); 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_radius", 300 );
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
} }
divetonuke_precache() //checked matches cerberus output divetonuke_precache()
{ {
if ( isDefined( level.divetonuke_precache_override_func ) ) if ( isdefined( level.divetonuke_precache_override_func ) )
{ {
[[ level.divetonuke_precache_override_func ]](); [[ level.divetonuke_precache_override_func ]]();
return; return;
} }
precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" ); precacheitem( "zombie_perk_bottle_nuke" );
precachemodel( "zombie_vending_nuke" ); precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke_on" ); precachemodel( "zombie_vending_nuke" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); precachemodel( "zombie_vending_nuke_on" );
level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level.machine_assets[ "divetonuke" ] = spawnstruct(); level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; level.machine_assets["divetonuke"] = spawnstruct();
level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke";
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; 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_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk"; use_trigger.script_string = "divetonuke_perk";
use_trigger.script_label = "mus_perks_phd_sting"; use_trigger.script_label = "mus_perks_phd_sting";
use_trigger.target = "vending_divetonuke"; use_trigger.target = "vending_divetonuke";
perk_machine.script_string = "divetonuke_perk"; perk_machine.script_string = "divetonuke_perk";
perk_machine.targetname = "vending_divetonuke"; perk_machine.targetname = "vending_divetonuke";
if ( isDefined( bump_trigger ) )
{ if ( isdefined( bump_trigger ) )
bump_trigger.script_string = "divetonuke_perk"; bump_trigger.script_string = "divetonuke_perk";
}
} }
divetonuke_perk_machine_think() //checked changed to match cerberus output divetonuke_perk_machine_think()
{ {
init_divetonuke(); init_divetonuke();
while ( 1 )
{ while ( true )
machine = getentarray( "vending_divetonuke", "targetname" ); {
machine_triggers = getentarray( "vending_divetonuke", "target" ); machine = getentarray( "vending_divetonuke", "targetname" );
for ( i = 0; i < machine.size; i++ ) machine_triggers = getentarray( "vending_divetonuke", "target" );
{
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model ); 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" ); array_thread( machine_triggers, ::set_power_on, 0 );
level waittill( "divetonuke_on" ); level thread do_initial_power_off_callback( machine, "divetonuke" );
for ( i = 0; i < machine.size; i++ )
{ level waittill( "divetonuke_on" );
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model );
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); for ( i = 0; i < machine.size; i++ )
machine[ i ] playsound( "zmb_perks_power_on" ); {
machine[ i ] thread perk_fx( "divetonuke_light" ); machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
machine[ i ] thread play_loop_on_machine(); machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
} machine[i] playsound( "zmb_perks_power_on" );
level notify( "specialty_flakjacket_power_on" ); machine[i] thread perk_fx( "divetonuke_light" );
array_thread( machine_triggers, ::set_power_on, 1 ); machine[i] thread play_loop_on_machine();
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) ) }
{
array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback ); level notify( "specialty_flakjacket_power_on" );
} array_thread( machine_triggers, ::set_power_on, 1 );
level waittill( "divetonuke_off" );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) ) if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) )
{ array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback );
} level waittill( "divetonuke_off" );
array_thread( machine, ::turn_perk_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" ); flop = getentarray( "vending_divetonuke", "targetname" );
foreach ( perk in flop )
{ foreach ( perk in flop )
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model ) {
{ if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model )
perk perk_fx( undefined, 1 ); {
perk thread perk_fx( "divetonuke_light" ); perk perk_fx( undefined, 1 );
} perk thread perk_fx( "divetonuke_light" );
} }
}
} }
divetonuke_explode( attacker, origin ) divetonuke_explode( attacker, origin )
{ {
radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; radius = level.zombie_vars["zombie_perk_divetonuke_radius"];
min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"];
max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"];
if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized )
{ 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" ); attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
} else
else radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
{
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); playfx( level._effect["divetonuke_groundhit"], origin );
} attacker playsound( "zmb_phdflop_explo" );
playfx( level._effect[ "divetonuke_groundhit" ], origin ); maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
attacker playsound( "zmb_phdflop_explo" ); wait 1;
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); maps\mp\_visionset_mgr::vsmgr_deactivate( "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" ); self endon( "disconnect" );
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
network_stall_counter = 0; network_stall_counter = 0;
if ( isdefined( a_zombies ) )
{ if ( isdefined( a_zombies ) )
i = 0; {
while ( i < a_zombies.size ) for ( i = 0; i < a_zombies.size; i++ )
{ {
e_zombie = a_zombies[ i ]; e_zombie = a_zombies[i];
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
{ if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
i++; continue;
continue;
} dist = distance( e_zombie.origin, origin );
dist = distance( e_zombie.origin, origin ); damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius );
damage = ( min_damage + max_damage ) - min_damage * ( 1 - ( dist / radius ) ); e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod );
e_zombie dodamage(damage, e_zombie.origin, self, self, 0, damage_mod); network_stall_counter--;
network_stall_counter--;
if ( network_stall_counter <= 0 ) if ( network_stall_counter <= 0 )
{ {
wait_network_frame(); wait_network_frame();
network_stall_counter = randomintrange( 1, 3 ); network_stall_counter = randomintrange( 1, 3 );
} }
i++; }
} }
}
} }

View File

@ -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" );
}

View File

@ -1,278 +1,302 @@
#include maps/mp/zombies/_zm_stats; // T6 GSC SOURCE
#include common_scripts/utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/_utility; #include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_stats;
init() init()
{ {
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) if ( !isdefined( level.ballistic_knife_autorecover ) )
{ level.ballistic_knife_autorecover = 1;
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); 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 ) on_spawn( watcher, player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "disconnect" ); player endon( "disconnect" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
level endon( "game_ended" ); level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0; self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
if ( isDefined( endpos ) )
{ isfriendly = 0;
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); if ( isdefined( endpos ) )
retrievable_model setowner( player ); {
retrievable_model.owner = player; retrievable_model = spawn( "script_model", endpos );
retrievable_model.angles = angles; retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model.name = watcher.weapon; retrievable_model setowner( player );
if ( isDefined( prey ) ) retrievable_model.owner = player;
{ retrievable_model.angles = angles;
if ( isplayer( prey ) && player.team == prey.team ) retrievable_model.name = watcher.weapon;
{
isfriendly = 1; if ( isdefined( prey ) )
} {
else if ( isplayer( prey ) && player.team == prey.team )
{ isfriendly = 1;
if ( isai( prey ) && player.team == prey.team ) else if ( isai( prey ) && player.team == prey.team )
{ isfriendly = 1;
isfriendly = 1;
} if ( !isfriendly )
} {
if ( !isfriendly ) retrievable_model linkto( prey, bone );
{ retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
retrievable_model linkto( prey, bone ); }
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); else if ( isfriendly )
} {
else retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
{ normal = ( 0, 0, 1 );
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" );
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
if ( isfriendly ) retrievable_model thread drop_knives_to_ground( player );
{
retrievable_model waittill( "stationary" ); if ( isfriendly )
} player notify( "ballistic_knife_stationary", retrievable_model, normal );
retrievable_model thread drop_knives_to_ground( player ); else
if ( isfriendly ) player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
{
player notify( "ballistic_knife_stationary" ); retrievable_model thread wait_to_show_glowing_model( prey );
} }
else
{
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey );
}
} }
wait_to_show_glowing_model( prey ) wait_to_show_glowing_model( prey )
{ {
level endon( "game_ended" ); level endon( "game_ended" );
self endon( "death" ); self endon( "death" );
wait 2; wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
} }
on_spawn_retrieve_trigger( watcher, player ) on_spawn_retrieve_trigger( watcher, player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "disconnect" ); player endon( "disconnect" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
level endon( "game_ended" ); level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) ) player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
{
return; if ( !isdefined( retrievable_model ) )
} return;
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) trigger_pos = [];
{
trigger_pos[ 0 ] = prey.origin[ 0 ]; if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
trigger_pos[ 1 ] = prey.origin[ 1 ]; {
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; trigger_pos[0] = prey.origin[0];
} trigger_pos[1] = prey.origin[1];
else trigger_pos[2] = prey.origin[2] + 10;
{ }
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); else
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); {
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
} trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
pickup_trigger setcursorhint( "HINT_NOICON" ); }
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger; if ( is_true( level.ballistic_knife_autorecover ) )
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; {
if ( isDefined( hint_string ) ) trigger_pos[2] -= 50.0;
{ pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
pickup_trigger sethintstring( hint_string ); }
} else
else {
{ pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger sethintstring( &"GENERIC_PICKUP" ); pickup_trigger setcursorhint( "HINT_NOICON" );
} }
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger ); pickup_trigger.owner = player;
pickup_trigger enablelinkto(); retrievable_model.retrievabletrigger = pickup_trigger;
if ( isDefined( prey ) ) hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
{
pickup_trigger linkto( prey ); if ( isdefined( hint_string ) )
} pickup_trigger sethintstring( hint_string );
else else
{ pickup_trigger sethintstring( &"GENERIC_PICKUP" );
pickup_trigger linkto( retrievable_model );
} pickup_trigger setteamfortrigger( player.team );
if ( isDefined( level.knife_planted ) ) player clientclaimtrigger( pickup_trigger );
{ pickup_trigger enablelinkto();
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
} if ( isdefined( prey ) )
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); pickup_trigger linkto( prey );
player thread watch_shutdown( pickup_trigger, retrievable_model ); 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 ) debug_print( endpos )
{ {
/# /#
self endon( "death" ); self endon( "death" );
while ( 1 )
{ while ( true )
print3d( endpos, "pickup_trigger" ); {
wait 0,05; print3d( endpos, "pickup_trigger" );
wait 0.05;
}
#/ #/
}
} }
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
{ {
self endon( "death" ); self endon( "death" );
self endon( "delete" ); self endon( "delete" );
level endon( "game_ended" ); level endon( "game_ended" );
while ( 1 ) max_ammo = weaponmaxammo( weapon ) + 1;
{ autorecover = is_true( level.ballistic_knife_autorecover );
trigger waittill( "trigger", player );
while ( !isalive( player ) ) while ( true )
{ {
continue; trigger waittill( "trigger", player );
}
while ( !player isonground() ) if ( !isalive( player ) )
{ continue;
continue;
} if ( !player isonground() && !is_true( trigger.force_pickup ) )
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) continue;
{
continue; if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
} continue;
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{ if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue; continue;
}
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) ammo_stock = player getweaponammostock( weapon );
{ ammo_clip = player getweaponammoclip( weapon );
if ( isDefined( playersoundonuse ) ) current_weapon = player getcurrentweapon();
{ total_ammo = ammo_stock + ammo_clip;
player playlocalsound( playersoundonuse ); hasreloaded = 1;
}
if ( isDefined( npcsoundonuse ) ) if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
{ hasreloaded = 0;
player playsound( npcsoundonuse );
} if ( total_ammo >= max_ammo || !hasreloaded )
player thread [[ callback ]]( weapon, model, trigger ); continue;
return;
} if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
else {
{ if ( isdefined( playersoundonuse ) )
} player playlocalsound( playersoundonuse );
}
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
player thread [[ callback ]]( weapon, model, trigger );
break;
}
}
} }
pick_up( weapon, model, trigger ) pick_up( weapon, model, trigger )
{ {
current_weapon = self getcurrentweapon(); if ( self hasweapon( weapon ) )
if ( current_weapon != weapon ) {
{ current_weapon = self getcurrentweapon();
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo ) if ( current_weapon != weapon )
{ {
self setweaponammoclip( weapon, 1 ); clip_ammo = self getweaponammoclip( weapon );
}
else if ( !clip_ammo )
{ self setweaponammoclip( weapon, 1 );
new_ammo_stock = self getweaponammostock( weapon ) + 1; else
self setweaponammostock( weapon, new_ammo_stock ); {
} new_ammo_stock = self getweaponammostock( weapon ) + 1;
} self setweaponammostock( weapon, new_ammo_stock );
else }
{ }
new_ammo_stock = self getweaponammostock( weapon ) + 1; else
self setweaponammostock( weapon, new_ammo_stock ); {
} new_ammo_stock = self getweaponammostock( weapon ) + 1;
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); self setweaponammostock( weapon, new_ammo_stock );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); }
model destroy_ent(); }
trigger destroy_ent();
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() destroy_ent()
{ {
if ( isDefined( self ) ) if ( isdefined( self ) )
{ {
if ( isDefined( self.glowing_model ) ) if ( isdefined( self.glowing_model ) )
{ self.glowing_model delete();
self.glowing_model delete();
} self delete();
self delete(); }
}
} }
watch_shutdown( trigger, model ) watch_shutdown( trigger, model )
{ {
self waittill_any( "death", "disconnect", "zmb_lost_knife" ); self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent(); trigger destroy_ent();
model destroy_ent(); model destroy_ent();
} }
drop_knives_to_ground( player ) drop_knives_to_ground( player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
for ( ;; )
{ for (;;)
level waittill( "drop_objects_to_ground", origin, radius ); {
if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) level waittill( "drop_objects_to_ground", origin, radius );
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); if ( distancesquared( origin, self.origin ) < radius * radius )
self thread update_retrieve_trigger( player ); {
} 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 ) force_drop_knives_to_ground_on_death( player, prey )
{ {
self endon( "death" ); self endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink(); prey waittill( "death" );
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player ); self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
} }
update_retrieve_trigger( player ) update_retrieve_trigger( player )
{ {
self endon( "death" ); self endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
if ( isDefined( level.custom_update_retrieve_trigger ) )
{ if ( isdefined( level.custom_update_retrieve_trigger ) )
self [[ level.custom_update_retrieve_trigger ]]( player ); {
return; 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 ); self waittill( "stationary" );
trigger linkto( self );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );
} }

View File

@ -1,323 +1,328 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/animscripts/zm_shared; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_spawner; #include common_scripts\utility;
#include maps/mp/zombies/_zm_weapons; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_net; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_net;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_weapons;
#include common_scripts/utility; #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" ) ) if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "blundergat_zm" ) )
{ return;
return; else
} {
else precacheitem( "blundersplat_bullet_zm" );
{ precacheitem( "blundersplat_explosive_dart_zm" );
precacheitem( "blundersplat_bullet_zm" ); }
precacheitem( "blundersplat_explosive_dart_zm" );
} level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" );
level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" ); array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit );
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit ); level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
level.custom_derive_damage_refs = ::gib_on_blundergat_damage; level._effect["dart_light"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
level._effect[ "dart_light" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" ); onplayerconnect_callback( ::blundersplat_on_player_connect );
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_fired();
self thread wait_for_blundersplat_upgraded_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" ); self endon( "death" );
while ( 1 )
{ while ( true )
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); {
if ( weaponname == "blundersplat_bullet_zm" ) self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
{
if ( !isDefined( self.titus_tagged ) ) if ( weaponname == "blundersplat_bullet_zm" )
{ {
a_grenades = getentarray( "grenade", "classname" ); if ( !isdefined( self.titus_tagged ) )
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 ) {
{ a_grenades = getentarray( "grenade", "classname" );
continue;
} if ( !isdefined( a_grenades ) || a_grenades.size <= 0 )
self.titus_tagged = 1; continue;
foreach ( e_grenade in a_grenades )
{ self.titus_tagged = 1;
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{ foreach ( e_grenade in a_grenades )
if ( e_grenade islinkedto( self ) ) {
{ if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
while ( 1 ) {
{ if ( e_grenade islinkedto( self ) )
if ( !isDefined( e_grenade.fuse_time ) ) {
{ while ( true )
wait_network_frame(); {
} if ( !isdefined( e_grenade.fuse_time ) )
else wait_network_frame();
{ else
break; break;
} }
}
n_fuse_timer = e_grenade.fuse_time; n_fuse_timer = e_grenade.fuse_time;
e_grenade thread _titus_grenade_detonate_on_target_death( self ); 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 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 endon( "disconnect" );
self waittill( "spawned_player" );
for ( ;; ) self waittill( "spawned_player" );
{
self waittill( "weapon_fired", str_weapon ); for (;;)
if ( str_weapon == "blundersplat_zm" ) {
{ self waittill( "weapon_fired", str_weapon );
wait_network_frame();
_titus_locate_target( 1 ); if ( str_weapon == "blundersplat_zm" )
wait_network_frame(); {
_titus_locate_target( 1 ); wait_network_frame();
wait_network_frame(); _titus_locate_target( 1 );
_titus_locate_target( 1 ); wait_network_frame();
} _titus_locate_target( 1 );
wait 0.5; 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 endon( "disconnect" );
self waittill( "spawned_player" );
for ( ;; ) self waittill( "spawned_player" );
{
self waittill( "weapon_fired", str_weapon ); for (;;)
if ( str_weapon == "blundersplat_upgraded_zm" ) {
{ self waittill( "weapon_fired", str_weapon );
wait_network_frame();
_titus_locate_target( 0 ); if ( str_weapon == "blundersplat_upgraded_zm" )
wait_network_frame(); {
_titus_locate_target( 0 ); wait_network_frame();
wait_network_frame(); _titus_locate_target( 0 );
_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 ) ) if ( !isdefined( is_not_upgraded ) )
{ is_not_upgraded = 1;
is_not_upgraded = 1;
} fire_angles = self getplayerangles();
fire_angles = self getplayerangles(); fire_origin = self getplayercamerapos();
fire_origin = self getplayercamerapos(); a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 ); a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
if ( is_not_upgraded ) if ( is_not_upgraded )
{ n_fuse_timer = randomfloatrange( 1.0, 2.5 );
n_fuse_timer = randomfloatrange( 1, 2.5 ); else
} n_fuse_timer = randomfloatrange( 3.0, 4.0 );
else
{ foreach ( target in a_targets )
n_fuse_timer = randomfloatrange( 3, 4 ); {
} if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
foreach ( target in a_targets ) {
{ if ( isai( target ) )
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) ) {
{ if ( !isdefined( target.titusmarked ) )
if ( isai( target ) ) {
{ a_tags = [];
if ( !isDefined( target.titusmarked ) ) a_tags[0] = "j_hip_le";
{ a_tags[1] = "j_hip_ri";
a_tags = []; a_tags[2] = "j_spine4";
a_tags[ 0 ] = "j_hip_le"; a_tags[3] = "j_elbow_le";
a_tags[ 1 ] = "j_hip_ri"; a_tags[4] = "j_elbow_ri";
a_tags[ 2 ] = "j_spine4"; a_tags[5] = "j_clavicle_le";
a_tags[ 3 ] = "j_elbow_le"; a_tags[6] = "j_clavicle_ri";
a_tags[ 4 ] = "j_elbow_ri"; str_tag = a_tags[randomint( a_tags.size )];
a_tags[ 5 ] = "j_clavicle_le"; b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
a_tags[ 6 ] = "j_clavicle_ri";
str_tag = a_tags[ randomint( a_tags.size ) ]; if ( b_trace_pass )
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 );
target thread _titus_marked(); e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self ); return;
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ); }
return; }
} }
} }
} }
}
} vec = anglestoforward( fire_angles );
vec = anglesToForward( fire_angles ); trace_end = fire_origin + vec * 20000;
trace_end = fire_origin + ( vec * 20000 ); trace = bullettrace( fire_origin, trace_end, 1, self );
trace = bullettrace( fire_origin, trace_end, 1, self ); offsetpos = trace["position"] + _titus_get_spread( 80 );
offsetpos = trace[ "position" ] + _titus_get_spread( 80 ); e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self ); e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
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_x = randomintrange( n_spread * -1, n_spread );
n_y = randomintrange( n_spread * -1, n_spread ); n_y = randomintrange( n_spread * -1, n_spread );
n_z = randomintrange( n_spread * -1, n_spread ); n_z = randomintrange( n_spread * -1, n_spread );
return ( n_x, n_y, n_z ); return ( n_x, n_y, n_z );
} }
_titus_marked() //checked matches cerberus output _titus_marked()
{ {
self endon( "death" ); self endon( "death" );
self.titusmarked = 1; self.titusmarked = 1;
wait 1; wait 1;
self.titusmarked = undefined; 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( "death" );
self endon( "titus_target_timeout" ); self endon( "titus_target_timeout" );
self thread _titus_target_timeout( n_fuse_timer ); self thread _titus_target_timeout( n_fuse_timer );
self thread _titus_check_for_target_death( inflictor ); self thread _titus_check_for_target_death( inflictor );
self thread _blundersplat_target_acid_stun_anim(); self thread _blundersplat_target_acid_stun_anim();
wait n_fuse_timer; wait( n_fuse_timer );
self notify( "killed_by_a_blundersplat" ); self notify( "killed_by_a_blundersplat", inflictor );
self dodamage( self.health + 1000, self.origin ); 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( "death" );
self endon( "titus_target_timeout" ); self endon( "titus_target_timeout" );
while ( 1 )
{ while ( true )
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags ); {
if ( weaponname == "blundersplat_bullet_zm" ) self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
{
a_grenades = getentarray( "grenade", "classname" ); if ( weaponname == "blundersplat_bullet_zm" )
foreach ( e_grenade in a_grenades ) {
{ a_grenades = getentarray( "grenade", "classname" );
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{ foreach ( e_grenade in a_grenades )
if ( e_grenade islinkedto( self ) ) {
{ if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
e_grenade thread _titus_grenade_detonate_on_target_death( self ); {
} 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" ); self endon( "death" );
wait n_fuse_timer; wait( n_fuse_timer );
self notify( "titus_target_timeout" ); 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 waittill( "death" );
self notify( "killed_by_a_blundersplat", inflictor );
self notify( "titus_target_killed" ); 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" ); self endon( "death" );
target endon( "titus_target_timeout" ); target endon( "titus_target_timeout" );
target waittill( "titus_target_killed" );
self.fuse_reset = 1; target waittill( "titus_target_killed" );
self resetmissiledetonationtime( 0.05 );
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 ) ) if ( !isdefined( is_not_upgraded ) )
{ is_not_upgraded = 1;
is_not_upgraded = 1;
} if ( !isdefined( n_fuse_timer ) )
if ( !isDefined( n_fuse_timer ) ) n_fuse_timer = randomfloatrange( 1, 1.5 );
{
n_fuse_timer = randomfloatrange( 1, 1,5 ); self waittill( "death" );
}
self waittill( "death" ); a_grenades = getentarray( "grenade", "classname" );
a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades ) foreach ( e_grenade in a_grenades )
{ {
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isDefined( e_grenade.fuse_reset ) ) 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_reset = 1;
e_grenade.fuse_time = n_fuse_timer; e_grenade.fuse_time = n_fuse_timer;
e_grenade resetmissiledetonationtime( n_fuse_timer ); e_grenade resetmissiledetonationtime( n_fuse_timer );
if ( is_not_upgraded )
{ if ( is_not_upgraded )
e_grenade create_zombie_point_of_interest( 250, 5, 10000 ); e_grenade create_zombie_point_of_interest( 250, 5, 10000 );
} else
else e_grenade create_zombie_point_of_interest( 500, 10, 10000 );
{
e_grenade create_zombie_point_of_interest( 500, 10, 10000 ); return;
} }
return; }
}
}
} }
gib_on_blundergat_damage( refs, point, weaponname ) //checked changed to match cerberus output gib_on_blundergat_damage( refs, point, weaponname )
{ {
new_gib_ref = []; new_gib_ref = [];
if ( isDefined( level.no_gib_in_wolf_area ) )
{ if ( isdefined( level.no_gib_in_wolf_area ) )
if ( [[ level.no_gib_in_wolf_area ]]() ) {
{ if ( [[ level.no_gib_in_wolf_area ]]() )
return new_gib_ref; return new_gib_ref;
} }
}
if ( self.health <= 0 ) if ( self.health <= 0 )
{ return refs;
return refs; else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
} {
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;
new_gib_ref = self maps/mp/zombies/_zm_spawner::derive_damage_refs( point ); }
return new_gib_ref;
} return refs;
return refs;
} }
_blundersplat_target_acid_stun_anim() //checked matches cerberus output _blundersplat_target_acid_stun_anim()
{ {
self endon( "death" ); 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" );
}
}
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" );
}
}

View File

@ -1,492 +1,466 @@
#include maps/mp/gametypes_zm/_weaponobjects; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_stats; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_weapons; #include common_scripts\utility;
#include maps/mp/zombies/_zm_audio; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_score; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_equipment;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_score;
#include common_scripts/utility; #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() init()
{ {
if ( !isDefined( level.claymores_max_per_player ) ) if ( !isdefined( level.claymores_max_per_player ) )
{ level.claymores_max_per_player = 12;
level.claymores_max_per_player = 12;
} trigs = getentarray( "claymore_purchase", "targetname" );
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0; for ( i = 0; i < trigs.size; i++ )
while ( i < trigs.size ) {
{ model = getent( trigs[i].target, "targetname" );
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) ) if ( isdefined( model ) )
{ model hide();
model hide(); }
}
i++; array_thread( trigs, ::buy_claymores );
} level thread give_claymores_after_rounds();
array_thread( trigs, ::buy_claymores ); level.claymores_on_damage = ::satchel_damage;
level thread give_claymores_after_rounds(); level.pickup_claymores = ::pickup_claymores;
level.claymores_on_damage = ::satchel_damage; level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.pickup_claymores = ::pickup_claymores; level.claymore_detectiondot = cos( 70 );
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; level.claymore_detectionmindist = 20;
level.claymore_detectiondot = cos( 70 ); level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
} }
buy_claymores() buy_claymores()
{ {
self.zombie_cost = 1000; self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_NOICON" ); self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( !isDefined( self.stub ) )
{ if ( !isdefined( self.stub ) )
return; return;
}
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
{ self.stub.claymores_triggered = 0;
self.stub.claymores_triggered = 0;
} self.claymores_triggered = self.stub.claymores_triggered;
self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
while ( who in_revive_trigger() )
{ if ( who in_revive_trigger() )
continue; continue;
}
while ( who has_powerup_weapon() ) if ( who has_powerup_weapon() )
{ {
wait 0,1; wait 0.1;
} continue;
if ( is_player_valid( who ) ) }
{
if ( who.score >= self.zombie_cost ) if ( is_player_valid( who ) )
{ {
if ( !who is_player_placeable_mine( "claymore_zm" ) ) if ( who.score >= self.zombie_cost )
{ {
play_sound_at_pos( "purchase", self.origin ); if ( !who is_player_placeable_mine( "claymore_zm" ) )
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); {
who thread claymore_setup(); play_sound_at_pos( "purchase", self.origin );
who thread show_claymore_hint( "claymore_purchased" ); who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); who thread claymore_setup();
if ( isDefined( self.stub ) ) who thread show_claymore_hint( "claymore_purchased" );
{ who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
self.claymores_triggered = self.stub.claymores_triggered;
} if ( isdefined( self.stub ) )
if ( self.claymores_triggered == 0 ) self.claymores_triggered = self.stub.claymores_triggered;
{
model = getent( self.target, "targetname" ); if ( self.claymores_triggered == 0 )
if ( isDefined( model ) ) {
{ model = getent( self.target, "targetname" );
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
} if ( isdefined( model ) )
else model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
{ else if ( isdefined( self.clientfieldname ) )
if ( isDefined( self.clientfieldname ) ) level setclientfield( self.clientfieldname, 1 );
{
level setclientfield( self.clientfieldname, 1 ); self.claymores_triggered = 1;
}
} if ( isdefined( self.stub ) )
self.claymores_triggered = 1; self.stub.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 = getentarray( "claymore_purchase", "targetname" ); trigs[i] setinvisibletoplayer( who );
i = 0; }
while ( i < trigs.size ) else
{ who thread show_claymore_hint( "already_purchased" );
trigs[ i ] setinvisibletoplayer( who ); }
i++; else
} {
} who play_sound_on_ent( "no_purchase" );
else who thread show_claymore_hint( "already_purchased" ); who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
} }
} }
} }
} }
claymore_unitrigger_update_prompt( player ) claymore_unitrigger_update_prompt( player )
{ {
if ( player is_player_placeable_mine( "claymore_zm" ) ) if ( player is_player_placeable_mine( "claymore_zm" ) )
{ {
return 0; self sethintstring( "" );
} self setcursorhint( "HINT_NOICON" );
return 1; return false;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return true;
} }
set_claymore_visible() set_claymore_visible()
{ {
players = get_players(); players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" ); trigs = getentarray( "claymore_purchase", "targetname" );
while ( 1 )
{ while ( true )
j = 0; {
while ( j < players.size ) for ( j = 0; j < players.size; j++ )
{ {
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
{ {
i = 0; for ( i = 0; i < trigs.size; i++ )
while ( i < trigs.size ) trigs[i] setinvisibletoplayer( players[j], 0 );
{ }
trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); }
i++;
} wait 1;
} players = get_players();
j++; }
}
wait 1;
players = get_players();
}
} }
claymore_safe_to_plant() claymore_safe_to_plant()
{ {
if ( self.owner.claymores.size >= level.claymores_max_per_player ) if ( self.owner.claymores.size >= level.claymores_max_per_player )
{ return 0;
return 0;
} if ( isdefined( level.claymore_safe_to_plant ) )
if ( isDefined( level.claymore_safe_to_plant ) ) return self [[ level.claymore_safe_to_plant ]]();
{
return self [[ level.claymore_safe_to_plant ]](); return 1;
}
return 1;
} }
claymore_wait_and_detonate() claymore_wait_and_detonate()
{ {
wait 0,1; wait 0.1;
self detonate( self.owner ); self detonate( self.owner );
} }
claymore_watch() claymore_watch()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 ) self notify( "claymore_watch" );
{ self endon( "claymore_watch" );
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" ) while ( true )
{ {
claymore.owner = self; self waittill( "grenade_fire", claymore, weapname );
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" ); if ( weapname == "claymore_zm" )
if ( claymore claymore_safe_to_plant() ) {
{ claymore.owner = self;
if ( isDefined( level.claymore_planted ) ) claymore.team = self.team;
{ self notify( "zmb_enable_claymore_prompt" );
self thread [[ level.claymore_planted ]]( claymore );
} if ( claymore claymore_safe_to_plant() )
claymore thread satchel_damage(); {
claymore thread claymore_detonation(); if ( isdefined( level.claymore_planted ) )
claymore thread play_claymore_effects(); self thread [[ level.claymore_planted ]]( claymore );
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); claymore thread claymore_detonation();
break; claymore thread play_claymore_effects();
} self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
else self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
{ }
claymore thread claymore_wait_and_detonate(); else
} claymore thread claymore_wait_and_detonate();
} }
} }
} }
claymore_setup() claymore_setup()
{ {
if ( !isDefined( self.claymores ) ) if ( !isdefined( self.claymores ) )
{ self.claymores = [];
self.claymores = [];
} self thread claymore_watch();
self thread claymore_watch(); self giveweapon( "claymore_zm" );
self giveweapon( "claymore_zm" ); self set_player_placeable_mine( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" ); self setactionslot( 4, "weapon", "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" ); self setweaponammostock( "claymore_zm", 2 );
self setweaponammostock( "claymore_zm", 2 );
} }
adjust_trigger_origin( origin ) adjust_trigger_origin( origin )
{ {
origin += vectorScale( ( 0, 0, 1 ), 20 ); origin += vectorscale( ( 0, 0, 1 ), 20.0 );
return origin; return origin;
} }
on_spawn_retrieve_trigger( watcher, player ) on_spawn_retrieve_trigger( watcher, player )
{ {
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isDefined( self.pickuptrigger ) )
{ if ( isdefined( self.pickuptrigger ) )
self.pickuptrigger sethintlowpriority( 0 ); self.pickuptrigger sethintlowpriority( 0 );
}
} }
pickup_claymores() pickup_claymores()
{ {
player = self.owner; player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{ if ( !player hasweapon( "claymore_zm" ) )
player thread claymore_watch(); {
player giveweapon( "claymore_zm" ); player thread claymore_watch();
player set_player_placeable_mine( "claymore_zm" ); player giveweapon( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" ); player set_player_placeable_mine( "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 ); player setactionslot( 4, "weapon", "claymore_zm" );
player notify( "zmb_enable_claymore_prompt" ); player setweaponammoclip( "claymore_zm", 0 );
} player notify( "zmb_enable_claymore_prompt" );
else }
{ else
clip_ammo = player getweaponammoclip( self.name ); {
clip_max_ammo = weaponclipsize( self.name ); clip_ammo = player getweaponammoclip( self.name );
if ( clip_ammo >= clip_max_ammo ) clip_max_ammo = weaponclipsize( self.name );
{
self destroy_ent(); if ( clip_ammo >= clip_max_ammo )
player notify( "zmb_disable_claymore_prompt" ); {
return; 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 ) self pick_up();
{ clip_ammo = player getweaponammoclip( self.name );
player notify( "zmb_disable_claymore_prompt" ); clip_max_ammo = weaponclipsize( self.name );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); if ( clip_ammo >= clip_max_ammo )
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); 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 ) pickup_claymores_trigger_listener( trigger, player )
{ {
self thread pickup_claymores_trigger_listener_enable( 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_disable( trigger, player );
} }
pickup_claymores_trigger_listener_enable( trigger, player ) pickup_claymores_trigger_listener_enable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
while ( 1 ) self endon( "death" );
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); while ( true )
if ( !isDefined( trigger ) ) {
{ player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
return;
} if ( !isdefined( trigger ) )
trigger trigger_on(); return;
trigger linkto( self );
} trigger trigger_on();
trigger linkto( self );
}
} }
pickup_claymores_trigger_listener_disable( trigger, player ) pickup_claymores_trigger_listener_disable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
while ( 1 ) self endon( "death" );
{
player waittill( "zmb_disable_claymore_prompt" ); while ( true )
if ( !isDefined( trigger ) ) {
{ player waittill( "zmb_disable_claymore_prompt" );
return;
} if ( !isdefined( trigger ) )
trigger unlink(); return;
trigger trigger_off();
} trigger unlink();
trigger trigger_off();
}
} }
shouldaffectweaponobject( object ) shouldaffectweaponobject( object )
{ {
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
dirtopos = pos - object.origin; dirtopos = pos - object.origin;
objectforward = anglesToForward( object.angles ); objectforward = anglestoforward( object.angles );
dist = vectordot( dirtopos, objectforward ); dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
{ if ( dist < level.claymore_detectionmindist )
return 0; return 0;
}
dirtopos = vectornormalize( dirtopos ); dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward ); dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot; return dot > level.claymore_detectiondot;
} }
claymore_detonation() claymore_detonation()
{ {
self endon( "death" ); self endon( "death" );
self waittill_not_moving(); self waittill_not_moving();
detonateradius = 96; detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team ); damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto(); damagearea enablelinkto();
damagearea linkto( self ); damagearea linkto( self );
if ( is_true( self.isonbus ) )
{ if ( is_true( self.isonbus ) )
damagearea setmovingplatformenabled( 1 ); damagearea setmovingplatformenabled( 1 );
}
self.damagearea = damagearea; self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea ); self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self; self.owner.claymores[self.owner.claymores.size] = self;
while ( 1 )
{ while ( true )
damagearea waittill( "trigger", ent ); {
if ( isDefined( self.owner ) && ent == self.owner ) damagearea waittill( "trigger", ent );
{
continue; if ( isdefined( self.owner ) && ent == self.owner )
} continue;
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{ if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
continue; continue;
}
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
{ continue;
continue;
} if ( !ent shouldaffectweaponobject( self ) )
while ( !ent shouldaffectweaponobject( self ) ) continue;
{
continue; if ( ent damageconetrace( self.origin, self ) > 0 )
} {
if ( ent damageconetrace( self.origin, self ) > 0 ) self playsound( "wpn_claymore_alert" );
{ wait 0.4;
self playsound( "wpn_claymore_alert" );
wait 0,4; if ( isdefined( self.owner ) )
if ( isDefined( self.owner ) ) self detonate( self.owner );
{ else
self detonate( self.owner ); self detonate( undefined );
}
else return;
{ }
self detonate( undefined ); }
}
return;
}
}
} }
delete_claymores_on_death( player, ent ) delete_claymores_on_death( player, ent )
{ {
self waittill( "death" ); self waittill( "death" );
if ( isDefined( player ) )
{ if ( isdefined( player ) )
arrayremovevalue( player.claymores, self ); arrayremovevalue( player.claymores, self );
}
wait 0,05; wait 0.05;
if ( isDefined( ent ) )
{ if ( isdefined( ent ) )
ent delete(); ent delete();
}
} }
satchel_damage() satchel_damage()
{ {
self setcandamage( 1 ); self endon( "death" );
self.health = 100000; self setcandamage( 1 );
self.maxhealth = self.health; self.health = 100000;
attacker = undefined; self.maxhealth = self.health;
while ( 1 ) attacker = undefined;
{
self waittill( "damage", amount, attacker ); while ( true )
if ( !isDefined( self ) ) {
{ self waittill( "damage", amount, attacker );
return;
} if ( !isdefined( self ) )
self.health = self.maxhealth; return;
while ( !isplayer( attacker ) )
{ self.health = self.maxhealth;
continue;
} if ( !isplayer( attacker ) )
if ( isDefined( self.owner ) && attacker == self.owner ) continue;
{
continue; if ( isdefined( self.owner ) && attacker == self.owner )
} continue;
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
{ if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
continue; continue;
}
} break;
if ( level.satchelexplodethisframe ) }
{
wait ( 0,1 + randomfloat( 0,4 ) ); if ( level.satchelexplodethisframe )
} wait( 0.1 + randomfloat( 0.4 ) );
else wait 0,05; else
if ( !isDefined( self ) ) wait 0.05;
{
return; if ( !isdefined( self ) )
} return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame(); level.satchelexplodethisframe = 1;
self detonate( attacker ); thread reset_satchel_explode_this_frame();
self detonate( attacker );
} }
reset_satchel_explode_this_frame() reset_satchel_explode_this_frame()
{ {
wait 0,05; wait 0.05;
level.satchelexplodethisframe = 0; level.satchelexplodethisframe = 0;
} }
play_claymore_effects() play_claymore_effects()
{ {
self endon( "death" ); self endon( "death" );
self waittill_not_moving(); self waittill_not_moving();
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
} }
give_claymores_after_rounds() give_claymores_after_rounds()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "between_round_over" ); 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++;
}
}
}
}
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{ {
self.x = x; players = get_players();
self.y = y;
self.alignx = alignx;
self.aligny = aligny;
self.fontscale = fontscale;
self.alpha = alpha;
self.sort = 20;
}
setup_client_hintelem() for ( i = 0; i < players.size; i++ )
{ {
self endon( "death" ); if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
self endon( "disconnect" ); {
if ( !isDefined( self.hintelem ) ) players[i] giveweapon( "claymore_zm" );
{ players[i] set_player_placeable_mine( "claymore_zm" );
self.hintelem = newclienthudelem( self ); players[i] setactionslot( 4, "weapon", "claymore_zm" );
} players[i] setweaponammoclip( "claymore_zm", 2 );
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); }
}
}
}
} }
show_claymore_hint( string ) show_claymore_hint( string )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
if ( string == "claymore_purchased" )
{ if ( string == "claymore_purchased" )
text = &"ZOMBIE_CLAYMORE_HOWTO"; text = &"ZOMBIE_CLAYMORE_HOWTO";
} else
else text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
{
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; show_equipment_hint_text( text );
}
self setup_client_hintelem();
self.hintelem settext( text );
wait 3,5;
self.hintelem settext( "" );
} }

View File

@ -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 )
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,193 +1,198 @@
#include maps/mp/gametypes_zm/_globallogic_score; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts/utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_globallogic_score;
init() init()
{ {
level thread achievement_highrise_sidequest(); level thread achievement_highrise_sidequest();
level thread achievement_mad_without_power(); level thread achievement_mad_without_power();
level.achievement_sound_func = ::achievement_sound_func; level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect ); onplayerconnect_callback( ::onplayerconnect );
} }
achievement_sound_func( achievement_name_lower ) 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() 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_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_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_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_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_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_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_shafted", 0 );
} }
onplayerconnect() onplayerconnect()
{ {
self thread achievement_vertigoner(); self thread achievement_vertigoner();
self thread achievement_slippery_when_undead(); self thread achievement_slippery_when_undead();
self thread achievement_facing_the_dragon(); self thread achievement_facing_the_dragon();
self thread achievement_im_my_own_best_friend(); self thread achievement_im_my_own_best_friend();
self thread achievement_shafted(); self thread achievement_shafted();
} }
achievement_highrise_sidequest() achievement_highrise_sidequest()
{ {
level endon( "end_game" ); level endon( "end_game" );
level waittill( "highrise_sidequest_achieved" );
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() achievement_vertigoner()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self.num_zombies_flung = 0; self.num_zombies_flung = 0;
max_zombies_flung = 10; max_zombies_flung = 10;
while ( self.num_zombies_flung < max_zombies_flung )
{ while ( self.num_zombies_flung < max_zombies_flung )
self waittill( "zombie_flung" ); {
wait 0,1; self waittill( "zombie_flung" );
}
wait 0.1;
}
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" ); self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
} }
achievement_slippery_when_undead() achievement_slippery_when_undead()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self.num_sliquifier_kills = 0; self.num_sliquifier_kills = 0;
max_kills_with_one_shot = 5; max_kills_with_one_shot = 5;
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
{ while ( self.num_sliquifier_kills < max_kills_with_one_shot )
self waittill( "sliquifier_kill" ); {
wait 0,01; 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() achievement_facing_the_dragon()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
v_achievement_location = ( 2209, 693, 3200 ); v_achievement_location = ( 2209, 693, 3200 );
v_dragon_position = ( 971, 43, 3800 ); v_dragon_position = ( 971, 43, 3800 );
is_touching_distance = 350; is_touching_distance = 350;
round_number_max = 2; round_number_max = 2;
while ( 1 )
{ while ( true )
if ( level.round_number >= round_number_max ) {
{ if ( level.round_number >= round_number_max )
return; return;
}
dist = distance( self.origin, v_achievement_location ); dist = distance( self.origin, v_achievement_location );
if ( dist <= is_touching_distance )
{ if ( dist <= is_touching_distance )
v_dir = vectornormalize( v_dragon_position - self.origin ); {
v_forward = self getweaponforwarddir(); v_dir = vectornormalize( v_dragon_position - self.origin );
dp = vectordot( v_dir, v_forward ); v_forward = self getweaponforwarddir();
if ( dp > 0,95 ) dp = vectordot( v_dir, v_forward );
{
break; if ( dp > 0.95 )
} break;
} }
else
{ wait 0.01;
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() achievement_im_my_own_best_friend()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "whos_who_self_revive" );
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() achievement_mad_without_power()
{ {
level endon( "end_game" ); level endon( "end_game" );
round_number_max = 10; round_number_max = 10;
while ( level.round_number < round_number_max )
{ while ( level.round_number < round_number_max )
level waittill( "start_of_round" ); {
if ( flag( "power_on" ) ) level waittill( "start_of_round" );
{
return; 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() achievement_shafted()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
level.perk_bought_func = ::player_buys_perk_machine; level.perk_bought_func = ::player_buys_perk_machine;
max_unique_perk_machines = 6; max_unique_perk_machines = 6;
while ( 1 )
{ while ( true )
self waittill_any( "player_buys_perk", "pap_used" ); {
if ( isDefined( self.pap_used ) && self.pap_used == 1 ) self waittill_any( "player_buys_perk", "pap_used" );
{
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines ) if ( isdefined( self.pap_used ) && self.pap_used == 1 )
{ {
break; if ( isdefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
} break;
} }
else }
{
}
}
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" ); self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
} }
player_buys_perk_machine( perk ) player_buys_perk_machine( perk )
{ {
if ( !isDefined( self.perk_machines_bought ) ) if ( !isdefined( self.perk_machines_bought ) )
{ self.perk_machines_bought = [];
self.perk_machines_bought = [];
} found = 0;
found = 0;
i = 0; for ( i = 0; i < self.perk_machines_bought.size; i++ )
while ( i < self.perk_machines_bought.size ) {
{ if ( perk == self.perk_machines_bought[i] )
if ( perk == self.perk_machines_bought[ i ] ) {
{ found = 1;
found = 1; break;
break; }
} }
else
{ if ( !found )
i++; {
} self.perk_machines_bought[self.perk_machines_bought.size] = perk;
} self notify( "player_buys_perk" );
if ( !found ) }
{
self.perk_machines_bought[ self.perk_machines_bought.size ] = perk;
self notify( "player_buys_perk" );
}
} }

View File

@ -1,75 +1,74 @@
#include maps/mp/zombies/_zm_sidequests; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/_utility; #include maps\mp\_ambientpackage;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/_ambientpackage; #include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
main() main()
{ {
level thread sndmusicegg(); level thread sndmusicegg();
} }
sndmusicegg() sndmusicegg()
{ {
origins = []; origins = [];
origins[ 0 ] = ( 2724, 300, 1347 ); origins[0] = ( 2724, 300, 1347 );
origins[ 1 ] = ( 2639, 1831, 1359 ); origins[1] = ( 2639, 1831, 1359 );
origins[ 2 ] = ( 1230, 1846, 3249 ); origins[2] = ( 1230, 1846, 3249 );
level.meteor_counter = 0; level.meteor_counter = 0;
level.music_override = 0; level.music_override = 0;
i = 0;
while ( i < origins.size ) for ( i = 0; i < origins.size; i++ )
{ level thread sndmusicegg_wait( origins[i] );
level thread sndmusicegg_wait( origins[ i ] );
i++;
}
} }
sndmusicegg_wait( bear_origin ) sndmusicegg_wait( bear_origin )
{ {
temp_ent = spawn( "script_origin", bear_origin ); temp_ent = spawn( "script_origin", bear_origin );
temp_ent playloopsound( "zmb_meteor_loop" ); temp_ent playloopsound( "zmb_meteor_loop" );
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override ); 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 ); temp_ent waittill( "main_music_egg_hit", player );
player playsound( "zmb_meteor_activate" );
level.meteor_counter += 1; temp_ent stoploopsound( 1 );
if ( level.meteor_counter == 3 ) player playsound( "zmb_meteor_activate" );
{ level.meteor_counter += 1;
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
} if ( level.meteor_counter == 3 )
else level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
{ else
wait 1,5; {
temp_ent delete(); wait 1.5;
} temp_ent delete();
}
} }
sndmusicegg_override() sndmusicegg_override()
{ {
if ( is_true( level.music_override ) ) if ( is_true( level.music_override ) )
{ return false;
return 0;
} return true;
return 1;
} }
sndmuseggplay( ent, alias, time ) sndmuseggplay( ent, alias, time )
{ {
level.music_override = 1; level.music_override = 1;
wait 1; wait 1;
ent playsound( alias ); ent playsound( alias );
level thread sndeggmusicwait( time ); level thread sndeggmusicwait( time );
level waittill_either( "end_game", "sndSongDone" ); level waittill_either( "end_game", "sndSongDone" );
ent stopsounds(); ent stopsounds();
wait 0,05; wait 0.05;
ent delete(); ent delete();
level.music_override = 0; level.music_override = 0;
} }
sndeggmusicwait( time ) sndeggmusicwait( time )
{ {
level endon( "end_game" ); level endon( "end_game" );
wait time; wait( time );
level notify( "sndSongDone" ); level notify( "sndSongDone" );
} }

View File

@ -1,353 +1,347 @@
#include maps/mp/zombies/_zm_unitrigger; // T6 GSC SOURCE
#include maps/mp/zm_highrise_elevators; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_buildables; #include common_scripts\utility;
#include maps/mp/zm_transit_utility; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_weapons; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_weapons;
#include maps/mp/_utility; #include maps\mp\zm_transit_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_buildables;
#include maps\mp\zm_highrise_elevators;
#include maps\mp\zombies\_zm_unitrigger;
init_buildables() init_buildables()
{ {
level.buildable_piece_count = 13; 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( "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( "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( "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( "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" ); add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
} }
include_buildables() 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_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_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_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_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 = spawnstruct();
springpad.name = "springpad_zm"; springpad.name = "springpad_zm";
springpad add_buildable_piece( springpad_door ); springpad add_buildable_piece( springpad_door );
springpad add_buildable_piece( springpad_flag ); springpad add_buildable_piece( springpad_flag );
springpad add_buildable_piece( springpad_motor ); springpad add_buildable_piece( springpad_motor );
springpad add_buildable_piece( springpad_whistle ); springpad add_buildable_piece( springpad_whistle );
springpad.triggerthink = ::springpadbuildable; springpad.triggerthink = ::springpadbuildable;
include_buildable( springpad ); 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_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_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_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_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 = spawnstruct();
slipgun.name = "slipgun_zm"; slipgun.name = "slipgun_zm";
slipgun add_buildable_piece( slipgun_canister ); slipgun add_buildable_piece( slipgun_canister );
slipgun add_buildable_piece( slipgun_cooker ); slipgun add_buildable_piece( slipgun_cooker );
slipgun add_buildable_piece( slipgun_foot ); slipgun add_buildable_piece( slipgun_foot );
slipgun add_buildable_piece( slipgun_throttle ); slipgun add_buildable_piece( slipgun_throttle );
slipgun.onbuyweapon = ::onbuyweapon_slipgun; slipgun.onbuyweapon = ::onbuyweapon_slipgun;
slipgun.triggerthink = ::slipgunbuildable; slipgun.triggerthink = ::slipgunbuildable;
slipgun.onuseplantobject = ::onuseplantobject_slipgun; slipgun.onuseplantobject = ::onuseplantobject_slipgun;
include_buildable( 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 = 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.onspawn = ::onspawn_keys;
key_chain manage_multiple_pieces( 4 ); key_chain manage_multiple_pieces( 4 );
key = spawnstruct(); key = spawnstruct();
key.name = "keys_zm"; key.name = "keys_zm";
key add_buildable_piece( key_chain ); key add_buildable_piece( key_chain );
key.triggerthink = ::keysbuildable; key.triggerthink = ::keysbuildable;
key.onuseplantobject = ::onuseplantobject_escapepodkey; key.onuseplantobject = ::onuseplantobject_escapepodkey;
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys; key.buildablepieces[0].onspawn = ::onspawn_keys;
include_buildable( key ); include_buildable( key );
ekey = spawnstruct(); ekey = spawnstruct();
ekey.name = "ekeys_zm"; ekey.name = "ekeys_zm";
ekey add_buildable_piece( key_chain ); ekey add_buildable_piece( key_chain );
ekey.triggerthink = ::ekeysbuildable; ekey.triggerthink = ::ekeysbuildable;
ekey.onuseplantobject = ::onuseplantobject_elevatorkey; ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys; ekey.buildablepieces[0].onspawn = ::onspawn_keys;
include_buildable( ekey ); include_buildable( ekey );
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
{ 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_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_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_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_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 ); 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 );
sqcommon = spawnstruct(); 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.name = "sq_common"; sqcommon = spawnstruct();
sqcommon add_buildable_piece( sq_common_electricbox ); sqcommon.name = "sq_common";
sqcommon add_buildable_piece( sq_common_meteor ); sqcommon add_buildable_piece( sq_common_electricbox );
sqcommon add_buildable_piece( sq_common_scaffolding ); sqcommon add_buildable_piece( sq_common_meteor );
sqcommon add_buildable_piece( sq_common_transceiver ); sqcommon add_buildable_piece( sq_common_scaffolding );
sqcommon.triggerthink = ::sqcommonbuildable; sqcommon add_buildable_piece( sq_common_transceiver );
include_buildable( sqcommon ); sqcommon.triggerthink = ::sqcommonbuildable;
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" ); include_buildable( sqcommon );
} maps\mp\zombies\_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
}
} }
springpadbuildable() 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() slipgunbuildable()
{ {
level thread wait_for_slipgun(); level thread wait_for_slipgun();
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{ if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
persist = 2; persist = 2;
} else
else persist = 1;
{
persist = 1; maps\mp\zombies\_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
}
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
} }
keysbuildable() keysbuildable()
{ {
pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 ); 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.prompt_and_visibility_func = ::escape_pod_key_prompt;
} }
ekeysbuildable() ekeysbuildable()
{ {
elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 ); 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 ); foreach ( stub in elevator_keys )
while ( isDefined( _k143 ) ) {
{ stub.prompt_and_visibility_func = ::elevator_key_prompt;
stub = _a143[ _k143 ]; stub.buildablezone.stat_name = "keys_zm";
stub.prompt_and_visibility_func = ::elevator_key_prompt; }
stub.buildablezone.stat_name = "keys_zm";
_k143 = getNextArrayKey( _a143, _k143 );
}
} }
ondrop_common( player ) ondrop_common( player )
{ {
/# /#
println( "ZM >> Common part callback onDrop()" ); println( "ZM >> Common part callback onDrop()" );
#/ #/
self droponelevator( player ); self droponelevator( player );
self.piece_owner = undefined; self.piece_owner = undefined;
} }
onpickup_common( player ) onpickup_common( player )
{ {
/# /#
println( "ZM >> Common part callback onPickup()" ); println( "ZM >> Common part callback onPickup()" );
#/ #/
player playsound( "zmb_buildable_pickup" ); player playsound( "zmb_buildable_pickup" );
self pickupfromelevator(); self pickupfromelevator();
self.piece_owner = player; self.piece_owner = player;
} }
sqcommonbuildable() 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 ) onbuyweapon_slipgun( player )
{ {
player givestartammo( self.stub.weaponname ); player givestartammo( self.stub.weaponname );
player switchtoweapon( self.stub.weaponname ); player switchtoweapon( self.stub.weaponname );
level notify( "slipgun_bought" ); level notify( "slipgun_bought", player );
} }
wait_for_slipgun() wait_for_slipgun()
{ {
level.zombie_include_weapons[ "slipgun_zm" ] = 0; level.zombie_include_weapons["slipgun_zm"] = 0;
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{ if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
level waittill( "slipgun_bought", player ); {
level.zombie_include_weapons[ "slipgun_zm" ] = 1; level waittill( "slipgun_bought", player );
level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1;
} level.zombie_include_weapons["slipgun_zm"] = 1;
level.zombie_weapons["slipgun_zm"].is_in_box = 1;
}
} }
keyscreateglint() keyscreateglint()
{ {
if ( !isDefined( self.model.glint_fx ) ) if ( !isdefined( self.model.glint_fx ) )
{ playfxontag( level._effect["elevator_glint"], self.model, "tag_origin" );
playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" );
}
} }
onspawn_keys() onspawn_keys()
{ {
self keyscreateglint(); self keyscreateglint();
} }
ondrop_keys( player ) ondrop_keys( player )
{ {
self keyscreateglint(); self keyscreateglint();
} }
onpickup_keys( player ) onpickup_keys( player )
{ {
} }
escape_pod_key_prompt( player ) escape_pod_key_prompt( player )
{ {
if ( !flag( "escape_pod_needs_reset" ) ) if ( !flag( "escape_pod_needs_reset" ) )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
return 0; return 0;
} }
return self buildabletrigger_update_prompt( player );
return self buildabletrigger_update_prompt( player );
} }
onuseplantobject_escapepodkey( player ) onuseplantobject_escapepodkey( player )
{ {
level notify( "reset_escape_pod" ); level notify( "reset_escape_pod" );
} }
watch_elevator_prompt( player, trig ) watch_elevator_prompt( player, trig )
{ {
player notify( "watch_elevator_prompt" ); player notify( "watch_elevator_prompt" );
player endon( "watch_elevator_prompt" ); player endon( "watch_elevator_prompt" );
trig endon( "kill_trigger" ); trig endon( "kill_trigger" );
while ( 1 )
{ while ( true )
trig.stub.elevator waittill( "floor_changed" ); {
if ( isDefined( self.stub.elevator ) ) trig.stub.elevator waittill( "floor_changed" );
{
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) ) if ( isdefined( self.stub.elevator ) )
{ {
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player ); if ( trig.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
return; {
} thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player );
} return;
} }
}
}
} }
elevator_key_prompt( player ) elevator_key_prompt( player )
{ {
if ( !isDefined( self.stub.elevator ) ) if ( !isdefined( self.stub.elevator ) )
{ {
elevatorname = self.stub.script_noteworthy; elevatorname = self.stub.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
{ if ( isdefined( elevatorname ) && isdefined( self.stub.script_parameters ) )
elevator = level.elevators[ elevatorname ]; {
floor = int( self.stub.script_parameters ); elevator = level.elevators[elevatorname];
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor ); floor = int( self.stub.script_parameters );
self.stub.elevator = elevator; flevel = elevator maps\mp\zm_highrise_elevators::elevator_level_for_floor( floor );
self.stub.floor = flevel; self.stub.elevator = elevator;
} self.stub.floor = flevel;
} }
}
/# /#
if ( !isDefined( self.stub.elevator ) ) if ( !isdefined( self.stub.elevator ) )
{ {
if ( isDefined( self.stub.script_noteworthy ) ) if ( isdefined( self.stub.script_noteworthy ) )
{ error( "Cannot locate elevator " + self.stub.script_noteworthy );
error( "Cannot locate elevator " + self.stub.script_noteworthy ); else
} error( "Cannot locate elevator " );
else }
{ else
error( "Cannot locate elevator " ); {
} color = vectorscale( ( 0, 0, 1 ), 0.7 );
} stop = self.stub.floor;
else floor = self.stub.elevator.floors["" + stop].script_location;
{ text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
color = vectorScale( ( 0, 0, 1 ), 0,7 );
stop = self.stub.floor; if ( getdvarint( _hash_B67910B4 ) )
floor = self.stub.elevator.floors[ "" + stop ].script_location; print3d( self.stub.origin, text, color, 1, 0.5, 300 );
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.elevator ) ) if ( self.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
{ {
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 );
self.stub.hint_string = ""; return 0;
self sethintstring( self.stub.hint_string ); }
return 0; }
}
} if ( !flag( "power_on" ) )
if ( !flag( "power_on" ) ) {
{ self.stub.hint_string = "";
self.stub.hint_string = ""; self sethintstring( self.stub.hint_string );
self sethintstring( self.stub.hint_string ); return 0;
return 0; }
}
can_use = self buildabletrigger_update_prompt( player ); can_use = self buildabletrigger_update_prompt( player );
if ( can_use )
{ if ( can_use )
thread watch_elevator_prompt( player, self ); thread watch_elevator_prompt( player, self );
}
return can_use; return can_use;
} }
onuseplantobject_elevatorkey( player ) onuseplantobject_elevatorkey( player )
{ {
elevatorname = self.script_noteworthy; elevatorname = self.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) )
{ if ( isdefined( elevatorname ) && isdefined( self.script_parameters ) )
floor = int( self.script_parameters ); {
elevator = level.elevators[ elevatorname ]; floor = int( self.script_parameters );
if ( isDefined( elevator ) ) elevator = level.elevators[elevatorname];
{
elevator.body.force_starting_floor = floor; if ( isdefined( elevator ) )
elevator.body notify( "forcego" ); {
} elevator.body.force_starting_floor = floor;
} elevator.body notify( "forcego" );
}
}
} }
droponelevator( player ) 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() ) 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.model linkto( player.elevator_parent );
self.linked_to_elevator = 1; self.linked_to_elevator = 1;
self.unitrigger.link_parent = player.elevator_parent; self.unitrigger.link_parent = player.elevator_parent;
} }
else else
{ self.unitrigger.link_parent = undefined;
self.unitrigger.link_parent = undefined;
}
} }
pickupfromelevator() pickupfromelevator()
{ {
if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator ) if ( isdefined( self.linked_to_elevator ) && self.linked_to_elevator )
{ {
if ( isDefined( self.model ) ) if ( isdefined( self.model ) )
{ self.model unlink();
self.model unlink();
} self.linked_to_elevator = undefined;
self.linked_to_elevator = undefined; }
}
if ( isDefined( self.unitrigger ) ) if ( isdefined( self.unitrigger ) )
{ self.unitrigger.link_parent = undefined;
self.unitrigger.link_parent = undefined;
}
} }
onuseplantobject_slipgun( player ) onuseplantobject_slipgun( player )
{ {
/# /#
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" ); println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
#/ #/
buildable = self.buildablezone; buildable = self.buildablezone;
first_part = "TAG_COOKER"; first_part = "TAG_COOKER";
second_part = "TAG_BASE"; second_part = "TAG_BASE";
i = 0;
while ( i < buildable.pieces.size ) for ( i = 0; i < buildable.pieces.size; i++ )
{ {
if ( buildable.pieces[ i ].part_name == first_part ) 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 ) 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 ); buildable.stub.model showpart( second_part );
i++; continue;
continue; }
}
else buildable.stub.model hidepart( second_part );
{ }
buildable.stub.model hidepart( second_part ); }
}
}
i++;
}
} }

View File

@ -1,415 +1,390 @@
#include maps/mp/zombies/_zm_ai_basic; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_spawner; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_ai_basic;
zombie_tracking_init() zombie_tracking_init()
{ {
level.zombie_respawned_health = []; level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{ if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1000; level.zombie_tracking_dist = 1000;
}
if ( !isDefined( level.zombie_tracking_high ) ) if ( !isdefined( level.zombie_tracking_high ) )
{ level.zombie_tracking_high = 500;
level.zombie_tracking_high = 500;
} if ( !isdefined( level.zombie_tracking_wait ) )
if ( !isDefined( level.zombie_tracking_wait ) ) level.zombie_tracking_wait = 10;
{
level.zombie_tracking_wait = 10; building_trigs = getentarray( "zombie_fell_off", "targetname" );
}
building_trigs = getentarray( "zombie_fell_off", "targetname" ); if ( isdefined( building_trigs ) )
if ( isDefined( building_trigs ) ) array_thread( building_trigs, ::zombies_off_building );
{
array_thread( building_trigs, ::zombies_off_building ); level.distance_tracker_aggressive_distance = 500;
} level.distance_tracker_aggressive_height = 200;
level.distance_tracker_aggressive_distance = 500;
level.distance_tracker_aggressive_height = 200; while ( true )
for ( ;; ) {
{ zombies = get_round_enemy_array();
while ( 1 )
{ if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
zombies = get_round_enemy_array(); {
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking ) wait( level.zombie_tracking_wait );
{ continue;
wait level.zombie_tracking_wait; }
} else
} {
else i = 0; for ( i = 0; i < zombies.size; i++ )
while ( i < zombies.size ) {
{ if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
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 );
{ }
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high ); }
}
i++; wait( level.zombie_tracking_wait );
} }
wait level.zombie_tracking_wait;
}
} }
delete_zombie_noone_looking( how_close, how_high ) delete_zombie_noone_looking( how_close, how_high )
{ {
self endon( "death" ); self endon( "death" );
if ( !isDefined( how_close ) )
{ if ( !isdefined( how_close ) )
how_close = 1000; how_close = 1000;
}
if ( !isDefined( how_high ) ) if ( !isdefined( how_high ) )
{ how_high = 500;
how_high = 500;
} distance_squared_check = how_close * how_close;
distance_squared_check = how_close * how_close; height_squared_check = how_high * how_high;
height_squared_check = how_high * how_high; too_far_dist = distance_squared_check * 3;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) ) if ( isdefined( level.zombie_tracking_too_far_dist ) )
{ too_far_dist = level.zombie_tracking_too_far_dist * 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.inview = 0; self.player_close = 0;
self.player_close = 0; players = get_players();
players = get_players();
i = 0; for ( i = 0; i < players.size; i++ )
while ( i < players.size ) {
{ if ( players[i].sessionstate == "spectator" )
if ( players[ i ].sessionstate == "spectator" ) continue;
{
i++; if ( isdefined( level.only_track_targeted_players ) )
continue; {
} if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
else if ( isDefined( level.only_track_targeted_players ) ) continue;
{ }
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
{ can_be_seen = self player_can_see_me( players[i] );
i++;
continue; if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
} self.inview++;
}
else if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
{ self.player_close++;
can_be_seen = self player_can_see_me( players[ i ] ); }
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
{ wait 0.1;
self.inview++;
} if ( self.inview == 0 && self.player_close == 0 )
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high ) {
{ if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
self.player_close++; return;
}
} if ( isdefined( self.electrified ) && self.electrified == 1 )
i++; return;
}
wait 0,1; zombies = getaiarray( "axis" );
if ( self.inview == 0 && self.player_close == 0 )
{ if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) {
{ if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
return; {
} level.zombie_total++;
if ( isDefined( self.electrified ) && self.electrified == 1 )
{ if ( self.health < level.zombie_health )
return; level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
} }
zombies = getaiarray( "axis" ); }
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
{ self maps\mp\zombies\_zm_spawner::reset_attack_spot();
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) self notify( "zombie_delete" );
{ self delete();
level.zombie_total++; recalc_zombie_array();
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 ) player_can_see_me( player )
{ {
playerangles = player getplayerangles(); playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles ); playerforwardvec = anglestoforward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec ); playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin; banzaipos = self.origin;
playerpos = player getorigin(); playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos; playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec ); playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec ); forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{ if ( forwarddotbanzai >= 1 )
anglefromcenter = 0; anglefromcenter = 0;
} else if ( forwarddotbanzai <= -1 )
else if ( forwarddotbanzai <= -1 ) anglefromcenter = 180;
{ else
anglefromcenter = 180; anglefromcenter = acos( forwarddotbanzai );
}
else playerfov = getdvarfloat( "cg_fov" );
{ banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
anglefromcenter = acos( forwarddotbanzai );
} if ( banzaivsplayerfovbuffer <= 0 )
playerfov = getDvarFloat( "cg_fov" ); banzaivsplayerfovbuffer = 0.2;
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 ) playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
{ return playercanseeme;
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
} }
escaped_zombies_cleanup_init() escaped_zombies_cleanup_init()
{ {
self endon( "death" ); self endon( "death" );
self.zombie_path_bad = 0; self.zombie_path_bad = 0;
while ( 1 )
{ while ( true )
if ( !self.zombie_path_bad ) {
{ if ( !self.zombie_path_bad )
self waittill( "bad_path" ); self waittill( "bad_path" );
}
found_player = undefined; found_player = undefined;
players = get_players(); players = get_players();
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
if ( self maymovetopoint( players[ i ].origin, 1 ) ) if ( self maymovetopoint( players[i].origin, 1 ) )
{ {
self.favoriteenemy = players[ i ]; self.favoriteenemy = players[i];
found_player = 1; found_player = 1;
i++; continue;
continue; }
} }
i++;
} n_delete_distance = 800;
n_delete_distance = 800; n_delete_height = 300;
n_delete_height = 300;
if ( is_player_in_inverted_elevator_shaft() ) if ( is_player_in_inverted_elevator_shaft() )
{ {
n_delete_distance = level.distance_tracker_aggressive_distance; n_delete_distance = level.distance_tracker_aggressive_distance;
n_delete_height = level.distance_tracker_aggressive_height; 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 )
{ 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 thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self escaped_zombies_cleanup(); self.zombie_path_bad = 1;
} self escaped_zombies_cleanup();
wait 0,1; }
}
wait 0.1;
}
} }
is_player_in_inverted_elevator_shaft() is_player_in_inverted_elevator_shaft()
{ {
b_player_is_in_elevator_shaft = 0; b_player_is_in_elevator_shaft = 0;
a_occupied_zones = get_occupied_zones(); a_occupied_zones = get_occupied_zones();
i = 0;
while ( i < a_occupied_zones.size ) for ( i = 0; i < a_occupied_zones.size; i++ )
{ {
if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) ) if ( issubstr( a_occupied_zones[i], "orange_elevator_shaft" ) )
{ b_player_is_in_elevator_shaft = 1;
b_player_is_in_elevator_shaft = 1; }
}
i++; return b_player_is_in_elevator_shaft;
}
return b_player_is_in_elevator_shaft;
} }
get_occupied_zones() get_occupied_zones()
{ {
a_occupied_zones = []; a_occupied_zones = [];
i = 0;
while ( i < level.active_zone_names.size ) for ( i = 0; i < level.active_zone_names.size; i++ )
{ {
if ( level.zones[ level.active_zone_names[ i ] ].is_occupied ) if ( level.zones[level.active_zone_names[i]].is_occupied )
{ a_occupied_zones[a_occupied_zones.size] = level.active_zone_names[i];
a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ]; }
}
i++; return a_occupied_zones;
}
return a_occupied_zones;
} }
get_escape_position() get_escape_position()
{ {
self endon( "death" ); self endon( "death" );
str_zone = get_current_zone(); str_zone = get_current_zone();
if ( isDefined( str_zone ) )
{ if ( isdefined( str_zone ) )
a_zones = get_adjacencies_to_zone( str_zone ); {
a_dog_locations = get_dog_locations_in_zones( a_zones ); a_zones = get_adjacencies_to_zone( str_zone );
s_farthest = self get_farthest_dog_location( a_dog_locations ); a_dog_locations = get_dog_locations_in_zones( a_zones );
} s_farthest = self get_farthest_dog_location( a_dog_locations );
return s_farthest; }
return s_farthest;
} }
get_current_zone() get_current_zone()
{ {
str_zone = undefined; str_zone = undefined;
a_zones = getarraykeys( level.zones ); a_zones = getarraykeys( level.zones );
_a310 = a_zones;
_k310 = getFirstArrayKey( _a310 ); foreach ( zone in a_zones )
while ( isDefined( _k310 ) ) {
{ for ( i = 0; i < level.zones[zone].volumes.size; i++ )
zone = _a310[ _k310 ]; {
i = 0; if ( self istouching( level.zones[zone].volumes[i] ) )
while ( i < level.zones[ zone ].volumes.size ) str_zone = zone;
{ }
if ( self istouching( level.zones[ zone ].volumes[ i ] ) ) }
{
str_zone = zone; return str_zone;
}
i++;
}
_k310 = getNextArrayKey( _a310, _k310 );
}
return str_zone;
} }
get_adjacencies_to_zone( str_zone ) get_adjacencies_to_zone( str_zone )
{ {
a_adjacencies = []; a_adjacencies = [];
a_adjacencies[ 0 ] = str_zone; a_adjacencies[0] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones ); a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
i = 0;
while ( i < a_adjacent_zones.size ) for ( i = 0; i < a_adjacent_zones.size; i++ )
{ {
if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected ) if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
{ a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ]; }
}
i++; return a_adjacencies;
}
return a_adjacencies;
} }
get_dog_locations_in_zones( a_zones ) get_dog_locations_in_zones( a_zones )
{ {
a_dog_locations = []; a_dog_locations = [];
_a345 = a_zones;
_k345 = getFirstArrayKey( _a345 ); foreach ( zone in a_zones )
while ( isDefined( _k345 ) ) a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
{
zone = _a345[ _k345 ]; return a_dog_locations;
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
_k345 = getNextArrayKey( _a345, _k345 );
}
return a_dog_locations;
} }
get_farthest_dog_location( a_dog_locations ) get_farthest_dog_location( a_dog_locations )
{ {
n_farthest_index = 0; n_farthest_index = 0;
n_distance_farthest = 0; n_distance_farthest = 0;
i = 0;
while ( i < a_dog_locations.size ) for ( i = 0; i < a_dog_locations.size; i++ )
{ {
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin ); n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
if ( n_distance_sq > n_distance_farthest )
{ if ( n_distance_sq > n_distance_farthest )
n_distance_farthest = n_distance_sq; {
n_farthest_index = i; n_distance_farthest = n_distance_sq;
} n_farthest_index = i;
i++; }
} }
return a_dog_locations[ n_farthest_index ];
return a_dog_locations[n_farthest_index];
} }
escaped_zombies_cleanup() escaped_zombies_cleanup()
{ {
self endon( "death" ); self endon( "death" );
s_escape = self get_escape_position(); s_escape = self get_escape_position();
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
if ( isDefined( s_escape ) )
{ if ( isdefined( s_escape ) )
self setgoalpos( s_escape.origin ); {
self thread check_player_available(); self setgoalpos( s_escape.origin );
self waittill_any( "goal", "reaquire_player" ); 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.zombie_path_bad = !can_zombie_path_to_any_player();
{ wait 0.1;
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
} if ( !self.zombie_path_bad )
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
} }
check_player_available() check_player_available()
{ {
self notify( "_check_player_available" ); self notify( "_check_player_available" );
self endon( "_check_player_available" ); self endon( "_check_player_available" );
self endon( "death" ); self endon( "death" );
self endon( "goal" ); self endon( "goal" );
self endon( "reaquire_player" ); self endon( "reaquire_player" );
while ( self.zombie_path_bad )
{ while ( self.zombie_path_bad )
if ( self can_zombie_see_any_player() ) {
{ if ( self can_zombie_see_any_player() )
self notify( "reaquire_player" ); self notify( "reaquire_player" );
}
wait randomfloatrange( 0,2, 0,5 ); wait( randomfloatrange( 0.2, 0.5 ) );
} }
} }
can_zombie_path_to_any_player() can_zombie_path_to_any_player()
{ {
a_players = get_players(); a_players = get_players();
i = 0;
while ( i < a_players.size ) for ( i = 0; i < a_players.size; i++ )
{ {
if ( findpath( self.origin, a_players[ i ].origin ) ) if ( findpath( self.origin, a_players[i].origin ) )
{ return true;
return 1; }
}
i++; return false;
}
return 0;
} }
can_zombie_see_any_player() can_zombie_see_any_player()
{ {
a_players = get_players(); a_players = get_players();
i = 0;
while ( i < a_players.size ) for ( i = 0; i < a_players.size; i++ )
{ {
if ( self maymovetopoint( a_players[ i ].origin, 1 ) ) if ( self maymovetopoint( a_players[i].origin, 1 ) )
{ return true;
return 1; }
}
i++; return false;
}
return 0;
} }
zombies_off_building() zombies_off_building()
{ {
while ( 1 ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
{ 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 ) zombies = getaiarray( "axis" );
{
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper ) if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && who.health >= who.maxhealth )
{ {
level.zombie_total++; if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
if ( who.health < level.zombie_health ) {
{ level.zombie_total++;
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health;
} 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 ); who maps\mp\zombies\_zm_spawner::reset_attack_spot();
recalc_zombie_array(); who notify( "zombie_delete" );
} who dodamage( who.health + 666, who.origin, who );
wait 0,1; recalc_zombie_array();
} }
wait 0.1;
}
} }

View File

@ -1,189 +1,204 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zombies/_zm_weapons; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_zonemgr; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include common_scripts\utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_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 spawned_collision_ffotd();
level thread eject_player_trigger_init(); level thread eject_player_trigger_init();
level thread change_bad_spawner(); 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" ); precachemodel( "collision_wall_32x32x10_standard" );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{ if ( !is_true( level.optimise_for_splitscreen ) )
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) ); {
collision1 setmodel( "collision_wall_32x32x10_standard" ); collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
collision1.angles = vectorScale( ( 0, 1, 0 ), 330 ); collision1 setmodel( "collision_wall_32x32x10_standard" );
collision1 ghost(); collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) ); collision1 ghost();
collision2 setmodel( "collision_wall_32x32x10_standard" ); collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
collision2.angles = vectorScale( ( 0, 1, 0 ), 330 ); collision2 setmodel( "collision_wall_32x32x10_standard" );
collision2 ghost(); collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) ); collision2 ghost();
collision3 setmodel( "collision_wall_256x256x10_standard" ); collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
collision3.angles = ( 0, 0, 0 ); collision3 setmodel( "collision_wall_256x256x10_standard" );
collision3 ghost(); collision3.angles = ( 0, 0, 0 );
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) ); collision3 ghost();
collision3b setmodel( "collision_wall_256x256x10_standard" ); collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
collision3b.angles = ( 0, 0, 0 ); collision3b setmodel( "collision_wall_256x256x10_standard" );
collision3b ghost(); collision3b.angles = ( 0, 0, 0 );
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) ); collision3b ghost();
collision3 setmodel( "collision_wall_128x128x10_standard" ); collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
collision3.angles = ( 0, 0, 0 ); collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3 ghost(); collision3.angles = ( 0, 0, 0 );
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) ); collision3 ghost();
collision4 setmodel( "collision_wall_256x256x10_standard" ); collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
collision4.angles = vectorScale( ( 0, 1, 0 ), 270 ); collision4 setmodel( "collision_wall_256x256x10_standard" );
collision4 ghost(); collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) ); collision4 ghost();
collision5 setmodel( "collision_wall_256x256x10_standard" ); collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
collision5.angles = vectorScale( ( 1, 0, 0 ), 347.6 ); collision5 setmodel( "collision_wall_256x256x10_standard" );
collision5 ghost(); collision5.angles = vectorscale( ( 1, 0, 0 ), 347.6 );
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) ); collision5 ghost();
collision6b setmodel( "collision_wall_256x256x10_standard" ); collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
collision6b.angles = ( 0, 270, 12 ); collision6b setmodel( "collision_wall_256x256x10_standard" );
collision6b ghost(); collision6b.angles = ( 0, 270, 12 );
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) ); collision6b ghost();
collision6c setmodel( "collision_wall_256x256x10_standard" ); collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
collision6c.angles = ( 0, 270, 12 ); collision6c setmodel( "collision_wall_256x256x10_standard" );
collision6c ghost(); collision6c.angles = ( 0, 270, 12 );
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) ); collision6c ghost();
collision7 setmodel( "collision_wall_128x128x10_standard" ); collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
collision7.angles = ( 0, 9.79996, -90 ); collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7 ghost(); collision7.angles = ( 0, 9.79996, -90 );
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) ); collision7 ghost();
collision7 setmodel( "collision_wall_128x128x10_standard" ); collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
collision7.angles = ( 0, 270, 12 ); collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7 ghost(); 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 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 );
trig1.angles = ( 0, 0, 0 ); trig1.angles = ( 0, 0, 0 );
trig1.targetname = "eject_player_pos"; trig1.targetname = "eject_player_pos";
trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) ); trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) );
trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 ); trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 );
trig2.angles = ( 0, 0, 0 ); trig2.angles = ( 0, 0, 0 );
trig2.targetname = "eject_player_pos"; trig2.targetname = "eject_player_pos";
trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) ); trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) );
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 ); trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 );
trig3.angles = ( 0, 0, 0 ); trig3.angles = ( 0, 0, 0 );
trig3.targetname = "eject_player_pos"; trig3.targetname = "eject_player_pos";
trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) ); 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" ); trigs = getentarray( "eject_player_pos", "targetname" );
array_thread( trigs, ::player_eject_watcher ); array_thread( trigs, ::player_eject_watcher );
} }
player_eject_watcher() //checked matches cerberus output player_eject_watcher()
{ {
time = 0; time = 0;
while ( 1 )
{ while ( true )
self waittill( "trigger", who ); {
if ( is_player_valid( who ) ) self waittill( "trigger", who );
{
while ( who istouching( self ) ) if ( is_player_valid( who ) )
{ {
time++; while ( who istouching( self ) )
if ( time >= 6 ) {
{ time++;
if ( isDefined( self.point ) )
{ if ( time >= 6 )
if ( !positionwouldtelefrag( self.point.origin ) ) {
{ if ( isdefined( self.point ) )
who setorigin( self.point.origin ); {
who playlocalsound( level.zmb_laugh_alias ); if ( !positionwouldtelefrag( self.point.origin ) )
who playrumbleonentity( "damage_light" ); {
earthquake( 0.5, 0.5, who.origin, 100 ); who setorigin( self.point.origin );
who thread ejected_overrun( self ); 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; wait 1.0;
} }
time = 0;
}
wait 0.1;
}
} }
ejected_overrun( trig ) //checked changed to match cerberus output ejected_overrun( trig )
{ {
if ( !isDefined( trig.ejected ) ) if ( !isdefined( trig.ejected ) )
{ trig.ejected = 1;
trig.ejected = 1; else
} {
else trig.ejected++;
{
trig.ejected++; if ( trig.ejected >= 3 )
if ( trig.ejected >= 3 ) {
{ primaries = self getweaponslistprimaries();
primaries = self getweaponslistprimaries();
foreach ( weapon in primaries ) foreach ( weapon in primaries )
{ self takeweapon( weapon );
self takeweapon( weapon );
} lethal = self get_player_lethal_grenade();
lethal = self get_player_lethal_grenade();
if ( isDefined( lethal ) && lethal != "" ) if ( isdefined( lethal ) && lethal != "" )
{ {
self takeweapon( lethal ); self takeweapon( lethal );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal ); maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( lethal );
} }
tactical = self get_player_tactical_grenade();
if ( isDefined( tactical ) && tactical != "" ) tactical = self get_player_tactical_grenade();
{
self takeweapon( tactical ); if ( isdefined( tactical ) && tactical != "" )
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical ); {
} self takeweapon( tactical );
mine = self get_player_placeable_mine(); maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical );
if ( isDefined( mine ) ) }
{
self takeweapon( mine ); mine = self get_player_placeable_mine();
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
} if ( isdefined( mine ) )
melee_weapon = self get_player_melee_weapon(); {
if ( isDefined( melee_weapon ) ) self takeweapon( mine );
{ maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine );
self takeweapon( melee_weapon ); }
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
} melee_weapon = self get_player_melee_weapon();
self giveweapon( "knife_zm" );
self.current_melee_weapon = "knife_zm"; if ( isdefined( melee_weapon ) )
self give_start_weapon( 1 ); {
self.currentweapon = "m1911_zm"; 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" ); flag_wait( "always_on" );
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" ); 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;
}
}
}
foreach ( struct in spawner_array )
{
if ( isdefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
{
struct.script_noteworthy = "riser_location";
return;
}
}
}

View File

@ -1,114 +1,117 @@
#include maps/mp/_utility; // T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#using_animtree( "fxanim_props" ); #include maps\mp\_utility;
#include maps\mp\createfx\zm_highrise_fx;
main() main()
{ {
precache_createfx_fx(); precache_createfx_fx();
precache_scripted_fx(); precache_scripted_fx();
precache_fxanim_props(); precache_fxanim_props();
maps/mp/createfx/zm_highrise_fx::main(); maps\mp\createfx\zm_highrise_fx::main();
} }
precache_scripted_fx() precache_scripted_fx()
{ {
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" ); 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_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" ); 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["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_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["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" ); level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" );
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" ); 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_md"] = loadfx( "electrical/fx_elec_player_md" );
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" ); level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" ); level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" );
level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); 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_tell"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" ); 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_impact"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" ); 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["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_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_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_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["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_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_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_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_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_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["sidequest_tower_bolts"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
} }
precache_createfx_fx() 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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"] = 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_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_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"] = 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_sidequest_complete_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
} }
#using_animtree("fxanim_props");
precache_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_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"]["wirespark_long_lrg"] = %fxanim_gp_wirespark_long_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_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_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_b"] = %fxanim_zom_highrise_dragon_b_anim;
level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_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"]["rock_slide"] = %fxanim_zom_highrise_rock_slide_anim;
} }

View File

@ -1,14 +1,15 @@
//checked includes match cerberus output // T6 GSC SOURCE
#include maps/mp/zm_highrise_classic; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_highrise; #include common_scripts\utility;
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_game_module; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_game_module;
#include maps/mp/_utility; #include maps\mp\gametypes_zm\_zm_gametype;
#include common_scripts/utility; #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_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_location_gamemode( "zclassic", "rooftop", maps\mp\zm_highrise_classic::precache, maps\mp\zm_highrise_classic::main );
} }

View File

@ -1,247 +1,249 @@
#include maps/mp/zm_highrise_sq; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_sidequests; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
init() init()
{ {
flag_init( "sq_atd_elevator0" ); flag_init( "sq_atd_elevator0" );
flag_init( "sq_atd_elevator1" ); flag_init( "sq_atd_elevator1" );
flag_init( "sq_atd_elevator2" ); flag_init( "sq_atd_elevator2" );
flag_init( "sq_atd_elevator3" ); flag_init( "sq_atd_elevator3" );
flag_init( "sq_atd_elevator_activated" ); flag_init( "sq_atd_elevator_activated" );
flag_init( "sq_atd_drg_puzzle_1st_error" ); flag_init( "sq_atd_drg_puzzle_1st_error" );
flag_init( "sq_atd_drg_puzzle_complete" ); flag_init( "sq_atd_drg_puzzle_complete" );
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 ); declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
sq_atd_dragon_icon_setup(); sq_atd_dragon_icon_setup();
} }
init_stage() init_stage()
{ {
level._cur_stage_name = "atd"; level._cur_stage_name = "atd";
clientnotify( "atd" ); clientnotify( "atd" );
} }
stage_logic() stage_logic()
{ {
/# /#
iprintlnbold( "ATD Started" ); iprintlnbold( "ATD Started" );
#/ #/
sq_atd_elevators(); sq_atd_elevators();
sq_atd_drg_puzzle(); sq_atd_drg_puzzle();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
exit_stage_1( success ) exit_stage_1( success )
{ {
} }
sq_atd_dragon_icon_setup() sq_atd_dragon_icon_setup()
{ {
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a51 = a_dragon_icons;
_k51 = getFirstArrayKey( _a51 ); foreach ( m_icon in a_dragon_icons )
while ( isDefined( _k51 ) ) {
{ m_icon notsolid();
m_icon = _a51[ _k51 ]; m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
m_icon notsolid(); m_icon.origin = m_icon.m_elevator.origin + vectorscale( ( 0, 0, 1 ), 134.0 );
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" ); m_icon.angles = m_icon.m_elevator.angles;
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 ); m_icon linkto( m_icon.m_elevator );
m_icon.angles = m_icon.m_elevator.angles; m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
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 ) )
if ( isDefined( m_icon.m_lit_icon ) ) {
{ m_icon.m_lit_icon notsolid();
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.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 ); m_icon.m_lit_icon.angles = m_icon.angles;
m_icon.m_lit_icon.angles = m_icon.angles; m_icon.m_lit_icon linkto( m_icon.m_elevator );
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_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" ); a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
i = 0; for ( i = 0; i < a_atd2_icons.size; i++ )
while ( i < a_atd2_icons.size ) {
{ a_atd2_lit_icons[i].origin = a_atd2_icons[i].origin - vectorscale( ( 0, 0, 1 ), 5.0 );
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_lit_icons[ i ].angles = a_atd2_icons[ i ].angles; a_atd2_icons[i].lit_icon = a_atd2_lit_icons[i];
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ]; }
i++;
}
} }
sq_atd_elevators() sq_atd_elevators()
{ {
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" ); 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" ); a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
i = 0;
while ( i < a_elevators.size ) for ( i = 0; i < a_elevators.size; i++ )
{ {
trig_elevator = getent( a_elevators[ i ], "targetname" ); trig_elevator = getent( a_elevators[i], "targetname" );
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] ); 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" ) ) while ( !flag( "sq_atd_elevator0" ) || !flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) || !flag( "sq_atd_elevator3" ) )
{ {
flag_wait_any_array( a_elevator_flags ); flag_wait_any_array( a_elevator_flags );
wait 0,5; wait 0.5;
} }
/# /#
iprintlnbold( "Standing on Elevators Complete" ); iprintlnbold( "Standing on Elevators Complete" );
#/ #/
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a105 = a_dragon_icons;
_k105 = getFirstArrayKey( _a105 ); foreach ( m_icon in a_dragon_icons )
while ( isDefined( _k105 ) ) {
{ v_off_pos = m_icon.m_lit_icon.origin;
m_icon = _a105[ _k105 ]; m_icon.m_lit_icon unlink();
v_off_pos = m_icon.m_lit_icon.origin; m_icon unlink();
m_icon.m_lit_icon unlink(); m_icon.m_lit_icon.origin = m_icon.origin;
m_icon unlink(); m_icon.origin = v_off_pos;
m_icon.m_lit_icon.origin = m_icon.origin; m_icon.m_lit_icon linkto( m_icon.m_elevator );
m_icon.origin = v_off_pos; m_icon linkto( m_icon.m_elevator );
m_icon.m_lit_icon linkto( m_icon.m_elevator ); m_icon playsound( "zmb_sq_symbol_light" );
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();
flag_set( "sq_atd_elevator_activated" ); level thread vo_maxis_atd_elevators();
vo_richtofen_atd_elevators();
level thread vo_maxis_atd_elevators();
} }
sq_atd_watch_elevator( str_flag ) sq_atd_watch_elevator( str_flag )
{ {
level endon( "sq_atd_elevator_activated" ); level endon( "sq_atd_elevator_activated" );
while ( 1 )
{ while ( true )
self waittill( "trigger", e_who ); {
while ( !isplayer( e_who ) ) self waittill( "trigger", e_who );
{
wait 0,05; if ( !isplayer( e_who ) )
} {
flag_set( str_flag ); wait 0.05;
while ( isalive( e_who ) && e_who istouching( self ) ) continue;
{ }
wait 0,05;
} flag_set( str_flag );
flag_clear( str_flag );
} while ( isalive( e_who ) && e_who istouching( self ) )
wait 0.05;
flag_clear( str_flag );
}
} }
sq_atd_drg_puzzle() sq_atd_drg_puzzle()
{ {
level.sq_atd_cur_drg = 0; level.sq_atd_cur_drg = 0;
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" ); a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
a_puzzle_trigs = array_randomize( a_puzzle_trigs ); a_puzzle_trigs = array_randomize( a_puzzle_trigs );
i = 0;
while ( i < a_puzzle_trigs.size ) for ( i = 0; i < a_puzzle_trigs.size; i++ )
{ a_puzzle_trigs[i] thread drg_puzzle_trig_think( i );
a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i );
i++; while ( level.sq_atd_cur_drg < 4 )
} wait 1;
while ( level.sq_atd_cur_drg < 4 )
{ flag_set( "sq_atd_drg_puzzle_complete" );
wait 1; level thread vo_maxis_atd_order_complete();
}
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 ) drg_puzzle_trig_think( n_order_id )
{ {
self.drg_active = 0; self.drg_active = 0;
m_unlit = getent( self.target, "targetname" ); m_unlit = getent( self.target, "targetname" );
m_lit = m_unlit.lit_icon; m_lit = m_unlit.lit_icon;
v_top = m_unlit.origin; v_top = m_unlit.origin;
v_hidden = m_lit.origin; v_hidden = m_lit.origin;
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
{ while ( !flag( "sq_atd_drg_puzzle_complete" ) )
while ( self.drg_active ) {
{ if ( self.drg_active )
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" ); {
while ( flag( "sq_atd_drg_puzzle_complete" ) ) level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
{
continue; if ( flag( "sq_atd_drg_puzzle_complete" ) )
} continue;
} }
self waittill( "trigger", e_who );
if ( level.sq_atd_cur_drg == n_order_id ) self waittill( "trigger", e_who );
{
m_lit.origin = v_top; if ( level.sq_atd_cur_drg == n_order_id )
m_unlit.origin = v_hidden; {
m_lit playsound( "zmb_sq_symbol_light" ); m_lit.origin = v_top;
self.drg_active = 1; m_unlit.origin = v_hidden;
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg ); m_lit playsound( "zmb_sq_symbol_light" );
level.sq_atd_cur_drg++; 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 ); self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
} }
else else
{ {
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) ) if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
{ level thread vo_maxis_atd_order_error();
level thread vo_maxis_atd_order_error();
} level.sq_atd_cur_drg = 0;
level.sq_atd_cur_drg = 0; level notify( "drg_puzzle_reset" );
level notify( "drg_puzzle_reset" );
/# /#
iprintlnbold( "INCORRECT DRAGON" ); iprintlnbold( "INCORRECT DRAGON" );
#/ #/
wait 0,5; wait 0.5;
} }
while ( e_who istouching( self ) )
{ while ( e_who istouching( self ) )
wait 0,5; wait 0.5;
} }
}
} }
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden ) drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
{ {
level endon( "sq_atd_drg_puzzle_complete" ); level endon( "sq_atd_drg_puzzle_complete" );
level waittill( "drg_puzzle_reset" );
m_unlit.origin = v_top; level waittill( "drg_puzzle_reset" );
m_lit.origin = v_hidden;
m_unlit playsound( "zmb_sq_symbol_fade" ); m_unlit.origin = v_top;
self.drg_active = 0; m_lit.origin = v_hidden;
m_unlit playsound( "zmb_sq_symbol_fade" );
self.drg_active = 0;
} }
vo_richtofen_atd_elevators() 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() 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 ) vo_richtofen_atd_order( n_which )
{ {
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which; str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
maps/mp/zm_highrise_sq::richtofensay( str_vox ); maps\mp\zm_highrise_sq::richtofensay( str_vox );
} }
vo_richtofen_atd_order_error() 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() vo_maxis_atd_order_error()
{ {
flag_set( "sq_atd_drg_puzzle_1st_error" ); flag_set( "sq_atd_drg_puzzle_1st_error" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" ); maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
} }
vo_maxis_atd_order_complete() 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" );
} }

View File

@ -1,570 +1,559 @@
#include maps/mp/zombies/_zm_unitrigger; // T6 GSC SOURCE
#include maps/mp/zm_highrise_sq; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_sidequests; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
#using_animtree( "fxanim_props" ); #include maps\mp\zombies\_zm_unitrigger;
init_1() init_1()
{ {
flag_init( "pts_1_springpads_placed" ); flag_init( "pts_1_springpads_placed" );
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
} }
init_2() init_2()
{ {
flag_init( "pts_2_springpads_placed" ); flag_init( "pts_2_springpads_placed" );
flag_init( "pts_2_generator_1_started" ); flag_init( "pts_2_generator_1_started" );
flag_init( "pts_2_generator_2_started" ); flag_init( "pts_2_generator_2_started" );
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 ); declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
} }
init_stage_1() init_stage_1()
{ {
clientnotify( "pts_1" ); clientnotify( "pts_1" );
level.n_launched_zombies = 0; level.n_launched_zombies = 0;
wait 15; wait 15;
level thread richtofen_pts_instructions(); level thread richtofen_pts_instructions();
level thread richtofen_pts_placed(); level thread richtofen_pts_placed();
} }
init_stage_2() init_stage_2()
{ {
clientnotify( "pts_2" ); clientnotify( "pts_2" );
level.sq_ball_putdown_trigs = []; level.sq_ball_putdown_trigs = [];
level thread maxis_pts_instructions(); level thread maxis_pts_instructions();
level thread maxis_pts_placed(); level thread maxis_pts_placed();
} }
stage_logic_1() stage_logic_1()
{ {
/# /#
iprintlnbold( "PTS1 Started" ); iprintlnbold( "PTS1 Started" );
#/ #/
watch_player_springpads( 0 ); watch_player_springpads( 0 );
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" ); wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 );
wait_for_zombies_launched(); wait_for_zombies_launched();
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
stage_completed( "sq_1", "pts_1" ); stage_completed( "sq_1", "pts_1" );
} }
wait_for_zombies_launched() wait_for_zombies_launched()
{ {
level thread richtofen_zombies_launched(); level thread richtofen_zombies_launched();
t_tower = getent( "pts_tower_trig", "targetname" ); t_tower = getent( "pts_tower_trig", "targetname" );
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" ); s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
while ( level.n_launched_zombies < 16 )
{ while ( level.n_launched_zombies < 16 )
wait 0,5; wait 0.5;
}
} }
watch_zombie_flings() watch_zombie_flings()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
self endon( "equip_springpad_zm_pickup" ); self endon( "equip_springpad_zm_pickup" );
while ( level.n_launched_zombies < 16 )
{ while ( level.n_launched_zombies < 16 )
self waittill( "fling" ); {
level.n_launched_zombies++; self waittill( "fling" );
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
{ level.n_launched_zombies++;
level notify( "pts1_say_next_line" );
} if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 )
wait 0,1; level notify( "pts1_say_next_line" );
}
wait 0.1;
}
} }
stage_logic_2() stage_logic_2()
{ {
/# /#
iprintlnbold( "PTS2 Started" ); iprintlnbold( "PTS2 Started" );
#/ #/
watch_player_springpads( 1 ); watch_player_springpads( 1 );
level thread wait_for_balls_launched(); level thread wait_for_balls_launched();
flag_wait( "pts_2_generator_1_started" ); flag_wait( "pts_2_generator_1_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
flag_wait( "pts_2_generator_2_started" ); flag_wait( "pts_2_generator_2_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
level thread maxis_balls_placed(); level thread maxis_balls_placed();
stage_completed( "sq_2", "pts_2" ); stage_completed( "sq_2", "pts_2" );
} }
wait_for_balls_launched() wait_for_balls_launched()
{ {
level.current_generator = 1; level.current_generator = 1;
a_lion_spots = getstructarray( "pts_lion", "targetname" ); a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a138 = a_lion_spots;
_k138 = getFirstArrayKey( _a138 ); foreach ( s_lion_spot in a_lion_spots )
while ( isDefined( _k138 ) ) {
{ s_lion_spot.a_place_ball_trigs = [];
s_lion_spot = _a138[ _k138 ]; s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
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();
}
a_players = getplayers(); foreach ( player in a_players )
_a145 = a_players; {
_k145 = getFirstArrayKey( _a145 ); player.a_place_ball_trigs = [];
while ( isDefined( _k145 ) )
{ if ( isdefined( player.zm_sq_has_ball ) )
player = _a145[ _k145 ]; player thread player_has_ball();
player.a_place_ball_trigs = []; }
if ( isDefined( player.zm_sq_has_ball ) )
{ while ( true )
player thread player_has_ball(); {
} level waittill( "zm_ball_picked_up", player );
_k145 = getNextArrayKey( _a145, _k145 );
} player thread player_has_ball();
while ( 1 ) }
{
level waittill( "zm_ball_picked_up", player );
player thread player_has_ball();
}
} }
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() player_set_down_ball_watcher()
{ {
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" ); self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
pts_putdown_trigs_remove_for_player( self ); pts_putdown_trigs_remove_for_player( self );
} }
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string ) 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 = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" ); t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string ); t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_place_trig"; t_pickup.targetname = "ball_place_trig";
t_pickup triggerignoreteam(); t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat(); t_pickup usetriggerrequirelookat();
return t_pickup; return t_pickup;
} }
place_ball_think( t_place_ball, s_lion_spot ) place_ball_think( t_place_ball, s_lion_spot )
{ {
t_place_ball endon( "delete" ); t_place_ball endon( "delete" );
t_place_ball waittill( "trigger" );
pts_putdown_trigs_remove_for_spot( s_lion_spot ); t_place_ball waittill( "trigger" );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
self.zm_sq_has_ball = undefined; pts_putdown_trigs_remove_for_spot( s_lion_spot );
s_lion_spot.which_ball = self.which_ball; pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
self notify( "zm_sq_ball_used" ); self.zm_sq_has_ball = undefined;
s_lion_spot.zm_pts_animating = 1; s_lion_spot.which_ball = self.which_ball;
s_lion_spot.springpad_buddy.zm_pts_animating = 1; self notify( "zm_sq_ball_used" );
flag_set( "pts_2_generator_" + level.current_generator + "_started" ); s_lion_spot.zm_pts_animating = 1;
s_lion_spot.which_generator = level.current_generator; s_lion_spot.springpad_buddy.zm_pts_animating = 1;
level.current_generator++; 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 ); s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
self.t_putdown_ball delete(); self.t_putdown_ball delete();
} }
delete_all_springpads() delete_all_springpads()
{ {
} }
exit_stage_1( success ) exit_stage_1( success )
{ {
} }
exit_stage_2( success ) exit_stage_2( success )
{ {
} }
watch_player_springpads( is_generator ) watch_player_springpads( is_generator )
{ {
level thread springpad_count_watcher( is_generator ); level thread springpad_count_watcher( is_generator );
a_players = get_players(); a_players = get_players();
_a240 = a_players;
_k240 = getFirstArrayKey( _a240 ); foreach ( player in a_players )
while ( isDefined( _k240 ) ) player thread pts_watch_springpad_use( is_generator );
{
player = _a240[ _k240 ];
player thread pts_watch_springpad_use( is_generator );
_k240 = getNextArrayKey( _a240, _k240 );
}
} }
pts_watch_springpad_use( is_generator ) pts_watch_springpad_use( is_generator )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
while ( !flag( "sq_branch_complete" ) )
{ while ( !flag( "sq_branch_complete" ) )
self waittill( "equipment_placed", weapon, weapname ); {
if ( weapname == level.springpad_name ) self waittill( "equipment_placed", weapon, weapname );
{
self is_springpad_in_place( weapon, is_generator ); if ( weapname == level.springpad_name )
} self is_springpad_in_place( weapon, is_generator );
} }
} }
springpad_count_watcher( is_generator ) springpad_count_watcher( is_generator )
{ {
level endon( "sq_pts_springad_count4" ); level endon( "sq_pts_springad_count4" );
str_which_spots = "pts_ghoul"; str_which_spots = "pts_ghoul";
if ( is_generator )
{ if ( is_generator )
str_which_spots = "pts_lion"; str_which_spots = "pts_lion";
}
a_spots = getstructarray( str_which_spots, "targetname" ); a_spots = getstructarray( str_which_spots, "targetname" );
while ( 1 )
{ while ( true )
level waittill( "sq_pts_springpad_in_place" ); {
n_count = 0; level waittill( "sq_pts_springpad_in_place" );
_a279 = a_spots;
_k279 = getFirstArrayKey( _a279 ); n_count = 0;
while ( isDefined( _k279 ) )
{ foreach ( s_spot in a_spots )
s_spot = _a279[ _k279 ]; {
if ( isDefined( s_spot.springpad ) ) if ( isdefined( s_spot.springpad ) )
{ n_count++;
n_count++; }
}
_k279 = getNextArrayKey( _a279, _k279 ); level notify( "sq_pts_springad_count" + n_count );
} }
level notify( "sq_pts_springad_count" + n_count );
}
} }
is_springpad_in_place( m_springpad, is_generator ) is_springpad_in_place( m_springpad, is_generator )
{ {
a_lion_spots = getstructarray( "pts_lion", "targetname" ); a_lion_spots = getstructarray( "pts_lion", "targetname" );
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" ); a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 ); a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
_a298 = a_spots;
_k298 = getFirstArrayKey( _a298 ); foreach ( s_spot in a_spots )
while ( isDefined( _k298 ) ) {
{ n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
s_spot = _a298[ _k298 ];
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin ); if ( n_dist < 1024 )
if ( n_dist < 1024 ) {
{ v_spot_forward = vectornormalize( anglestoforward( s_spot.angles ) );
v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) ); v_pad_forward = vectornormalize( anglestoforward( m_springpad.angles ) );
v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) ); n_dot = vectordot( v_spot_forward, v_pad_forward );
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" ); level notify( "sq_pts_springpad_in_place" );
s_spot.springpad = m_springpad; s_spot.springpad = m_springpad;
self thread pts_springpad_removed_watcher( m_springpad, s_spot ); self thread pts_springpad_removed_watcher( m_springpad, s_spot );
if ( is_generator )
{ if ( is_generator )
wait 0,1; {
level thread pts_should_springpad_create_trigs( s_spot ); wait 0.1;
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); level thread pts_should_springpad_create_trigs( s_spot );
} thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
else }
{ else
m_springpad.fling_scaler = 2; {
m_springpad thread watch_zombie_flings(); 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" ); if ( isdefined( s_spot.script_float ) )
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin ); {
v_override_dir = vectorScale( v_override_dir, 1024 ); s_target = getstruct( "sq_zombie_launch_target", "targetname" );
m_springpad.direction_vec_override = v_override_dir; v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
m_springpad.fling_scaler = s_spot.script_float; v_override_dir = vectorscale( v_override_dir, 1024 );
} m_springpad.direction_vec_override = v_override_dir;
return; m_springpad.fling_scaler = s_spot.script_float;
} }
}
else break;
{ }
_k298 = getNextArrayKey( _a298, _k298 ); }
} }
}
} }
pts_springpad_fling( str_spot_name, m_buddy_springpad ) pts_springpad_fling( str_spot_name, m_buddy_springpad )
{ {
str_anim1 = undefined; str_anim1 = undefined;
n_anim_length1 = undefined; n_anim_length1 = undefined;
str_anim2 = undefined; str_anim2 = undefined;
n_anim_length2 = undefined; n_anim_length2 = undefined;
switch( str_spot_name )
{ switch ( str_spot_name )
case "lion_pair_1": {
str_anim1 = "dc"; case "lion_pair_1":
str_anim2 = "cd"; str_anim1 = "dc";
break; str_anim2 = "cd";
case "lion_pair_2": break;
str_anim1 = "ab"; case "lion_pair_2":
str_anim2 = "ba"; str_anim1 = "ab";
break; str_anim2 = "ba";
case "lion_pair_3": break;
str_anim1 = "cd"; case "lion_pair_3":
str_anim2 = "dc"; str_anim1 = "cd";
break; str_anim2 = "dc";
case "lion_pair_4": break;
str_anim1 = "ba"; case "lion_pair_4":
str_anim2 = "ab"; str_anim1 = "ba";
break; 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 = spawn( "script_model", ( 2090, 675, 3542 ) );
m_anim useanimtree( -1 ); m_anim.angles = ( 0, 0, 0 );
m_anim.targetname = "trample_gen_" + str_spot_name; m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 ); 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 ) pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
{ {
m_anim endon( "delete" ); m_anim endon( "delete" );
self endon( "delete" ); self endon( "delete" );
m_buddy_springpad endon( "delete" ); m_buddy_springpad endon( "delete" );
n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] ); 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 ] ); n_anim_length2 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
while ( isDefined( m_anim ) )
{ while ( isdefined( m_anim ) )
self notify( "fling" ); {
if ( isDefined( m_anim ) ) self notify( "fling", 1 );
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] ); 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" ); wait( n_anim_length1 );
if ( isDefined( m_anim ) ) m_buddy_springpad notify( "fling", 1 );
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] ); if ( isdefined( m_anim ) )
} m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
wait n_anim_length2;
} wait( n_anim_length2 );
}
} }
pts_springpad_removed_watcher( m_springpad, s_spot ) pts_springpad_removed_watcher( m_springpad, s_spot )
{ {
self pts_springpad_waittill_removed( m_springpad ); self pts_springpad_waittill_removed( m_springpad );
s_spot.springpad = undefined; s_spot.springpad = undefined;
} }
pts_springpad_waittill_removed( m_springpad ) pts_springpad_waittill_removed( m_springpad )
{ {
m_springpad endon( "delete" ); m_springpad endon( "delete" );
m_springpad endon( "death" ); m_springpad endon( "death" );
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" ); self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
} }
wait_for_all_springpads_placed( str_type, str_flag ) wait_for_all_springpads_placed( str_type, str_flag )
{ {
a_spots = getstructarray( str_type, "targetname" ); a_spots = getstructarray( str_type, "targetname" );
while ( !flag( str_flag ) )
{ while ( !flag( str_flag ) )
is_clear = 0; {
_a442 = a_spots; is_clear = 0;
_k442 = getFirstArrayKey( _a442 );
while ( isDefined( _k442 ) ) foreach ( s_spot in a_spots )
{ {
s_spot = _a442[ _k442 ]; if ( !isdefined( s_spot.springpad ) )
if ( !isDefined( s_spot.springpad ) ) is_clear = 1;
{ }
is_clear = 1;
} if ( !is_clear )
_k442 = getNextArrayKey( _a442, _k442 ); flag_set( str_flag );
}
if ( !is_clear ) wait 1;
{ }
flag_set( str_flag );
}
wait 1;
}
} }
pts_should_player_create_trigs( player ) pts_should_player_create_trigs( player )
{ {
a_lion_spots = getstructarray( "pts_lion", "targetname" ); a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a467 = a_lion_spots;
_k467 = getFirstArrayKey( _a467 ); foreach ( s_lion_spot in a_lion_spots )
while ( isDefined( _k467 ) ) {
{ if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
s_lion_spot = _a467[ _k467 ]; pts_putdown_trigs_create_for_spot( s_lion_spot, player );
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 );
}
} }
pts_should_springpad_create_trigs( s_lion_spot ) pts_should_springpad_create_trigs( s_lion_spot )
{ {
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) ) if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
{ {
a_players = getplayers(); a_players = getplayers();
_a481 = a_players;
_k481 = getFirstArrayKey( _a481 ); foreach ( player in a_players )
while ( isDefined( _k481 ) ) {
{ if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
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 );
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 );
}
}
} }
pts_putdown_trigs_create_for_spot( s_lion_spot, 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 ) ) if ( isdefined( s_lion_spot.which_ball ) || isdefined( s_lion_spot.springpad_buddy ) && isdefined( s_lion_spot.springpad_buddy.which_ball ) )
{ return;
return;
} t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" ); player clientclaimtrigger( t_place_ball );
player clientclaimtrigger( t_place_ball ); t_place_ball.owner = player;
t_place_ball.owner = player; player thread place_ball_think( t_place_ball, s_lion_spot );
player thread place_ball_think( t_place_ball, s_lion_spot );
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
{ s_lion_spot.pts_putdown_trigs = [];
s_lion_spot.pts_putdown_trigs = [];
} s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball;
s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball; level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
} }
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 ); 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 );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy ); pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
level thread pts_reset_ball( s_lion_spot ); level thread pts_reset_ball( s_lion_spot );
} }
pts_reset_ball( s_lion_spot ) pts_reset_ball( s_lion_spot )
{ {
if ( isDefined( s_lion_spot.which_ball ) ) if ( isdefined( s_lion_spot.which_ball ) )
{ {
s_lion_spot.sq_pickup_reset = 1; s_lion_spot.sq_pickup_reset = 1;
s_lion_spot.which_ball notify( "sq_pickup_reset" ); s_lion_spot.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" ); 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" ) ); 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" ); flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
level.current_generator--; level.current_generator--;
s_lion_spot.which_ball = undefined;
s_lion_spot.which_ball = undefined; m_ball_anim delete();
m_ball_anim delete(); }
} else if ( isdefined( s_lion_spot.springpad_buddy.which_ball ) )
else {
{ s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) ) 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" );
s_lion_spot.springpad_buddy.sq_pickup_reset = 1; playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" ); flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" ); level.current_generator--;
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) ); s_lion_spot.springpad_buddy.which_ball = undefined;
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" ); m_ball_anim delete();
level.current_generator--; }
s_lion_spot.springpad_buddy.which_ball = undefined;
m_ball_anim delete();
}
}
} }
pts_putdown_trigs_remove_for_player( player ) pts_putdown_trigs_remove_for_player( player )
{ {
a_lion_spots = getstructarray( "pts_lion", "targetname" ); a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a554 = a_lion_spots;
_k554 = getFirstArrayKey( _a554 ); foreach ( s_lion_spot in a_lion_spots )
while ( isDefined( _k554 ) ) {
{ if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
s_lion_spot = _a554[ _k554 ]; {
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) continue;
{ continue;
} }
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
{ 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 ); s_lion_spot.pts_putdown_trigs[player.characterindex] delete();
} arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
_k554 = getNextArrayKey( _a554, _k554 ); }
} }
} }
pts_putdown_trigs_remove_for_spot( s_lion_spot ) pts_putdown_trigs_remove_for_spot( s_lion_spot )
{ {
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) ) if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
{ return;
return;
} foreach ( t_putdown in s_lion_spot.pts_putdown_trigs )
_a575 = s_lion_spot.pts_putdown_trigs; t_putdown delete();
_k575 = getFirstArrayKey( _a575 );
while ( isDefined( _k575 ) ) s_lion_spot.pts_putdown_trigs = [];
{
t_putdown = _a575[ _k575 ];
t_putdown delete();
_k575 = getNextArrayKey( _a575, _k575 );
}
s_lion_spot.pts_putdown_trigs = [];
} }
richtofen_pts_instructions() 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() richtofen_pts_placed()
{ {
level waittill( "sq_pts_springad_count1" ); 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_1" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
level waittill( "sq_pts_springad_count3" ); level waittill( "sq_pts_springad_count2" );
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_2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
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() richtofen_zombies_launched()
{ {
level waittill( "pts1_say_next_line" ); level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
wait 1; maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
level waittill( "pts1_say_next_line" ); wait 1;
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
wait 1; level waittill( "pts1_say_next_line" );
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" ); 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() 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() maxis_pts_placed()
{ {
level waittill( "sq_pts_springad_count1" ); 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_1" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
level waittill( "sq_pts_springad_count4" ); level waittill( "sq_pts_springad_count2" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
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() 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" );
} }

View File

@ -1,199 +1,206 @@
#include maps/mp/zm_highrise_sq_pts; // T6 GSC SOURCE
#include maps/mp/zm_highrise_sq; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_sidequests; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
#include maps\mp\zm_highrise_sq_pts;
init() init()
{ {
flag_init( "sq_slb_first_ball_sniped" ); flag_init( "sq_slb_first_ball_sniped" );
flag_init( "sq_slb_richtofen_spoke" ); flag_init( "sq_slb_richtofen_spoke" );
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 ); declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
} }
init_stage() init_stage()
{ {
level._cur_stage_name = "slb"; level._cur_stage_name = "slb";
clientnotify( "slb" ); clientnotify( "slb" );
level thread vo_maxis_slb_hint(); level thread vo_maxis_slb_hint();
} }
stage_logic() stage_logic()
{ {
/# /#
iprintlnbold( "SLB Started" ); iprintlnbold( "SLB Started" );
#/ #/
snipe_balls_wait(); snipe_balls_wait();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
exit_stage_1( success ) exit_stage_1( success )
{ {
} }
snipe_balls_wait() snipe_balls_wait()
{ {
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" ); a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
array_thread( a_balls, ::snipe_balls_watch_ball ); array_thread( a_balls, ::snipe_balls_watch_ball );
is_complete = 0; is_complete = 0;
while ( !is_complete )
{ while ( !is_complete )
level waittill( "zm_ball_shot" ); {
wait 1; level waittill( "zm_ball_shot" );
is_complete = 1;
_a50 = a_balls; wait 1;
_k50 = getFirstArrayKey( _a50 ); is_complete = 1;
while ( isDefined( _k50 ) )
{ foreach ( m_ball in a_balls )
m_ball = _a50[ _k50 ]; {
if ( isDefined( m_ball ) ) if ( isdefined( m_ball ) )
{ is_complete = 0;
is_complete = 0; }
} }
_k50 = getNextArrayKey( _a50, _k50 );
}
}
/# /#
iprintlnbold( "All Balls Shot" ); iprintlnbold( "All Balls Shot" );
#/ #/
} }
snipe_balls_watch_ball() snipe_balls_watch_ball()
{ {
self endon( "delete" ); self endon( "delete" );
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" ); a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
self setcandamage( 1 ); self setcandamage( 1 );
while ( 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 ) ) self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
{
level notify( "zm_ball_shot" ); if ( maps\mp\zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
playsoundatposition( "zmb_sq_ball_ding", self.origin ); {
playfx( level._effect[ "sidequest_flash" ], self.origin ); level notify( "zm_ball_shot" );
str_noteworthy = self.script_noteworthy; playsoundatposition( "zmb_sq_ball_ding", self.origin );
self delete(); playfx( level._effect["sidequest_flash"], self.origin );
wait 0,5; str_noteworthy = self.script_noteworthy;
clientnotify( str_noteworthy ); self delete();
m_ball = getent( "sq_sliquify_r", "script_noteworthy" ); wait 0.5;
if ( str_noteworthy == "m_drg_tail" ) clientnotify( str_noteworthy );
{ m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
} if ( str_noteworthy == "m_drg_tail" )
playfx( level._effect[ "sidequest_flash" ], m_ball.origin ); m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
m_ball show();
m_ball thread lion_ball_enable_pickup(); playfx( level._effect["sidequest_flash"], m_ball.origin );
if ( !flag( "sq_slb_first_ball_sniped" ) ) m_ball show();
{ m_ball thread lion_ball_enable_pickup();
flag_set( "sq_slb_first_ball_sniped" );
level thread vo_atd_ball1_sniped(); if ( !flag( "sq_slb_first_ball_sniped" ) )
break; {
} flag_set( "sq_slb_first_ball_sniped" );
else level thread vo_atd_ball1_sniped();
{ }
level thread vo_maxis_atd_ball2_sniped(); else
} level thread vo_maxis_atd_ball2_sniped();
} }
} }
} }
lion_ball_enable_pickup() lion_ball_enable_pickup()
{ {
self endon( "sq_sliquified" ); self endon( "sq_sliquified" );
while ( 1 )
{ while ( true )
self.can_pickup = 1; {
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" ); self.can_pickup = 1;
while ( self.can_pickup ) self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
{
self.t_pickup waittill( "trigger", player ); while ( self.can_pickup )
if ( !isDefined( player.zm_sq_has_ball ) ) {
{ self.t_pickup waittill( "trigger", player );
player.zm_sq_has_ball = 1;
player.which_ball = self; if ( !isdefined( player.zm_sq_has_ball ) )
self.can_pickup = 0; {
self.player = player; player.zm_sq_has_ball = 1;
flag_set( "sq_ball_picked_up" ); player.which_ball = self;
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player ); self.can_pickup = 0;
level notify( "zm_ball_picked_up" ); self.player = player;
} flag_set( "sq_ball_picked_up" );
} level thread maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs( player );
self.t_pickup delete(); level notify( "zm_ball_picked_up", player );
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.t_pickup delete();
self.player clientclaimtrigger( self.t_putdown ); self hide();
self.player.t_putdown_ball = self.t_putdown; self setcandamage( 0 );
self ball_pickup_waittill_change(); wait 1;
play_spark = 0; self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
if ( !isDefined( self.t_putdown ) ) self.player clientclaimtrigger( self.t_putdown );
{ self.player.t_putdown_ball = self.t_putdown;
self waittill( "sq_pickup_reset" ); self ball_pickup_waittill_change();
play_spark = 1; play_spark = 0;
}
else if ( !isdefined( self.t_putdown ) )
{ {
self.t_putdown delete(); self waittill( "sq_pickup_reset" );
}
self.player notify( "zm_sq_ball_putdown" ); play_spark = 1;
if ( play_spark ) }
{ else
self.sq_pickup_reset = undefined; self.t_putdown delete();
playfx( level._effect[ "sidequest_flash" ], self.origin );
} self.player notify( "zm_sq_ball_putdown" );
self show();
self setcandamage( 1 ); if ( play_spark )
self.player.zm_sq_has_ball = undefined; {
self.player = undefined; self.sq_pickup_reset = undefined;
wait 1; 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() ball_pickup_waittill_change()
{ {
self endon( "sq_pickup_reset" ); self endon( "sq_pickup_reset" );
self.t_putdown waittill_any_return( "trigger", "delete", "reset" ); self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
} }
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string ) 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 = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" ); t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string ); t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_pickup_trig"; t_pickup.targetname = "ball_pickup_trig";
t_pickup triggerignoreteam(); t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat(); t_pickup usetriggerrequirelookat();
return t_pickup; return t_pickup;
} }
vo_richtofen_atd_ball_sniped() vo_richtofen_atd_ball_sniped()
{ {
if ( !flag( "sq_slb_richtofen_spoke" ) ) if ( !flag( "sq_slb_richtofen_spoke" ) )
{ {
flag_set( "sq_slb_richtofen_spoke" ); flag_set( "sq_slb_richtofen_spoke" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" ); maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
} }
} }
vo_maxis_slb_hint() 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() 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() 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_atd_ball1_sniped()
{ {
vo_richtofen_atd_ball_sniped(); vo_richtofen_atd_ball_sniped();
level thread vo_maxis_atd_ball1_sniped(); level thread vo_maxis_atd_ball1_sniped();
} }

View File

@ -1,328 +1,318 @@
#include maps/mp/zm_highrise_sq; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_spawner; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_sidequests; #include common_scripts\utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zm_highrise_sq;
init_1() init_1()
{ {
flag_init( "ssp1_ball0_complete" ); flag_init( "ssp1_ball0_complete" );
flag_init( "ssp1_ball1_complete" ); flag_init( "ssp1_ball1_complete" );
flag_init( "ssp1_complete" ); flag_init( "ssp1_complete" );
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 ); declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
} }
init_2() init_2()
{ {
flag_init( "ssp2_maxis_keep_going_said" ); flag_init( "ssp2_maxis_keep_going_said" );
flag_init( "ssp2_maxis_reincarnate_said" ); flag_init( "ssp2_maxis_reincarnate_said" );
flag_init( "ssp2_corpses_in_place" ); flag_init( "ssp2_corpses_in_place" );
flag_init( "ssp2_resurrection_done" ); flag_init( "ssp2_resurrection_done" );
flag_init( "ssp2_statue_complete" ); flag_init( "ssp2_statue_complete" );
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check ); 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 ); declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
} }
init_stage_1() init_stage_1()
{ {
clientnotify( "ssp_1" ); clientnotify( "ssp_1" );
level thread vo_richtofen_instructions(); level thread vo_richtofen_instructions();
} }
init_stage_2() init_stage_2()
{ {
clientnotify( "ssp_2" ); clientnotify( "ssp_2" );
level thread vo_maxis_start_ssp(); level thread vo_maxis_start_ssp();
} }
stage_logic_1() stage_logic_1()
{ {
/# /#
iprintlnbold( "SSP1 Started" ); iprintlnbold( "SSP1 Started" );
#/ #/
ssp1_sliquify_balls(); ssp1_sliquify_balls();
stage_completed( "sq_1", "ssp_1" ); stage_completed( "sq_1", "ssp_1" );
} }
ssp1_sliquify_balls() ssp1_sliquify_balls()
{ {
a_balls = getentarray( "sq_sliquify_ball", "targetname" ); a_balls = getentarray( "sq_sliquify_ball", "targetname" );
level thread vo_sliquify_fail_watch(); level thread vo_sliquify_fail_watch();
level thread ssp1_advance_dragon(); level thread ssp1_advance_dragon();
level thread vo_richtofen_sliquify_confirm(); level thread vo_richtofen_sliquify_confirm();
level thread vo_maxis_sliquify_fail(); level thread vo_maxis_sliquify_fail();
i = 0;
while ( i < a_balls.size ) for ( i = 0; i < a_balls.size; i++ )
{ a_balls[i] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
i++; while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
} {
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) ) flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
{ wait 0.5;
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); }
wait 0,5;
} maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
} }
ssp1_watch_ball( str_complete_flag ) ssp1_watch_ball( str_complete_flag )
{ {
self watch_model_sliquification( 20, str_complete_flag ); self watch_model_sliquification( 20, str_complete_flag );
self thread ssp1_rotate_ball(); self thread ssp1_rotate_ball();
self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 ); self playloopsound( "zmb_sq_ball_rotate_loop", 0.25 );
} }
ssp1_rotate_ball() ssp1_rotate_ball()
{ {
while ( isDefined( self ) ) while ( isdefined( self ) )
{ {
self rotateyaw( 360, 1 ); self rotateyaw( 360, 1 );
wait 0,9; wait 0.9;
} }
} }
ssp1_advance_dragon() ssp1_advance_dragon()
{ {
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
} }
stage_logic_2() stage_logic_2()
{ {
/# /#
iprintlnbold( "SSP2 Started" ); iprintlnbold( "SSP2 Started" );
#/ #/
level thread ssp2_advance_dragon(); level thread ssp2_advance_dragon();
corpse_room_watcher(); corpse_room_watcher();
stage_completed( "sq_2", "ssp_2" ); stage_completed( "sq_2", "ssp_2" );
} }
corpse_room_watcher() corpse_room_watcher()
{ {
t_corpse_room = getent( "corpse_room_trigger", "targetname" ); t_corpse_room = getent( "corpse_room_trigger", "targetname" );
n_count = 0; n_count = 0;
while ( !flag( "ssp2_resurrection_done" ) )
{ while ( !flag( "ssp2_resurrection_done" ) )
level waittill( "ssp2_corpse_made", is_in_room ); {
if ( is_in_room ) level waittill( "ssp2_corpse_made", is_in_room );
{
n_count++; if ( is_in_room )
} n_count++;
else else
{ n_count = 0;
n_count = 0;
} if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) ) {
{ flag_set( "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" );
level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" ); }
continue; else if ( n_count >= 15 )
} {
else
{
if ( n_count >= 15 )
{
/# /#
iprintlnbold( "Corpse Count Reached" ); iprintlnbold( "Corpse Count Reached" );
#/ #/
level thread vo_maxis_ssp_reincarnate(); level thread vo_maxis_ssp_reincarnate();
flag_set( "ssp2_corpses_in_place" ); flag_set( "ssp2_corpses_in_place" );
corpse_room_revive_watcher(); corpse_room_revive_watcher();
level notify( "end_revive_watcher" ); level notify( "end_revive_watcher" );
} }
} }
}
} }
ssp_2_zombie_death_check() ssp_2_zombie_death_check()
{ {
self waittill( "death" ); self waittill( "death" );
if ( !isDefined( self ) )
{ if ( !isdefined( self ) )
return; return;
}
t_corpse_room = getent( "corpse_room_trigger", "targetname" ); t_corpse_room = getent( "corpse_room_trigger", "targetname" );
if ( self istouching( t_corpse_room ) )
{ if ( self istouching( t_corpse_room ) )
level notify( "ssp2_corpse_made" ); level notify( "ssp2_corpse_made", 1 );
} else
else level notify( "ssp2_corpse_made", 0 );
{
level notify( "ssp2_corpse_made" );
}
} }
corpse_room_cleanup_watcher() corpse_room_cleanup_watcher()
{ {
level endon( "ssp2_resurrection_done" ); level endon( "ssp2_resurrection_done" );
t_corpse_room = getent( "corpse_room_trigger", "targetname" ); t_corpse_room = getent( "corpse_room_trigger", "targetname" );
while ( 1 )
{ while ( true )
wait 1; {
a_corpses = getcorpsearray(); wait 1;
if ( a_corpses.size < 15 ) a_corpses = getcorpsearray();
{
level thread vo_maxis_ssp_fail(); if ( a_corpses.size < 15 )
level notify( "end_revive_watcher" ); {
return; level thread vo_maxis_ssp_fail();
} level notify( "end_revive_watcher" );
n_count = 0; return;
_a206 = a_corpses; }
_k206 = getFirstArrayKey( _a206 );
while ( isDefined( _k206 ) ) n_count = 0;
{
m_corpse = _a206[ _k206 ]; foreach ( m_corpse in a_corpses )
if ( m_corpse istouching( t_corpse_room ) ) {
{ if ( m_corpse istouching( t_corpse_room ) )
n_count++; n_count++;
} }
_k206 = getNextArrayKey( _a206, _k206 );
} if ( n_count < 15 )
if ( n_count < 15 ) {
{ level thread vo_maxis_ssp_fail();
level thread vo_maxis_ssp_fail(); level notify( "end_revive_watcher" );
level notify( "end_revive_watcher" ); return;
return; }
} }
}
} }
corpse_room_revive_watcher() corpse_room_revive_watcher()
{ {
level endon( "end_revive_watcher" ); level endon( "end_revive_watcher" );
weaponname = "none"; weaponname = "none";
str_type = "none"; str_type = "none";
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" ); t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
{ while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type ); {
if ( isplayer( inflictor ) ) t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
{
weaponname = inflictor.currentweapon; if ( isplayer( inflictor ) )
str_type = type; {
} weaponname = inflictor.currentweapon;
} str_type = type;
}
}
/# /#
iprintlnbold( "Revive Complete" ); iprintlnbold( "Revive Complete" );
#/ #/
vo_maxis_ssp_complete(); vo_maxis_ssp_complete();
flag_set( "ssp2_resurrection_done" ); flag_set( "ssp2_resurrection_done" );
} }
ssp2_advance_dragon() ssp2_advance_dragon()
{ {
flag_wait( "ssp2_corpses_in_place" ); flag_wait( "ssp2_corpses_in_place" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 1 );
flag_wait( "ssp2_resurrection_done" ); flag_wait( "ssp2_resurrection_done" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 ); maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
} }
exit_stage_1( success ) exit_stage_1( success )
{ {
flag_set( "ssp1_complete" ); flag_set( "ssp1_complete" );
} }
exit_stage_2( success ) exit_stage_2( success )
{ {
} }
watch_model_sliquification( n_end_limit, str_complete_flag ) watch_model_sliquification( n_end_limit, str_complete_flag )
{ {
n_count = 0; n_count = 0;
self setcandamage( 1 ); self setcandamage( 1 );
while ( !flag( str_complete_flag ) )
{ 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" ) ) self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
{
n_count++; if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
if ( n_count >= n_end_limit ) {
{ n_count++;
if ( n_count >= n_end_limit )
{
/# /#
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag ); iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
#/ #/
self notify( "sq_sliquified" ); self notify( "sq_sliquified" );
if ( isDefined( self.t_pickup ) )
{ if ( isdefined( self.t_pickup ) )
self.t_pickup delete(); self.t_pickup delete();
}
flag_set( str_complete_flag ); flag_set( str_complete_flag );
break; }
} else if ( n_count == 1 )
else if ( n_count == 1 ) level notify( "ssp1_ball_first_sliquified" );
{ else if ( n_count == 10 )
level notify( "ssp1_ball_first_sliquified" ); level notify( "ssp1_ball_sliquified_2" );
break; }
} }
else
{
if ( n_count == 10 )
{
level notify( "ssp1_ball_sliquified_2" );
}
}
}
}
} }
vo_richtofen_instructions() vo_richtofen_instructions()
{ {
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" ); maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
wait 10; 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_1" );
} }
vo_sliquify_fail_watch() vo_sliquify_fail_watch()
{ {
flag_wait( "sq_ball_picked_up" ); flag_wait( "sq_ball_picked_up" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" ); maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
} }
vo_richtofen_sliquify_confirm() vo_richtofen_sliquify_confirm()
{ {
level waittill( "ssp1_ball_first_sliquified" ); 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_2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
flag_wait( "ssp1_complete" ); level waittill( "ssp1_ball_sliquified_2" );
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_3" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" ); 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() vo_maxis_sliquify_fail()
{ {
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" ); flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" ); maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
} }
vo_maxis_start_ssp() 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_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" ); maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
} }
vo_maxis_ssp_reincarnate() vo_maxis_ssp_reincarnate()
{ {
if ( !flag( "ssp2_maxis_reincarnate_said" ) ) if ( !flag( "ssp2_maxis_reincarnate_said" ) )
{ {
flag_set( "ssp2_maxis_reincarnate_said" ); flag_set( "ssp2_maxis_reincarnate_said" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" ); maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
} }
else else
{ flag_clear( "ssp2_maxis_reincarnate_said" );
flag_clear( "ssp2_maxis_reincarnate_said" );
}
} }
vo_maxis_ssp_fail() 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() 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_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" ); maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
} }

View File

@ -1,280 +1,274 @@
#include maps/mp/zombies/_zm_ffotd; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_zonemgr; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_ffotd;
main_start() main_start()
{ {
level thread spawned_collision_fix(); level thread spawned_collision_fix();
level thread kill_trigger_spawn(); level thread kill_trigger_spawn();
} }
main_end() main_end()
{ {
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 ); 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 ); connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
level thread pathfinding_override_fix(); level thread pathfinding_override_fix();
} }
spawned_collision_fix() spawned_collision_fix()
{ {
precachemodel( "collision_geo_512x512x512_standard" ); precachemodel( "collision_geo_512x512x512_standard" );
precachemodel( "collision_geo_32x32x128_standard" ); precachemodel( "collision_geo_32x32x128_standard" );
precachemodel( "collision_geo_64x64x256_standard" ); precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_wall_128x128x10_standard" ); precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_256x256x10_standard" ); precachemodel( "collision_wall_256x256x10_standard" );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{ if ( !is_true( level.optimise_for_splitscreen ) )
collision1 = spawn( "script_model", ( 2992, 536, 497 ) ); {
collision1 setmodel( "collision_geo_512x512x512_standard" ); collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision1 setmodel( "collision_geo_512x512x512_standard" );
collision1 ghost(); collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision2 = spawn( "script_model", ( 2824, 632, 497 ) ); collision1 ghost();
collision2 setmodel( "collision_geo_512x512x512_standard" ); collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision2 setmodel( "collision_geo_512x512x512_standard" );
collision2 ghost(); collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision3 = spawn( "script_model", ( 2992, 536, -15 ) ); collision2 ghost();
collision3 setmodel( "collision_geo_512x512x512_standard" ); collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision3 setmodel( "collision_geo_512x512x512_standard" );
collision3 ghost(); collision3.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision4 = spawn( "script_model", ( 2824, 632, -15 ) ); collision3 ghost();
collision4 setmodel( "collision_geo_512x512x512_standard" ); collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision4 setmodel( "collision_geo_512x512x512_standard" );
collision4 ghost(); collision4.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision5 = spawn( "script_model", ( 2992, 536, -527 ) ); collision4 ghost();
collision5 setmodel( "collision_geo_512x512x512_standard" ); collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision5 setmodel( "collision_geo_512x512x512_standard" );
collision5 ghost(); collision5.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision6 = spawn( "script_model", ( 2824, 632, -527 ) ); collision5 ghost();
collision6 setmodel( "collision_geo_512x512x512_standard" ); collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision6 setmodel( "collision_geo_512x512x512_standard" );
collision6 ghost(); collision6.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) ); collision6 ghost();
collision7 setmodel( "collision_geo_512x512x512_standard" ); collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision7 setmodel( "collision_geo_512x512x512_standard" );
collision7 ghost(); collision7.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) ); collision7 ghost();
collision8 setmodel( "collision_geo_512x512x512_standard" ); collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision8 setmodel( "collision_geo_512x512x512_standard" );
collision8 ghost(); collision8.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) ); collision8 ghost();
collision9 setmodel( "collision_geo_512x512x512_standard" ); collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision9 setmodel( "collision_geo_512x512x512_standard" );
collision9 ghost(); collision9.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) ); collision9 ghost();
collision10 setmodel( "collision_geo_512x512x512_standard" ); collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision10 setmodel( "collision_geo_512x512x512_standard" );
collision10 ghost(); collision10.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) ); collision10 ghost();
collision11 setmodel( "collision_geo_512x512x512_standard" ); collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision11 setmodel( "collision_geo_512x512x512_standard" );
collision11 ghost(); collision11.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) ); collision11 ghost();
collision12 setmodel( "collision_geo_512x512x512_standard" ); collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision12 setmodel( "collision_geo_512x512x512_standard" );
collision12 ghost(); collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) ); collision12 ghost();
collisione1 setmodel( "collision_wall_256x256x10_standard" ); collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
collisione1.angles = ( 0, 0, 0 ); collisione1 setmodel( "collision_wall_256x256x10_standard" );
collisione1 ghost(); collisione1.angles = ( 0, 0, 0 );
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) ); collisione1 ghost();
collisione2 setmodel( "collision_wall_256x256x10_standard" ); collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
collisione2.angles = ( 0, 0, 0 ); collisione2 setmodel( "collision_wall_256x256x10_standard" );
collisione2 ghost(); collisione2.angles = ( 0, 0, 0 );
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) ); collisione2 ghost();
collisione3 setmodel( "collision_wall_256x256x10_standard" ); collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 ); collisione3 setmodel( "collision_wall_256x256x10_standard" );
collisione3 ghost(); collisione3.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) ); collisione3 ghost();
collisione4 setmodel( "collision_wall_256x256x10_standard" ); collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 ); collisione4 setmodel( "collision_wall_256x256x10_standard" );
collisione4 ghost(); collisione4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) ); collisione4 ghost();
collisione5 setmodel( "collision_wall_256x256x10_standard" ); collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 ); collisione5 setmodel( "collision_wall_256x256x10_standard" );
collisione5 ghost(); collisione5.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) ); collisione5 ghost();
collisione6 setmodel( "collision_wall_256x256x10_standard" ); collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 ); collisione6 setmodel( "collision_wall_256x256x10_standard" );
collisione6 ghost(); collisione6.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) ); collisione6 ghost();
collision13 setmodel( "collision_wall_128x128x10_standard" ); collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 ); collision13 setmodel( "collision_wall_128x128x10_standard" );
collision13 ghost(); collision13.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) ); collision13 ghost();
collision14 setmodel( "collision_geo_512x512x512_standard" ); collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 ); collision14 setmodel( "collision_geo_512x512x512_standard" );
collision14 ghost(); collision14.angles = vectorscale( ( 0, 0, -1 ), 6.20013 );
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) ); collision14 ghost();
collision15 setmodel( "collision_wall_128x128x10_standard" ); collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
collision15.angles = ( 0, 240,4, -3,00014 ); collision15 setmodel( "collision_wall_128x128x10_standard" );
collision15 ghost(); collision15.angles = ( 0, 240.4, -3.00014 );
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) ); collision15 ghost();
collision16 setmodel( "collision_wall_128x128x10_standard" ); collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
collision16.angles = ( 0, 60, -2,60003 ); collision16 setmodel( "collision_wall_128x128x10_standard" );
collision16 ghost(); collision16.angles = ( 0, 60, -2.60003 );
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) ); collision16 ghost();
collision17 setmodel( "collision_wall_128x128x10_standard" ); collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
collision17.angles = ( 0, 60, -2,60003 ); collision17 setmodel( "collision_wall_128x128x10_standard" );
collision17 ghost(); collision17.angles = ( 0, 60, -2.60003 );
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) ); collision17 ghost();
collision18 setmodel( "collision_geo_64x64x256_standard" ); collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 ); collision18 setmodel( "collision_geo_64x64x256_standard" );
collision18 ghost(); collision18.angles = vectorscale( ( 1, 0, 0 ), 350.0 );
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) ); collision18 ghost();
collision19 setmodel( "collision_geo_32x32x128_standard" ); collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision19 setmodel( "collision_geo_32x32x128_standard" );
collision19 ghost(); collision19.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) ); collision19 ghost();
collision20 setmodel( "collision_wall_128x128x10_standard" ); collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 ); collision20 setmodel( "collision_wall_128x128x10_standard" );
collision20 ghost(); collision20.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) ); collision20 ghost();
collision21 setmodel( "collision_geo_32x32x128_standard" ); collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 ); collision21 setmodel( "collision_geo_32x32x128_standard" );
collision21 ghost(); collision21.angles = vectorscale( ( 0, 1, 0 ), 8.6 );
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) ); collision21 ghost();
collision22 setmodel( "collision_geo_32x32x128_standard" ); collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 ); collision22 setmodel( "collision_geo_32x32x128_standard" );
collision22 ghost(); collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 );
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) ); collision22 ghost();
collision23 setmodel( "collision_geo_32x32x128_standard" ); collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
collision23.angles = ( 0, 0, 0 ); collision23 setmodel( "collision_geo_32x32x128_standard" );
collision23 ghost(); collision23.angles = ( 0, 0, 0 );
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) ); collision23 ghost();
collision24 setmodel( "collision_geo_32x32x128_standard" ); collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
collision24.angles = ( 0, 0, 0 ); collision24 setmodel( "collision_geo_32x32x128_standard" );
collision24 ghost(); collision24.angles = ( 0, 0, 0 );
} collision24 ghost();
}
} }
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way ) connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
{ {
if ( !isDefined( one_way ) ) if ( !isdefined( one_way ) )
{ one_way = 0;
one_way = 0;
} zone_init( zone_name_a );
zone_init( zone_name_a ); zone_init( zone_name_b );
zone_init( zone_name_b ); enable_zone( zone_name_a );
enable_zone( zone_name_a ); enable_zone( zone_name_b );
enable_zone( zone_name_b );
if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ 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 ] = spawnstruct();
} level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1;
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1;
if ( !one_way ) if ( !one_way )
{ {
if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) ) 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 ] = spawnstruct();
} level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1;
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1; }
}
} }
kill_trigger_spawn() kill_trigger_spawn()
{ {
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 ); trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
trig.angles = vectorScale( ( 0, 0, 0 ), 150 ); trig.angles = vectorscale( ( 0, 1, 0 ), 150.0 );
trig.targetname = "instant_death"; trig.targetname = "instant_death";
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 ); trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
trig2.angles = ( 0, 0, 0 ); trig2.angles = ( 0, 0, 0 );
trig2.targetname = "instant_death"; trig2.targetname = "instant_death";
} }
pathfinding_override_fix() pathfinding_override_fix()
{ {
zombie_trigger_origin = ( 2303, 746, 1296 ); zombie_trigger_origin = ( 2303, 746, 1296 );
zombie_trigger_radius = 30; zombie_trigger_radius = 30;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 2357, 778, 1304 ); player_trigger_origin = ( 2357, 778, 1304 );
player_trigger_radius = 40; player_trigger_radius = 40;
zombie_goto_point = ( 2361, 738, 1304 ); 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 ); 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_origin = ( 3767, 1867, 2790 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3684, 1772, 2758 ); player_trigger_origin = ( 3684, 1772, 2758 );
player_trigger_radius = 70; player_trigger_radius = 70;
zombie_goto_point = ( 3659, 1872, 2790 ); 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 ); 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_origin = ( 3245, 1251, 1347.79 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 ); player_trigger_origin = ( 3246, 1126, 1347.79 );
player_trigger_radius = 64; player_trigger_radius = 64;
zombie_goto_point = ( 3031, 1234, 1278,12 ); 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 ); 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_origin = ( 3246, 1113, 1347.79 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3245, 1230, 1347,79 ); player_trigger_origin = ( 3245, 1230, 1347.79 );
player_trigger_radius = 44; player_trigger_radius = 44;
zombie_goto_point = ( 3023, 1154, 1278,12 ); 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 ); 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_origin = ( 3389, 1182, 1364.79 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 ); player_trigger_origin = ( 3246, 1126, 1347.79 );
player_trigger_radius = 64; player_trigger_radius = 64;
zombie_goto_point = ( 3381, 1093, 1364,79 ); 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 ); 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_origin = ( 3148, 1712, 1299.07 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3149, 1604, 1302,2 ); player_trigger_origin = ( 3149, 1604, 1302.2 );
player_trigger_radius = 44; player_trigger_radius = 44;
zombie_goto_point = ( 3259, 1644, 1321,5 ); 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 ); 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_origin = ( 3149, 1584, 1302.2 );
zombie_trigger_radius = 64; zombie_trigger_radius = 64;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3148, 1692, 1299,07 ); player_trigger_origin = ( 3148, 1692, 1299.07 );
player_trigger_radius = 44; player_trigger_radius = 44;
zombie_goto_point = ( 3291, 1684, 1321,5 ); 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 ); 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_origin = ( 3818, 1860, 2789.23 );
zombie_trigger_radius = 100; zombie_trigger_radius = 100;
zombie_trigger_height = 128; zombie_trigger_height = 128;
player_trigger_origin = ( 3601, 1961, 2744,95 ); player_trigger_origin = ( 3601, 1961, 2744.95 );
player_trigger_radius = 50; player_trigger_radius = 50;
zombie_goto_point = ( 3626, 1918, 2750,26 ); 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 ); 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(); all_nodes = getallnodes();
_a331 = all_nodes;
_k331 = getFirstArrayKey( _a331 ); foreach ( node in all_nodes )
while ( isDefined( _k331 ) ) {
{ if ( node.origin[0] == 3598.2 )
node = _a331[ _k331 ]; {
if ( node.origin[ 0 ] == 3598,2 ) deletepathnode( node );
{ break;
deletepathnode( node ); }
return; }
}
else
{
_k331 = getNextArrayKey( _a331, _k331 );
}
}
} }
highrise_link_nodes( a, b ) highrise_link_nodes( a, b )
{ {
if ( nodesarelinked( a, b ) ) if ( nodesarelinked( a, b ) )
{ return;
return;
} link_nodes( a, b );
link_nodes( a, b );
} }
highrise_unlink_nodes( a, b ) highrise_unlink_nodes( a, b )
{ {
if ( !nodesarelinked( a, b ) ) if ( !nodesarelinked( a, b ) )
{ return;
return;
} unlink_nodes( a, b );
unlink_nodes( a, b );
} }

View File

@ -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 );
#/
}

View File

@ -1,278 +1,302 @@
#include maps/mp/zombies/_zm_stats; // T6 GSC SOURCE
#include common_scripts/utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/_utility; #include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_stats;
init() init()
{ {
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) if ( !isdefined( level.ballistic_knife_autorecover ) )
{ level.ballistic_knife_autorecover = 1;
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); 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 ) on_spawn( watcher, player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "disconnect" ); player endon( "disconnect" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
level endon( "game_ended" ); level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0; self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
if ( isDefined( endpos ) )
{ isfriendly = 0;
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); if ( isdefined( endpos ) )
retrievable_model setowner( player ); {
retrievable_model.owner = player; retrievable_model = spawn( "script_model", endpos );
retrievable_model.angles = angles; retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model.name = watcher.weapon; retrievable_model setowner( player );
if ( isDefined( prey ) ) retrievable_model.owner = player;
{ retrievable_model.angles = angles;
if ( isplayer( prey ) && player.team == prey.team ) retrievable_model.name = watcher.weapon;
{
isfriendly = 1; if ( isdefined( prey ) )
} {
else if ( isplayer( prey ) && player.team == prey.team )
{ isfriendly = 1;
if ( isai( prey ) && player.team == prey.team ) else if ( isai( prey ) && player.team == prey.team )
{ isfriendly = 1;
isfriendly = 1;
} if ( !isfriendly )
} {
if ( !isfriendly ) retrievable_model linkto( prey, bone );
{ retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
retrievable_model linkto( prey, bone ); }
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); else if ( isfriendly )
} {
else retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
{ normal = ( 0, 0, 1 );
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" );
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
if ( isfriendly ) retrievable_model thread drop_knives_to_ground( player );
{
retrievable_model waittill( "stationary" ); if ( isfriendly )
} player notify( "ballistic_knife_stationary", retrievable_model, normal );
retrievable_model thread drop_knives_to_ground( player ); else
if ( isfriendly ) player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
{
player notify( "ballistic_knife_stationary" ); retrievable_model thread wait_to_show_glowing_model( prey );
} }
else
{
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey );
}
} }
wait_to_show_glowing_model( prey ) wait_to_show_glowing_model( prey )
{ {
level endon( "game_ended" ); level endon( "game_ended" );
self endon( "death" ); self endon( "death" );
wait 2; wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
} }
on_spawn_retrieve_trigger( watcher, player ) on_spawn_retrieve_trigger( watcher, player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "disconnect" ); player endon( "disconnect" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
level endon( "game_ended" ); level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) ) player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
{
return; if ( !isdefined( retrievable_model ) )
} return;
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) ) trigger_pos = [];
{
trigger_pos[ 0 ] = prey.origin[ 0 ]; if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
trigger_pos[ 1 ] = prey.origin[ 1 ]; {
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; trigger_pos[0] = prey.origin[0];
} trigger_pos[1] = prey.origin[1];
else trigger_pos[2] = prey.origin[2] + 10;
{ }
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); else
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); {
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
} trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
pickup_trigger setcursorhint( "HINT_NOICON" ); }
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger; if ( is_true( level.ballistic_knife_autorecover ) )
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; {
if ( isDefined( hint_string ) ) trigger_pos[2] -= 50.0;
{ pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
pickup_trigger sethintstring( hint_string ); }
} else
else {
{ pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger sethintstring( &"GENERIC_PICKUP" ); pickup_trigger setcursorhint( "HINT_NOICON" );
} }
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger ); pickup_trigger.owner = player;
pickup_trigger enablelinkto(); retrievable_model.retrievabletrigger = pickup_trigger;
if ( isDefined( prey ) ) hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
{
pickup_trigger linkto( prey ); if ( isdefined( hint_string ) )
} pickup_trigger sethintstring( hint_string );
else else
{ pickup_trigger sethintstring( &"GENERIC_PICKUP" );
pickup_trigger linkto( retrievable_model );
} pickup_trigger setteamfortrigger( player.team );
if ( isDefined( level.knife_planted ) ) player clientclaimtrigger( pickup_trigger );
{ pickup_trigger enablelinkto();
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
} if ( isdefined( prey ) )
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound ); pickup_trigger linkto( prey );
player thread watch_shutdown( pickup_trigger, retrievable_model ); 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 ) debug_print( endpos )
{ {
/# /#
self endon( "death" ); self endon( "death" );
while ( 1 )
{ while ( true )
print3d( endpos, "pickup_trigger" ); {
wait 0,05; print3d( endpos, "pickup_trigger" );
wait 0.05;
}
#/ #/
}
} }
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
{ {
self endon( "death" ); self endon( "death" );
self endon( "delete" ); self endon( "delete" );
level endon( "game_ended" ); level endon( "game_ended" );
while ( 1 ) max_ammo = weaponmaxammo( weapon ) + 1;
{ autorecover = is_true( level.ballistic_knife_autorecover );
trigger waittill( "trigger", player );
while ( !isalive( player ) ) while ( true )
{ {
continue; trigger waittill( "trigger", player );
}
while ( !player isonground() ) if ( !isalive( player ) )
{ continue;
continue;
} if ( !player isonground() && !is_true( trigger.force_pickup ) )
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) continue;
{
continue; if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
} continue;
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{ if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue; continue;
}
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() ) ammo_stock = player getweaponammostock( weapon );
{ ammo_clip = player getweaponammoclip( weapon );
if ( isDefined( playersoundonuse ) ) current_weapon = player getcurrentweapon();
{ total_ammo = ammo_stock + ammo_clip;
player playlocalsound( playersoundonuse ); hasreloaded = 1;
}
if ( isDefined( npcsoundonuse ) ) if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
{ hasreloaded = 0;
player playsound( npcsoundonuse );
} if ( total_ammo >= max_ammo || !hasreloaded )
player thread [[ callback ]]( weapon, model, trigger ); continue;
return;
} if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
else {
{ if ( isdefined( playersoundonuse ) )
} player playlocalsound( playersoundonuse );
}
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
player thread [[ callback ]]( weapon, model, trigger );
break;
}
}
} }
pick_up( weapon, model, trigger ) pick_up( weapon, model, trigger )
{ {
current_weapon = self getcurrentweapon(); if ( self hasweapon( weapon ) )
if ( current_weapon != weapon ) {
{ current_weapon = self getcurrentweapon();
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo ) if ( current_weapon != weapon )
{ {
self setweaponammoclip( weapon, 1 ); clip_ammo = self getweaponammoclip( weapon );
}
else if ( !clip_ammo )
{ self setweaponammoclip( weapon, 1 );
new_ammo_stock = self getweaponammostock( weapon ) + 1; else
self setweaponammostock( weapon, new_ammo_stock ); {
} new_ammo_stock = self getweaponammostock( weapon ) + 1;
} self setweaponammostock( weapon, new_ammo_stock );
else }
{ }
new_ammo_stock = self getweaponammostock( weapon ) + 1; else
self setweaponammostock( weapon, new_ammo_stock ); {
} new_ammo_stock = self getweaponammostock( weapon ) + 1;
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" ); self setweaponammostock( weapon, new_ammo_stock );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); }
model destroy_ent(); }
trigger destroy_ent();
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() destroy_ent()
{ {
if ( isDefined( self ) ) if ( isdefined( self ) )
{ {
if ( isDefined( self.glowing_model ) ) if ( isdefined( self.glowing_model ) )
{ self.glowing_model delete();
self.glowing_model delete();
} self delete();
self delete(); }
}
} }
watch_shutdown( trigger, model ) watch_shutdown( trigger, model )
{ {
self waittill_any( "death", "disconnect", "zmb_lost_knife" ); self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent(); trigger destroy_ent();
model destroy_ent(); model destroy_ent();
} }
drop_knives_to_ground( player ) drop_knives_to_ground( player )
{ {
player endon( "death" ); player endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
for ( ;; )
{ for (;;)
level waittill( "drop_objects_to_ground", origin, radius ); {
if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) level waittill( "drop_objects_to_ground", origin, radius );
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); if ( distancesquared( origin, self.origin ) < radius * radius )
self thread update_retrieve_trigger( player ); {
} 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 ) force_drop_knives_to_ground_on_death( player, prey )
{ {
self endon( "death" ); self endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink(); prey waittill( "death" );
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player ); self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
} }
update_retrieve_trigger( player ) update_retrieve_trigger( player )
{ {
self endon( "death" ); self endon( "death" );
player endon( "zmb_lost_knife" ); player endon( "zmb_lost_knife" );
if ( isDefined( level.custom_update_retrieve_trigger ) )
{ if ( isdefined( level.custom_update_retrieve_trigger ) )
self [[ level.custom_update_retrieve_trigger ]]( player ); {
return; 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 ); self waittill( "stationary" );
trigger linkto( self );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );
} }

View File

@ -1,53 +1,19 @@
#include maps/mp/zombies/_zm_weapons; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/_utility; #include common_scripts\utility;
#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() init()
{ {
if ( isDefined( level.bowie_cost ) ) if ( isdefined( level.bowie_cost ) )
{ cost = level.bowie_cost;
cost = level.bowie_cost; else
} cost = 3000;
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" );
}
spectator_respawn() 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_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie ); maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
}
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()
{
} }

View File

@ -1,492 +1,466 @@
#include maps/mp/gametypes_zm/_weaponobjects; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_stats; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_weapons; #include common_scripts\utility;
#include maps/mp/zombies/_zm_audio; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_score; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_equipment;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_score;
#include common_scripts/utility; #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() init()
{ {
if ( !isDefined( level.claymores_max_per_player ) ) if ( !isdefined( level.claymores_max_per_player ) )
{ level.claymores_max_per_player = 12;
level.claymores_max_per_player = 12;
} trigs = getentarray( "claymore_purchase", "targetname" );
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0; for ( i = 0; i < trigs.size; i++ )
while ( i < trigs.size ) {
{ model = getent( trigs[i].target, "targetname" );
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) ) if ( isdefined( model ) )
{ model hide();
model hide(); }
}
i++; array_thread( trigs, ::buy_claymores );
} level thread give_claymores_after_rounds();
array_thread( trigs, ::buy_claymores ); level.claymores_on_damage = ::satchel_damage;
level thread give_claymores_after_rounds(); level.pickup_claymores = ::pickup_claymores;
level.claymores_on_damage = ::satchel_damage; level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.pickup_claymores = ::pickup_claymores; level.claymore_detectiondot = cos( 70 );
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; level.claymore_detectionmindist = 20;
level.claymore_detectiondot = cos( 70 ); level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
} }
buy_claymores() buy_claymores()
{ {
self.zombie_cost = 1000; self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_NOICON" ); self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( !isDefined( self.stub ) )
{ if ( !isdefined( self.stub ) )
return; return;
}
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
{ self.stub.claymores_triggered = 0;
self.stub.claymores_triggered = 0;
} self.claymores_triggered = self.stub.claymores_triggered;
self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
while ( who in_revive_trigger() )
{ if ( who in_revive_trigger() )
continue; continue;
}
while ( who has_powerup_weapon() ) if ( who has_powerup_weapon() )
{ {
wait 0,1; wait 0.1;
} continue;
if ( is_player_valid( who ) ) }
{
if ( who.score >= self.zombie_cost ) if ( is_player_valid( who ) )
{ {
if ( !who is_player_placeable_mine( "claymore_zm" ) ) if ( who.score >= self.zombie_cost )
{ {
play_sound_at_pos( "purchase", self.origin ); if ( !who is_player_placeable_mine( "claymore_zm" ) )
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); {
who thread claymore_setup(); play_sound_at_pos( "purchase", self.origin );
who thread show_claymore_hint( "claymore_purchased" ); who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); who thread claymore_setup();
if ( isDefined( self.stub ) ) who thread show_claymore_hint( "claymore_purchased" );
{ who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
self.claymores_triggered = self.stub.claymores_triggered;
} if ( isdefined( self.stub ) )
if ( self.claymores_triggered == 0 ) self.claymores_triggered = self.stub.claymores_triggered;
{
model = getent( self.target, "targetname" ); if ( self.claymores_triggered == 0 )
if ( isDefined( model ) ) {
{ model = getent( self.target, "targetname" );
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
} if ( isdefined( model ) )
else model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
{ else if ( isdefined( self.clientfieldname ) )
if ( isDefined( self.clientfieldname ) ) level setclientfield( self.clientfieldname, 1 );
{
level setclientfield( self.clientfieldname, 1 ); self.claymores_triggered = 1;
}
} if ( isdefined( self.stub ) )
self.claymores_triggered = 1; self.stub.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 = getentarray( "claymore_purchase", "targetname" ); trigs[i] setinvisibletoplayer( who );
i = 0; }
while ( i < trigs.size ) else
{ who thread show_claymore_hint( "already_purchased" );
trigs[ i ] setinvisibletoplayer( who ); }
i++; else
} {
} who play_sound_on_ent( "no_purchase" );
else who thread show_claymore_hint( "already_purchased" ); who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
} }
} }
} }
} }
claymore_unitrigger_update_prompt( player ) claymore_unitrigger_update_prompt( player )
{ {
if ( player is_player_placeable_mine( "claymore_zm" ) ) if ( player is_player_placeable_mine( "claymore_zm" ) )
{ {
return 0; self sethintstring( "" );
} self setcursorhint( "HINT_NOICON" );
return 1; return false;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return true;
} }
set_claymore_visible() set_claymore_visible()
{ {
players = get_players(); players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" ); trigs = getentarray( "claymore_purchase", "targetname" );
while ( 1 )
{ while ( true )
j = 0; {
while ( j < players.size ) for ( j = 0; j < players.size; j++ )
{ {
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) ) if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
{ {
i = 0; for ( i = 0; i < trigs.size; i++ )
while ( i < trigs.size ) trigs[i] setinvisibletoplayer( players[j], 0 );
{ }
trigs[ i ] setinvisibletoplayer( players[ j ], 0 ); }
i++;
} wait 1;
} players = get_players();
j++; }
}
wait 1;
players = get_players();
}
} }
claymore_safe_to_plant() claymore_safe_to_plant()
{ {
if ( self.owner.claymores.size >= level.claymores_max_per_player ) if ( self.owner.claymores.size >= level.claymores_max_per_player )
{ return 0;
return 0;
} if ( isdefined( level.claymore_safe_to_plant ) )
if ( isDefined( level.claymore_safe_to_plant ) ) return self [[ level.claymore_safe_to_plant ]]();
{
return self [[ level.claymore_safe_to_plant ]](); return 1;
}
return 1;
} }
claymore_wait_and_detonate() claymore_wait_and_detonate()
{ {
wait 0,1; wait 0.1;
self detonate( self.owner ); self detonate( self.owner );
} }
claymore_watch() claymore_watch()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 ) self notify( "claymore_watch" );
{ self endon( "claymore_watch" );
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" ) while ( true )
{ {
claymore.owner = self; self waittill( "grenade_fire", claymore, weapname );
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" ); if ( weapname == "claymore_zm" )
if ( claymore claymore_safe_to_plant() ) {
{ claymore.owner = self;
if ( isDefined( level.claymore_planted ) ) claymore.team = self.team;
{ self notify( "zmb_enable_claymore_prompt" );
self thread [[ level.claymore_planted ]]( claymore );
} if ( claymore claymore_safe_to_plant() )
claymore thread satchel_damage(); {
claymore thread claymore_detonation(); if ( isdefined( level.claymore_planted ) )
claymore thread play_claymore_effects(); self thread [[ level.claymore_planted ]]( claymore );
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); claymore thread claymore_detonation();
break; claymore thread play_claymore_effects();
} self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
else self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
{ }
claymore thread claymore_wait_and_detonate(); else
} claymore thread claymore_wait_and_detonate();
} }
} }
} }
claymore_setup() claymore_setup()
{ {
if ( !isDefined( self.claymores ) ) if ( !isdefined( self.claymores ) )
{ self.claymores = [];
self.claymores = [];
} self thread claymore_watch();
self thread claymore_watch(); self giveweapon( "claymore_zm" );
self giveweapon( "claymore_zm" ); self set_player_placeable_mine( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" ); self setactionslot( 4, "weapon", "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" ); self setweaponammostock( "claymore_zm", 2 );
self setweaponammostock( "claymore_zm", 2 );
} }
adjust_trigger_origin( origin ) adjust_trigger_origin( origin )
{ {
origin += vectorScale( ( 0, 0, 1 ), 20 ); origin += vectorscale( ( 0, 0, 1 ), 20.0 );
return origin; return origin;
} }
on_spawn_retrieve_trigger( watcher, player ) on_spawn_retrieve_trigger( watcher, player )
{ {
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player ); self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isDefined( self.pickuptrigger ) )
{ if ( isdefined( self.pickuptrigger ) )
self.pickuptrigger sethintlowpriority( 0 ); self.pickuptrigger sethintlowpriority( 0 );
}
} }
pickup_claymores() pickup_claymores()
{ {
player = self.owner; player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{ if ( !player hasweapon( "claymore_zm" ) )
player thread claymore_watch(); {
player giveweapon( "claymore_zm" ); player thread claymore_watch();
player set_player_placeable_mine( "claymore_zm" ); player giveweapon( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" ); player set_player_placeable_mine( "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 ); player setactionslot( 4, "weapon", "claymore_zm" );
player notify( "zmb_enable_claymore_prompt" ); player setweaponammoclip( "claymore_zm", 0 );
} player notify( "zmb_enable_claymore_prompt" );
else }
{ else
clip_ammo = player getweaponammoclip( self.name ); {
clip_max_ammo = weaponclipsize( self.name ); clip_ammo = player getweaponammoclip( self.name );
if ( clip_ammo >= clip_max_ammo ) clip_max_ammo = weaponclipsize( self.name );
{
self destroy_ent(); if ( clip_ammo >= clip_max_ammo )
player notify( "zmb_disable_claymore_prompt" ); {
return; 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 ) self pick_up();
{ clip_ammo = player getweaponammoclip( self.name );
player notify( "zmb_disable_claymore_prompt" ); clip_max_ammo = weaponclipsize( self.name );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); if ( clip_ammo >= clip_max_ammo )
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" ); 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 ) pickup_claymores_trigger_listener( trigger, player )
{ {
self thread pickup_claymores_trigger_listener_enable( 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_disable( trigger, player );
} }
pickup_claymores_trigger_listener_enable( trigger, player ) pickup_claymores_trigger_listener_enable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
while ( 1 ) self endon( "death" );
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); while ( true )
if ( !isDefined( trigger ) ) {
{ player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
return;
} if ( !isdefined( trigger ) )
trigger trigger_on(); return;
trigger linkto( self );
} trigger trigger_on();
trigger linkto( self );
}
} }
pickup_claymores_trigger_listener_disable( trigger, player ) pickup_claymores_trigger_listener_disable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
while ( 1 ) self endon( "death" );
{
player waittill( "zmb_disable_claymore_prompt" ); while ( true )
if ( !isDefined( trigger ) ) {
{ player waittill( "zmb_disable_claymore_prompt" );
return;
} if ( !isdefined( trigger ) )
trigger unlink(); return;
trigger trigger_off();
} trigger unlink();
trigger trigger_off();
}
} }
shouldaffectweaponobject( object ) shouldaffectweaponobject( object )
{ {
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 ); pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
dirtopos = pos - object.origin; dirtopos = pos - object.origin;
objectforward = anglesToForward( object.angles ); objectforward = anglestoforward( object.angles );
dist = vectordot( dirtopos, objectforward ); dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
{ if ( dist < level.claymore_detectionmindist )
return 0; return 0;
}
dirtopos = vectornormalize( dirtopos ); dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward ); dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot; return dot > level.claymore_detectiondot;
} }
claymore_detonation() claymore_detonation()
{ {
self endon( "death" ); self endon( "death" );
self waittill_not_moving(); self waittill_not_moving();
detonateradius = 96; detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 ); damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team ); damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto(); damagearea enablelinkto();
damagearea linkto( self ); damagearea linkto( self );
if ( is_true( self.isonbus ) )
{ if ( is_true( self.isonbus ) )
damagearea setmovingplatformenabled( 1 ); damagearea setmovingplatformenabled( 1 );
}
self.damagearea = damagearea; self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea ); self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self; self.owner.claymores[self.owner.claymores.size] = self;
while ( 1 )
{ while ( true )
damagearea waittill( "trigger", ent ); {
if ( isDefined( self.owner ) && ent == self.owner ) damagearea waittill( "trigger", ent );
{
continue; if ( isdefined( self.owner ) && ent == self.owner )
} continue;
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{ if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
continue; continue;
}
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
{ continue;
continue;
} if ( !ent shouldaffectweaponobject( self ) )
while ( !ent shouldaffectweaponobject( self ) ) continue;
{
continue; if ( ent damageconetrace( self.origin, self ) > 0 )
} {
if ( ent damageconetrace( self.origin, self ) > 0 ) self playsound( "wpn_claymore_alert" );
{ wait 0.4;
self playsound( "wpn_claymore_alert" );
wait 0,4; if ( isdefined( self.owner ) )
if ( isDefined( self.owner ) ) self detonate( self.owner );
{ else
self detonate( self.owner ); self detonate( undefined );
}
else return;
{ }
self detonate( undefined ); }
}
return;
}
}
} }
delete_claymores_on_death( player, ent ) delete_claymores_on_death( player, ent )
{ {
self waittill( "death" ); self waittill( "death" );
if ( isDefined( player ) )
{ if ( isdefined( player ) )
arrayremovevalue( player.claymores, self ); arrayremovevalue( player.claymores, self );
}
wait 0,05; wait 0.05;
if ( isDefined( ent ) )
{ if ( isdefined( ent ) )
ent delete(); ent delete();
}
} }
satchel_damage() satchel_damage()
{ {
self setcandamage( 1 ); self endon( "death" );
self.health = 100000; self setcandamage( 1 );
self.maxhealth = self.health; self.health = 100000;
attacker = undefined; self.maxhealth = self.health;
while ( 1 ) attacker = undefined;
{
self waittill( "damage", amount, attacker ); while ( true )
if ( !isDefined( self ) ) {
{ self waittill( "damage", amount, attacker );
return;
} if ( !isdefined( self ) )
self.health = self.maxhealth; return;
while ( !isplayer( attacker ) )
{ self.health = self.maxhealth;
continue;
} if ( !isplayer( attacker ) )
if ( isDefined( self.owner ) && attacker == self.owner ) continue;
{
continue; if ( isdefined( self.owner ) && attacker == self.owner )
} continue;
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
{ if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
continue; continue;
}
} break;
if ( level.satchelexplodethisframe ) }
{
wait ( 0,1 + randomfloat( 0,4 ) ); if ( level.satchelexplodethisframe )
} wait( 0.1 + randomfloat( 0.4 ) );
else wait 0,05; else
if ( !isDefined( self ) ) wait 0.05;
{
return; if ( !isdefined( self ) )
} return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame(); level.satchelexplodethisframe = 1;
self detonate( attacker ); thread reset_satchel_explode_this_frame();
self detonate( attacker );
} }
reset_satchel_explode_this_frame() reset_satchel_explode_this_frame()
{ {
wait 0,05; wait 0.05;
level.satchelexplodethisframe = 0; level.satchelexplodethisframe = 0;
} }
play_claymore_effects() play_claymore_effects()
{ {
self endon( "death" ); self endon( "death" );
self waittill_not_moving(); self waittill_not_moving();
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" ); playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
} }
give_claymores_after_rounds() give_claymores_after_rounds()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "between_round_over" ); 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++;
}
}
}
}
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{ {
self.x = x; players = get_players();
self.y = y;
self.alignx = alignx;
self.aligny = aligny;
self.fontscale = fontscale;
self.alpha = alpha;
self.sort = 20;
}
setup_client_hintelem() for ( i = 0; i < players.size; i++ )
{ {
self endon( "death" ); if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
self endon( "disconnect" ); {
if ( !isDefined( self.hintelem ) ) players[i] giveweapon( "claymore_zm" );
{ players[i] set_player_placeable_mine( "claymore_zm" );
self.hintelem = newclienthudelem( self ); players[i] setactionslot( 4, "weapon", "claymore_zm" );
} players[i] setweaponammoclip( "claymore_zm", 2 );
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 ); }
}
}
}
} }
show_claymore_hint( string ) show_claymore_hint( string )
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
if ( string == "claymore_purchased" )
{ if ( string == "claymore_purchased" )
text = &"ZOMBIE_CLAYMORE_HOWTO"; text = &"ZOMBIE_CLAYMORE_HOWTO";
} else
else text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
{
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED"; show_equipment_hint_text( text );
}
self setup_client_hintelem();
self.hintelem settext( text );
wait 3,5;
self.hintelem settext( "" );
} }

View File

@ -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" ] );
}

View File

@ -1,150 +1,123 @@
#include maps/mp/zombies/_zm_audio; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_spawner; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_weapons; #include common_scripts\utility;
#include maps/mp/zombies/_zm_net; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_net;
#include common_scripts/utility; #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() init()
{ {
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" ); registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
register_melee_weapon_for_level( "tazer_knuckles_zm" ); 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;
}
spectator_respawn() if ( isdefined( level.tazer_cost ) )
{ cost = level.tazer_cost;
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer ); 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() watch_bodily_functions()
{ {
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro ) if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro )
{ return;
return;
} while ( isdefined( self ) && isalive( self ) )
while ( 1 ) {
{ self waittill( "damage", amount, attacker, direction_vec, point, type );
self waittill( "damage", amount, attacker, direction_vec, point, type );
if ( !isDefined( self ) ) if ( !isdefined( self ) )
{ return;
return;
} if ( !isdefined( attacker ) || !isplayer( attacker ) )
if ( !isDefined( attacker ) || !isplayer( attacker ) ) continue;
{
continue; if ( type != "MOD_MELEE" )
} continue;
while ( type != "MOD_MELEE" )
{ if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
continue; continue;
}
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) ch = randomint( 100 );
{
continue; if ( ch < 4 )
} playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
ch = randomint( 100 );
if ( ch < 4 ) if ( level.use_tazer_impact_fx )
{ {
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" ); tags = [];
} tags[0] = "J_Head";
if ( level.use_tazer_impact_fx ) tags[1] = "J_Neck";
{ playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
tags = []; }
tags[ 0 ] = "J_Head"; }
tags[ 1 ] = "J_Neck";
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) );
}
}
} }
onplayerconnect() onplayerconnect()
{ {
self thread onplayerspawned(); self thread onplayerspawned();
} }
onplayerspawned() onplayerspawned()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; )
{ for (;;)
self waittill( "spawned_player" ); {
self thread watchtazerknucklemelee(); self waittill( "spawned_player" );
}
self thread watchtazerknucklemelee();
}
} }
watchtazerknucklemelee() watchtazerknucklemelee()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; )
{ for (;;)
self waittill( "weapon_melee", weapon ); {
if ( weapon == "tazer_knuckles_zm" ) self waittill( "weapon_melee", weapon );
{
self tazerknuckle_melee(); if ( weapon == "tazer_knuckles_zm" )
} self tazerknuckle_melee();
} }
} }
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() tazer_flourish_fx()
{ {
self waittill( "weapon_change", newweapon ); self waittill( "weapon_change", newweapon );
if ( newweapon == "zombie_tazer_flourish" )
{ if ( newweapon == "zombie_tazer_flourish" )
self endon( "weapon_change" ); {
wait level.tazer_flourish_delay; self endon( "weapon_change" );
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); wait( level.tazer_flourish_delay );
self setclientfieldtoplayer( "tazer_flourish", 1 ); self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
wait_network_frame(); self setclientfieldtoplayer( "tazer_flourish", 1 );
self setclientfieldtoplayer( "tazer_flourish", 0 ); wait_network_frame();
} self setclientfieldtoplayer( "tazer_flourish", 0 );
}
} }

View File

@ -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;
}