[Buried] Added gsc-tool decompiled GSCs.

This commit is contained in:
JezuzLizard 2022-02-25 22:09:59 -08:00
parent 0d2c068adb
commit 0d8e9c835a
88 changed files with 34601 additions and 36190 deletions

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {

View File

@ -1,3 +1,5 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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,39 +1,41 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
register() register()
{ {
game[ "teamset" ] = []; game["teamset"] = [];
game[ "teamset" ][ "cdc" ] = ::cdc; game["teamset"]["cdc"] = ::cdc;
} }
level_init() level_init()
{ {
game[ "allies" ] = "cdc"; game["allies"] = "cdc";
game[ "axis" ] = "cia"; game["axis"] = "cia";
setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" ); setdvar( "g_TeamName_Allies", &"ZMUI_CDC_SHORT" );
setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" ); setdvar( "g_TeamName_Axis", &"ZMUI_CIA_SHORT" );
game[ "strings" ][ "allies_win" ] = &"ZM_CDC_WIN_MATCH"; game["strings"]["allies_win"] = &"ZM_CDC_WIN_MATCH";
game[ "strings" ][ "allies_win_round" ] = &"ZM_CDC_WIN_ROUND"; game["strings"]["allies_win_round"] = &"ZM_CDC_WIN_ROUND";
game[ "strings" ][ "allies_mission_accomplished" ] = &"ZM_CDC_MISSION_ACCOMPLISHED"; game["strings"]["allies_mission_accomplished"] = &"ZM_CDC_MISSION_ACCOMPLISHED";
game[ "strings" ][ "allies_eliminated" ] = &"ZM_CDC_ELIMINATED"; game["strings"]["allies_eliminated"] = &"ZM_CDC_ELIMINATED";
game[ "strings" ][ "allies_forfeited" ] = &"ZM_CDC_FORFEITED"; game["strings"]["allies_forfeited"] = &"ZM_CDC_FORFEITED";
game[ "strings" ][ "allies_name" ] = &"ZM_CDC_NAME"; game["strings"]["allies_name"] = &"ZM_CDC_NAME";
game[ "music" ][ "spawn_allies" ] = "SPAWN_OPS"; game["music"]["spawn_allies"] = "SPAWN_OPS";
game[ "music" ][ "victory_allies" ] = "mus_victory_usa"; game["music"]["victory_allies"] = "mus_victory_usa";
game[ "icons" ][ "allies" ] = "faction_cdc"; game["icons"]["allies"] = "faction_cdc";
game[ "colors" ][ "allies" ] = ( 0, 0, 0 ); game["colors"]["allies"] = ( 0, 0, 0 );
game[ "voice" ][ "allies" ] = "vox_st6_"; game["voice"]["allies"] = "vox_st6_";
setdvar( "scr_allies", "marines" ); setdvar( "scr_allies", "marines" );
game[ "strings" ][ "axis_win" ] = &"ZM_CIA_WIN_MATCH"; game["strings"]["axis_win"] = &"ZM_CIA_WIN_MATCH";
game[ "strings" ][ "axis_win_round" ] = &"ZM_CIA_WIN_ROUND"; game["strings"]["axis_win_round"] = &"ZM_CIA_WIN_ROUND";
game[ "strings" ][ "axis_mission_accomplished" ] = &"ZM_CIA_MISSION_ACCOMPLISHED"; game["strings"]["axis_mission_accomplished"] = &"ZM_CIA_MISSION_ACCOMPLISHED";
game[ "strings" ][ "axis_eliminated" ] = &"ZM_CIA_ELIMINATED"; game["strings"]["axis_eliminated"] = &"ZM_CIA_ELIMINATED";
game[ "strings" ][ "axis_forfeited" ] = &"ZM_CIA_FORFEITED"; game["strings"]["axis_forfeited"] = &"ZM_CIA_FORFEITED";
game[ "strings" ][ "axis_name" ] = &"ZM_CIA_NAME"; game["strings"]["axis_name"] = &"ZM_CIA_NAME";
game[ "music" ][ "spawn_axis" ] = "SPAWN_RUS"; game["music"]["spawn_axis"] = "SPAWN_RUS";
game[ "music" ][ "victory_axis" ] = "mus_victory_soviet"; game["music"]["victory_axis"] = "mus_victory_soviet";
game[ "icons" ][ "axis" ] = "faction_cia"; game["icons"]["axis"] = "faction_cia";
game[ "colors" ][ "axis" ] = ( 0,65, 0,57, 0,41 ); game["colors"]["axis"] = ( 0.65, 0.57, 0.41 );
game[ "voice" ][ "axis" ] = "vox_pmc_"; game["voice"]["axis"] = "vox_pmc_";
} }
cdc() cdc()
@ -44,8 +46,10 @@ cdc()
allies() allies()
{ {
} }
axis() axis()
{ {
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,15 @@
#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()
{ {
if ( !is_gametype_active( "zclassic" ) ) if ( !is_gametype_active( "zclassic" ) )
{
return; return;
}
level thread achievement_buried_sidequest(); level thread achievement_buried_sidequest();
level thread achievement_im_your_huckleberry(); level thread achievement_im_your_huckleberry();
level.achievement_sound_func = ::achievement_sound_func; level.achievement_sound_func = ::achievement_sound_func;
@ -18,28 +19,26 @@ init()
achievement_sound_func( achievement_name_lower ) achievement_sound_func( achievement_name_lower )
{ {
if ( !sessionmodeisonlinegame() ) if ( !sessionmodeisonlinegame() )
{
return; return;
}
self thread do_player_general_vox( "general", "achievement" ); self thread do_player_general_vox( "general", "achievement" );
} }
init_player_achievement_stats() init_player_achievement_stats()
{ {
if ( !is_gametype_active( "zclassic" ) ) if ( !is_gametype_active( "zclassic" ) )
{
return; return;
}
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_buried_sidequest", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_buried_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_ectoplasmic_residue", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_ectoplasmic_residue", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_im_your_huckleberry", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_im_your_huckleberry", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_death_from_below", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_death_from_below", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_candygram", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_candygram", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_awaken_the_gazebo", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_awaken_the_gazebo", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_revisionist_historian", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_revisionist_historian", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_mazed_and_confused", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_mazed_and_confused", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_fsirt_against_the_wall", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_fsirt_against_the_wall", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc3_when_the_revolution_comes", 0 ); self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc3_when_the_revolution_comes", 0 );
} }
onplayerconnect() onplayerconnect()
@ -59,6 +58,7 @@ achievement_buried_sidequest()
level endon( "end_game" ); level endon( "end_game" );
level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" ); level waittill_any( "sq_richtofen_complete", "sq_maxis_complete" );
/# /#
#/ #/
level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 ); level giveachievement_wrapper( "ZM_DLC3_BURIED_SIDEQUEST", 1 );
} }
@ -67,19 +67,18 @@ achievement_im_your_huckleberry()
{ {
level endon( "end_game" ); level endon( "end_game" );
num_barriers_broken = 0; num_barriers_broken = 0;
while ( 1 )
while ( true )
{ {
level waittill( "sloth_breaks_barrier" ); level waittill( "sloth_breaks_barrier" );
num_barriers_broken++; num_barriers_broken++;
if ( num_barriers_broken >= 8 ) if ( num_barriers_broken >= 8 )
{
break; break;
} }
else
{
}
}
/# /#
#/ #/
level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 ); level giveachievement_wrapper( "ZM_DLC3_IM_YOUR_HUCKLEBERRY", 1 );
} }
@ -88,8 +87,10 @@ achievement_ectoplasmic_residue()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_received_ghost_round_free_perk" ); self waittill( "player_received_ghost_round_free_perk" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" ); self giveachievement_wrapper( "ZM_DLC3_ECTOPLASMIC_RESIDUE" );
} }
@ -99,19 +100,18 @@ achievement_death_from_below()
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
num_subwoofer_deaths = 0; num_subwoofer_deaths = 0;
while ( 1 )
while ( true )
{ {
self waittill( "zombie_subwoofer_kill" ); self waittill( "zombie_subwoofer_kill" );
num_subwoofer_deaths++; num_subwoofer_deaths++;
if ( num_subwoofer_deaths >= 10 ) if ( num_subwoofer_deaths >= 10 )
{
break; break;
} }
else
{
}
}
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" ); self giveachievement_wrapper( "ZM_DLC3_DEATH_FROM_BELOW" );
} }
@ -120,8 +120,10 @@ achievement_candygram()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_gives_sloth_candy" ); self waittill( "player_gives_sloth_candy" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" ); self giveachievement_wrapper( "ZM_DLC3_CANDYGRAM" );
} }
@ -133,12 +135,13 @@ achievement_awaken_the_gazebo()
level endon( "bank_withdrawal" ); level endon( "bank_withdrawal" );
level endon( "bank_teller_used" ); level endon( "bank_teller_used" );
level endon( "weapon_locker_grab" ); level endon( "weapon_locker_grab" );
self waittill( "pap_taken" ); self waittill( "pap_taken" );
if ( level.round_number > 1 ) if ( level.round_number > 1 )
{
return; return;
}
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" ); self giveachievement_wrapper( "ZM_DLC3_AWAKEN_THE_GAZEBO" );
} }
@ -147,8 +150,10 @@ achievement_revisionist_historian()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_activates_timebomb" ); self waittill( "player_activates_timebomb" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" ); self giveachievement_wrapper( "ZM_DLC3_REVISIONIST_HISTORIAN" );
} }
@ -157,8 +162,10 @@ achievement_mazed_and_confused()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_stayed_in_maze_for_entire_high_level_round" ); self waittill( "player_stayed_in_maze_for_entire_high_level_round" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" ); self giveachievement_wrapper( "ZM_DLC3_MAZED_AND_CONFUSED" );
} }
@ -167,8 +174,10 @@ achievement_fsirt_against_the_wall()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_upgraded_lsat_from_wall" ); self waittill( "player_upgraded_lsat_from_wall" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" ); self giveachievement_wrapper( "ZM_DLC3_FSIRT_AGAINST_THE_WALL" );
} }
@ -177,8 +186,10 @@ achievement_when_the_revolution_comes()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "player_used_fountain_teleporter" ); self waittill( "player_used_fountain_teleporter" );
/# /#
#/ #/
self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" ); self giveachievement_wrapper( "ZM_DLC3_WHEN_THE_REVOLUTION_COMES" );
} }

View File

@ -1,15 +1,18 @@
#include maps/mp/zombies/_zm_zonemgr; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_audio; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_sidequests; #include common_scripts\utility;
#include maps/mp/_ambientpackage; #include maps\mp\_utility;
#include maps/mp/zm_alcatraz_utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zm_alcatraz_utility;
#include maps/mp/_utility; #include maps\mp\_ambientpackage;
#include common_scripts/utility; #include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_zonemgr;
main() main()
{ {
level.sndzombieentcontext = 1; level.sndzombieentcontext = 1;
if ( is_classic() ) if ( is_classic() )
{ {
thread sndmusicegg(); thread sndmusicegg();
@ -41,25 +44,25 @@ sndstingersetup()
sndstingersetupstates() sndstingersetupstates()
{ {
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" ); createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" );
createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" ); createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" );
createstingerstate( "zone_tunnels_center", "mus_event_location_tunnels", 0,75, "queue" ); createstingerstate( "zone_tunnels_center", "mus_event_location_tunnels", 0.75, "queue" );
createstingerstate( "zone_stables", "mus_event_location_stables", 0,75, "queue" ); createstingerstate( "zone_stables", "mus_event_location_stables", 0.75, "queue" );
createstingerstate( "zone_underground_courthouse", "mus_event_location_courthouse", 0,75, "queue" ); createstingerstate( "zone_underground_courthouse", "mus_event_location_courthouse", 0.75, "queue" );
createstingerstate( "zone_underground_bar", "mus_event_location_bar", 0,75, "queue" ); createstingerstate( "zone_underground_bar", "mus_event_location_bar", 0.75, "queue" );
createstingerstate( "zone_toy_store", "mus_event_location_toystore", 0,75, "queue" ); createstingerstate( "zone_toy_store", "mus_event_location_toystore", 0.75, "queue" );
createstingerstate( "zone_underground_jail", "mus_event_location_jail", 0,75, "queue" ); createstingerstate( "zone_underground_jail", "mus_event_location_jail", 0.75, "queue" );
createstingerstate( "zone_general_store", "mus_event_location_genstore", 0,75, "queue" ); createstingerstate( "zone_general_store", "mus_event_location_genstore", 0.75, "queue" );
createstingerstate( "zone_morgue", "mus_event_location_morgue", 0,75, "queue" ); createstingerstate( "zone_morgue", "mus_event_location_morgue", 0.75, "queue" );
createstingerstate( "zone_church_main", "mus_event_location_church", 0,75, "queue" ); createstingerstate( "zone_church_main", "mus_event_location_church", 0.75, "queue" );
createstingerstate( "zone_mansion_lawn", "mus_event_location_mansionlawn", 0,75, "queue" ); createstingerstate( "zone_mansion_lawn", "mus_event_location_mansionlawn", 0.75, "queue" );
createstingerstate( "zone_mansion", "mus_event_location_mansion", 0,75, "queue" ); createstingerstate( "zone_mansion", "mus_event_location_mansion", 0.75, "queue" );
createstingerstate( "zone_maze", "mus_event_location_maze", 0,75, "queue" ); createstingerstate( "zone_maze", "mus_event_location_maze", 0.75, "queue" );
createstingerstate( "zone_maze_staircase", "mus_event_location_mazeend", 0,75, "queue" ); createstingerstate( "zone_maze_staircase", "mus_event_location_mazeend", 0.75, "queue" );
createstingerstate( "zone_candy_store", "mus_event_location_candystore", 0,75, "queue" ); createstingerstate( "zone_candy_store", "mus_event_location_candystore", 0.75, "queue" );
createstingerstate( "zone_street_lighteast", "mus_event_location_street_east", 0,75, "queue" ); createstingerstate( "zone_street_lighteast", "mus_event_location_street_east", 0.75, "queue" );
createstingerstate( "zone_street_lightwest", "mus_event_location_street_west", 0,75, "queue" ); createstingerstate( "zone_street_lightwest", "mus_event_location_street_west", 0.75, "queue" );
createstingerstate( "zone_start_lower", "mus_event_location_diamondmine", 0,75, "queue" ); createstingerstate( "zone_start_lower", "mus_event_location_diamondmine", 0.75, "queue" );
createstingerstate( "sloth_escape", "mus_event_sloth_breakout", 0, "reject" ); createstingerstate( "sloth_escape", "mus_event_sloth_breakout", 0, "reject" );
createstingerstate( "poweron", "mus_event_poweron", 0, "reject" ); createstingerstate( "poweron", "mus_event_poweron", 0, "reject" );
createstingerstate( "sidequest_1", "mus_sidequest_0", 0, "reject" ); createstingerstate( "sidequest_1", "mus_sidequest_0", 0, "reject" );
@ -75,35 +78,31 @@ sndstingersetupstates()
createstingerstate( state, alias, prewait, interrupt ) createstingerstate( state, alias, prewait, interrupt )
{ {
s = level.sndstinger; s = level.sndstinger;
if ( !isDefined( s.states[ state ] ) )
if ( !isdefined( s.states[state] ) )
{ {
s.states[ state ] = spawnstruct(); s.states[state] = spawnstruct();
s.states[ state ].alias = alias; s.states[state].alias = alias;
s.states[ state ].prewait = prewait; s.states[state].prewait = prewait;
s.states[ state ].interrupt = interrupt; s.states[state].interrupt = interrupt;
} }
} }
sndboardmonitor() sndboardmonitor()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "last_board_torn", barrier_origin ); level waittill( "last_board_torn", barrier_origin );
players = getplayers(); players = getplayers();
_a110 = players;
_k110 = getFirstArrayKey( _a110 ); foreach ( player in players )
while ( isDefined( _k110 ) )
{ {
player = _a110[ _k110 ];
if ( distancesquared( player.origin, barrier_origin ) <= 22500 ) if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
{ {
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" );
break; break;
} }
else
{
_k110 = getNextArrayKey( _a110, _k110 );
}
} }
} }
} }
@ -116,41 +115,39 @@ locationstingerwait( zone_name, type )
level.sndlastzone = undefined; level.sndlastzone = undefined;
level.sndlocationplayed = 0; level.sndlocationplayed = 0;
level thread sndlocationbetweenroundswait(); level thread sndlocationbetweenroundswait();
for ( ;; )
{ while ( true )
while ( 1 )
{ {
level waittill( "newzoneActive", activezone ); level waittill( "newzoneActive", activezone );
wait 0,1;
while ( !sndlocationshouldplay( array, activezone ) ) wait 0.1;
{
if ( !sndlocationshouldplay( array, activezone ) )
continue; continue;
}
if ( is_true( level.sndroundwait ) ) if ( is_true( level.sndroundwait ) )
{ continue;
} else if ( is_true( level.sndstinger.isplaying ) )
}
else while ( is_true( level.sndstinger.isplaying ) )
{ {
level thread sndlocationqueue( activezone ); level thread sndlocationqueue( activezone );
continue;
} }
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone );
level.sndlocationplayed = 1; level.sndlocationplayed = 1;
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats ); array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
level.sndlastzone = activezone; level.sndlastzone = activezone;
if ( numcut >= sndnorepeats ) if ( numcut >= sndnorepeats )
{
numcut = 0; numcut = 0;
}
else else
{
numcut++; numcut++;
}
level waittill( "between_round_over" ); level waittill( "between_round_over" );
while ( is_true( level.sndroundwait ) ) while ( is_true( level.sndroundwait ) )
{ wait 0.1;
wait 0,1;
}
level.sndlocationplayed = 0; level.sndlocationplayed = 0;
} }
} }
@ -158,232 +155,192 @@ locationstingerwait( zone_name, type )
sndlocationsarray() sndlocationsarray()
{ {
array = []; array = [];
array[ 0 ] = "zone_tunnels_center"; array[0] = "zone_tunnels_center";
array[ 1 ] = "zone_church_main"; array[1] = "zone_church_main";
array[ 2 ] = "zone_mansion"; array[2] = "zone_mansion";
array[ 3 ] = "zone_maze"; array[3] = "zone_maze";
array[ 4 ] = "zone_maze_staircase"; array[4] = "zone_maze_staircase";
array[ 5 ] = "zone_street_lightwest"; array[5] = "zone_street_lightwest";
array[ 6 ] = "zone_toy_store"; array[6] = "zone_toy_store";
array[ 7 ] = "zone_candy_store"; array[7] = "zone_candy_store";
array[ 8 ] = "zone_underground_courthouse"; array[8] = "zone_underground_courthouse";
array[ 9 ] = "zone_start_lower"; array[9] = "zone_start_lower";
return array; return array;
} }
sndlocationshouldplay( array, activezone ) sndlocationshouldplay( array, activezone )
{ {
shouldplay = 0; shouldplay = 0;
if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) ) if ( activezone == "zone_start_lower" && !flag( "fountain_transport_active" ) )
{
return shouldplay; return shouldplay;
}
if ( is_true( level.music_override ) ) if ( is_true( level.music_override ) )
{
return shouldplay; return shouldplay;
}
_a197 = array; foreach ( place in array )
_k197 = getFirstArrayKey( _a197 );
while ( isDefined( _k197 ) )
{ {
place = _a197[ _k197 ];
if ( place == activezone ) if ( place == activezone )
{
shouldplay = 1; shouldplay = 1;
} }
_k197 = getNextArrayKey( _a197, _k197 );
}
if ( shouldplay == 0 ) if ( shouldplay == 0 )
{
return shouldplay; return shouldplay;
}
playersinlocal = 0; playersinlocal = 0;
players = getplayers(); players = getplayers();
_a208 = players;
_k208 = getFirstArrayKey( _a208 ); foreach ( player in players )
while ( isDefined( _k208 ) )
{ {
player = _a208[ _k208 ]; if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
{ {
if ( !is_true( player.afterlife ) ) if ( !is_true( player.afterlife ) )
{
playersinlocal++; playersinlocal++;
} }
} }
_k208 = getNextArrayKey( _a208, _k208 );
}
if ( playersinlocal >= 1 ) if ( playersinlocal >= 1 )
{
shouldplay = 1; shouldplay = 1;
}
else else
{
shouldplay = 0; shouldplay = 0;
}
return shouldplay; return shouldplay;
} }
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed ) sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
{ {
if ( numcut >= max_num_removed ) if ( numcut >= max_num_removed )
{
current_array = sndlocationsarray(); current_array = sndlocationsarray();
}
_a231 = current_array; foreach ( place in current_array )
_k231 = getFirstArrayKey( _a231 );
while ( isDefined( _k231 ) )
{ {
place = _a231[ _k231 ];
if ( place == activezone ) if ( place == activezone )
{ {
arrayremovevalue( current_array, place ); arrayremovevalue( current_array, place );
break; break;
} }
else
{
_k231 = getNextArrayKey( _a231, _k231 );
}
} }
return current_array; return current_array;
} }
sndlocationbetweenrounds() sndlocationbetweenrounds()
{ {
level endon( "newzoneActive" ); level endon( "newzoneActive" );
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names(); activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
_a248 = activezones;
_k248 = getFirstArrayKey( _a248 ); foreach ( zone in activezones )
while ( isDefined( _k248 ) )
{
zone = _a248[ _k248 ];
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
{
}
else
{ {
if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone )
continue;
players = getplayers(); players = getplayers();
_a254 = players;
_k254 = getFirstArrayKey( _a254 ); foreach ( player in players )
while ( isDefined( _k254 ) )
{ {
player = _a254[ _k254 ];
if ( is_true( player.afterlife ) ) if ( is_true( player.afterlife ) )
continue;
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) )
{ {
} wait 0.1;
else level notify( "newzoneActive", zone );
{
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
{
wait 0,1;
level notify( "newzoneActive" );
return; return;
} }
} }
_k254 = getNextArrayKey( _a254, _k254 );
}
}
_k248 = getNextArrayKey( _a248, _k248 );
} }
} }
sndlocationbetweenroundswait() sndlocationbetweenroundswait()
{ {
while ( is_true( level.sndroundwait ) ) while ( is_true( level.sndroundwait ) )
{ wait 0.1;
wait 0,1;
} while ( true )
while ( 1 )
{ {
level thread sndlocationbetweenrounds(); level thread sndlocationbetweenrounds();
level waittill( "between_round_over" ); level waittill( "between_round_over" );
while ( is_true( level.sndroundwait ) ) while ( is_true( level.sndroundwait ) )
{ wait 0.1;
wait 0,1;
}
} }
} }
sndlocationqueue( zone ) sndlocationqueue( zone )
{ {
level endon( "newzoneActive" ); level endon( "newzoneActive" );
while ( is_true( level.sndstinger.isplaying ) ) while ( is_true( level.sndstinger.isplaying ) )
{ wait 0.5;
wait 0,5;
} level notify( "newzoneActive", zone );
level notify( "newzoneActive" );
} }
sndplaystinger( state, player ) sndplaystinger( state, player )
{ {
s = level.sndstinger; s = level.sndstinger;
if ( !isDefined( s.states[ state ] ) )
{ if ( !isdefined( s.states[state] ) )
return; return;
}
interrupt = s.states[ state ].interrupt == "ignore"; interrupt = s.states[state].interrupt == "ignore";
if ( !is_true( s.isplaying ) || is_true( interrupt ) ) if ( !is_true( s.isplaying ) || is_true( interrupt ) )
{ {
if ( interrupt ) if ( interrupt )
{ {
wait s.states[ state ].prewait; wait( s.states[state].prewait );
playstinger( state, player, 1 ); playstinger( state, player, 1 );
} }
else if ( !level.sndroundwait ) else if ( !level.sndroundwait )
{ {
s.isplaying = 1; s.isplaying = 1;
wait s.states[ state ].prewait; wait( s.states[state].prewait );
playstinger( state, player, 0 ); playstinger( state, player, 0 );
level notify( "sndStingerDone" ); level notify( "sndStingerDone" );
s.isplaying = 0; s.isplaying = 0;
} }
else else if ( s.states[state].interrupt == "queue" )
{
if ( s.states[ state ].interrupt == "queue" )
{
level thread sndqueuestinger( state, player ); level thread sndqueuestinger( state, player );
}
}
return; return;
} }
if ( s.states[ state ].interrupt == "queue" )
{ if ( s.states[state].interrupt == "queue" )
level thread sndqueuestinger( state, player ); level thread sndqueuestinger( state, player );
}
} }
playstinger( state, player, ignore ) playstinger( state, player, ignore )
{ {
s = level.sndstinger; s = level.sndstinger;
if ( !isDefined( s.states[ state ] ) )
{ if ( !isdefined( s.states[state] ) )
return; return;
}
if ( is_true( level.music_override ) ) if ( is_true( level.music_override ) )
{
return; return;
}
if ( is_true( ignore ) ) if ( is_true( ignore ) )
{ {
if ( isDefined( player ) ) if ( isdefined( player ) )
{ player playsoundtoplayer( s.states[state].alias, player );
player playsoundtoplayer( s.states[ state ].alias, player );
}
else else
{ {
s.ent playsound( s.states[ state ].alias ); s.ent playsound( s.states[state].alias );
s.ent thread playstingerstop(); s.ent thread playstingerstop();
} }
} }
else if ( isDefined( player ) ) else if ( isdefined( player ) )
{ {
player playsoundtoplayer( s.states[ state ].alias, player ); player playsoundtoplayer( s.states[state].alias, player );
wait 8; wait 8;
} }
else else
{ {
s.ent playsoundwithnotify( s.states[ state ].alias, "sndStingerDone" ); s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
s.ent thread playstingerstop(); s.ent thread playstingerstop();
s.ent waittill( "sndStingerDone" ); s.ent waittill( "sndStingerDone" );
} }
} }
@ -391,24 +348,21 @@ playstinger( state, player, ignore )
sndqueuestinger( state, player ) sndqueuestinger( state, player )
{ {
s = level.sndstinger; s = level.sndstinger;
if ( is_true( s.queue ) ) if ( is_true( s.queue ) )
{
return; return;
}
else else
{ {
s.queue = 1; s.queue = 1;
while ( 1 )
while ( true )
{ {
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) ) if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
{ wait 0.5;
wait 0,5;
continue;
}
else else
{ break;
}
} }
level thread sndplaystinger( state, player ); level thread sndplaystinger( state, player );
s.queue = 0; s.queue = 0;
} }
@ -418,9 +372,11 @@ sndstingerroundwait()
{ {
wait 25; wait 25;
level.sndroundwait = 0; level.sndroundwait = 0;
while ( 1 )
while ( true )
{ {
level waittill( "end_of_round" ); level waittill( "end_of_round" );
level thread sndstingerroundwait_start(); level thread sndstingerroundwait_start();
} }
} }
@ -428,14 +384,16 @@ sndstingerroundwait()
sndstingerroundwait_start() sndstingerroundwait_start()
{ {
level.sndroundwait = 1; level.sndroundwait = 1;
wait 0,05; wait 0.05;
level thread sndstingerroundwait_end(); level thread sndstingerroundwait_end();
} }
sndstingerroundwait_end() sndstingerroundwait_end()
{ {
level endon( "end_of_round" ); level endon( "end_of_round" );
level waittill( "between_round_over" ); level waittill( "between_round_over" );
wait 28; wait 28;
level.sndroundwait = 0; level.sndroundwait = 0;
} }
@ -444,7 +402,9 @@ playstingerstop()
{ {
self endon( "sndStingerDone" ); self endon( "sndStingerDone" );
level endon( "sndStingerDone" ); level endon( "sndStingerDone" );
level waittill( "end_of_round" ); level waittill( "end_of_round" );
wait 2; wait 2;
self stopsounds(); self stopsounds();
} }
@ -454,36 +414,39 @@ sndbackgroundmustracker()
self endon( "disconnect" ); self endon( "disconnect" );
self.prevzone = "null"; self.prevzone = "null";
self.prevcase = 99; self.prevcase = 99;
while ( 1 )
while ( true )
{ {
level waittill( "newzoneActive", activezone ); level waittill( "newzoneActive", activezone );
if ( self.prevzone != activezone ) if ( self.prevzone != activezone )
{ {
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) ) if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
{ {
self.prevzone = activezone; self.prevzone = activezone;
switch( activezone )
switch ( activezone )
{ {
case "zone_start":
case "zone_start_lower": case "zone_start_lower":
case "zone_start":
if ( self.prevcase != 0 ) if ( self.prevcase != 0 )
{ {
self setclientfieldtoplayer( "sndBackgroundMus", 0 ); self setclientfieldtoplayer( "sndBackgroundMus", 0 );
self.prevcase = 0; self.prevcase = 0;
} }
break; break;
break;
case "zone_mansion":
case "zone_mansion_backyard":
case "zone_mansion_lawn":
case "zone_maze":
case "zone_maze_staircase": case "zone_maze_staircase":
case "zone_maze":
case "zone_mansion_lawn":
case "zone_mansion_backyard":
case "zone_mansion":
if ( self.prevcase != 2 ) if ( self.prevcase != 2 )
{ {
self setclientfieldtoplayer( "sndBackgroundMus", 2 ); self setclientfieldtoplayer( "sndBackgroundMus", 2 );
self.prevcase = 2; self.prevcase = 2;
} }
break;
break; break;
default: default:
if ( self.prevcase != 1 ) if ( self.prevcase != 1 )
@ -491,7 +454,7 @@ sndbackgroundmustracker()
self setclientfieldtoplayer( "sndBackgroundMus", 1 ); self setclientfieldtoplayer( "sndBackgroundMus", 1 );
self.prevcase = 1; self.prevcase = 1;
} }
break;
break; break;
} }
} }
@ -502,14 +465,12 @@ sndbackgroundmustracker()
sndshoulditplay( activezone ) sndshoulditplay( activezone )
{ {
if ( self.prevzone == activezone ) if ( self.prevzone == activezone )
{ return false;
return 0;
} if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) ) return false;
{
return 0; return true;
}
return 1;
} }
sndlastlifesetup() sndlastlifesetup()
@ -523,15 +484,18 @@ sndlastlife_multi()
level endon( "end_of_round" ); level endon( "end_of_round" );
level thread sndlastlife_multi_reset(); level thread sndlastlife_multi_reset();
sndplayersdead = 0; sndplayersdead = 0;
while ( 1 )
while ( true )
{ {
level waittill( "bleed_out" ); level waittill( "bleed_out" );
sndplayersdead++; sndplayersdead++;
players = getplayers(); players = getplayers();
if ( ( players.size - sndplayersdead ) <= 1 )
if ( players.size - sndplayersdead <= 1 )
{ {
last_alive = sndlastlife_multi_getlastplayer(); last_alive = sndlastlife_multi_getlastplayer();
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" ); level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
return; return;
} }
} }
@ -540,55 +504,50 @@ sndlastlife_multi()
sndlastlife_multi_getlastplayer() sndlastlife_multi_getlastplayer()
{ {
level endon( "end_of_round" ); level endon( "end_of_round" );
wait 0,5; wait 0.5;
players = getplayers(); players = getplayers();
_a572 = players;
_k572 = getFirstArrayKey( _a572 ); foreach ( dude in players )
while ( isDefined( _k572 ) )
{ {
dude = _a572[ _k572 ];
if ( dude.sessionstate == "spectator" ) if ( dude.sessionstate == "spectator" )
{ continue;
}
else
{
return dude; return dude;
} }
_k572 = getNextArrayKey( _a572, _k572 );
}
} }
sndlastlife_multi_reset() sndlastlife_multi_reset()
{ {
level waittill( "end_of_round" ); level waittill( "end_of_round" );
level thread sndlastlife_multi(); level thread sndlastlife_multi();
} }
sndmusicegg() sndmusicegg()
{ {
origins = []; origins = [];
origins[ 0 ] = ( -1215,63, -499,975, 291,89 ); origins[0] = ( -1215.63, -499.975, 291.89 );
origins[ 1 ] = ( 552,009, -342,824, 27,3921 ); origins[1] = ( 552.009, -342.824, 27.3921 );
origins[ 2 ] = ( 2827,28, 306,468, 92,783 ); origins[2] = ( 2827.28, 306.468, 92.783 );
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( bottle_origin ) sndmusicegg_wait( bottle_origin )
{ {
temp_ent = spawn( "script_origin", bottle_origin ); temp_ent = spawn( "script_origin", bottle_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 waittill( "main_music_egg_hit", player );
temp_ent stoploopsound( 1 ); temp_ent stoploopsound( 1 );
player playsound( "zmb_meteor_activate" ); player playsound( "zmb_meteor_activate" );
level.meteor_counter += 1; level.meteor_counter += 1;
if ( level.meteor_counter == 3 ) if ( level.meteor_counter == 3 )
{ {
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 363 ); level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 363 );
@ -596,7 +555,7 @@ sndmusicegg_wait( bottle_origin )
} }
else else
{ {
wait 1,5; wait 1.5;
temp_ent delete(); temp_ent delete();
} }
} }
@ -604,10 +563,9 @@ sndmusicegg_wait( bottle_origin )
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 )
@ -620,7 +578,7 @@ sndmuseggplay( ent, alias, time )
level waittill_either( "end_game", "sndSongDone" ); level waittill_either( "end_game", "sndSongDone" );
ent stopsounds(); ent stopsounds();
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
wait 0,05; wait 0.05;
ent delete(); ent delete();
level.music_override = 0; level.music_override = 0;
} }
@ -628,24 +586,23 @@ sndmuseggplay( ent, alias, time )
sndeggmusicwait( time ) sndeggmusicwait( time )
{ {
level endon( "end_game" ); level endon( "end_game" );
wait time; wait( time );
level notify( "sndSongDone" ); level notify( "sndSongDone" );
} }
sndmusicquestendgame( alias, length ) sndmusicquestendgame( alias, length )
{ {
while ( is_true( level.music_override ) ) while ( is_true( level.music_override ) )
{
wait 1; wait 1;
}
level.music_override = 1; level.music_override = 1;
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
ent = spawn( "script_origin", ( 0, 0, 0 ) ); ent = spawn( "script_origin", ( 0, 0, 0 ) );
ent playsound( alias ); ent playsound( alias );
wait length; wait( length );
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
level.music_override = 0; level.music_override = 0;
wait 0,05; wait 0.05;
ent delete(); ent delete();
wait 1; wait 1;
level thread sndendgamemusicredux( alias, length ); level thread sndendgamemusicredux( alias, length );
@ -654,26 +611,26 @@ sndmusicquestendgame( alias, length )
easter_egg_song_vo( player ) easter_egg_song_vo( player )
{ {
if ( isalive( player ) ) if ( isalive( player ) )
{ player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "quest", "find_secret" );
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" );
}
} }
sndendgamemusicredux( alias, length ) sndendgamemusicredux( alias, length )
{ {
m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" ); m_endgame_machine = getstruct( "sq_endgame_machine", "targetname" );
temp_ent = spawn( "script_origin", m_endgame_machine.origin ); temp_ent = spawn( "script_origin", m_endgame_machine.origin );
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 playloopsound( "zmb_meteor_loop" ); temp_ent playloopsound( "zmb_meteor_loop" );
temp_ent waittill( "main_music_egg_hit", player ); temp_ent waittill( "main_music_egg_hit", player );
temp_ent stoploopsound( 1 ); temp_ent stoploopsound( 1 );
level.music_override = 1; level.music_override = 1;
temp_ent playsound( "zmb_endgame_mach_button" ); temp_ent playsound( "zmb_endgame_mach_button" );
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
temp_ent playsound( alias ); temp_ent playsound( alias );
wait length; wait( length );
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
level.music_override = 0; level.music_override = 0;
wait 0,05; wait 0.05;
temp_ent delete(); temp_ent delete();
} }

View File

@ -1,51 +1,51 @@
#include maps/mp/zombies/_zm_ai_basic; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_zonemgr; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_spawner; #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_spawner;
#include maps\mp\zombies\_zm_zonemgr;
#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 = 1600; level.zombie_tracking_dist = 1600;
}
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 = 0.4;
level.zombie_tracking_wait = 0,4;
} while ( true )
for ( ;; )
{
while ( 1 )
{ {
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{ {
wait level.zombie_tracking_wait; wait( level.zombie_tracking_wait );
continue;
} }
} else
else i = 0;
while ( i < zombies.size )
{ {
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking && isDefined( zombies[ i ].ignoreall ) && !zombies[ i ].ignoreall ) for ( i = 0; i < zombies.size; i++ )
{ {
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 ) && ( isdefined( zombies[i].ignoreall ) && !zombies[i].ignoreall ) )
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 ( self can_be_deleted_from_buried_special_zones() ) if ( self can_be_deleted_from_buried_special_zones() )
{ {
self.inview = 0; self.inview = 0;
@ -53,37 +53,32 @@ delete_zombie_noone_looking( how_close, how_high )
} }
else else
{ {
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;
}
if ( isDefined( self.has_legs ) && !self.has_legs ) if ( !( isdefined( self.has_legs ) && self.has_legs ) )
{ how_close *= 1.5;
how_close *= 1,5;
}
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();
_a98 = players;
_k98 = getFirstArrayKey( _a98 ); foreach ( player in players )
while ( isDefined( _k98 ) )
{ {
player = _a98[ _k98 ];
if ( player.sessionstate == "spectator" ) if ( player.sessionstate == "spectator" )
{ continue;
}
else if ( isDefined( player.laststand ) && player.laststand && isDefined( self.favoriteenemy ) && self.favoriteenemy == player ) if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
{ {
if ( !self can_zombie_see_any_player() ) if ( !self can_zombie_see_any_player() )
{ {
@ -92,57 +87,53 @@ delete_zombie_noone_looking( how_close, how_high )
self thread escaped_zombies_cleanup(); self thread escaped_zombies_cleanup();
} }
} }
if ( isDefined( level.only_track_targeted_players ) )
{ if ( isdefined( level.only_track_targeted_players ) )
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != player )
{ {
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
continue;
} }
}
else
{
can_be_seen = self player_can_see_me( player ); can_be_seen = self player_can_see_me( player );
distance_squared = distancesquared( self.origin, player.origin ); distance_squared = distancesquared( self.origin, player.origin );
if ( can_be_seen && distance_squared < too_far_dist ) if ( can_be_seen && distance_squared < too_far_dist )
{
self.inview++; self.inview++;
}
if ( distance_squared < distance_squared_check && abs( self.origin[ 2 ] - player.origin[ 2 ] ) < how_high ) if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
{
self.player_close++; self.player_close++;
} }
} }
_k98 = getNextArrayKey( _a98, _k98 );
} wait 0.1;
}
wait 0,1;
if ( self.inview == 0 && self.player_close == 0 ) if ( self.inview == 0 && self.player_close == 0 )
{ {
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" ) if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
{
return; return;
}
if ( isDefined( self.electrified ) && self.electrified == 1 ) if ( isdefined( self.electrified ) && self.electrified == 1 )
{
return; return;
}
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
{ {
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher ) if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{ {
level.zombie_total++; level.zombie_total++;
if ( self.health < level.zombie_health ) if ( self.health < level.zombie_health )
{ level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
} }
} }
}
self maps/mp/zombies/_zm_spawner::reset_attack_spot(); self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" ); self notify( "zombie_delete" );
if ( isDefined( self.anchor ) )
{ if ( isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
}
self delete(); self delete();
recalc_zombie_array(); recalc_zombie_array();
} }
@ -151,123 +142,112 @@ delete_zombie_noone_looking( how_close, how_high )
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; anglefromcenter = 180;
}
else else
{
anglefromcenter = acos( forwarddotbanzai ); anglefromcenter = acos( forwarddotbanzai );
}
playerfov = getDvarFloat( "cg_fov" ); playerfov = getdvarfloat( "cg_fov" );
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" ); banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
if ( banzaivsplayerfovbuffer <= 0 ) if ( banzaivsplayerfovbuffer <= 0 )
{ banzaivsplayerfovbuffer = 0.2;
banzaivsplayerfovbuffer = 0,2;
} playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme; return playercanseeme;
} }
can_be_deleted_from_buried_special_zones() can_be_deleted_from_buried_special_zones()
{ {
if ( self can_be_deleted_from_start_area() ) if ( self can_be_deleted_from_start_area() )
{ return true;
return 1;
}
if ( self can_be_deleted_from_maze_area() ) if ( self can_be_deleted_from_maze_area() )
{ return true;
return 1;
} return false;
return 0;
} }
can_be_deleted_from_start_area() can_be_deleted_from_start_area()
{ {
start_zones = []; start_zones = [];
start_zones[ start_zones.size ] = "zone_start"; start_zones[start_zones.size] = "zone_start";
start_zones[ start_zones.size ] = "zone_start_lower"; start_zones[start_zones.size] = "zone_start_lower";
return self can_be_deleted_from_area( start_zones ); return self can_be_deleted_from_area( start_zones );
} }
can_be_deleted_from_maze_area() can_be_deleted_from_maze_area()
{ {
maze_zones = []; maze_zones = [];
maze_zones[ maze_zones.size ] = "zone_mansion_backyard"; maze_zones[maze_zones.size] = "zone_mansion_backyard";
maze_zones[ maze_zones.size ] = "zone_maze"; maze_zones[maze_zones.size] = "zone_maze";
maze_zones[ maze_zones.size ] = "zone_maze_staircase"; maze_zones[maze_zones.size] = "zone_maze_staircase";
return self can_be_deleted_from_area( maze_zones ); return self can_be_deleted_from_area( maze_zones );
} }
can_be_deleted_from_area( zone_names ) can_be_deleted_from_area( zone_names )
{ {
self_in_zone = 0; self_in_zone = 0;
_a265 = zone_names;
_k265 = getFirstArrayKey( _a265 ); foreach ( zone_name in zone_names )
while ( isDefined( _k265 ) )
{
zone_name = _a265[ _k265 ];
if ( isDefined( level.zones[ zone_name ] ) && isDefined( level.zones[ zone_name ].is_occupied ) && level.zones[ zone_name ].is_occupied )
{
return 0;
}
if ( !self_in_zone && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone_name ) )
{ {
if ( isdefined( level.zones[zone_name] ) && ( isdefined( level.zones[zone_name].is_occupied ) && level.zones[zone_name].is_occupied ) )
return false;
if ( !self_in_zone && self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone_name ) )
self_in_zone = 1; self_in_zone = 1;
} }
_k265 = getNextArrayKey( _a265, _k265 );
}
if ( self_in_zone ) if ( self_in_zone )
{ return true;
return 1;
} return false;
return 0;
} }
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 ( is_player_valid( players[ i ] ) && !is_true( players[ i ].is_in_ghost_zone ) && self maymovetopoint( players[ i ].origin, 1 ) ) if ( is_player_valid( players[i] ) && !is_true( players[i].is_in_ghost_zone ) && 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 ( !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 thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1; self.zombie_path_bad = 1;
self escaped_zombies_cleanup(); self escaped_zombies_cleanup();
} }
wait 0,1;
wait 0.1;
} }
} }
@ -277,30 +257,33 @@ escaped_zombies_cleanup()
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 setgoalpos( s_escape.origin );
self thread check_player_available(); self thread check_player_available();
self waittill_any( "goal", "reaquire_player" ); self waittill_any( "goal", "reaquire_player" );
} }
self.zombie_path_bad = !can_zombie_path_to_any_player(); self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0,1; wait 0.1;
if ( !self.zombie_path_bad ) if ( !self.zombie_path_bad )
{ self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
}
} }
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_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones ); a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations ); s_farthest = self get_farthest_dog_location( a_dog_locations );
} }
return s_farthest; return s_farthest;
} }
@ -310,6 +293,7 @@ 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" );
while ( self.zombie_path_bad ) while ( self.zombie_path_bad )
{ {
if ( self can_zombie_see_any_player() ) if ( self can_zombie_see_any_player() )
@ -317,95 +301,75 @@ check_player_available()
self notify( "reaquire_player" ); self notify( "reaquire_player" );
return; return;
} }
wait randomfloatrange( 0,2, 0,5 );
wait( randomfloatrange( 0.2, 0.5 ) );
} }
self notify( "reaquire_player" ); self notify( "reaquire_player" );
} }
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 ( !is_player_valid( a_players[ i ] ) ) if ( !is_player_valid( a_players[i] ) )
{
i++;
continue; continue;
}
else if ( is_true( a_players[ i ].is_in_ghost_zone ) ) if ( is_true( a_players[i].is_in_ghost_zone ) )
{
i++;
continue; continue;
if ( findpath( self.origin, a_players[i].origin ) )
return true;
} }
else
{ return false;
if ( findpath( self.origin, a_players[ i ].origin ) )
{
return 1;
}
}
i++;
}
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 ( !is_player_valid( a_players[ i ] ) ) if ( !is_player_valid( a_players[i] ) )
{
i++;
continue; continue;
}
else
{
path_length = 0; path_length = 0;
if ( !is_true( a_players[ i ].is_in_ghost_zone ) )
{ if ( !is_true( a_players[i].is_in_ghost_zone ) )
path_length = self calcpathlength( a_players[ i ].origin ); path_length = self calcpathlength( a_players[i].origin );
if ( self maymovetopoint( a_players[i].origin, 1 ) || path_length != 0 )
return true;
} }
if ( self maymovetopoint( a_players[ i ].origin, 1 ) || path_length != 0 )
{ return false;
return 1;
}
}
i++;
}
return 0;
} }
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 = [];
_a479 = a_zones;
_k479 = getFirstArrayKey( _a479 ); foreach ( zone in a_zones )
while ( isDefined( _k479 ) ) a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
{
zone = _a479[ _k479 ];
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
_k479 = getNextArrayKey( _a479, _k479 );
}
return a_dog_locations; return a_dog_locations;
} }
@ -413,16 +377,17 @@ 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_distance_farthest = n_distance_sq;
n_farthest_index = i; n_farthest_index = i;
} }
i++;
} }
return a_dog_locations[ n_farthest_index ];
return a_dog_locations[n_farthest_index];
} }

View File

@ -1,21 +1,20 @@
#include maps/mp/zombies/_zm_powerups; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_perks; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_score; #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_score;
#include maps\mp\zombies\_zm_perks;
#using_animtree( "zm_buried_ghost" ); #include maps\mp\zombies\_zm_powerups;
#using_animtree( "fxanim_props_dlc3" );
init_ghost_piano() init_ghost_piano()
{ {
t_bullseye = getent( "bullseye", "script_noteworthy" ); t_bullseye = getent( "bullseye", "script_noteworthy" );
t_chalk_line = getent( "ee_bar_chalk_line_trigger", "targetname" ); t_chalk_line = getent( "ee_bar_chalk_line_trigger", "targetname" );
if ( !isDefined( t_bullseye ) || !isDefined( t_chalk_line ) )
{ if ( !isdefined( t_bullseye ) || !isdefined( t_chalk_line ) )
return; return;
}
t_bullseye thread wait_for_valid_damage(); t_bullseye thread wait_for_valid_damage();
t_chalk_line thread set_flags_while_players_stand_in_trigger(); t_chalk_line thread set_flags_while_players_stand_in_trigger();
level thread mansion_ghost_plays_piano(); level thread mansion_ghost_plays_piano();
@ -34,15 +33,15 @@ init_ee_ghost_piano_flags()
wait_for_valid_damage() wait_for_valid_damage()
{ {
self setcandamage( 1 ); self setcandamage( 1 );
while ( 1 )
while ( true )
{ {
self waittill( "damage" ); self waittill( "damage", e_inflictor, str_weapon_name );
if ( is_ballistic_knife_variant( str_weapon_name ) ) if ( is_ballistic_knife_variant( str_weapon_name ) )
{ {
if ( isDefined( e_inflictor ) && e_inflictor ent_flag_exist( "ee_standing_behind_chalk_line" ) && e_inflictor ent_flag( "ee_standing_behind_chalk_line" ) && !flag( "player_piano_song_active" ) ) if ( isdefined( e_inflictor ) && e_inflictor ent_flag_exist( "ee_standing_behind_chalk_line" ) && e_inflictor ent_flag( "ee_standing_behind_chalk_line" ) && !flag( "player_piano_song_active" ) )
{ level notify( "player_can_interact_with_ghost_piano_player", e_inflictor );
level notify( "player_can_interact_with_ghost_piano_player" );
}
} }
} }
} }
@ -54,31 +53,31 @@ is_ballistic_knife_variant( str_weapon )
set_flags_while_players_stand_in_trigger() set_flags_while_players_stand_in_trigger()
{ {
while ( 1 ) while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( !player ent_flag_exist( "ee_standing_behind_chalk_line" ) ) if ( !player ent_flag_exist( "ee_standing_behind_chalk_line" ) )
{
player ent_flag_init( "ee_standing_behind_chalk_line" ); player ent_flag_init( "ee_standing_behind_chalk_line" );
}
if ( !player ent_flag( "ee_standing_behind_chalk_line" ) ) if ( !player ent_flag( "ee_standing_behind_chalk_line" ) )
{
player thread clear_flag_when_player_leaves_trigger( self ); player thread clear_flag_when_player_leaves_trigger( self );
} }
}
} }
clear_flag_when_player_leaves_trigger( trigger ) clear_flag_when_player_leaves_trigger( trigger )
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self ent_flag_set( "ee_standing_behind_chalk_line" ); self ent_flag_set( "ee_standing_behind_chalk_line" );
while ( self istouching( trigger ) ) while ( self istouching( trigger ) )
{ wait 0.25;
wait 0,25;
}
self ent_flag_clear( "ee_standing_behind_chalk_line" ); self ent_flag_clear( "ee_standing_behind_chalk_line" );
} }
#using_animtree("fxanim_props_dlc3");
player_piano_starts() player_piano_starts()
{ {
/# /#
@ -88,7 +87,7 @@ player_piano_starts()
level notify( "piano_play" ); level notify( "piano_play" );
level setclientfield( "mansion_piano_play", 1 ); level setclientfield( "mansion_piano_play", 1 );
level setclientfield( "saloon_piano_play", 1 ); level setclientfield( "saloon_piano_play", 1 );
wait getanimlength( %fxanim_gp_piano_old_anim ); wait( getanimlength( %fxanim_gp_piano_old_anim ) );
/# /#
iprintln( "player piano song done" ); iprintln( "player piano song done" );
#/ #/
@ -99,7 +98,7 @@ player_piano_starts()
mansion_ghost_plays_piano() mansion_ghost_plays_piano()
{ {
while ( 1 ) while ( true )
{ {
flag_wait( "player_piano_song_active" ); flag_wait( "player_piano_song_active" );
e_ghost = spawn_and_animate_ghost_pianist(); e_ghost = spawn_and_animate_ghost_pianist();
@ -108,6 +107,8 @@ mansion_ghost_plays_piano()
} }
} }
#using_animtree("zm_buried_ghost");
spawn_and_animate_ghost_pianist() spawn_and_animate_ghost_pianist()
{ {
s_anim = getstruct( "ee_mansion_piano_anim_struct", "targetname" ); s_anim = getstruct( "ee_mansion_piano_anim_struct", "targetname" );
@ -129,15 +130,19 @@ reward_think()
t_use = getent( "ee_ghost_piano_mansion_use_trigger", "targetname" ); t_use = getent( "ee_ghost_piano_mansion_use_trigger", "targetname" );
t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 ); t_use sethintstring( &"ZM_BURIED_HINT_GHOST_PIANO", 10 );
t_use setinvisibletoall(); t_use setinvisibletoall();
while ( 1 )
while ( true )
{ {
level waittill( "player_can_interact_with_ghost_piano_player", player ); level waittill( "player_can_interact_with_ghost_piano_player", player );
level thread player_piano_starts(); level thread player_piano_starts();
if ( !player has_player_received_reward() ) if ( !player has_player_received_reward() )
{ {
t_use setvisibletoplayer( player ); t_use setvisibletoplayer( player );
t_use thread player_can_use_ghost_piano_trigger( player ); t_use thread player_can_use_ghost_piano_trigger( player );
} }
flag_waitopen( "player_piano_song_active" ); flag_waitopen( "player_piano_song_active" );
t_use setinvisibletoall(); t_use setinvisibletoall();
level notify( "ghost_piano_reward_unavailable" ); level notify( "ghost_piano_reward_unavailable" );
@ -148,24 +153,25 @@ player_can_use_ghost_piano_trigger( player )
{ {
player endon( "death_or_disconnect" ); player endon( "death_or_disconnect" );
level endon( "ghost_piano_reward_unavailable" ); level endon( "ghost_piano_reward_unavailable" );
do
self waittill( "trigger", user ); self waittill( "trigger", user );
if ( user != player && player.score < 10 && !player has_player_received_reward() ) while ( user != player || player.score < 10 || !is_player_valid( player ) );
{
if ( !player has_player_received_reward() )
self give_reward( player ); self give_reward( player );
}
} }
give_reward( player ) give_reward( player )
{ {
player maps/mp/zombies/_zm_score::minus_to_player_score( 10 ); player maps\mp\zombies\_zm_score::minus_to_player_score( 10 );
player.got_easter_egg_reward = 1; player.got_easter_egg_reward = 1;
self setinvisibletoplayer( player ); self setinvisibletoplayer( player );
player notify( "player_received_ghost_round_free_perk" ); player notify( "player_received_ghost_round_free_perk" );
free_perk = player maps/mp/zombies/_zm_perks::give_random_perk(); free_perk = player maps\mp\zombies\_zm_perks::give_random_perk();
if ( is_true( level.disable_free_perks_before_power ) ) if ( is_true( level.disable_free_perks_before_power ) )
{ player thread maps\mp\zombies\_zm_powerups::disable_perk_before_power( free_perk );
player thread maps/mp/zombies/_zm_powerups::disable_perk_before_power( free_perk );
}
/# /#
iprintln( "player got reward!!" ); iprintln( "player got reward!!" );
#/ #/
@ -189,34 +195,25 @@ delete_ghost_pianist()
devgui_support_ee() devgui_support_ee()
{ {
while ( 1 ) while ( true )
{ {
str_notify = level waittill_any_return( "ghost_piano_warp_to_mansion_piano", "ghost_piano_warp_to_bar" ); str_notify = level waittill_any_return( "ghost_piano_warp_to_mansion_piano", "ghost_piano_warp_to_bar" );
if ( str_notify == "ghost_piano_warp_to_mansion_piano" ) if ( str_notify == "ghost_piano_warp_to_mansion_piano" )
{ get_players()[0] warp_to_struct( "ee_warp_mansion_piano", "targetname" );
get_players()[ 0 ] warp_to_struct( "ee_warp_mansion_piano", "targetname" ); else if ( str_notify == "ghost_piano_warp_to_bar" )
continue; get_players()[0] warp_to_struct( "ee_warp_bar", "targetname" );
}
else
{
if ( str_notify == "ghost_piano_warp_to_bar" )
{
get_players()[ 0 ] warp_to_struct( "ee_warp_bar", "targetname" );
}
}
} }
} }
warp_to_struct( str_value, str_key ) warp_to_struct( str_value, str_key )
{ {
if ( !isDefined( str_key ) ) if ( !isdefined( str_key ) )
{
str_key = "targetname"; str_key = "targetname";
}
s_warp = getstruct( str_value, str_key ); s_warp = getstruct( str_value, str_key );
self setorigin( s_warp.origin ); self setorigin( s_warp.origin );
if ( isDefined( s_warp.angles ) )
{ if ( isdefined( s_warp.angles ) )
self setplayerangles( s_warp.angles ); self setplayerangles( s_warp.angles );
}
} }

View File

@ -1,10 +1,12 @@
#include maps/mp/zombies/_zm; // T6 GSC SOURCE
#include maps/mp/gametypes_zm/_zm_gametype; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_buried; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_zonemgr; #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_zonemgr;
#include maps/mp/_utility; #include maps\mp\zm_buried;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm;
main_start() main_start()
{ {
@ -16,6 +18,7 @@ main_start()
level thread spawned_slide_prone_trigger(); level thread spawned_slide_prone_trigger();
level thread spawned_life_triggers(); level thread spawned_life_triggers();
onplayerconnect_callback( ::ffotd_player_threads ); onplayerconnect_callback( ::ffotd_player_threads );
level thread reset_vulture_dvars_post_migrate();
} }
main_end() main_end()
@ -25,6 +28,7 @@ main_end()
level thread zgrief_mode_fix(); level thread zgrief_mode_fix();
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override; level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
} }
level.zombie_init_done = ::ffotd_zombie_init_done; level.zombie_init_done = ::ffotd_zombie_init_done;
level thread bar_spawner_fix(); level thread bar_spawner_fix();
level thread maze_blocker_fix(); level thread maze_blocker_fix();
@ -32,9 +36,29 @@ main_end()
level thread player_respawn_fix(); level thread player_respawn_fix();
} }
reset_vulture_dvars_post_migrate()
{
while ( true )
{
level waittill( "host_migration_end" );
setdvarint( "zombies_perk_vulture_pickup_time", 12 );
setdvarint( "zombies_perk_vulture_pickup_time_stink", 16 );
setdvarint( "zombies_perk_vulture_drop_chance", 65 );
setdvarint( "zombies_perk_vulture_ammo_chance", 33 );
setdvarint( "zombies_perk_vulture_points_chance", 33 );
setdvarint( "zombies_perk_vulture_stink_chance", 33 );
setdvarint( "zombies_perk_vulture_drops_max", 20 );
setdvarint( "zombies_perk_vulture_network_drops_max", 5 );
setdvarint( "zombies_perk_vulture_network_time_frame", 250 );
setdvarint( "zombies_perk_vulture_spawn_stink_zombie_cooldown", 12 );
setdvarint( "zombies_perk_vulture_max_stink_zombies", 4 );
}
}
ffotd_zombie_init_done() ffotd_zombie_init_done()
{ {
self maps/mp/zm_buried::zombie_init_done(); self maps\mp\zm_buried::zombie_init_done();
self thread jail_traversal_fix(); self thread jail_traversal_fix();
} }
@ -43,31 +67,31 @@ jail_traversal_fix()
self endon( "death" ); self endon( "death" );
window_pos = ( -837, 496, 8 ); window_pos = ( -837, 496, 8 );
fix_dist = 64; fix_dist = 64;
while ( 1 )
while ( true )
{ {
dist = distancesquared( self.origin, window_pos ); dist = distancesquared( self.origin, window_pos );
if ( dist < fix_dist ) if ( dist < fix_dist )
{ {
node = self getnegotiationstartnode(); node = self getnegotiationstartnode();
if ( isDefined( node ) )
if ( isdefined( node ) )
{ {
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" ) if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
{ {
self setphysparams( 25, 0, 72 ); self setphysparams( 25, 0, 72 );
wait 1; wait 1;
if ( is_true( self.has_legs ) ) if ( is_true( self.has_legs ) )
{
self setphysparams( 15, 0, 72 ); self setphysparams( 15, 0, 72 );
break;
}
else else
{
self setphysparams( 15, 0, 24 ); self setphysparams( 15, 0, 24 );
} }
} }
} }
}
wait 0,25; wait 0.25;
} }
} }
@ -78,91 +102,79 @@ ghost_round_override_init()
width = 91; width = 91;
height = 290; height = 290;
trig1 = spawn( "trigger_box", origin, 0, length, width, height ); trig1 = spawn( "trigger_box", origin, 0, length, width, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 69 ); trig1.angles = vectorscale( ( 0, 1, 0 ), 69.0 );
trig1.script_noteworthy = "ghost_round_override"; trig1.script_noteworthy = "ghost_round_override";
} }
zgrief_mode_fix() zgrief_mode_fix()
{ {
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" ); speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
_a98 = speed_trigger;
_k98 = getFirstArrayKey( _a98 ); foreach ( trig in speed_trigger )
while ( isDefined( _k98 ) )
{ {
trig = _a98[ _k98 ]; if ( trig.origin == ( -170.5, -328.25, 174 ) )
if ( trig.origin == ( -170,5, -328,25, 174 ) )
{ {
trig.origin += vectorScale( ( 0, 0, 0 ), 32 ); trig.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
if ( isDefined( trig.clip ) )
{ if ( isdefined( trig.clip ) )
trig.clip.origin += vectorScale( ( 0, 0, 0 ), 32 ); trig.clip.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
if ( isdefined( trig.machine ) )
trig.machine.origin += vectorscale( ( 0, -1, 0 ), 32.0 );
} }
if ( isDefined( trig.machine ) )
{
trig.machine.origin += vectorScale( ( 0, 0, 0 ), 32 );
}
}
_k98 = getNextArrayKey( _a98, _k98 );
} }
} }
zgrief_respawn_override( revivee, return_struct ) zgrief_respawn_override( revivee, return_struct )
{ {
players = get_players(); players = get_players();
spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype(); spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
grief_initial = getstructarray( "street_standard_player_spawns", "targetname" ); grief_initial = getstructarray( "street_standard_player_spawns", "targetname" );
_a119 = grief_initial;
_k119 = getFirstArrayKey( _a119 ); foreach ( struct in grief_initial )
while ( isDefined( _k119 ) )
{ {
struct = _a119[ _k119 ]; if ( isdefined( struct.script_int ) && struct.script_int == 2000 )
if ( isDefined( struct.script_int ) && struct.script_int == 2000 )
{ {
spawn_points[ spawn_points.size ] = struct; spawn_points[spawn_points.size] = struct;
initial_point = struct; initial_point = struct;
initial_point.locked = 0; initial_point.locked = 0;
} }
_k119 = getNextArrayKey( _a119, _k119 );
} }
closest_group = undefined; closest_group = undefined;
closest_distance = 100000000; closest_distance = 100000000;
backup_group = undefined; backup_group = undefined;
backup_distance = 100000000; backup_distance = 100000000;
if ( spawn_points.size == 0 ) if ( spawn_points.size == 0 )
{
return undefined; return undefined;
}
i = 0; for ( i = 0; i < players.size; i++ )
while ( i < players.size )
{ {
while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self ) if ( is_player_valid( players[i], undefined, 1 ) && players[i] != self )
{ {
j = 0; for ( j = 0; j < spawn_points.size; j++ )
while ( j < spawn_points.size )
{ {
if ( isDefined( spawn_points[ j ].script_int ) ) if ( isdefined( spawn_points[j].script_int ) )
{ ideal_distance = spawn_points[j].script_int;
ideal_distance = spawn_points[ j ].script_int;
}
else else
{
ideal_distance = 1000; ideal_distance = 1000;
}
if ( spawn_points[ j ].locked == 0 ) if ( spawn_points[j].locked == 0 )
{ {
plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin ); plyr_dist = distancesquared( players[i].origin, spawn_points[j].origin );
if ( plyr_dist < ( ideal_distance * ideal_distance ) )
if ( plyr_dist < ideal_distance * ideal_distance )
{ {
if ( plyr_dist < closest_distance ) if ( plyr_dist < closest_distance )
{ {
closest_distance = plyr_dist; closest_distance = plyr_dist;
closest_group = j; closest_group = j;
} }
j++;
continue; continue;
} }
else
{
if ( plyr_dist < backup_distance ) if ( plyr_dist < backup_distance )
{ {
backup_group = j; backup_group = j;
@ -170,45 +182,38 @@ zgrief_respawn_override( revivee, return_struct )
} }
} }
} }
j++;
} }
}
if ( !isDefined( closest_group ) ) if ( !isdefined( closest_group ) )
{
closest_group = backup_group; closest_group = backup_group;
}
if ( isDefined( closest_group ) ) if ( isdefined( closest_group ) )
{ {
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
if ( isDefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
if ( isdefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
{ {
if ( isDefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() ) if ( isdefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
{
i++;
continue; continue;
}
else
{
return spawn_location; return spawn_location;
} }
} }
} }
i++;
} if ( isdefined( initial_point ) )
while ( isDefined( initial_point ) )
{ {
k = 0; for ( k = 0; k < spawn_points.size; k++ )
while ( k < spawn_points.size )
{ {
if ( spawn_points[ k ] == initial_point ) if ( spawn_points[k] == initial_point )
{ {
closest_group = k; closest_group = k;
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
return spawn_location; return spawn_location;
} }
k++;
} }
} }
return undefined; return undefined;
} }
@ -225,7 +230,7 @@ spawned_slide_prone_trigger()
spawned_slide_push_trigger() spawned_slide_push_trigger()
{ {
origin = ( -1416,5, -324, 428,5 ); origin = ( -1416.5, -324, 428.5 );
length = 111; length = 111;
width = 394; width = 394;
height = 189; height = 189;
@ -233,38 +238,37 @@ spawned_slide_push_trigger()
trig1.angles = ( 0, 0, 0 ); trig1.angles = ( 0, 0, 0 );
trig1.targetname = "push_from_prone"; trig1.targetname = "push_from_prone";
trig1.push_player_towards_point = ( -1336, -320, 360 ); trig1.push_player_towards_point = ( -1336, -320, 360 );
while ( 1 )
while ( true )
{ {
trig1 waittill( "trigger", who ); trig1 waittill( "trigger", who );
if ( who getstance() == "prone" && isplayer( who ) ) if ( who getstance() == "prone" && isplayer( who ) )
{
who setstance( "crouch" ); who setstance( "crouch" );
}
trig1 thread slide_push_think( who ); trig1 thread slide_push_think( who );
wait 0,1; wait 0.1;
} }
} }
slide_push_think( who ) slide_push_think( who )
{ {
whopos = ( 0, 0, 0 ); whopos = ( 0, 0, 0 );
while ( who istouching( self ) ) while ( who istouching( self ) )
{ {
if ( who.origin == whopos ) if ( who.origin == whopos )
{
who setvelocity( self get_push_vector() ); who setvelocity( self get_push_vector() );
}
whopos = who.origin; whopos = who.origin;
wait 2; wait 2.0;
} }
} }
slide_push_in_trigger( player ) slide_push_in_trigger( player )
{ {
if ( !player is_player_using_thumbstick() ) if ( !player is_player_using_thumbstick() )
{
player setvelocity( self get_push_vector() ); player setvelocity( self get_push_vector() );
}
} }
spawned_life_triggers() spawned_life_triggers()
@ -294,41 +298,42 @@ spawned_collision_ffotd()
precachemodel( "p6_zm_bu_rock_strata_04" ); precachemodel( "p6_zm_bu_rock_strata_04" );
precachemodel( "p6_zm_bu_wood_planks_106x171" ); precachemodel( "p6_zm_bu_wood_planks_106x171" );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen )
if ( !( isdefined( level.optimise_for_splitscreen ) && level.optimise_for_splitscreen ) )
{ {
collision1 = spawn( "script_model", ( 3731,5, 736, 6,5 ) ); collision1 = spawn( "script_model", ( 3731.5, 736, 6.5 ) );
collision1 setmodel( "collision_geo_64x64x128_slick" ); collision1 setmodel( "collision_geo_64x64x128_slick" );
collision1.angles = ( 4,54625, 313,41, -4,78954 ); collision1.angles = ( 4.54625, 313.41, -4.78954 );
collision1 ghost(); collision1 ghost();
collision2 = spawn( "script_model", ( 34, -1691, 375 ) ); collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
collision2 setmodel( "collision_geo_256x256x10_standard" ); collision2 setmodel( "collision_geo_256x256x10_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 3,80002 ); collision2.angles = vectorscale( ( 0, 0, -1 ), 3.80002 );
collision2 ghost(); collision2 ghost();
collision3 = spawn( "script_model", ( 641, 545, -1,21359 ) ); collision3 = spawn( "script_model", ( 641, 545, -1.21359 ) );
collision3 setmodel( "collision_geo_64x64x128_slick" ); collision3 setmodel( "collision_geo_64x64x128_slick" );
collision3.angles = ( 1,27355, 320,806, -5,38137 ); collision3.angles = ( 1.27355, 320.806, -5.38137 );
collision3 ghost(); collision3 ghost();
saloon1 = spawn( "script_model", ( 1032,22, -1744,09, 309 ) ); saloon1 = spawn( "script_model", ( 1032.22, -1744.09, 309 ) );
saloon1 setmodel( "collision_geo_64x64x64_standard" ); saloon1 setmodel( "collision_geo_64x64x64_standard" );
saloon1.angles = vectorScale( ( 0, 0, 0 ), 40,8 ); saloon1.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
saloon1 ghost(); saloon1 ghost();
saloon2 = spawn( "script_model", ( 1005,78, -1766,91, 309 ) ); saloon2 = spawn( "script_model", ( 1005.78, -1766.91, 309 ) );
saloon2 setmodel( "collision_geo_64x64x64_standard" ); saloon2 setmodel( "collision_geo_64x64x64_standard" );
saloon2.angles = vectorScale( ( 0, 0, 0 ), 40,8 ); saloon2.angles = vectorscale( ( 0, 1, 0 ), 40.8 );
saloon2 ghost(); saloon2 ghost();
gs1 = spawn( "script_model", ( 118,001, -537,037, 236 ) ); gs1 = spawn( "script_model", ( 118.001, -537.037, 236 ) );
gs1 setmodel( "collision_geo_64x64x64_standard" ); gs1 setmodel( "collision_geo_64x64x64_standard" );
gs1.angles = vectorScale( ( 0, 0, 0 ), 90 ); gs1.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
gs1 ghost(); gs1 ghost();
gs1 thread delete_upon_flag( "general_store_porch_door1" ); gs1 thread delete_upon_flag( "general_store_porch_door1" );
gs2 = spawn( "script_model", ( 117,999, -571,963, 236 ) ); gs2 = spawn( "script_model", ( 117.999, -571.963, 236 ) );
gs2 setmodel( "collision_geo_64x64x64_standard" ); gs2 setmodel( "collision_geo_64x64x64_standard" );
gs2.angles = vectorScale( ( 0, 0, 0 ), 90 ); gs2.angles = vectorscale( ( 0, 1, 0 ), 90.0 );
gs2 ghost(); gs2 ghost();
gs2 thread delete_upon_flag( "general_store_porch_door1" ); gs2 thread delete_upon_flag( "general_store_porch_door1" );
collision4 = spawn( "script_model", ( 1672, 692, 99 ) ); collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
collision4 setmodel( "collision_geo_128x128x10_slick" ); collision4 setmodel( "collision_geo_128x128x10_slick" );
collision4.angles = ( 280,6, 270, 86,6 ); collision4.angles = ( 280.6, 270, 86.6 );
collision4 ghost(); collision4 ghost();
cw1 = spawn( "script_model", ( 320, -1988, 116 ) ); cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
cw1 setmodel( "collision_geo_128x128x128_standard" ); cw1 setmodel( "collision_geo_128x128x128_standard" );
@ -336,7 +341,7 @@ spawned_collision_ffotd()
cw1 ghost(); cw1 ghost();
rock1 = spawn( "script_model", ( 311, -1945, 104 ) ); rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" ); rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
rock1.angles = vectorScale( ( 0, 0, 0 ), 90 ); rock1.angles = vectorscale( ( 0, 0, 1 ), 90.0 );
st1 = spawn( "script_model", ( -736, -2, 25 ) ); st1 = spawn( "script_model", ( -736, -2, 25 ) );
st1 setmodel( "collision_geo_128x128x10_standard" ); st1 setmodel( "collision_geo_128x128x10_standard" );
st1.angles = ( 270, 45, 0 ); st1.angles = ( 270, 45, 0 );
@ -351,7 +356,7 @@ spawned_collision_ffotd()
ml2 ghost(); ml2 ghost();
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) ); mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
mr1 setmodel( "collision_geo_256x256x10_standard" ); mr1 setmodel( "collision_geo_256x256x10_standard" );
mr1.angles = ( 0, 13,8, -90 ); mr1.angles = ( 0, 13.8, -90 );
mr1 ghost(); mr1 ghost();
th1 = spawn( "script_model", ( 2072, 1168, 360 ) ); th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
th1 setmodel( "collision_geo_128x128x128_standard" ); th1 setmodel( "collision_geo_128x128x128_standard" );
@ -363,11 +368,11 @@ spawned_collision_ffotd()
th1a ghost(); th1a ghost();
th2 = spawn( "script_model", ( -544, 510, 286 ) ); th2 = spawn( "script_model", ( -544, 510, 286 ) );
th2 setmodel( "collision_geo_256x256x10_standard" ); th2 setmodel( "collision_geo_256x256x10_standard" );
th2.angles = ( 0, 7,2, -7,8 ); th2.angles = ( 0, 7.2, -7.8 );
th2 ghost(); th2 ghost();
th2a = spawn( "script_model", ( -296,95, 537,996, 312,557 ) ); th2a = spawn( "script_model", ( -296.95, 537.996, 312.557 ) );
th2a setmodel( "collision_geo_256x256x10_standard" ); th2a setmodel( "collision_geo_256x256x10_standard" );
th2a.angles = ( 347,355, 6,47392, -7,41809 ); th2a.angles = ( 347.355, 6.47392, -7.41809 );
th2a ghost(); th2a ghost();
th3 = spawn( "script_model", ( 864, 872, 420 ) ); th3 = spawn( "script_model", ( 864, 872, 420 ) );
th3 setmodel( "collision_geo_256x256x256_standard" ); th3 setmodel( "collision_geo_256x256x256_standard" );
@ -375,41 +380,41 @@ spawned_collision_ffotd()
th3 ghost(); th3 ghost();
th4 = spawn( "script_model", ( 2361, 1056, 398 ) ); th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
th4 setmodel( "collision_geo_256x256x10_standard" ); th4 setmodel( "collision_geo_256x256x10_standard" );
th4.angles = vectorScale( ( 0, 0, 0 ), 270 ); th4.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
th4 ghost(); th4 ghost();
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) ); ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
ch1 setmodel( "collision_geo_256x256x10_standard" ); ch1 setmodel( "collision_geo_256x256x10_standard" );
ch1.angles = ( 270, 340, 0,32 ); ch1.angles = ( 270, 340, 0.32 );
ch1 ghost(); ch1 ghost();
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) ); ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
ch2 setmodel( "collision_geo_256x256x10_standard" ); ch2 setmodel( "collision_geo_256x256x10_standard" );
ch2.angles = ( 270, 340, 0,32 ); ch2.angles = ( 270, 340, 0.32 );
ch2 ghost(); ch2 ghost();
rock1 = spawn( "script_model", ( 3259,54, -189,38, 146,23 ) ); rock1 = spawn( "script_model", ( 3259.54, -189.38, 146.23 ) );
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" ); rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
rock1.angles = ( 7,87264, 94,015, 4,57899 ); rock1.angles = ( 7.87264, 94.015, 4.57899 );
rock2 = spawn( "script_model", ( 3351,97, -254,58, 95 ) ); rock2 = spawn( "script_model", ( 3351.97, -254.58, 95 ) );
rock2 setmodel( "p6_zm_bu_rock_strata_01" ); rock2 setmodel( "p6_zm_bu_rock_strata_01" );
rock2.angles = vectorScale( ( 0, 0, 0 ), 169,1 ); rock2.angles = vectorscale( ( 0, 1, 0 ), 169.1 );
yt1 = spawn( "script_model", ( 671, -1412, 214 ) ); yt1 = spawn( "script_model", ( 671, -1412, 214 ) );
yt1 setmodel( "collision_geo_64x64x10_slick" ); yt1 setmodel( "collision_geo_64x64x10_slick" );
yt1.angles = ( 62,8, 315, 0 ); yt1.angles = ( 62.8, 315, 0 );
yt1 ghost(); yt1 ghost();
yt2 = spawn( "script_model", ( 676, -1407, 214 ) ); yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
yt2 setmodel( "collision_geo_64x64x10_slick" ); yt2 setmodel( "collision_geo_64x64x10_slick" );
yt2.angles = ( 62,8, 315, 0 ); yt2.angles = ( 62.8, 315, 0 );
yt2 ghost(); yt2 ghost();
stb1 = spawn( "script_model", ( -807, 59, 127 ) ); stb1 = spawn( "script_model", ( -807, 59, 127 ) );
stb1 setmodel( "collision_geo_64x64x10_standard" ); stb1 setmodel( "collision_geo_64x64x10_standard" );
stb1.angles = vectorScale( ( 0, 0, 0 ), 90 ); stb1.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
stb1 ghost(); stb1 ghost();
stb2 = spawn( "script_model", ( -807, 59, 191 ) ); stb2 = spawn( "script_model", ( -807, 59, 191 ) );
stb2 setmodel( "collision_geo_64x64x10_standard" ); stb2 setmodel( "collision_geo_64x64x10_standard" );
stb2.angles = vectorScale( ( 0, 0, 0 ), 90 ); stb2.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
stb2 ghost(); stb2 ghost();
stb3 = spawn( "script_model", ( -861, 59, 31 ) ); stb3 = spawn( "script_model", ( -861, 59, 31 ) );
stb3 setmodel( "collision_geo_128x128x10_standard" ); stb3 setmodel( "collision_geo_128x128x10_standard" );
stb3.angles = vectorScale( ( 0, 0, 0 ), 90 ); stb3.angles = vectorscale( ( 0, 0, -1 ), 90.0 );
stb3 ghost(); stb3 ghost();
j162 = spawn( "script_model", ( 912, -936, 214 ) ); j162 = spawn( "script_model", ( 912, -936, 214 ) );
j162 setmodel( "collision_geo_128x128x10_standard" ); j162 setmodel( "collision_geo_128x128x10_standard" );
@ -417,25 +422,33 @@ spawned_collision_ffotd()
j162 ghost(); j162 ghost();
j156 = spawn( "script_model", ( 434, 1213, 184 ) ); j156 = spawn( "script_model", ( 434, 1213, 184 ) );
j156 setmodel( "collision_geo_128x128x10_standard" ); j156 setmodel( "collision_geo_128x128x10_standard" );
j156.angles = vectorScale( ( 0, 0, 0 ), 273 ); j156.angles = vectorscale( ( 1, 0, 0 ), 273.0 );
j156 ghost(); j156 ghost();
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) ); j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
j163_1 setmodel( "collision_geo_128x128x10_slick" ); j163_1 setmodel( "collision_geo_128x128x10_slick" );
j163_1.angles = vectorScale( ( 0, 0, 0 ), 270 ); j163_1.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
j163_1 ghost(); j163_1 ghost();
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) ); j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
j163_2 setmodel( "collision_geo_128x128x10_slick" ); j163_2 setmodel( "collision_geo_128x128x10_slick" );
j163_2.angles = vectorScale( ( 0, 0, 0 ), 270 ); j163_2.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
j163_2 ghost(); j163_2 ghost();
j125_1 = spawn( "script_model", ( 2443,65, 1013,54, 236,213 ) ); j125_1 = spawn( "script_model", ( 2443.65, 1013.54, 236.213 ) );
j125_1 setmodel( "p6_zm_bu_rock_strata_04" ); j125_1 setmodel( "p6_zm_bu_rock_strata_04" );
j125_1.angles = ( 13,345, 103,42, -13,4657 ); j125_1.angles = ( 13.345, 103.42, -13.4657 );
j125_3 = spawn( "script_model", ( 2448,7, 852,791, 272,051 ) ); j125_3 = spawn( "script_model", ( 2448.7, 852.791, 272.051 ) );
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" ); j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
j125_3.angles = ( 0, 270, 19,4 ); j125_3.angles = ( 0, 270, 19.4 );
j125_4 = spawn( "script_model", ( 2313,21, 872,54, 241,01 ) ); j125_4 = spawn( "script_model", ( 2313.21, 872.54, 241.01 ) );
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" ); j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
j125_4.angles = ( 0, 0, 0 ); j125_4.angles = ( 0, 0, 0 );
e72913 = spawn( "script_model", ( -862, -764, 207 ) );
e72913 setmodel( "collision_geo_256x256x10_standard" );
e72913.angles = ( 6.2, 0, -90 );
e72913 ghost();
e2157 = spawn( "script_model", ( 432, 648, 247 ) );
e2157 setmodel( "collision_geo_128x128x10_standard" );
e2157.angles = vectorscale( ( 1, 0, 0 ), 270.0 );
e2157 ghost();
} }
} }
@ -461,7 +474,7 @@ ghost_mansion_to_maze_push_trigger_left()
width = 8; width = 8;
height = 64; height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height ); trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 ); trig1.angles = vectorscale( ( 0, 1, 0 ), 325.6 );
trig1.script_noteworthy = "push_trigger"; trig1.script_noteworthy = "push_trigger";
trig1.push_player_towards_point = ( 2666, 685, 183 ); trig1.push_player_towards_point = ( 2666, 685, 183 );
} }
@ -473,7 +486,7 @@ ghost_mansion_to_maze_push_trigger_right()
width = 16; width = 16;
height = 64; height = 64;
trig1 = spawn( "trigger_box", origin, 0, width, length, height ); trig1 = spawn( "trigger_box", origin, 0, width, length, height );
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 ); trig1.angles = vectorscale( ( 0, 1, 0 ), 325.6 );
trig1.script_noteworthy = "push_trigger"; trig1.script_noteworthy = "push_trigger";
trig1.push_player_towards_point = ( 2686, 440, 174 ); trig1.push_player_towards_point = ( 2686, 440, 174 );
} }
@ -493,26 +506,25 @@ ghost_mansion_from_maze_push_trigger()
push_players_standing_in_trigger_volumes() push_players_standing_in_trigger_volumes()
{ {
/# /#
assert( isDefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" ); assert( isdefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" );
#/ #/
while ( 1 ) while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( !player is_player_using_thumbstick() ) if ( !player is_player_using_thumbstick() )
{
player setvelocity( self get_push_vector() ); player setvelocity( self get_push_vector() );
} }
}
} }
is_player_using_thumbstick() is_player_using_thumbstick()
{ {
b_using_thumbstick = 1; b_using_thumbstick = 1;
v_thumbstick = self getnormalizedmovement(); v_thumbstick = self getnormalizedmovement();
if ( length( v_thumbstick ) < 0,3 )
{ if ( length( v_thumbstick ) < 0.3 )
b_using_thumbstick = 0; b_using_thumbstick = 0;
}
return b_using_thumbstick; return b_using_thumbstick;
} }
@ -523,63 +535,49 @@ get_push_vector()
bar_spawner_fix() bar_spawner_fix()
{ {
bad_pos = ( 459,5, -1984, 84 ); bad_pos = ( 459.5, -1984, 84 );
dist_fix = 64; dist_fix = 64;
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" ); bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
_a586 = bar_spawners;
_k586 = getFirstArrayKey( _a586 ); foreach ( spawner in bar_spawners )
while ( isDefined( _k586 ) )
{ {
spawner = _a586[ _k586 ]; if ( isdefined( spawner.script_string ) && spawner.script_string == "bar2" )
if ( isDefined( spawner.script_string ) && spawner.script_string == "bar2" )
{ {
dist = distancesquared( spawner.origin, bad_pos ); dist = distancesquared( spawner.origin, bad_pos );
if ( dist < dist_fix ) if ( dist < dist_fix )
{ spawner.origin = ( 459.5, -2020, 84 );
spawner.origin = ( 459,5, -2020, 84 );
} }
} }
_k586 = getNextArrayKey( _a586, _k586 );
}
} }
player_respawn_fix() player_respawn_fix()
{ {
maze_spawners = getstructarray( "maze_spawn_points", "targetname" ); maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
_a602 = maze_spawners;
_k602 = getFirstArrayKey( _a602 ); foreach ( spawner in maze_spawners )
while ( isDefined( _k602 ) )
{ {
spawner = _a602[ _k602 ];
if ( spawner.origin == ( 3469, 1026, 20 ) ) if ( spawner.origin == ( 3469, 1026, 20 ) )
{
spawner.origin = ( 3509, 1032, 76 ); spawner.origin = ( 3509, 1032, 76 );
} }
_k602 = getNextArrayKey( _a602, _k602 );
}
} }
door_clip_fix() door_clip_fix()
{ {
bank1 = getentarray( "pf728_auto2510", "targetname" ); bank1 = getentarray( "pf728_auto2510", "targetname" );
i = 0;
while ( i < bank1.size ) for ( i = 0; i < bank1.size; i++ )
{ {
if ( isDefined( bank1[ i ].script_noteworthy ) && bank1[ i ].script_noteworthy == "clip" ) if ( isdefined( bank1[i].script_noteworthy ) && bank1[i].script_noteworthy == "clip" )
{ bank1[i] delete();
bank1[ i ] delete();
}
i++;
} }
bank2 = getentarray( "pf728_auto2507", "targetname" ); bank2 = getentarray( "pf728_auto2507", "targetname" );
i = 0;
while ( i < bank2.size ) for ( i = 0; i < bank2.size; i++ )
{ {
if ( isDefined( bank2[ i ].script_noteworthy ) && bank2[ i ].script_noteworthy == "clip" ) if ( isdefined( bank2[i].script_noteworthy ) && bank2[i].script_noteworthy == "clip" )
{ bank2[i] delete();
bank2[ i ] delete();
}
i++;
} }
} }
@ -589,30 +587,31 @@ maze_blocker_fix()
node_target_org = ( 4734, 1198, 32 ); node_target_org = ( 4734, 1198, 32 );
blocker_node = getnearestnode( node_org ); blocker_node = getnearestnode( node_org );
blocker_node_target = getnearestnode( node_target_org ); blocker_node_target = getnearestnode( node_target_org );
while ( 1 )
while ( true )
{ {
level waittill( "zm_buried_maze_changed" ); level waittill( "zm_buried_maze_changed" );
found = 0; found = 0;
perm_list = level._maze._perms[ level._maze._cur_perm ]; perm_list = level._maze._perms[level._maze._cur_perm];
_a648 = perm_list;
_k648 = getFirstArrayKey( _a648 ); foreach ( blocker in perm_list )
while ( isDefined( _k648 ) )
{ {
blocker = _a648[ _k648 ];
if ( blocker == "blocker_10" ) if ( blocker == "blocker_10" )
{ {
found = 1; found = 1;
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
if ( isdefined( blocker_node ) && isdefined( blocker_node_target ) )
{ {
unlink_nodes( blocker_node, blocker_node_target, 0 ); unlink_nodes( blocker_node, blocker_node_target, 0 );
unlink_nodes( blocker_node_target, blocker_node, 0 ); unlink_nodes( blocker_node_target, blocker_node, 0 );
} }
} }
_k648 = getNextArrayKey( _a648, _k648 );
} }
if ( !found ) if ( !found )
{ {
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) ) if ( isdefined( blocker_node ) && isdefined( blocker_node_target ) )
{ {
link_nodes( blocker_node, blocker_node_target, 1 ); link_nodes( blocker_node, blocker_node_target, 1 );
link_nodes( blocker_node_target, blocker_node, 1 ); link_nodes( blocker_node_target, blocker_node, 1 );
@ -624,14 +623,14 @@ maze_blocker_fix()
time_bomb_takeaway() time_bomb_takeaway()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
while ( 1 )
while ( true )
{ {
self waittill( "new_tactical_grenade", new_weapon ); self waittill( "new_tactical_grenade", new_weapon );
if ( isDefined( new_weapon ) && new_weapon != "time_bomb_zm" && self hasweapon( "time_bomb_detonator_zm" ) )
{ if ( ( !isdefined( new_weapon ) || new_weapon != "time_bomb_zm" ) && self hasweapon( "time_bomb_detonator_zm" ) )
self takeweapon( "time_bomb_detonator_zm" ); self takeweapon( "time_bomb_detonator_zm" );
} }
}
} }
ffotd_player_threads() ffotd_player_threads()
@ -687,18 +686,20 @@ church_fence_push_trigger()
dtp_push() dtp_push()
{ {
pos = ( 0, 0, 0 ); pos = ( 0, 0, 0 );
while ( 1 )
while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( pos == player.origin ) if ( pos == player.origin )
{ {
if ( player getstance() == "prone" ) if ( player getstance() == "prone" )
{
player setstance( "crouch" ); player setstance( "crouch" );
}
player setvelocity( self get_push_vector() ); player setvelocity( self get_push_vector() );
} }
pos = player.origin; pos = player.origin;
wait 0,5; wait 0.5;
} }
} }

View File

@ -1,18 +1,20 @@
#include maps/mp/zombies/_zm_stats; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_ai_ghost; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_buried_classic; #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\zm_buried_classic;
#include maps\mp\zombies\_zm_ai_ghost;
#include maps\mp\zombies\_zm_stats;
init_fountain() init_fountain()
{ {
flag_init( "courtyard_fountain_broken" ); flag_init( "courtyard_fountain_broken" );
flag_init( "maze_fountain_broken" ); flag_init( "maze_fountain_broken" );
flag_init( "fountain_transport_active" ); flag_init( "fountain_transport_active" );
level._effect[ "fountain_break" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_break" ); level._effect["fountain_break"] = loadfx( "maps/zombie_buried/fx_buried_fountain_break" );
level._effect[ "fountain_spray" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" ); level._effect["fountain_spray"] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect[ "fountain_teleport" ] = loadfx( "maps/zombie_buried/fx_buried_teleport_flash" ); level._effect["fountain_teleport"] = loadfx( "maps/zombie_buried/fx_buried_teleport_flash" );
level thread fountain_setup(); level thread fountain_setup();
level thread maze_fountain_collmap(); level thread maze_fountain_collmap();
} }
@ -42,14 +44,16 @@ sloth_fountain_think()
flag_wait( "courtyard_fountain_broken" ); flag_wait( "courtyard_fountain_broken" );
level setclientfield( "sloth_fountain_start", 1 ); level setclientfield( "sloth_fountain_start", 1 );
s_courtyard_fountain = getstruct( "courtyard_fountain_struct", "targetname" ); s_courtyard_fountain = getstruct( "courtyard_fountain_struct", "targetname" );
if ( isDefined( s_courtyard_fountain ) )
if ( isdefined( s_courtyard_fountain ) )
{ {
sound_offset = vectorScale( ( 0, 0, 1 ), 100 ); sound_offset = vectorscale( ( 0, 0, 1 ), 100.0 );
sound_ent = spawn( "script_origin", s_courtyard_fountain.origin + sound_offset ); sound_ent = spawn( "script_origin", s_courtyard_fountain.origin + sound_offset );
playfx( level._effect[ "fx_buried_fountain_spray" ], s_courtyard_fountain.origin ); playfx( level._effect["fx_buried_fountain_spray"], s_courtyard_fountain.origin );
playfx( level._effect[ "fountain_break" ], s_courtyard_fountain.origin ); playfx( level._effect["fountain_break"], s_courtyard_fountain.origin );
sound_ent playloopsound( "zmb_fountain_spray", 0,2 ); sound_ent playloopsound( "zmb_fountain_spray", 0.2 );
} }
show_maze_fountain_water(); show_maze_fountain_water();
fountain_debug_print( "courtyard_fountain_broken" ); fountain_debug_print( "courtyard_fountain_broken" );
} }
@ -57,12 +61,12 @@ sloth_fountain_think()
set_flag_on_notify( notifystr, strflag ) set_flag_on_notify( notifystr, strflag )
{ {
if ( notifystr != "death" ) if ( notifystr != "death" )
{
self endon( "death" ); self endon( "death" );
}
if ( !level.flag[ strflag ] ) if ( !level.flag[strflag] )
{ {
self waittill( notifystr ); self waittill( notifystr );
flag_set( strflag ); flag_set( strflag );
} }
} }
@ -82,7 +86,7 @@ hide_maze_fountain_water()
t_water enablelinkto(); t_water enablelinkto();
m_water = getent( "maze_fountain_water", "targetname" ); m_water = getent( "maze_fountain_water", "targetname" );
t_water linkto( m_water ); t_water linkto( m_water );
m_water movez( -475, 0,05 ); m_water movez( -475, 0.05 );
} }
show_maze_fountain_water() show_maze_fountain_water()
@ -99,18 +103,14 @@ wait_for_maze_fountain_to_be_destroyed()
level endon( "_destroy_maze_fountain" ); level endon( "_destroy_maze_fountain" );
#/ #/
t_damage = getent( "maze_fountain_trigger", "targetname" ); t_damage = getent( "maze_fountain_trigger", "targetname" );
health = 1000;
while ( health > 0 ) for ( health = 1000; health > 0; health -= damage )
{ {
t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags ); t_damage waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( damage < 50 )
{ asm_cond( damage < 50, loc_E9C );
damage = 0; damage = 0;
} asm_cond( isdefined( type ) && type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH", loc_EE6 );
if ( isDefined( type ) && type != "MOD_EXPLOSIVE" && type != "MOD_EXPLOSIVE_SPLASH" && type != "MOD_GRENADE" && type != "MOD_GRENADE_SPLASH" || type == "MOD_PROJECTILE" && type == "MOD_PROJECTILE_SPLASH" )
{
health -= damage;
}
} }
} }
@ -118,10 +118,10 @@ destroy_maze_fountain()
{ {
s_fountain = getstruct( "maze_fountain_struct", "targetname" ); s_fountain = getstruct( "maze_fountain_struct", "targetname" );
level setclientfield( "maze_fountain_start", 1 ); level setclientfield( "maze_fountain_start", 1 );
if ( isDefined( s_fountain ) )
{ if ( isdefined( s_fountain ) )
playfx( level._effect[ "fountain_break" ], s_fountain.origin ); playfx( level._effect["fountain_break"], s_fountain.origin );
}
s_fountain_clip = getent( "maze_fountain_clip", "targetname" ); s_fountain_clip = getent( "maze_fountain_clip", "targetname" );
s_fountain_clip delete(); s_fountain_clip delete();
flag_set( "maze_fountain_broken" ); flag_set( "maze_fountain_broken" );
@ -130,23 +130,21 @@ destroy_maze_fountain()
fountain_transport_think() fountain_transport_think()
{ {
t_transporter = getent( "maze_fountain_water_trigger", "targetname" ); t_transporter = getent( "maze_fountain_water_trigger", "targetname" );
while ( 1 )
while ( true )
{ {
t_transporter waittill( "trigger", player ); t_transporter waittill( "trigger", player );
if ( !isDefined( player.is_in_fountain_transport_trigger ) || !player.is_in_fountain_transport_trigger )
if ( !isdefined( player.is_in_fountain_transport_trigger ) || !player.is_in_fountain_transport_trigger )
{ {
player.is_in_fountain_transport_trigger = 1; player.is_in_fountain_transport_trigger = 1;
if ( flag( "fountain_transport_active" ) ) if ( flag( "fountain_transport_active" ) )
{
player thread transport_player_to_start_zone(); player thread transport_player_to_start_zone();
break;
}
else else
{
player thread delay_transport_check(); player thread delay_transport_check();
} }
} }
}
} }
delay_transport_check() delay_transport_check()
@ -161,45 +159,50 @@ transport_player_to_start_zone()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
fountain_debug_print( "transport player!" ); fountain_debug_print( "transport player!" );
if ( !isDefined( level._fountain_transporter ) )
if ( !isdefined( level._fountain_transporter ) )
{ {
level._fountain_transporter = spawnstruct(); level._fountain_transporter = spawnstruct();
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" ); level._fountain_transporter.end_points = getstructarray( "fountain_transport_end_location", "targetname" );
} }
self playsoundtoplayer( "zmb_buried_teleport", self ); self playsoundtoplayer( "zmb_buried_teleport", self );
self play_teleport_fx(); self play_teleport_fx();
self flash_screen_white(); self flash_screen_white();
wait_network_frame(); wait_network_frame();
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size ) if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
{
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
}
tries = 0; tries = 0;
while ( positionwouldtelefrag( level._fountain_transporter.end_points[ level._fountain_transporter.index ].origin ) )
while ( positionwouldtelefrag( level._fountain_transporter.end_points[level._fountain_transporter.index].origin ) )
{ {
tries++; tries++;
if ( tries >= 4 ) if ( tries >= 4 )
{ {
tries = 0; tries = 0;
wait 0,05; wait 0.05;
} }
level._fountain_transporter.index++; level._fountain_transporter.index++;
if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size ) if ( level._fountain_transporter.index >= level._fountain_transporter.end_points.size )
{
level._fountain_transporter.index = 0; level._fountain_transporter.index = 0;
} }
}
self setorigin( level._fountain_transporter.end_points[ level._fountain_transporter.index ].origin ); self setorigin( level._fountain_transporter.end_points[level._fountain_transporter.index].origin );
self setplayerangles( level._fountain_transporter.end_points[ level._fountain_transporter.index ].angles ); self setplayerangles( level._fountain_transporter.end_points[level._fountain_transporter.index].angles );
level._fountain_transporter.index++; level._fountain_transporter.index++;
wait_network_frame(); wait_network_frame();
self play_teleport_fx(); self play_teleport_fx();
self thread flash_screen_fade_out(); self thread flash_screen_fade_out();
self maps/mp/zm_buried_classic::buried_set_start_area_lighting(); self maps\mp\zm_buried_classic::buried_set_start_area_lighting();
self thread maps/mp/zombies/_zm_ai_ghost::behave_after_fountain_transport( self ); self thread maps\mp\zombies\_zm_ai_ghost::behave_after_fountain_transport( self );
self maps/mp/zombies/_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 ); self maps\mp\zombies\_zm_stats::increment_client_stat( "buried_fountain_transporter_used", 0 );
self maps/mp/zombies/_zm_stats::increment_player_stat( "buried_fountain_transporter_used" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "buried_fountain_transporter_used" );
self notify( "player_used_fountain_teleporter" ); self notify( "player_used_fountain_teleporter" );
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
@ -208,23 +211,23 @@ transport_player_to_start_zone()
play_teleport_fx() play_teleport_fx()
{ {
playfx( level._effect[ "fountain_teleport" ], self gettagorigin( "J_SpineLower" ) ); playfx( level._effect["fountain_teleport"], self gettagorigin( "J_SpineLower" ) );
} }
flash_screen_white() flash_screen_white()
{ {
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self.hud_transporter_flash = self create_client_hud_elem(); self.hud_transporter_flash = self create_client_hud_elem();
self.hud_transporter_flash fadeovertime( 0,2 ); self.hud_transporter_flash fadeovertime( 0.2 );
self.hud_transporter_flash.alpha = 1; self.hud_transporter_flash.alpha = 1;
wait 0,2; wait 0.2;
} }
flash_screen_fade_out() flash_screen_fade_out()
{ {
self.hud_transporter_flash fadeovertime( 0,2 ); self.hud_transporter_flash fadeovertime( 0.2 );
self.hud_transporter_flash.alpha = 0; self.hud_transporter_flash.alpha = 0;
wait 0,2; wait 0.2;
self.hud_transporter_flash destroy(); self.hud_transporter_flash destroy();
self.hud_transporter_flash = undefined; self.hud_transporter_flash = undefined;
} }
@ -246,28 +249,19 @@ create_client_hud_elem()
debug_warp_player_to_fountain() debug_warp_player_to_fountain()
{ {
while ( 1 ) while ( true )
{ {
str_notify = level waittill_any_return( "warp_player_to_maze_fountain", "warp_player_to_courtyard_fountain" ); str_notify = level waittill_any_return( "warp_player_to_maze_fountain", "warp_player_to_courtyard_fountain" );
if ( str_notify == "warp_player_to_maze_fountain" ) if ( str_notify == "warp_player_to_maze_fountain" )
{
str_warp_point = "teleport_player_to_maze_fountain"; str_warp_point = "teleport_player_to_maze_fountain";
} else if ( str_notify == "warp_player_to_courtyard_fountain" )
else
{
if ( str_notify == "warp_player_to_courtyard_fountain" )
{
str_warp_point = "teleport_player_to_courtyard_fountain"; str_warp_point = "teleport_player_to_courtyard_fountain";
}
} foreach ( player in get_players() )
_a332 = get_players();
_k332 = getFirstArrayKey( _a332 );
while ( isDefined( _k332 ) )
{ {
player = _a332[ _k332 ];
_warp_player_to_maze_fountain( player, str_warp_point ); _warp_player_to_maze_fountain( player, str_warp_point );
wait 0,25; wait 0.25;
_k332 = getNextArrayKey( _a332, _k332 );
} }
} }
} }
@ -276,12 +270,10 @@ _warp_player_to_maze_fountain( player, str_teleport_point )
{ {
fountain_debug_print( "teleporting player to " + str_teleport_point ); fountain_debug_print( "teleporting player to " + str_teleport_point );
s_warp = getstruct( str_teleport_point, "targetname" ); s_warp = getstruct( str_teleport_point, "targetname" );
origin = s_warp.origin;
while ( positionwouldtelefrag( origin ) ) for ( origin = s_warp.origin; positionwouldtelefrag( origin ); origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 ) )
{ wait 0.05;
wait 0,05;
origin = s_warp.origin + ( randomfloatrange( -64, 64 ), randomfloatrange( -64, 64 ), 0 );
}
player setorigin( origin ); player setorigin( origin );
player setplayerangles( s_warp.angles ); player setplayerangles( s_warp.angles );
} }
@ -289,9 +281,7 @@ _warp_player_to_maze_fountain( player, str_teleport_point )
fountain_debug_print( str_text ) fountain_debug_print( str_text )
{ {
/# /#
if ( getDvarInt( #"AE3F04F6" ) > 0 ) if ( getdvarint( _hash_AE3F04F6 ) > 0 )
{
iprintlnbold( str_text ); iprintlnbold( str_text );
#/ #/
}
} }

View File

@ -1,150 +1,156 @@
#include maps/mp/_utility; // T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#using_animtree( "fxanim_props_dlc3" ); #include maps\mp\_utility;
#include maps\mp\createfx\zm_buried_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_buried_fx::main(); maps\mp\createfx\zm_buried_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[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" ); level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_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[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" ); level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect[ "orange_eyes" ] = loadfx( "misc/fx_zombie_eye_single" ); level._effect["orange_eyes"] = loadfx( "misc/fx_zombie_eye_single" );
level._effect[ "player_possessed_eyes" ] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" ); level._effect["player_possessed_eyes"] = loadfx( "maps/zombie_buried/fx_buried_eye_stulhinger" );
gametype = getDvar( "ui_gametype" ); gametype = getdvar( "ui_gametype" );
if ( gametype == "zcleansed" ) if ( gametype == "zcleansed" )
{ {
level._effect[ "blue_eyes_player" ] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" ); level._effect["blue_eyes_player"] = loadfx( "maps/zombie/fx_zombie_eye_returned_blue" );
level._effect[ "lava_burning" ] = loadfx( "env/fire/fx_fire_lava_player_torso" ); level._effect["lava_burning"] = loadfx( "env/fire/fx_fire_lava_player_torso" );
} }
if ( isDefined( 0 ) && 0 )
if ( isdefined( 0 ) && 0 )
{ {
level._effect[ "player_3rd_spotlight_lite" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_lite" ); level._effect["player_3rd_spotlight_lite"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_lite" );
level._effect[ "player_3rd_spotlight_med" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_med" ); level._effect["player_3rd_spotlight_med"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_med" );
level._effect[ "player_3rd_spotlight_high" ] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_hvy" ); level._effect["player_3rd_spotlight_high"] = loadfx( "maps/zombie_buried/fx_buried_spot_flkr_hvy" );
level._effect[ "oillamp" ] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern" ); level._effect["oillamp"] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern" );
} }
level._effect[ "booze_candy_spawn" ] = loadfx( "maps/zombie_buried/fx_buried_booze_candy_spawn" );
level._effect[ "crusher_sparks" ] = loadfx( "maps/zombie_buried/fx_buried_crusher_sparks" ); level._effect["booze_candy_spawn"] = loadfx( "maps/zombie_buried/fx_buried_booze_candy_spawn" );
level._effect[ "rise_burst_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_billow_body" ); level._effect["crusher_sparks"] = loadfx( "maps/zombie_buried/fx_buried_crusher_sparks" );
level._effect[ "rise_billow_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_burst_hand" ); level._effect["rise_burst_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_billow_body" );
level._effect[ "rise_dust_foliage" ] = loadfx( "maps/zombie/fx_zm_buried_hedge_dustfall_body" ); level._effect["rise_billow_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_burst_hand" );
level._effect[ "fx_buried_key_glint" ] = loadfx( "maps/zombie_buried/fx_buried_key_glint" ); level._effect["rise_dust_foliage"] = loadfx( "maps/zombie/fx_zm_buried_hedge_dustfall_body" );
level._effect[ "sq_glow" ] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern_ghost" ); level._effect["fx_buried_key_glint"] = loadfx( "maps/zombie_buried/fx_buried_key_glint" );
level._effect[ "vulture_fx_wisp" ] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_center" ); level._effect["sq_glow"] = loadfx( "maps/zombie_buried/fx_buried_glow_lantern_ghost" );
level._effect[ "vulture_fx_wisp_orb" ] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_orbit" ); level._effect["vulture_fx_wisp"] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_center" );
level._effect[ "fx_wisp_m" ] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_os" ); level._effect["vulture_fx_wisp_orb"] = loadfx( "maps/zombie_buried/fx_buried_richt_whisp_orbit" );
level._effect[ "fx_wisp_lg_m" ] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_lg_os" ); level._effect["fx_wisp_m"] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_os" );
level._effect[ "sq_bulb_blue" ] = loadfx( "maps/zombie_buried/fx_buried_eg_blu" ); level._effect["fx_wisp_lg_m"] = loadfx( "maps/zombie_buried/fx_buried_maxis_whisp_lg_os" );
level._effect[ "sq_bulb_orange" ] = loadfx( "maps/zombie_buried/fx_buried_eg_orng" ); level._effect["sq_bulb_blue"] = loadfx( "maps/zombie_buried/fx_buried_eg_blu" );
level._effect[ "sq_bulb_green" ] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_green" ); level._effect["sq_bulb_orange"] = loadfx( "maps/zombie_buried/fx_buried_eg_orng" );
level._effect[ "sq_bulb_yellow" ] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_yellow" ); level._effect["sq_bulb_green"] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_green" );
level._effect[ "sq_ether_amp_trail" ] = loadfx( "maps/zombie_buried/fx_buried_ether_amp_trail" ); level._effect["sq_bulb_yellow"] = loadfx( "maps/zombie_buried/fx_buried_sq_bulb_yellow" );
level._effect[ "sq_tower_r" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_blue" ); level._effect["sq_ether_amp_trail"] = loadfx( "maps/zombie_buried/fx_buried_ether_amp_trail" );
level._effect[ "sq_tower_m" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_orange" ); level._effect["sq_tower_r"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_blue" );
level._effect[ "sq_tower_bolts" ] = loadfx( "maps/zombie_buried/fx_buried_tower_power_bolts" ); level._effect["sq_tower_m"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_orange" );
level._effect[ "sq_spark" ] = loadfx( "maps/zombie_buried/fx_buried_spark_gen" ); level._effect["sq_tower_bolts"] = loadfx( "maps/zombie_buried/fx_buried_tower_power_bolts" );
level._effect[ "sq_spawn" ] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" ); level._effect["sq_spark"] = loadfx( "maps/zombie_buried/fx_buried_spark_gen" );
level._effect[ "sq_vulture_orange_eye_glow" ] = loadfx( "misc/fx_zombie_eye_side_quest" ); level._effect["sq_spawn"] = loadfx( "maps/zombie_buried/fx_buried_time_bomb_spawn" );
level._effect["sq_vulture_orange_eye_glow"] = loadfx( "misc/fx_zombie_eye_side_quest" );
} }
precache_createfx_fx() precache_createfx_fx()
{ {
level._effect[ "fx_buried_ash_blowing" ] = loadfx( "maps/zombie_buried/fx_buried_ash_blowing" ); level._effect["fx_buried_ash_blowing"] = loadfx( "maps/zombie_buried/fx_buried_ash_blowing" );
level._effect[ "fx_buried_bats_group" ] = loadfx( "maps/zombie_buried/fx_buried_bats_group" ); level._effect["fx_buried_bats_group"] = loadfx( "maps/zombie_buried/fx_buried_bats_group" );
level._effect[ "fx_buried_cloud_low" ] = loadfx( "maps/zombie_buried/fx_buried_cloud_low" ); level._effect["fx_buried_cloud_low"] = loadfx( "maps/zombie_buried/fx_buried_cloud_low" );
level._effect[ "fx_buried_conveyor_belt_edge" ] = loadfx( "maps/zombie_buried/fx_buried_conveyor_belt_edge" ); level._effect["fx_buried_conveyor_belt_edge"] = loadfx( "maps/zombie_buried/fx_buried_conveyor_belt_edge" );
level._effect[ "fx_buried_dust_ceiling_hole" ] = loadfx( "maps/zombie_buried/fx_buried_dust_ceiling_hole" ); level._effect["fx_buried_dust_ceiling_hole"] = loadfx( "maps/zombie_buried/fx_buried_dust_ceiling_hole" );
level._effect[ "fx_buried_dust_edge_100" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_100" ); level._effect["fx_buried_dust_edge_100"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_100" );
level._effect[ "fx_buried_dust_edge_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_xlg" ); level._effect["fx_buried_dust_edge_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_xlg" );
level._effect[ "fx_buried_dust_edge_blown" ] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_blown" ); level._effect["fx_buried_dust_edge_blown"] = loadfx( "maps/zombie_buried/fx_buried_dust_edge_blown" );
level._effect[ "fx_buried_dust_flurry" ] = loadfx( "maps/zombie_buried/fx_buried_dust_flurry" ); level._effect["fx_buried_dust_flurry"] = loadfx( "maps/zombie_buried/fx_buried_dust_flurry" );
level._effect[ "fx_buried_dust_int_25x50" ] = loadfx( "maps/zombie_buried/fx_buried_dust_int_25x50" ); level._effect["fx_buried_dust_int_25x50"] = loadfx( "maps/zombie_buried/fx_buried_dust_int_25x50" );
level._effect[ "fx_buried_dust_motes_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_xlg" ); level._effect["fx_buried_dust_motes_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_xlg" );
level._effect[ "fx_buried_dust_motes_ext_xlg" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_xlg" ); level._effect["fx_buried_dust_motes_ext_xlg"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_xlg" );
level._effect[ "fx_buried_dust_motes_ext_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_sm" ); level._effect["fx_buried_dust_motes_ext_sm"] = loadfx( "maps/zombie_buried/fx_buried_dust_motes_ext_sm" );
level._effect[ "fx_buried_dust_rising_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_sm" ); level._effect["fx_buried_dust_rising_sm"] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_sm" );
level._effect[ "fx_buried_dust_rising_md" ] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_md" ); level._effect["fx_buried_dust_rising_md"] = loadfx( "maps/zombie_buried/fx_buried_dust_rising_md" );
level._effect[ "fx_buried_dust_tunnel_ceiling" ] = loadfx( "maps/zombie_buried/fx_buried_dust_tunnel_ceiling" ); level._effect["fx_buried_dust_tunnel_ceiling"] = loadfx( "maps/zombie_buried/fx_buried_dust_tunnel_ceiling" );
level._effect[ "fx_buried_fireplace" ] = loadfx( "maps/zombie_buried/fx_buried_fireplace" ); level._effect["fx_buried_fireplace"] = loadfx( "maps/zombie_buried/fx_buried_fireplace" );
level._effect[ "fx_buried_fog_sm" ] = loadfx( "maps/zombie_buried/fx_buried_fog_sm" ); level._effect["fx_buried_fog_sm"] = loadfx( "maps/zombie_buried/fx_buried_fog_sm" );
level._effect[ "fx_buried_fog_md" ] = loadfx( "maps/zombie_buried/fx_buried_fog_md" ); level._effect["fx_buried_fog_md"] = loadfx( "maps/zombie_buried/fx_buried_fog_md" );
level._effect[ "fx_buried_glow_kerosene_lamp" ] = loadfx( "maps/zombie_buried/fx_buried_glow_kerosene_lamp" ); level._effect["fx_buried_glow_kerosene_lamp"] = loadfx( "maps/zombie_buried/fx_buried_glow_kerosene_lamp" );
level._effect[ "fx_buried_glow_sconce" ] = loadfx( "maps/zombie_buried/fx_buried_glow_sconce" ); level._effect["fx_buried_glow_sconce"] = loadfx( "maps/zombie_buried/fx_buried_glow_sconce" );
level._effect[ "fx_buried_god_ray_sm" ] = loadfx( "maps/zombie_buried/fx_buried_god_ray_sm" ); level._effect["fx_buried_god_ray_sm"] = loadfx( "maps/zombie_buried/fx_buried_god_ray_sm" );
level._effect[ "fx_buried_godray_church" ] = loadfx( "maps/zombie_buried/fx_buried_godray_church" ); level._effect["fx_buried_godray_church"] = loadfx( "maps/zombie_buried/fx_buried_godray_church" );
level._effect[ "fx_buried_godray_ext_sm" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_sm" ); level._effect["fx_buried_godray_ext_sm"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_sm" );
level._effect[ "fx_buried_godray_ext_md" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_md" ); level._effect["fx_buried_godray_ext_md"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_md" );
level._effect[ "fx_buried_godray_ext_lg" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_lg" ); level._effect["fx_buried_godray_ext_lg"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_lg" );
level._effect[ "fx_buried_godray_ext_thin" ] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_thin" ); level._effect["fx_buried_godray_ext_thin"] = loadfx( "maps/zombie_buried/fx_buried_godray_ext_thin" );
level._effect[ "fx_buried_insects" ] = loadfx( "maps/zombie_buried/fx_buried_insects" ); level._effect["fx_buried_insects"] = loadfx( "maps/zombie_buried/fx_buried_insects" );
level._effect[ "fx_buried_sand_windy_sm" ] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_sm" ); level._effect["fx_buried_sand_windy_sm"] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_sm" );
level._effect[ "fx_buried_sand_windy_md" ] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_md" ); level._effect["fx_buried_sand_windy_md"] = loadfx( "maps/zombie_buried/fx_buried_sand_windy_md" );
level._effect[ "fx_buried_sandstorm_edge" ] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_edge" ); level._effect["fx_buried_sandstorm_edge"] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_edge" );
level._effect[ "fx_buried_sandstorm_distant" ] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_distant" ); level._effect["fx_buried_sandstorm_distant"] = loadfx( "maps/zombie_buried/fx_buried_sandstorm_distant" );
level._effect[ "fx_buried_smk_plume_lg" ] = loadfx( "maps/zombie_buried/fx_buried_smk_plume_lg" ); level._effect["fx_buried_smk_plume_lg"] = loadfx( "maps/zombie_buried/fx_buried_smk_plume_lg" );
level._effect[ "fx_buried_steam_md" ] = loadfx( "maps/zombie_buried/fx_buried_steam_md" ); level._effect["fx_buried_steam_md"] = loadfx( "maps/zombie_buried/fx_buried_steam_md" );
level._effect[ "fx_buried_water_dripping" ] = loadfx( "maps/zombie_buried/fx_buried_water_dripping" ); level._effect["fx_buried_water_dripping"] = loadfx( "maps/zombie_buried/fx_buried_water_dripping" );
level._effect[ "fx_buried_water_spilling" ] = loadfx( "maps/zombie_buried/fx_buried_water_spilling" ); level._effect["fx_buried_water_spilling"] = loadfx( "maps/zombie_buried/fx_buried_water_spilling" );
level._effect[ "fx_buried_water_spilling_lg" ] = loadfx( "maps/zombie_buried/fx_buried_water_spilling_lg" ); level._effect["fx_buried_water_spilling_lg"] = loadfx( "maps/zombie_buried/fx_buried_water_spilling_lg" );
level._effect[ "fx_buried_barrier_break" ] = loadfx( "maps/zombie_buried/fx_buried_barrier_break" ); level._effect["fx_buried_barrier_break"] = loadfx( "maps/zombie_buried/fx_buried_barrier_break" );
level._effect[ "fx_buried_barrier_break_sm" ] = loadfx( "maps/zombie_buried/fx_buried_barrier_break_sm" ); level._effect["fx_buried_barrier_break_sm"] = loadfx( "maps/zombie_buried/fx_buried_barrier_break_sm" );
level._effect[ "fx_buried_dest_floor_lg" ] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_lg" ); level._effect["fx_buried_dest_floor_lg"] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_lg" );
level._effect[ "fx_buried_dest_floor_sm" ] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_sm" ); level._effect["fx_buried_dest_floor_sm"] = loadfx( "maps/zombie_buried/fx_buried_dest_floor_sm" );
level._effect[ "fx_buried_dest_platform_lsat" ] = loadfx( "maps/zombie_buried/fx_buried_dest_platform_lsat" ); level._effect["fx_buried_dest_platform_lsat"] = loadfx( "maps/zombie_buried/fx_buried_dest_platform_lsat" );
level._effect[ "fx_buried_fountain_spray" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" ); level._effect["fx_buried_fountain_spray"] = loadfx( "maps/zombie_buried/fx_buried_fountain_spray" );
level._effect[ "fx_buried_fountain_swirl" ] = loadfx( "maps/zombie_buried/fx_buried_fountain_swirl" ); level._effect["fx_buried_fountain_swirl"] = loadfx( "maps/zombie_buried/fx_buried_fountain_swirl" );
level._effect[ "fx_buried_meteor_sm_runner" ] = loadfx( "maps/zombie_buried/fx_buried_meteor_sm_runner" ); level._effect["fx_buried_meteor_sm_runner"] = loadfx( "maps/zombie_buried/fx_buried_meteor_sm_runner" );
level._effect[ "fx_buried_meteor_lg_runner" ] = loadfx( "maps/zombie_buried/fx_buried_meteor_lg_runner" ); level._effect["fx_buried_meteor_lg_runner"] = loadfx( "maps/zombie_buried/fx_buried_meteor_lg_runner" );
} }
#using_animtree("fxanim_props_dlc3");
precache_fxanim_props() precache_fxanim_props()
{ {
level.scr_anim[ "fxanim_props" ][ "sheriff_sign" ] = %fxanim_zom_buried_sign_sheriff_anim; level.scr_anim["fxanim_props"]["sheriff_sign"] = %fxanim_zom_buried_sign_sheriff_anim;
level.scr_anim[ "fxanim_props" ][ "balcony_rope" ] = %fxanim_zom_buried_rope_balcony_anim; level.scr_anim["fxanim_props"]["balcony_rope"] = %fxanim_zom_buried_rope_balcony_anim;
level.scr_anim[ "fxanim_props" ][ "livingstone_sign" ] = %fxanim_zom_buried_sign_livingstone_anim; level.scr_anim["fxanim_props"]["livingstone_sign"] = %fxanim_zom_buried_sign_livingstone_anim;
level.scr_anim[ "fxanim_props" ][ "livingstone_sign_fast" ] = %fxanim_zom_buried_sign_livingstone_fast_anim; level.scr_anim["fxanim_props"]["livingstone_sign_fast"] = %fxanim_zom_buried_sign_livingstone_fast_anim;
level.scr_anim[ "fxanim_props" ][ "noose_lrg" ] = %fxanim_zom_buried_noose_lrg_anim; level.scr_anim["fxanim_props"]["noose_lrg"] = %fxanim_zom_buried_noose_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "noose_med" ] = %fxanim_zom_buried_noose_med_anim; level.scr_anim["fxanim_props"]["noose_med"] = %fxanim_zom_buried_noose_med_anim;
level.scr_anim[ "fxanim_props" ][ "noose_sml" ] = %fxanim_zom_buried_noose_sml_anim; level.scr_anim["fxanim_props"]["noose_sml"] = %fxanim_zom_buried_noose_sml_anim;
level.scr_anim[ "fxanim_props" ][ "rope_barn" ] = %fxanim_zom_buried_rope_barn_anim; level.scr_anim["fxanim_props"]["rope_barn"] = %fxanim_zom_buried_rope_barn_anim;
level.scr_anim[ "fxanim_props" ][ "lsat_catwalk" ] = %fxanim_zom_buried_catwalk_anim; level.scr_anim["fxanim_props"]["lsat_catwalk"] = %fxanim_zom_buried_catwalk_anim;
level.scr_anim[ "fxanim_props" ][ "sq_orbs" ] = %fxanim_zom_buried_orbs_anim; level.scr_anim["fxanim_props"]["sq_orbs"] = %fxanim_zom_buried_orbs_anim;
level.scr_anim[ "fxanim_props" ][ "endgame_machine_open" ] = %o_zombie_end_game_open; level.scr_anim["fxanim_props"]["endgame_machine_open"] = %o_zombie_end_game_open;
level.scr_anim[ "fxanim_props" ][ "endgame_machine_close" ] = %o_zombie_end_game_close; level.scr_anim["fxanim_props"]["endgame_machine_close"] = %o_zombie_end_game_close;
level.scr_anim[ "fxanim_props" ][ "gunsmith_sign" ] = %fxanim_zom_buried_sign_gunsmith_anim; level.scr_anim["fxanim_props"]["gunsmith_sign"] = %fxanim_zom_buried_sign_gunsmith_anim;
level.scr_anim[ "fxanim_props" ][ "corrugated_panels" ] = %fxanim_zom_buried_corrugated_panels_anim; level.scr_anim["fxanim_props"]["corrugated_panels"] = %fxanim_zom_buried_corrugated_panels_anim;
level.scr_anim[ "fxanim_props" ][ "clock_old" ] = %fxanim_gp_clock_old_anim; level.scr_anim["fxanim_props"]["clock_old"] = %fxanim_gp_clock_old_anim;
level.scr_anim[ "fxanim_props" ][ "chandelier" ] = %fxanim_gp_chandelier_anim; level.scr_anim["fxanim_props"]["chandelier"] = %fxanim_gp_chandelier_anim;
level.scr_anim[ "fxanim_props" ][ "track_board" ] = %fxanim_zom_buried_track_board_anim; level.scr_anim["fxanim_props"]["track_board"] = %fxanim_zom_buried_track_board_anim;
level.scr_anim[ "fxanim_props" ][ "wood_plank_hole" ] = %fxanim_zom_buried_wood_plank_hole_anim; level.scr_anim["fxanim_props"]["wood_plank_hole"] = %fxanim_zom_buried_wood_plank_hole_anim;
level.scr_anim[ "fxanim_props" ][ "wood_plank_bridge" ] = %fxanim_zom_buried_wood_plank_bridge_anim; level.scr_anim["fxanim_props"]["wood_plank_bridge"] = %fxanim_zom_buried_wood_plank_bridge_anim;
level.scr_anim[ "fxanim_props" ][ "drop_start" ] = %fxanim_zom_buried_board_drop_start_anim; level.scr_anim["fxanim_props"]["drop_start"] = %fxanim_zom_buried_board_drop_start_anim;
level.scr_anim[ "fxanim_props" ][ "rock_crusher" ] = %fxanim_zom_buried_rock_crusher_anim; level.scr_anim["fxanim_props"]["rock_crusher"] = %fxanim_zom_buried_rock_crusher_anim;
level.scr_anim[ "fxanim_props" ][ "rock_crusher_btm" ] = %fxanim_zom_buried_rock_crusher_btm_anim; level.scr_anim["fxanim_props"]["rock_crusher_btm"] = %fxanim_zom_buried_rock_crusher_btm_anim;
level.scr_anim[ "fxanim_props" ][ "piano_old" ] = %fxanim_gp_piano_old_anim; level.scr_anim["fxanim_props"]["piano_old"] = %fxanim_gp_piano_old_anim;
level.scr_anim[ "fxanim_props" ][ "general_store_sign" ] = %fxanim_zom_buried_sign_general_store_anim; level.scr_anim["fxanim_props"]["general_store_sign"] = %fxanim_zom_buried_sign_general_store_anim;
level.scr_anim[ "fxanim_props" ][ "tree_vines" ] = %fxanim_zom_buried_tree_vines_anim; level.scr_anim["fxanim_props"]["tree_vines"] = %fxanim_zom_buried_tree_vines_anim;
level.scr_anim[ "fxanim_props" ][ "ice_cream_sign" ] = %fxanim_zom_buried_sign_ice_cream_anim; level.scr_anim["fxanim_props"]["ice_cream_sign"] = %fxanim_zom_buried_sign_ice_cream_anim;
level.scr_anim[ "fxanim_props" ][ "conveyor" ] = %fxanim_zom_buried_conveyor_anim; level.scr_anim["fxanim_props"]["conveyor"] = %fxanim_zom_buried_conveyor_anim;
level.scr_anim[ "fxanim_props" ][ "conveyor_lrg" ] = %fxanim_zom_buried_conveyor_lrg_anim; level.scr_anim["fxanim_props"]["conveyor_lrg"] = %fxanim_zom_buried_conveyor_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "fountain_grave" ] = %fxanim_zom_buried_fountain_grave_anim; level.scr_anim["fxanim_props"]["fountain_grave"] = %fxanim_zom_buried_fountain_grave_anim;
level.scr_anim[ "fxanim_props" ][ "fountain_maze" ] = %fxanim_zom_buried_fountain_maze_anim; level.scr_anim["fxanim_props"]["fountain_maze"] = %fxanim_zom_buried_fountain_maze_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_church" ] = %fxanim_zom_buried_falling_rocks_church_anim; level.scr_anim["fxanim_props"]["rocks_church"] = %fxanim_zom_buried_falling_rocks_church_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_graveyard" ] = %fxanim_zom_buried_falling_rocks_graveyard_anim; level.scr_anim["fxanim_props"]["rocks_graveyard"] = %fxanim_zom_buried_falling_rocks_graveyard_anim;
level.scr_anim[ "fxanim_props" ][ "rocks_mansion" ] = %fxanim_zom_buried_falling_rocks_mansion_anim; level.scr_anim["fxanim_props"]["rocks_mansion"] = %fxanim_zom_buried_falling_rocks_mansion_anim;
level.maze_switch_anim[ "switch_up" ] = %o_zombie_maze_switch_up; level.maze_switch_anim["switch_up"] = %o_zombie_maze_switch_up;
level.maze_switch_anim[ "switch_down" ] = %o_zombie_maze_switch_down; level.maze_switch_anim["switch_down"] = %o_zombie_maze_switch_down;
level.maze_switch_anim[ "switch_neutral" ] = %o_zombie_maze_switch_neutral; level.maze_switch_anim["switch_neutral"] = %o_zombie_maze_switch_neutral;
level.scr_anim[ "fxanim_props" ][ "bank_sign" ] = %fxanim_zom_buried_sign_bank_anim; level.scr_anim["fxanim_props"]["bank_sign"] = %fxanim_zom_buried_sign_bank_anim;
scriptmodelsuseanimtree( -1 ); scriptmodelsuseanimtree( -1 );
} }

View File

@ -1,185 +1,186 @@
//checked includes changed to match cerberus output // 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_zonemgr; #include maps\mp\_utility;
#include maps/mp/zm_buried_grief_street; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zm_buried_turned_street; #include maps\mp\zombies\_zm_game_module;
#include maps/mp/zm_buried_classic; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps/mp/zm_buried; #include maps\mp\zombies\_zm_buildables;
#include maps/mp/zombies/_zm_buildables; #include maps\mp\zm_buried;
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\zm_buried_classic;
#include maps/mp/zombies/_zm_game_module; #include maps\mp\zm_buried_turned_street;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zm_buried_grief_street;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_zonemgr;
#include common_scripts/utility; #include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_unitrigger;
init() //checked matches cerberus output init()
{ {
add_map_gamemode( "zclassic", maps/mp/zm_buried::zclassic_preinit, undefined, undefined ); add_map_gamemode( "zclassic", maps\mp\zm_buried::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zcleansed", maps/mp/zm_buried::zcleansed_preinit, undefined, undefined ); add_map_gamemode( "zcleansed", maps\mp\zm_buried::zcleansed_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps/mp/zm_buried::zgrief_preinit, undefined, undefined ); add_map_gamemode( "zgrief", maps\mp\zm_buried::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "processing", maps/mp/zm_buried_classic::precache, maps/mp/zm_buried_classic::main ); add_map_location_gamemode( "zclassic", "processing", maps\mp\zm_buried_classic::precache, maps\mp\zm_buried_classic::main );
add_map_location_gamemode( "zcleansed", "street", maps/mp/zm_buried_turned_street::precache, maps/mp/zm_buried_turned_street::main ); add_map_location_gamemode( "zcleansed", "street", maps\mp\zm_buried_turned_street::precache, maps\mp\zm_buried_turned_street::main );
add_map_location_gamemode( "zgrief", "street", maps/mp/zm_buried_grief_street::precache, maps/mp/zm_buried_grief_street::main ); add_map_location_gamemode( "zgrief", "street", maps\mp\zm_buried_grief_street::precache, maps\mp\zm_buried_grief_street::main );
} }
deletechalktriggers() //checked matches cerberus output deletechalktriggers()
{ {
chalk_triggers = getentarray( "chalk_buildable_trigger", "targetname" ); chalk_triggers = getentarray( "chalk_buildable_trigger", "targetname" );
array_thread( chalk_triggers, ::self_delete ); array_thread( chalk_triggers, ::self_delete );
} }
deletebuyabledoors() //checked changed to match cerberus output deletebuyabledoors()
{ {
doors_trigs = getentarray( "zombie_door", "targetname" ); doors_trigs = getentarray( "zombie_door", "targetname" );
foreach(door in doors_trigs)
foreach ( door in doors_trigs )
{ {
doors = getentarray( door.target, "targetname" ); doors = getentarray( door.target, "targetname" );
array_thread( doors, ::self_delete ); array_thread( doors, ::self_delete );
} }
array_thread( doors_trigs, ::self_delete ); array_thread( doors_trigs, ::self_delete );
} }
deletebuyabledebris( justtriggers ) //checked changed to match cerberus output deletebuyabledebris( justtriggers )
{ {
debris_trigs = getentarray( "zombie_debris", "targetname" ); debris_trigs = getentarray( "zombie_debris", "targetname" );
while ( !is_true( justtriggers ) )
if ( !is_true( justtriggers ) )
{ {
foreach ( trig in debris_trigs ) foreach ( trig in debris_trigs )
{ {
if ( isDefined( trig.script_flag ) ) if ( isdefined( trig.script_flag ) )
{
flag_set( trig.script_flag ); flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" ); parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete ); array_thread( parts, ::self_delete );
} }
} }
array_thread( debris_trigs, ::self_delete ); array_thread( debris_trigs, ::self_delete );
} }
deleteslothbarricades( justtriggers ) //checked changed to match cerberus output deleteslothbarricades( justtriggers )
{ {
sloth_trigs = getentarray( "sloth_barricade", "targetname" ); sloth_trigs = getentarray( "sloth_barricade", "targetname" );
while ( !is_true( justtriggers ) )
if ( !is_true( justtriggers ) )
{ {
foreach ( trig in sloth_trigs ) foreach ( trig in sloth_trigs )
{ {
if ( isDefined( trig.script_flag ) && level flag_exists( trig.script_flag ) ) if ( isdefined( trig.script_flag ) && level flag_exists( trig.script_flag ) )
{
flag_set( trig.script_flag ); flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" ); parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete ); array_thread( parts, ::self_delete );
} }
} }
array_thread( sloth_trigs, ::self_delete ); array_thread( sloth_trigs, ::self_delete );
} }
deleteslothbarricade( location ) //checked changed to match cerberus output deleteslothbarricade( location )
{ {
sloth_trigs = getentarray( "sloth_barricade", "targetname" ); sloth_trigs = getentarray( "sloth_barricade", "targetname" );
foreach ( trig in sloth_trigs ) foreach ( trig in sloth_trigs )
{ {
if ( isDefined( trig.script_location ) && trig.script_location == location ) if ( isdefined( trig.script_location ) && trig.script_location == location )
{
if ( isDefined( trig.script_flag ) )
{ {
if ( isdefined( trig.script_flag ) )
flag_set( trig.script_flag ); flag_set( trig.script_flag );
}
parts = getentarray( trig.target, "targetname" ); parts = getentarray( trig.target, "targetname" );
array_thread( parts, ::self_delete ); array_thread( parts, ::self_delete );
} }
} }
} }
spawnmapcollision( collision_model, origin ) //checked matches cerberus output spawnmapcollision( collision_model, origin )
{ {
if ( !isDefined( origin ) ) if ( !isdefined( origin ) )
{
origin = ( 0, 0, 0 ); origin = ( 0, 0, 0 );
}
collision = spawn( "script_model", origin, 1 ); collision = spawn( "script_model", origin, 1 );
collision setmodel( collision_model ); collision setmodel( collision_model );
collision disconnectpaths(); collision disconnectpaths();
} }
turnperkon( perk ) //checked matches cerberus output turnperkon( perk )
{ {
level notify( perk + "_on" ); level notify( perk + "_on" );
wait_network_frame(); wait_network_frame();
} }
disableallzonesexcept( zones ) //checked changed to match cerberus output see compiler_limitations.md No. 1 disableallzonesexcept( zones )
{ {
foreach ( zone in zones ) foreach ( zone in zones )
{ level thread maps\mp\zombies\_zm_zonemgr::enable_zone( zone );
level thread maps/mp/zombies/_zm_zonemgr::enable_zone( zone );
} foreach ( zoneindex, zone in level.zones )
zoneindex = 0;
foreach ( zone in level.zones )
{ {
should_disable = 1; should_disable = 1;
for ( i = 0; i > zones.size; i++ )
{ foreach ( cleared_zone in zones )
if ( zoneindex == i )
{ {
if ( zoneindex == cleared_zone )
should_disable = 0; should_disable = 0;
} }
}
if ( is_true( should_disable ) ) if ( is_true( should_disable ) )
{ {
zones[ i ].is_enabled = 0; zone.is_enabled = 0;
zones[ i ].is_spawning_allowed = 0; zone.is_spawning_allowed = 0;
} }
zoneindex++;
} }
} }
remove_adjacent_zone( main_zone, adjacent_zone ) //checked changed to match cerberus output remove_adjacent_zone( main_zone, adjacent_zone )
{ {
if ( isDefined( level.zones[ main_zone ].adjacent_zones ) && isDefined( level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] ) ) if ( isdefined( level.zones[main_zone].adjacent_zones ) && isdefined( level.zones[main_zone].adjacent_zones[adjacent_zone] ) )
{ level.zones[main_zone].adjacent_zones[adjacent_zone] = undefined;
level.zones[ main_zone ].adjacent_zones[ adjacent_zone ] = undefined;
} if ( isdefined( level.zones[adjacent_zone].adjacent_zones ) && isdefined( level.zones[adjacent_zone].adjacent_zones[main_zone] ) )
if ( isDefined( level.zones[ adjacent_zone ].adjacent_zones ) && isDefined( level.zones[ adjacent_zone ].adjacent_zones[ main_zone ] ) ) level.zones[adjacent_zone].adjacent_zones[main_zone] = undefined;
{
level.zones[ adjacent_zone ].adjacent_zones[ main_zone ] = undefined;
}
} }
builddynamicwallbuy( location, weaponname ) //checked changed to match cerberus output builddynamicwallbuy( location, weaponname )
{ {
match_string = ( level.scr_zm_ui_gametype + "_" ) + level.scr_zm_map_start_location; match_string = level.scr_zm_ui_gametype + "_" + level.scr_zm_map_start_location;
foreach ( stub in level.chalk_builds ) foreach ( stub in level.chalk_builds )
{ {
wallbuy = getstruct( stub.target, "targetname" ); wallbuy = getstruct( stub.target, "targetname" );
if ( isDefined( wallbuy.script_location ) && wallbuy.script_location == location )
if ( isdefined( wallbuy.script_location ) && wallbuy.script_location == location )
{ {
if ( !isDefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) ) if ( !isdefined( wallbuy.script_noteworthy ) || issubstr( wallbuy.script_noteworthy, match_string ) )
{ {
maps/mp/zombies/_zm_weapons::add_dynamic_wallbuy( weaponname, wallbuy.targetname, 1 ); maps\mp\zombies\_zm_weapons::add_dynamic_wallbuy( weaponname, wallbuy.targetname, 1 );
thread wait_and_remove( stub, stub.buildablezone.pieces[ 0 ] ); thread wait_and_remove( stub, stub.buildablezone.pieces[0] );
} }
} }
} }
} }
buildbuildable( buildable ) //checked changed to match cerberus output see compiler_limitations.md No. 1 buildbuildable( buildable )
{ {
player = get_players()[ 0 ]; player = get_players()[0];
foreach ( stub in level.buildable_stubs ) foreach ( stub in level.buildable_stubs )
{ {
if ( !isDefined( buildable ) || stub.equipname == buildable ) if ( !isdefined( buildable ) || stub.equipname == buildable )
{ {
if ( isDefined( buildable ) || stub.persistent != 3 ) if ( isdefined( buildable ) || stub.persistent != 3 )
{ {
stub maps/mp/zombies/_zm_buildables::buildablestub_finish_build( player ); stub maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
stub maps/mp/zombies/_zm_buildables::buildablestub_remove(); stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
for ( i = 0; i < stub.buildablezone.pieces.size; i++ )
{ foreach ( piece in stub.buildablezone.pieces )
stub.buildablezone.pieces[ i ] maps/mp/zombies/_zm_buildables::piece_unspawn(); piece maps\mp\zombies\_zm_buildables::piece_unspawn();
}
stub.model notsolid(); stub.model notsolid();
stub.model show(); stub.model show();
return; return;
@ -188,54 +189,55 @@ buildbuildable( buildable ) //checked changed to match cerberus output see compi
} }
} }
wait_and_remove( stub, piece ) //checked matches cerberus output wait_and_remove( stub, piece )
{ {
wait 0.1; wait 0.1;
self buildablestub_remove(); self buildablestub_remove();
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
piece piece_unspawn(); piece piece_unspawn();
} }
generatebuildabletarps() //checked changed to match cerberus output generatebuildabletarps()
{ {
struct_locations = getstructarray( "buildables_tarp", "targetname" ); struct_locations = getstructarray( "buildables_tarp", "targetname" );
level.buildable_tarps = []; level.buildable_tarps = [];
foreach ( struct in struct_locations ) foreach ( struct in struct_locations )
{ {
tarp = spawn( "script_model", struct.origin ); tarp = spawn( "script_model", struct.origin );
tarp.angles = struct.angles; tarp.angles = struct.angles;
tarp setmodel( "p6_zm_bu_buildable_bench_tarp" ); tarp setmodel( "p6_zm_bu_buildable_bench_tarp" );
tarp.targetname = "buildable_tarp"; tarp.targetname = "buildable_tarp";
if ( isDefined( struct.script_location ) )
{ if ( isdefined( struct.script_location ) )
tarp.script_location = struct.script_location; tarp.script_location = struct.script_location;
}
level.buildable_tarps[ level.buildable_tarps.size ] = tarp; level.buildable_tarps[level.buildable_tarps.size] = tarp;
} }
} }
deletebuildabletarp( location ) //checked changed to match cerberus output deletebuildabletarp( location )
{ {
foreach ( tarp in level.buildable_tarps ) foreach ( tarp in level.buildable_tarps )
{ {
if ( isDefined( tarp.script_location ) && tarp.script_location == location ) if ( isdefined( tarp.script_location ) && tarp.script_location == location )
{
tarp delete(); tarp delete();
} }
}
} }
powerswitchstate( on ) //checked matches cerberus output powerswitchstate( on )
{ {
trigger = getent( "use_elec_switch", "targetname" ); trigger = getent( "use_elec_switch", "targetname" );
if ( isDefined( trigger ) )
{ if ( isdefined( trigger ) )
trigger delete(); trigger delete();
}
master_switch = getent( "elec_switch", "targetname" ); master_switch = getent( "elec_switch", "targetname" );
if ( isDefined( master_switch ) )
if ( isdefined( master_switch ) )
{ {
master_switch notsolid(); master_switch notsolid();
if ( is_true( on ) ) if ( is_true( on ) )
{ {
master_switch rotateroll( -90, 0.3 ); master_switch rotateroll( -90, 0.3 );

View File

@ -1,31 +1,33 @@
#include maps/mp/gametypes_zm/_zm_gametype; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_buildables; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_magicbox; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_equip_subwoofer; #include common_scripts\utility;
#include maps/mp/zombies/_zm_equip_springpad; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_equip_turbine; #include maps\mp\zombies\_zm_race_utility;
#include maps/mp/zm_buried_buildables; #include maps\mp\zm_buried_gamemodes;
#include maps/mp/zm_buried_gamemodes; #include maps\mp\zm_buried_buildables;
#include maps/mp/zombies/_zm_race_utility; #include maps\mp\zombies\_zm_equip_turbine;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_equip_springpad;
#include common_scripts/utility; #include maps\mp\zombies\_zm_equip_subwoofer;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\gametypes_zm\_zm_gametype;
precache() //checked matches cerberus output precache()
{ {
precachemodel( "zm_collision_buried_street_grief" ); precachemodel( "zm_collision_buried_street_grief" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" ); precachemodel( "p6_zm_bu_buildable_bench_tarp" );
level.chalk_buildable_pieces_hide = 1; level.chalk_buildable_pieces_hide = 1;
griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" ); griefbuildables = array( "chalk", "turbine", "springpad_zm", "subwoofer_zm" );
maps/mp/zm_buried_buildables::include_buildables( griefbuildables ); maps\mp\zm_buried_buildables::include_buildables( griefbuildables );
maps/mp/zm_buried_buildables::init_buildables( griefbuildables ); maps\mp\zm_buried_buildables::init_buildables( griefbuildables );
maps/mp/zombies/_zm_equip_turbine::init(); maps\mp\zombies\_zm_equip_turbine::init();
maps/mp/zombies/_zm_equip_turbine::init_animtree(); maps\mp\zombies\_zm_equip_turbine::init_animtree();
maps/mp/zombies/_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" ); maps\mp\zombies\_zm_equip_springpad::init( &"ZM_BURIED_EQ_SP_PHS", &"ZM_BURIED_EQ_SP_HTS" );
maps/mp/zombies/_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" ); maps\mp\zombies\_zm_equip_subwoofer::init( &"ZM_BURIED_EQ_SW_PHS", &"ZM_BURIED_EQ_SW_HTS" );
} }
street_treasure_chest_init() //checked matches cerberus output street_treasure_chest_init()
{ {
start_chest = getstruct( "start_chest", "script_noteworthy" ); start_chest = getstruct( "start_chest", "script_noteworthy" );
court_chest = getstruct( "courtroom_chest1", "script_noteworthy" ); court_chest = getstruct( "courtroom_chest1", "script_noteworthy" );
@ -34,20 +36,20 @@ street_treasure_chest_init() //checked matches cerberus output
gun_chest = getstruct( "gunshop_chest", "script_noteworthy" ); gun_chest = getstruct( "gunshop_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 ); setdvar( "disableLookAtEntityLogic", 1 );
level.chests = []; level.chests = [];
level.chests[ level.chests.size ] = start_chest; level.chests[level.chests.size] = start_chest;
level.chests[ level.chests.size ] = court_chest; level.chests[level.chests.size] = court_chest;
level.chests[ level.chests.size ] = tunnel_chest; level.chests[level.chests.size] = tunnel_chest;
level.chests[ level.chests.size ] = jail_chest; level.chests[level.chests.size] = jail_chest;
level.chests[ level.chests.size ] = gun_chest; level.chests[level.chests.size] = gun_chest;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" ); maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
} }
main() //checked matches cerberus output main()
{ {
level.buildables_built[ "pap" ] = 1; level.buildables_built["pap"] = 1;
level.equipment_team_pick_up = 1; level.equipment_team_pick_up = 1;
level thread maps/mp/zombies/_zm_buildables::think_buildables(); level thread maps\mp\zombies\_zm_buildables::think_buildables();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
street_treasure_chest_init(); street_treasure_chest_init();
generatebuildabletarps(); generatebuildabletarps();
deletebuildabletarp( "courthouse" ); deletebuildabletarp( "courthouse" );
@ -71,20 +73,20 @@ main() //checked matches cerberus output
turnperkon( "Pack_A_Punch" ); turnperkon( "Pack_A_Punch" );
} }
enemy_location_override( zombie, enemy ) //checked matches cerberus output enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( isDefined( self.reroute ) && self.reroute )
{ if ( isdefined( self.reroute ) && self.reroute )
if ( isDefined( self.reroute_origin ) )
{ {
if ( isdefined( self.reroute_origin ) )
location = self.reroute_origin; location = self.reroute_origin;
} }
}
return location; return location;
} }
builddynamicwallbuys() //checked matches cerberus output builddynamicwallbuys()
{ {
builddynamicwallbuy( "bank", "beretta93r_zm" ); builddynamicwallbuy( "bank", "beretta93r_zm" );
builddynamicwallbuy( "bar", "pdw57_zm" ); builddynamicwallbuy( "bar", "pdw57_zm" );
@ -100,7 +102,7 @@ builddynamicwallbuys() //checked matches cerberus output
builddynamicwallbuy( "candyshop", "870mcs_zm" ); builddynamicwallbuy( "candyshop", "870mcs_zm" );
} }
buildbuildables() //checked matches cerberus output buildbuildables()
{ {
buildbuildable( "springpad_zm" ); buildbuildable( "springpad_zm" );
buildbuildable( "subwoofer_zm" ); buildbuildable( "subwoofer_zm" );

View File

@ -1,14 +1,16 @@
#include maps/mp/zombies/_zm_utility; // 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;
#using_animtree( "zm_buried_props" ); #include maps\mp\zombies\_zm_utility;
init_jail_animtree() init_jail_animtree()
{ {
scriptmodelsuseanimtree( -1 ); scriptmodelsuseanimtree( -1 );
} }
#using_animtree("zm_buried_props");
init_jail_anims() init_jail_anims()
{ {
level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door; level.jail_open = %o_zombie_sloth_idle_jail_2_cower_door;
@ -35,15 +37,13 @@ init_jail()
jail_open_door( jumpback ) jail_open_door( jumpback )
{ {
level.cell_door playsound( "zmb_jail_door_open" ); level.cell_door playsound( "zmb_jail_door_open" );
if ( is_true( jumpback ) ) if ( is_true( jumpback ) )
{
level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 ); level.cell_door setanim( level.jail_open_jumpback, 1, 1, 1 );
}
else else
{
level.cell_door setanim( level.jail_open, 1, 1, 1 ); level.cell_door setanim( level.jail_open, 1, 1, 1 );
}
if ( isDefined( level.cell_door.clip ) ) if ( isdefined( level.cell_door.clip ) )
{ {
level.cell_door.clip notsolid(); level.cell_door.clip notsolid();
level.cell_door.clip connectpaths(); level.cell_door.clip connectpaths();
@ -54,7 +54,8 @@ jail_close_door()
{ {
level.cell_door playsound( "zmb_jail_door_close" ); level.cell_door playsound( "zmb_jail_door_close" );
level.cell_door setanim( level.jail_close_cower, 1, 1, 1 ); level.cell_door setanim( level.jail_close_cower, 1, 1, 1 );
if ( isDefined( level.cell_door.clip ) )
if ( isdefined( level.cell_door.clip ) )
{ {
level.cell_door.clip solid(); level.cell_door.clip solid();
level.cell_door.clip disconnectpaths(); level.cell_door.clip disconnectpaths();

View File

@ -1,147 +1,145 @@
//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_weap_time_bomb; #include common_scripts\utility;
#include maps/mp/zombies/_zm_spawner; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_zonemgr; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_equip_headchopper; #include maps\mp\zombies\_zm_net;
#include maps/mp/zombies/_zm_net; #include maps\mp\zombies\_zm_equip_headchopper;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_zonemgr;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_spawner;
#include common_scripts/utility; #include maps\mp\zombies\_zm_weap_time_bomb;
#include maps\mp\zombies\_zm_audio;
maze_precache() //checked changed to match cerberus output maze_precache()
{ {
blocker_locations = getstructarray( "maze_blocker", "targetname" ); blocker_locations = getstructarray( "maze_blocker", "targetname" );
model_list = []; model_list = [];
for ( i = 0; i < blocker_locations.size; i++ ) for ( i = 0; i < blocker_locations.size; i++ )
{ model_list[blocker_locations[i].model] = 1;
model_list[ blocker_locations[ i ].model ] = 1;
}
model_names = getarraykeys( model_list ); model_names = getarraykeys( model_list );
for ( i = 0; i < model_names.size; i++ ) for ( i = 0; i < model_names.size; i++ )
{ precachemodel( model_names[i] );
precachemodel( model_names[ i ] );
}
} }
maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate ) //checked changed to match cerberus output maze_nodes_link_unlink_internal( func_ptr, bignorechangeonmigrate )
{ {
for ( i = 0; i < self.blocked_nodes.size; i++ ) for ( i = 0; i < self.blocked_nodes.size; i++ )
{ {
for ( j = 0; j < self.blocked_nodes[i].connected_nodes.size; j++ ) for ( j = 0; j < self.blocked_nodes[i].connected_nodes.size; j++ )
{ {
[[ func_ptr ]]( self.blocked_nodes[ i ], self.blocked_nodes[ i ].connected_nodes[ j ], bignorechangeonmigrate ); [[ func_ptr ]]( self.blocked_nodes[i], self.blocked_nodes[i].connected_nodes[j], bignorechangeonmigrate );
[[ func_ptr ]]( self.blocked_nodes[ i ].connected_nodes[ j ], self.blocked_nodes[ i ], bignorechangeonmigrate ); [[ func_ptr ]]( self.blocked_nodes[i].connected_nodes[j], self.blocked_nodes[i], bignorechangeonmigrate );
} }
} }
} }
link_nodes_for_blocker_location() //checked matches cerberus output link_nodes_for_blocker_location()
{ {
self maze_nodes_link_unlink_internal( maps/mp/zombies/_zm_utility::link_nodes, 1 ); self maze_nodes_link_unlink_internal( maps\mp\zombies\_zm_utility::link_nodes, 1 );
} }
unlink_nodes_for_blocker_location() //checked matches cerberus output unlink_nodes_for_blocker_location()
{ {
self maze_nodes_link_unlink_internal( maps/mp/zombies/_zm_utility::unlink_nodes, 0 ); self maze_nodes_link_unlink_internal( maps\mp\zombies\_zm_utility::unlink_nodes, 0 );
} }
init_maze_clientfields() //checked changed to match cerberus output init_maze_clientfields()
{ {
blocker_locations = getstructarray( "maze_blocker", "targetname" ); blocker_locations = getstructarray( "maze_blocker", "targetname" );
foreach ( blocker in blocker_locations ) foreach ( blocker in blocker_locations )
{
registerclientfield( "world", "maze_blocker_" + blocker.script_noteworthy, 12000, 1, "int" ); registerclientfield( "world", "maze_blocker_" + blocker.script_noteworthy, 12000, 1, "int" );
}
} }
init_maze_permutations() //checked changed to match cerberus output init_maze_permutations()
{ {
blocker_locations = getstructarray( "maze_blocker", "targetname" ); blocker_locations = getstructarray( "maze_blocker", "targetname" );
level._maze._blocker_locations = []; level._maze._blocker_locations = [];
for ( i = 0; i < blocker_locations.size; i++ ) for ( i = 0; i < blocker_locations.size; i++ )
{ {
if ( isDefined( blocker_locations[ i ].target ) ) if ( isdefined( blocker_locations[i].target ) )
{ {
blocker_locations[ i ].blocked_nodes = getnodearray( blocker_locations[ i ].target, "targetname" ); blocker_locations[i].blocked_nodes = getnodearray( blocker_locations[i].target, "targetname" );
for ( j = 0; j < blocker_locations[i].blocked_nodes.size; j++ ) for ( j = 0; j < blocker_locations[i].blocked_nodes.size; j++ )
{ blocker_locations[i].blocked_nodes[j].connected_nodes = getnodearray( blocker_locations[i].blocked_nodes[j].target, "targetname" );
blocker_locations[ i ].blocked_nodes[ j ].connected_nodes = getnodearray( blocker_locations[ i ].blocked_nodes[ j ].target, "targetname" );
}
} }
else else
{ blocker_locations[i].blocked_nodes = [];
blocker_locations[ i ].blocked_nodes = [];
} level._maze._blocker_locations[blocker_locations[i].script_noteworthy] = blocker_locations[i];
level._maze._blocker_locations[ blocker_locations[ i ].script_noteworthy ] = blocker_locations[ i ];
} }
level._maze._perms = array( array( "blocker_1", "blocker_2", "blocker_3", "blocker_4" ), array( "blocker_5", "blocker_6", "blocker_7", "blocker_8", "blocker_9" ), array( "blocker_1", "blocker_10", "blocker_6", "blocker_4", "blocker_11" ), array( "blocker_1", "blocker_3", "blocker_4", "blocker_12" ), array( "blocker_5", "blocker_6", "blocker_12", "blocker_13" ), array( "blocker_4", "blocker_6", "blocker_14" ) ); level._maze._perms = array( array( "blocker_1", "blocker_2", "blocker_3", "blocker_4" ), array( "blocker_5", "blocker_6", "blocker_7", "blocker_8", "blocker_9" ), array( "blocker_1", "blocker_10", "blocker_6", "blocker_4", "blocker_11" ), array( "blocker_1", "blocker_3", "blocker_4", "blocker_12" ), array( "blocker_5", "blocker_6", "blocker_12", "blocker_13" ), array( "blocker_4", "blocker_6", "blocker_14" ) );
randomize_maze_perms(); randomize_maze_perms();
level._maze._active_perm_list = []; level._maze._active_perm_list = [];
} }
init_maze_blocker_pool() //checked changed to match cerberus output init_maze_blocker_pool()
{ {
pool_size = 0; pool_size = 0;
for ( i = 0; i < level._maze._perms.size; i++ ) for ( i = 0; i < level._maze._perms.size; i++ )
{ {
if ( level._maze._perms[ i ].size > pool_size ) if ( level._maze._perms[i].size > pool_size )
{ pool_size = level._maze._perms[i].size;
pool_size = level._maze._perms[ i ].size;
}
} }
level._maze._blocker_pool = []; level._maze._blocker_pool = [];
for ( i = 0; i < pool_size; i++ ) for ( i = 0; i < pool_size; i++ )
{ {
ent = spawn( "script_model", level._maze.players_in_maze_volume.origin - vectorScale( ( 0, 0, 1 ), 300 ) ); ent = spawn( "script_model", level._maze.players_in_maze_volume.origin - vectorscale( ( 0, 0, 1 ), 300.0 ) );
ent ghost(); ent ghost();
ent.in_use = 0; ent.in_use = 0;
level._maze._blocker_pool[ i ] = ent; level._maze._blocker_pool[i] = ent;
} }
level._maze._blocker_pool_num_free = pool_size; level._maze._blocker_pool_num_free = pool_size;
} }
free_blockers_available() //checked matches cerberus output free_blockers_available()
{ {
return level._maze._blocker_pool_num_free > 0; return level._maze._blocker_pool_num_free > 0;
} }
get_free_blocker_model_from_pool() //checked changed to match cerberus output get_free_blocker_model_from_pool()
{ {
for ( i = 0; i < level._maze._blocker_pool.size; i++ ) for ( i = 0; i < level._maze._blocker_pool.size; i++ )
{ {
if ( !level._maze._blocker_pool[ i ].in_use ) if ( !level._maze._blocker_pool[i].in_use )
{ {
level._maze._blocker_pool[ i ].in_use = 1; level._maze._blocker_pool[i].in_use = 1;
level._maze._blocker_pool_num_free--; level._maze._blocker_pool_num_free--;
return level._maze._blocker_pool[i];
return level._maze._blocker_pool[ i ];
} }
} }
/*
/# /#
assertmsg( "zm_buried_maze : Blocker pool is empty." ); assertmsg( "zm_buried_maze : Blocker pool is empty." );
#/ #/
*/
return undefined; return undefined;
} }
return_blocker_model_to_pool( ent ) //checked changed to match cerberus output return_blocker_model_to_pool( ent )
{ {
ent ghost(); ent ghost();
ent.origin = level._maze.players_in_maze_volume.origin - vectorScale( ( 0, 0, 1 ), 300 ); ent.origin = level._maze.players_in_maze_volume.origin - vectorscale( ( 0, 0, 1 ), 300.0 );
ent dontinterpolate(); ent dontinterpolate();
ent.in_use = 0; ent.in_use = 0;
level._maze._blocker_pool_num_free++; level._maze._blocker_pool_num_free++;
} }
randomize_maze_perms() //checked matches cerberus output randomize_maze_perms()
{ {
level._maze._perms = array_randomize( level._maze._perms ); level._maze._perms = array_randomize( level._maze._perms );
level._maze._cur_perm = 0; level._maze._cur_perm = 0;
} }
init() //checked matches cerberus output init()
{ {
level._maze = spawnstruct(); level._maze = spawnstruct();
level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" ); level._maze.players_in_maze_volume = getent( "maze_player_volume", "targetname" );
@ -155,288 +153,284 @@ init() //checked matches cerberus output
level thread vo_in_maze(); level thread vo_in_maze();
} }
maze_blocker_sinks_thread( blocker ) //checked changed to match cerberus output maze_blocker_sinks_thread( blocker )
{ {
self waittill( "lower_" + self.script_noteworthy ); self waittill( "lower_" + self.script_noteworthy );
if ( flag( "start_zombie_round_logic" ) ) if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 ); level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
}
blocker maps/mp/zombies/_zm_equip_headchopper::destroyheadchopperstouching(); blocker maps\mp\zombies\_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin - vectorScale( ( 0, 0, 1 ), 96 ), 1 ); blocker moveto( self.origin - vectorscale( ( 0, 0, 1 ), 96.0 ), 1.0 );
blocker waittill( "movedone" ); blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) ) if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 ); level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
}
return_blocker_model_to_pool( blocker ); return_blocker_model_to_pool( blocker );
self link_nodes_for_blocker_location(); self link_nodes_for_blocker_location();
} }
delay_destroy_corpses_near_blocker() //checked changed to match cerberus output delay_destroy_corpses_near_blocker()
{ {
wait 0.2; wait 0.2;
corpses = getcorpsearray(); corpses = getcorpsearray();
if ( isDefined( corpses ) )
if ( isdefined( corpses ) )
{ {
foreach ( corpse in corpses ) foreach ( corpse in corpses )
{ {
if ( distancesquared( corpse.origin, self.origin ) < 2304 ) if ( distancesquared( corpse.origin, self.origin ) < 2304 )
{
corpse delete(); corpse delete();
} }
} }
}
} }
maze_blocker_rises_thread() //checked changed to match cerberus output maze_blocker_rises_thread()
{ {
blocker = get_free_blocker_model_from_pool(); blocker = get_free_blocker_model_from_pool();
self thread maze_blocker_sinks_thread( blocker ); self thread maze_blocker_sinks_thread( blocker );
self unlink_nodes_for_blocker_location(); self unlink_nodes_for_blocker_location();
blocker.origin = self.origin - vectorScale( ( 0, 0, 1 ), 96 ); blocker.origin = self.origin - vectorscale( ( 0, 0, 1 ), 96.0 );
blocker.angles = self.angles; blocker.angles = self.angles;
blocker setmodel( self.model ); blocker setmodel( self.model );
blocker dontinterpolate(); blocker dontinterpolate();
blocker show(); blocker show();
wait 0.05; wait 0.05;
if ( flag( "start_zombie_round_logic" ) ) if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 ); level setclientfield( "maze_blocker_" + self.script_noteworthy, 1 );
}
blocker maps/mp/zombies/_zm_equip_headchopper::destroyheadchopperstouching(); blocker maps\mp\zombies\_zm_equip_headchopper::destroyheadchopperstouching();
blocker moveto( self.origin, 0.65 ); blocker moveto( self.origin, 0.65 );
blocker thread delay_destroy_corpses_near_blocker(); blocker thread delay_destroy_corpses_near_blocker();
blocker waittill( "movedone" ); blocker waittill( "movedone" );
if ( flag( "start_zombie_round_logic" ) ) if ( flag( "start_zombie_round_logic" ) )
{
level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 ); level setclientfield( "maze_blocker_" + self.script_noteworthy, 0 );
}
} }
maze_do_perm_change() //checked changed to match cerberus output maze_do_perm_change()
{ {
level._maze._cur_perm++; level._maze._cur_perm++;
if ( level._maze._cur_perm == level._maze._perms.size ) if ( level._maze._cur_perm == level._maze._perms.size )
{
randomize_maze_perms(); randomize_maze_perms();
}
new_perm_list = level._maze._perms[ level._maze._cur_perm ]; new_perm_list = level._maze._perms[level._maze._cur_perm];
blockers_raise_list = []; blockers_raise_list = [];
blockers_lower_list = level._maze._active_perm_list; blockers_lower_list = level._maze._active_perm_list;
for ( i = 0; i < new_perm_list.size; i++ ) for ( i = 0; i < new_perm_list.size; i++ )
{ {
found = 0; found = 0;
for ( j = 0; j < level._maze._active_perm_list.size; j++ ) for ( j = 0; j < level._maze._active_perm_list.size; j++ )
{ {
if ( new_perm_list[ i ] == level._maze._active_perm_list[ j ] ) if ( new_perm_list[i] == level._maze._active_perm_list[j] )
{ {
found = 1; found = 1;
blockers_lower_list[ j ] = ""; blockers_lower_list[j] = "";
break; break;
} }
} }
if ( !found ) if ( !found )
{ blockers_raise_list[blockers_raise_list.size] = new_perm_list[i];
blockers_raise_list[ blockers_raise_list.size ] = new_perm_list[ i ];
}
} }
level thread raise_new_perm_blockers( blockers_raise_list ); level thread raise_new_perm_blockers( blockers_raise_list );
level thread lower_old_perm_blockers( blockers_lower_list ); level thread lower_old_perm_blockers( blockers_lower_list );
level._maze._active_perm_list = level._maze._perms[ level._maze._cur_perm ]; level._maze._active_perm_list = level._maze._perms[level._maze._cur_perm];
} }
raise_new_perm_blockers( list ) //checked changed to match cerberus output raise_new_perm_blockers( list )
{ {
for ( i = 0; i < list.size; i++ ) for ( i = 0; i < list.size; i++ )
{ {
while ( !free_blockers_available() ) while ( !free_blockers_available() )
{
wait 0.1; wait 0.1;
}
level._maze._blocker_locations[ list[ i ] ] thread maze_blocker_rises_thread(); level._maze._blocker_locations[list[i]] thread maze_blocker_rises_thread();
wait 0.25; wait 0.25;
} }
} }
lower_old_perm_blockers( list ) //checked changed to match cerberus output lower_old_perm_blockers( list )
{ {
for ( i = 0; i < list.size; i++ ) for ( i = 0; i < list.size; i++ )
{ {
if ( list[ i ] != "" ) if ( list[i] != "" )
{ level._maze._blocker_locations[list[i]] notify( "lower_" + list[i] );
level._maze._blocker_locations[ list[ i ] ] notify( "lower_" + list[ i ] );
}
wait 0.25; wait 0.25;
} }
} }
maze_debug_print( str ) //checked matches cerberus output could not find dvar maze_debug_print( str )
{ {
/*
/# /#
if ( getDvar( #"55B04A98" ) != "" ) if ( getdvar( _hash_55B04A98 ) != "" )
{
println( "Maze : " + str ); println( "Maze : " + str );
#/ #/
}
*/
} }
maze_can_change() //checked changed to match cerberus output maze_can_change()
{ {
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) ) if ( player.sessionstate != "spectator" && player istouching( level._maze.players_in_maze_volume ) )
{ {
maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." ); maze_debug_print( "Player " + player getentitynumber() + " in maze volume. Maze cannot change." );
return 0; return false;
} }
} }
foreach ( player in players ) foreach ( player in players )
{ {
if ( player.sessionstate != "spectator" && player istouching( level._maze.players_can_see_maze_volume ) ) if ( player.sessionstate != "spectator" && player istouching( level._maze.players_can_see_maze_volume ) )
{ {
if ( player maps/mp/zombies/_zm_utility::is_player_looking_at( level._maze.players_in_maze_volume.origin, 0.5, 0 ) ) if ( player maps\mp\zombies\_zm_utility::is_player_looking_at( level._maze.players_in_maze_volume.origin, 0.5, 0 ) )
{ {
maze_debug_print( "Player " + player getentitynumber() + " looking at maze. Maze cannot change." ); maze_debug_print( "Player " + player getentitynumber() + " looking at maze. Maze cannot change." );
return 0; return false;
} }
} }
} }
maze_debug_print( "Maze mutating." ); maze_debug_print( "Maze mutating." );
return 1; return true;
} }
maze_think() //checked matches cerberus output maze_think()
{ {
wait 0.1; wait 0.1;
while ( 1 )
while ( true )
{ {
if ( maze_can_change() ) if ( maze_can_change() )
{ {
maze_do_perm_change(); maze_do_perm_change();
level notify( "zm_buried_maze_changed" ); level notify( "zm_buried_maze_changed" );
} }
wait 10;
wait 10.0;
} }
} }
init_hedge_maze_spawnpoints() //checked matches cerberus output init_hedge_maze_spawnpoints()
{ {
level.maze_hedge_spawnpoints = getstructarray( "custom_spawner_entry hedge_location", "script_noteworthy" ); level.maze_hedge_spawnpoints = getstructarray( "custom_spawner_entry hedge_location", "script_noteworthy" );
} }
maze_do_zombie_spawn( spot ) //checked partially changed to match cerberus output see info.md maze_do_zombie_spawn( spot )
{ {
self endon( "death" ); self endon( "death" );
spots = level.maze_hedge_spawnpoints; spots = level.maze_hedge_spawnpoints;
spot = undefined; spot = undefined;
/*
/# /#
assert( spots.size > 0, "No spawn locations found" ); assert( spots.size > 0, "No spawn locations found" );
#/ #/
*/ players_in_maze = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
players_in_maze = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
if ( isDefined( players_in_maze ) && players_in_maze.size != 0 ) if ( isdefined( players_in_maze ) && players_in_maze.size != 0 )
{ {
player = random( players_in_maze ); player = random( players_in_maze );
maxdistance = 256; maxdistance = 256;
if ( randomint( 100 ) > 75 ) if ( randomint( 100 ) > 75 )
{
maxdistance = 512; maxdistance = 512;
}
closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance ); closest_spots = get_array_of_closest( player.origin, spots, undefined, undefined, maxdistance );
favoritespots = []; favoritespots = [];
foreach ( close_spot in closest_spots ) foreach ( close_spot in closest_spots )
{ {
if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) ) if ( within_fov( close_spot.origin, close_spot.angles, player.origin, -0.75 ) )
{ {
favoritespots[ favoritespots.size ] = close_spot; favoritespots[favoritespots.size] = close_spot;
continue;
} }
else
{
if ( randomint( 100 ) > 75 ) if ( randomint( 100 ) > 75 )
{ favoritespots[favoritespots.size] = close_spot;
favoritespots[ favoritespots.size ] = close_spot;
} }
}
} if ( isdefined( favoritespots ) && favoritespots.size >= 2 )
if ( isDefined( favoritespots ) && favoritespots.size >= 2 )
{
spot = random( favoritespots ); spot = random( favoritespots );
} else if ( isdefined( closest_spots ) && closest_spots.size > 0 )
else if ( isDefined( closest_spots ) && closest_spots.size > 0 )
{
spot = random( closest_spots ); spot = random( closest_spots );
} }
}
if ( !isDefined( spot ) ) if ( !isdefined( spot ) )
{
spot = random( spots ); spot = random( spots );
}
self.spawn_point = spot; self.spawn_point = spot;
if ( isDefined( spot.target ) )
{ if ( isdefined( spot.target ) )
self.target = spot.target; self.target = spot.target;
}
if ( isDefined( spot.zone_name ) ) if ( isdefined( spot.zone_name ) )
{
self.zone_name = spot.zone_name; self.zone_name = spot.zone_name;
}
if ( isDefined( spot.script_parameters ) ) if ( isdefined( spot.script_parameters ) )
{
self.script_parameters = spot.script_parameters; self.script_parameters = spot.script_parameters;
}
self thread maze_do_zombie_rise( spot ); self thread maze_do_zombie_rise( spot );
} }
maze_do_zombie_rise( spot ) //checked changed to match cerberus output maze_do_zombie_rise( spot )
{ {
self endon( "death" ); self endon( "death" );
self.in_the_ground = 1; self.in_the_ground = 1;
if ( isDefined( self.anchor ) )
{ if ( isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
}
self.anchor = spawn( "script_origin", self.origin ); self.anchor = spawn( "script_origin", self.origin );
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self linkto( self.anchor );
if ( !isDefined( spot.angles ) )
{ if ( !isdefined( spot.angles ) )
spot.angles = ( 0, 0, 0 ); spot.angles = ( 0, 0, 0 );
}
anim_org = spot.origin; anim_org = spot.origin;
anim_ang = spot.angles; anim_ang = spot.angles;
anim_org += ( 0, 0, 0 ); anim_org += ( 0, 0, 0 );
self ghost(); self ghost();
self.anchor moveto( anim_org, 0.05 ); self.anchor moveto( anim_org, 0.05 );
self.anchor waittill( "movedone" ); self.anchor waittill( "movedone" );
target_org = get_desired_origin(); target_org = get_desired_origin();
if ( isDefined( target_org ) )
if ( isdefined( target_org ) )
{ {
anim_ang = vectorToAngles( target_org - self.origin ); anim_ang = vectortoangles( target_org - self.origin );
self.anchor rotateto( ( 0, anim_ang[ 1 ], 0 ), 0.05 ); self.anchor rotateto( ( 0, anim_ang[1], 0 ), 0.05 );
self.anchor waittill( "rotatedone" ); self.anchor waittill( "rotatedone" );
} }
self unlink(); self unlink();
if ( isDefined( self.anchor ) )
{ if ( isdefined( self.anchor ) )
self.anchor delete(); self.anchor delete();
}
self thread maps/mp/zombies/_zm_spawner::hide_pop(); self thread maps\mp\zombies\_zm_spawner::hide_pop();
level thread maps/mp/zombies/_zm_spawner::zombie_rise_death( self, spot ); level thread maps\mp\zombies\_zm_spawner::zombie_rise_death( self, spot );
spot thread maps/mp/zombies/_zm_spawner::zombie_rise_fx( self ); spot thread maps\mp\zombies\_zm_spawner::zombie_rise_fx( self );
substate = 0; substate = 0;
if ( self.zombie_move_speed == "walk" ) if ( self.zombie_move_speed == "walk" )
{
substate = randomint( 2 ); substate = randomint( 2 );
}
else else
{
substate = 1; substate = 1;
}
self orientmode( "face default" ); self orientmode( "face default" );
self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate ); self animscripted( spot.origin, spot.angles, "zm_rise_hedge", substate );
self notify( "rise_anim_finished" ); self notify( "rise_anim_finished" );
@ -445,62 +439,64 @@ maze_do_zombie_rise( spot ) //checked changed to match cerberus output
self notify( "risen", spot.script_string ); self notify( "risen", spot.script_string );
} }
maze_achievement_watcher() //checked matches cerberus output maze_achievement_watcher()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "start_of_round" ); level waittill( "start_of_round" );
start_maze_achievement_threads(); start_maze_achievement_threads();
level waittill( "end_of_round" ); level waittill( "end_of_round" );
check_maze_achievement_threads(); check_maze_achievement_threads();
} }
} }
start_maze_achievement_threads() //checked partially changed to match cerberus output see info.md start_maze_achievement_threads()
{ {
if ( level.round_number >= 20 ) if ( level.round_number >= 20 )
{ {
foreach ( player in get_players() ) foreach ( player in get_players() )
{ {
player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" ); player.achievement_player_started_round_in_maze = player is_player_in_zone( "zone_maze" );
if ( player.achievement_player_started_round_in_maze ) if ( player.achievement_player_started_round_in_maze )
{ {
player thread watch_player_in_maze(); player thread watch_player_in_maze();
continue;
} }
else
{
player notify( "_maze_achievement_think_done" ); player notify( "_maze_achievement_think_done" );
} }
} }
}
} }
watch_player_in_maze() //checked matches cerberus output watch_player_in_maze()
{ {
self notify( "_maze_achievement_think_done" ); self notify( "_maze_achievement_think_done" );
self endon( "_maze_achievement_think_done" ); self endon( "_maze_achievement_think_done" );
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self.achievement_player_stayed_in_maze_for_entire_round = 1; self.achievement_player_stayed_in_maze_for_entire_round = 1;
while ( self.achievement_player_stayed_in_maze_for_entire_round ) while ( self.achievement_player_stayed_in_maze_for_entire_round )
{ {
self.achievement_player_stayed_in_maze_for_entire_round = self is_player_in_zone( "zone_maze" ); self.achievement_player_stayed_in_maze_for_entire_round = self is_player_in_zone( "zone_maze" );
wait randomfloatrange( 0.5, 1 ); wait( randomfloatrange( 0.5, 1.0 ) );
} }
} }
check_maze_achievement_threads() //checked changed to match cerberus output check_maze_achievement_threads()
{ {
if ( level.round_number >= 20 ) if ( level.round_number >= 20 )
{ {
foreach ( player in get_players() ) foreach ( player in get_players() )
{ {
if ( isDefined( player.achievement_player_started_round_in_maze ) && player.achievement_player_started_round_in_maze && isDefined( player.achievement_player_stayed_in_maze_for_entire_round ) && player.achievement_player_stayed_in_maze_for_entire_round && level._time_bomb.last_round_restored != ( level.round_number - 1 ) && !maps/mp/zombies/_zm_weap_time_bomb::is_time_bomb_round_change() ) if ( isdefined( player.achievement_player_started_round_in_maze ) && player.achievement_player_started_round_in_maze && ( isdefined( player.achievement_player_stayed_in_maze_for_entire_round ) && player.achievement_player_stayed_in_maze_for_entire_round ) && level._time_bomb.last_round_restored != level.round_number - 1 && !maps\mp\zombies\_zm_weap_time_bomb::is_time_bomb_round_change() )
{ {
/*
/# /#
iprintlnbold( player.name + " got achievement MAZED AND CONFUSED" ); iprintlnbold( player.name + " got achievement MAZED AND CONFUSED" );
#/ #/
*/
player notify( "player_stayed_in_maze_for_entire_high_level_round" ); player notify( "player_stayed_in_maze_for_entire_high_level_round" );
player notify( "_maze_achievement_think_done" ); player notify( "_maze_achievement_think_done" );
} }
@ -508,24 +504,21 @@ check_maze_achievement_threads() //checked changed to match cerberus output
} }
} }
vo_in_maze() //checked did not change to match cerberus output vo_in_maze()
{ {
flag_wait( "mansion_door1" ); flag_wait( "mansion_door1" );
nwaittime = 300; nwaittime = 300;
nminwait = 5; nminwait = 5;
nmaxwait = 10; nmaxwait = 10;
while ( 1 )
while ( true )
{ {
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ); for ( aplayersinzone = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ); !isdefined( aplayersinzone ) || aplayersinzone.size == 0; aplayersinzone = maps\mp\zombies\_zm_zonemgr::get_players_in_zone( "zone_maze", 1 ) )
while ( !isDefined( aplayersinzone ) || aplayersinzone.size == 0 ) wait( randomint( nminwait, nmaxwait ) );
{
wait randomintrange( nminwait, nmaxwait ); random( aplayersinzone ) maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "in_maze" );
aplayersinzone = maps/mp/zombies/_zm_zonemgr::get_players_in_zone( "zone_maze", 1 );
}
random( aplayersinzone ) maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "in_maze" );
nminwait = 13; nminwait = 13;
nmaxwait = 37; nmaxwait = 37;
wait nwaittime; wait( nwaittime );
} }
} }

View File

@ -1,8 +1,10 @@
#include maps/mp/zombies/_zm_perks; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_audio; // 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_audio;
#include maps\mp\zombies\_zm_perks;
electric_switch() electric_switch()
{ {
@ -11,19 +13,23 @@ electric_switch()
master_switch notsolid(); master_switch notsolid();
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" ); trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
trig setvisibletoall(); trig setvisibletoall();
trig waittill( "trigger", user ); trig waittill( "trigger", user );
trig setinvisibletoall(); trig setinvisibletoall();
master_switch rotateroll( -90, 0,3 ); master_switch rotateroll( -90, 0.3 );
master_switch playsound( "zmb_switch_flip" ); master_switch playsound( "zmb_switch_flip" );
master_switch playsound( "zmb_poweron" ); master_switch playsound( "zmb_poweron" );
level delay_thread( 11,8, ::sndpoweronmusicstinger ); level delay_thread( 11.8, ::sndpoweronmusicstinger );
if ( isDefined( user ) )
{ if ( isdefined( user ) )
user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" ); user thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "power", "power_on" );
}
level thread maps/mp/zombies/_zm_perks::perk_unpause_all_perks(); level thread maps\mp\zombies\_zm_perks::perk_unpause_all_perks();
master_switch waittill( "rotatedone" ); master_switch waittill( "rotatedone" );
playfx( level._effect[ "switch_sparks" ], master_switch.origin + ( 0, 12, -60 ), anglesToForward( master_switch.angles ) );
playfx( level._effect["switch_sparks"], master_switch.origin + ( 0, 12, -60 ), anglestoforward( master_switch.angles ) );
master_switch playsound( "zmb_turn_on" ); master_switch playsound( "zmb_turn_on" );
level notify( "electric_door" ); level notify( "electric_door" );
clientnotify( "power_on" ); clientnotify( "power_on" );
@ -33,5 +39,5 @@ electric_switch()
sndpoweronmusicstinger() sndpoweronmusicstinger()
{ {
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "poweron" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "poweron" );
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,10 @@
#include maps/mp/zm_buried_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_buried_sq;
init() init()
{ {
@ -21,6 +23,7 @@ init_stage()
stage_vo() stage_vo()
{ {
level waittill( "start_of_round" ); level waittill( "start_of_round" );
level thread stage_vo_watch_underground(); level thread stage_vo_watch_underground();
wait 5; wait 5;
maxissay( "vox_maxi_sidequest_maxis_start_1_0" ); maxissay( "vox_maxi_sidequest_maxis_start_1_0" );
@ -30,67 +33,79 @@ stage_vo()
maxissay( "vox_maxi_sidequest_maxis_start_5_0" ); maxissay( "vox_maxi_sidequest_maxis_start_5_0" );
flag_wait( "sq_player_underground" ); flag_wait( "sq_player_underground" );
level.m_maxis_vo_spot.origin = ( -728, -344, 280 ); level.m_maxis_vo_spot.origin = ( -728, -344, 280 );
while ( isDefined( level.vo_player_who_discovered_stables_roof ) && is_true( level.vo_player_who_discovered_stables_roof.isspeaking ) )
{ while ( isdefined( level.vo_player_who_discovered_stables_roof ) && is_true( level.vo_player_who_discovered_stables_roof.isspeaking ) )
wait 0,05; wait 0.05;
}
maxissay( "vox_maxi_sidequest_town_0" ); maxissay( "vox_maxi_sidequest_town_0" );
maxissay( "vox_maxi_sidequest_town_1" ); maxissay( "vox_maxi_sidequest_town_1" );
wait 1; wait 1;
level thread stage_vo_watch_gallows(); level thread stage_vo_watch_gallows();
if ( !level.richcompleted ) if ( !level.richcompleted )
{ {
if ( isDefined( level.rich_sq_player ) ) if ( isdefined( level.rich_sq_player ) )
{ {
level.rich_sq_player.dontspeak = 1; level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
} }
richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 ); richtofensay( "vox_zmba_sidequest_zmba_start_1_0", 3 );
if ( isDefined( level.rich_sq_player ) )
{ if ( isdefined( level.rich_sq_player ) )
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{ {
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1; wait 1;
}
level.rich_sq_player.dontspeak = 1; level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_0", "sound_done_vox_plr_1_respond_richtofen_0" ); level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_0", "sound_done_vox_plr_1_respond_richtofen_0" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_0" ); level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_0" );
wait 1; wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
} }
richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 ); richtofensay( "vox_zmba_sidequest_zmba_start_3_0", 4 );
if ( isDefined( level.rich_sq_player ) )
{ if ( isdefined( level.rich_sq_player ) )
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{ {
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1; wait 1;
}
level.rich_sq_player.dontspeak = 1; level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_1", "sound_done_vox_plr_1_respond_richtofen_1" ); level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_1", "sound_done_vox_plr_1_respond_richtofen_1" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_1" ); level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_1" );
wait 1; wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
} }
richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 ); richtofensay( "vox_zmba_sidequest_zmba_start_5_0", 12 );
richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 ); richtofensay( "vox_zmba_sidequest_zmba_start_6_0", 8 );
if ( isDefined( level.rich_sq_player ) )
{ if ( isdefined( level.rich_sq_player ) )
while ( isDefined( level.rich_sq_player ) || is_true( level.rich_sq_player.isspeaking ) && is_true( level.rich_sq_player.dontspeak ) )
{ {
while ( isdefined( level.rich_sq_player ) && ( is_true( level.rich_sq_player.isspeaking ) || is_true( level.rich_sq_player.dontspeak ) ) )
wait 1; wait 1;
}
level.rich_sq_player.dontspeak = 1; level.rich_sq_player.dontspeak = 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 1 );
level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_2", "sound_done_vox_plr_1_respond_richtofen_2" ); level.rich_sq_player playsoundwithnotify( "vox_plr_1_respond_richtofen_2", "sound_done_vox_plr_1_respond_richtofen_2" );
level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_2" ); level.rich_sq_player waittill( "sound_done_vox_plr_1_respond_richtofen_2" );
wait 1; wait 1;
level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 ); level.rich_sq_player setclientfieldtoplayer( "isspeaking", 0 );
} }
richtofensay( "vox_zmba_sidequest_town_0", 6 ); richtofensay( "vox_zmba_sidequest_town_0", 6 );
richtofensay( "vox_zmba_sidequest_town_1", 6 ); richtofensay( "vox_zmba_sidequest_town_1", 6 );
} }
flag_set( "sq_intro_vo_done" ); flag_set( "sq_intro_vo_done" );
level thread stage_vo_nag(); level thread stage_vo_nag();
level thread stage_vo_watch_guillotine(); level thread stage_vo_watch_guillotine();
@ -105,13 +120,13 @@ stage_vo_nag()
s_struct = getstruct( "sq_gallows", "targetname" ); s_struct = getstruct( "sq_gallows", "targetname" );
m_maxis_vo_spot = spawn( "script_model", s_struct.origin ); m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" ); m_maxis_vo_spot setmodel( "tag_origin" );
i = 0;
while ( i < 5 ) for ( i = 0; i < 5; i++ )
{ {
level waittill( "end_of_round" ); level waittill( "end_of_round" );
maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot ); maxissay( "vox_maxi_sidequest_nag_" + i, m_maxis_vo_spot );
richtofensay( "vox_zmba_sidequest_nag_" + i, 10 ); richtofensay( "vox_zmba_sidequest_nag_" + i, 10 );
i++;
} }
} }
@ -122,17 +137,27 @@ stage_vo_watch_guillotine()
level endon( "end_game_reward_starts_richtofen" ); level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_guillotine", "targetname" ); s_struct = getstruct( "sq_guillotine", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" ); trigger waittill( "trigger" );
trigger delete(); trigger delete();
richtofensay( "vox_zmba_sidequest_gallows_0", 9 ); richtofensay( "vox_zmba_sidequest_gallows_0", 9 );
richtofensay( "vox_zmba_sidequest_gallows_1", 12 ); richtofensay( "vox_zmba_sidequest_gallows_1", 12 );
level waittill( "rtower_object_planted" ); level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_0", 9 ); richtofensay( "vox_zmba_sidequest_parts_0", 9 );
level waittill( "rtower_object_planted" ); level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_1", 3 ); richtofensay( "vox_zmba_sidequest_parts_1", 3 );
level waittill( "rtower_object_planted" ); level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_2", 5 ); richtofensay( "vox_zmba_sidequest_parts_2", 5 );
level waittill( "rtower_object_planted" ); level waittill( "rtower_object_planted" );
richtofensay( "vox_zmba_sidequest_parts_3", 11 ); richtofensay( "vox_zmba_sidequest_parts_3", 11 );
} }
@ -143,25 +168,26 @@ stage_vo_watch_gallows()
level endon( "end_game_reward_starts_richtofen" ); level endon( "end_game_reward_starts_richtofen" );
s_struct = getstruct( "sq_gallows", "targetname" ); s_struct = getstruct( "sq_gallows", "targetname" );
trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", s_struct.origin, 0, 128, 72 );
trigger waittill( "trigger" ); trigger waittill( "trigger" );
trigger delete(); trigger delete();
m_maxis_vo_spot = spawn( "script_model", s_struct.origin ); m_maxis_vo_spot = spawn( "script_model", s_struct.origin );
m_maxis_vo_spot setmodel( "tag_origin" ); m_maxis_vo_spot setmodel( "tag_origin" );
if ( flag( "sq_intro_vo_done" ) ) if ( flag( "sq_intro_vo_done" ) )
{
maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot ); maxissay( "vox_maxi_sidequest_gallows_0", m_maxis_vo_spot );
}
i = 0; for ( i = 0; i < 4; i++ )
while ( i < 4 )
{ {
level waittill( "mtower_object_planted" ); level waittill( "mtower_object_planted" );
if ( flag( "sq_intro_vo_done" ) ) if ( flag( "sq_intro_vo_done" ) )
{
maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 ); maxissay( "vox_maxi_sidequest_parts_" + i, m_maxis_vo_spot, 1 );
}
wait_network_frame(); wait_network_frame();
i++;
} }
m_maxis_vo_spot delete(); m_maxis_vo_spot delete();
} }
@ -205,4 +231,5 @@ wait_for_richtofen_tower()
exit_stage( success ) exit_stage( success )
{ {
} }

View File

@ -1,8 +1,10 @@
#include maps/mp/zm_buried_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_buried_sq;
init() init()
{ {
@ -34,6 +36,7 @@ stage_logic()
level thread stage_vo_ric(); level thread stage_vo_ric();
ctw_ric_start_wisp(); ctw_ric_start_wisp();
} }
flag_wait_any( "sq_wisp_success", "sq_wisp_failed" ); flag_wait_any( "sq_wisp_success", "sq_wisp_failed" );
wait_network_frame(); wait_network_frame();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
@ -41,15 +44,16 @@ stage_logic()
exit_stage( success ) exit_stage( success )
{ {
} }
stage_vo_max() stage_vo_max()
{ {
level endon( "sq_wisp_failed" ); level endon( "sq_wisp_failed" );
while ( !isDefined( level.vh_wisp ) )
{ while ( !isdefined( level.vh_wisp ) )
wait 1; wait 1;
}
level.vh_wisp endon( "delete" ); level.vh_wisp endon( "delete" );
maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker ); maxissay( "vox_maxi_sidequest_ctw_0", level.e_sq_sign_attacker );
maxissay( "vox_maxi_sidequest_ctw_1", level.e_sq_sign_attacker ); maxissay( "vox_maxi_sidequest_ctw_1", level.e_sq_sign_attacker );
@ -62,24 +66,27 @@ stage_vo_ric()
level endon( "sq_wisp_failed" ); level endon( "sq_wisp_failed" );
richtofensay( "vox_zmba_sidequest_ctw_0", 12 ); richtofensay( "vox_zmba_sidequest_ctw_0", 12 );
richtofensay( "vox_zmba_sidequest_ctw_1", 8 ); richtofensay( "vox_zmba_sidequest_ctw_1", 8 );
level waittill( "sq_ctw_zombie_powered_up" ); level waittill( "sq_ctw_zombie_powered_up" );
richtofensay( "vox_zmba_sidequest_ctw_3", 8 ); richtofensay( "vox_zmba_sidequest_ctw_3", 8 );
} }
wisp_move_from_sign_to_start( s_start ) wisp_move_from_sign_to_start( s_start )
{ {
self.origin = level.m_sq_start_sign.origin - vectorScale( ( 1, 0, 0 ), 20 ); self.origin = level.m_sq_start_sign.origin - vectorscale( ( 0, 0, 1 ), 20.0 );
self moveto( s_start.origin, 2, 0,5, 0,5 ); self moveto( s_start.origin, 2, 0.5, 0.5 );
self waittill( "movedone" ); self waittill( "movedone" );
wait 1; wait 1;
} }
ctw_ric_start_wisp() ctw_ric_start_wisp()
{ {
if ( !isDefined( level.m_sq_start_sign ) ) if ( !isdefined( level.m_sq_start_sign ) )
{
return; return;
}
s_start = getstruct( level.m_sq_start_sign.target, "targetname" ); s_start = getstruct( level.m_sq_start_sign.target, "targetname" );
m_wisp = getent( "sq_wisp", "targetname" ); m_wisp = getent( "sq_wisp", "targetname" );
m_wisp setclientfield( "vulture_wisp", 1 ); m_wisp setclientfield( "vulture_wisp", 1 );
@ -90,6 +97,9 @@ ctw_ric_start_wisp()
ctw_ric_move_wisp( s_current ) ctw_ric_move_wisp( s_current )
{ {
self endon( "ctw_wisp_timeout" ); self endon( "ctw_wisp_timeout" );
do
{
self setclientfield( "vulture_wisp", 0 ); self setclientfield( "vulture_wisp", 0 );
self.origin = s_current.origin; self.origin = s_current.origin;
wait_network_frame(); wait_network_frame();
@ -97,6 +107,9 @@ ctw_ric_move_wisp( s_current )
self thread ctw_ric_watch_wisp_timeout(); self thread ctw_ric_watch_wisp_timeout();
ctw_ric_watch_wisp_dist(); ctw_ric_watch_wisp_dist();
s_current = ctw_ric_get_next_wisp_struct( s_current ); s_current = ctw_ric_get_next_wisp_struct( s_current );
}
while ( isdefined( s_current ) );
self endon( "ctw_wisp_moved" ); self endon( "ctw_wisp_moved" );
self ctw_ric_power_towers(); self ctw_ric_power_towers();
flag_set( "sq_wisp_success" ); flag_set( "sq_wisp_success" );
@ -104,12 +117,11 @@ ctw_ric_move_wisp( s_current )
ctw_ric_get_next_wisp_struct( s_current ) ctw_ric_get_next_wisp_struct( s_current )
{ {
if ( !isDefined( s_current.target ) ) if ( !isdefined( s_current.target ) )
{
return undefined; return undefined;
}
a_structs = getstructarray( s_current.target, "targetname" ); a_structs = getstructarray( s_current.target, "targetname" );
return array_randomize( a_structs )[ 0 ]; return array_randomize( a_structs )[0];
} }
ctw_ric_watch_wisp_timeout() ctw_ric_watch_wisp_timeout()
@ -125,28 +137,23 @@ ctw_ric_watch_wisp_dist( s_current )
{ {
self endon( "ctw_wisp_timeout" ); self endon( "ctw_wisp_timeout" );
is_near_wisp = 0; is_near_wisp = 0;
while ( !is_near_wisp ) while ( !is_near_wisp )
{ {
players = getplayers(); players = getplayers();
_a185 = players;
_k185 = getFirstArrayKey( _a185 ); foreach ( player in players )
while ( isDefined( _k185 ) )
{ {
player = _a185[ _k185 ];
if ( !player hasperk( "specialty_nomotionsensor" ) ) if ( !player hasperk( "specialty_nomotionsensor" ) )
{ continue;
}
else
{
if ( distancesquared( player.origin, self.origin ) < 4096 ) if ( distancesquared( player.origin, self.origin ) < 4096 )
{
is_near_wisp = 1; is_near_wisp = 1;
} }
wait 0.1;
} }
_k185 = getNextArrayKey( _a185, _k185 );
}
wait 0,1;
}
self notify( "ctw_wisp_moved" ); self notify( "ctw_wisp_moved" );
} }
@ -160,48 +167,56 @@ ctw_ric_power_towers()
v_guillotine_spot = self.origin; v_guillotine_spot = self.origin;
self.origin = m_tower gettagorigin( "j_crystal_01" ); self.origin = m_tower gettagorigin( "j_crystal_01" );
m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot ); m_tower thread ctw_ric_guillotine_glow( v_guillotine_spot );
i = 0;
while ( i < 5 ) for ( i = 0; i < 5; i++ )
{ {
wait 3; wait 3;
e_powered_zombie = undefined;
while ( !isDefined( e_powered_zombie ) ) for ( e_powered_zombie = undefined; !isdefined( e_powered_zombie ); e_powered_zombie = array_randomize( a_zombies )[0] )
{ {
wait 1; wait 1;
a_zombies = ctw_find_zombies_for_powerup( self.origin, 512, m_tower ); a_zombies = ctw_find_zombies_for_powerup( self.origin, 512, m_tower );
e_powered_zombie = array_randomize( a_zombies )[ 0 ];
} }
level notify( "stop_ctw_ric_guillotine_glow" ); level notify( "stop_ctw_ric_guillotine_glow" );
e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow ); e_powered_zombie ctw_power_up_ric_zombie( m_tower.m_glow );
e_powered_zombie waittill( "death" ); e_powered_zombie waittill( "death" );
level setclientfield( "vulture_wisp_orb_count", i + 1 ); level setclientfield( "vulture_wisp_orb_count", i + 1 );
m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin ); m_tower ctw_return_wisp_to_guillotine( v_guillotine_spot, e_powered_zombie.origin );
i++;
} }
} }
ctw_ric_guillotine_glow( v_spot ) ctw_ric_guillotine_glow( v_spot )
{ {
level endon( "stop_ctw_ric_guillotine_glow" ); level endon( "stop_ctw_ric_guillotine_glow" );
if ( !isDefined( self.m_glow ) )
if ( !isdefined( self.m_glow ) )
{ {
self.m_glow = spawn( "script_model", v_spot ); self.m_glow = spawn( "script_model", v_spot );
self.m_glow setmodel( "tag_origin" ); self.m_glow setmodel( "tag_origin" );
} }
while ( 1 )
while ( true )
{ {
playfxontag( level._effect[ "vulture_fx_wisp" ], self.m_glow, "tag_origin" ); playfxontag( level._effect["vulture_fx_wisp"], self.m_glow, "tag_origin" );
wait 0,25; wait 0.25;
self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" ); self.m_glow playloopsound( "zmb_sq_wisp_loop_guillotine" );
} }
} }
ctw_power_up_ric_zombie( m_wisp ) ctw_power_up_ric_zombie( m_wisp )
{ {
do
{
wait_network_frame(); wait_network_frame();
v_to_zombie = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_wisp.origin ); v_to_zombie = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_wisp.origin );
v_move_spot = m_wisp.origin + ( v_to_zombie * 32 ); v_move_spot = m_wisp.origin + v_to_zombie * 32;
m_wisp.origin = v_move_spot; m_wisp.origin = v_move_spot;
}
while ( distancesquared( m_wisp.origin, self gettagorigin( "J_SpineLower" ) ) > 1024 );
self ctw_power_up_zombie(); self ctw_power_up_zombie();
} }
@ -209,10 +224,16 @@ ctw_return_wisp_to_guillotine( v_spot, v_start )
{ {
self.m_glow.origin = v_start; self.m_glow.origin = v_start;
self thread ctw_ric_guillotine_glow( v_start ); self thread ctw_ric_guillotine_glow( v_start );
do
{
wait_network_frame(); wait_network_frame();
v_to_tower = vectornormalize( v_spot - self.m_glow.origin ); v_to_tower = vectornormalize( v_spot - self.m_glow.origin );
v_move_spot = self.m_glow.origin + ( v_to_tower * 32 ); v_move_spot = self.m_glow.origin + v_to_tower * 32;
self.m_glow.origin = v_move_spot; self.m_glow.origin = v_move_spot;
}
while ( distancesquared( self.m_glow.origin, v_spot ) > 1024 );
self.m_glow.origin = v_spot; self.m_glow.origin = v_spot;
} }
@ -241,29 +262,30 @@ ctw_max_start_wisp()
vh_wisp cancelaimove(); vh_wisp cancelaimove();
vh_wisp clearvehgoalpos(); vh_wisp clearvehgoalpos();
vh_wisp delete(); vh_wisp delete();
if ( isDefined( level.vh_wisp ) )
{ if ( isdefined( level.vh_wisp ) )
level.vh_wisp delete(); level.vh_wisp delete();
}
} }
ctw_max_wisp_play_fx() ctw_max_wisp_play_fx()
{ {
self playloopsound( "zmb_sq_wisp_loop" ); self playloopsound( "zmb_sq_wisp_loop" );
while ( isDefined( self ) )
while ( isdefined( self ) )
{ {
playfxontag( level._effect[ "fx_wisp_m" ], self, "tag_origin" ); playfxontag( level._effect["fx_wisp_m"], self, "tag_origin" );
if ( !flag( "sq_m_wisp_weak" ) ) if ( !flag( "sq_m_wisp_weak" ) )
{ playfxontag( level._effect["fx_wisp_lg_m"], self, "tag_origin" );
playfxontag( level._effect[ "fx_wisp_lg_m" ], self, "tag_origin" );
} wait 0.3;
wait 0,3;
} }
} }
ctw_max_success_watch() ctw_max_success_watch()
{ {
self endon( "death" ); self endon( "death" );
self waittill( "reached_end_node" ); self waittill( "reached_end_node" );
/# /#
iprintlnbold( "Wisp Success!" ); iprintlnbold( "Wisp Success!" );
@ -281,51 +303,46 @@ ctw_light_tube()
ctw_max_fail_watch() ctw_max_fail_watch()
{ {
self endon( "death" ); self endon( "death" );
do
{
wait 1; wait 1;
n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin ); n_starter_dist = distancesquared( self.origin, level.e_sq_sign_attacker.origin );
a_players = getplayers(); a_players = getplayers();
_a382 = a_players;
_k382 = getFirstArrayKey( _a382 ); foreach ( player in a_players )
while ( isDefined( _k382 ) )
{ {
player = _a382[ _k382 ];
if ( distancesquared( self.origin, player.origin ) < 16384 ) if ( distancesquared( self.origin, player.origin ) < 16384 )
{ {
/# /#
iprintlnbold( "Too Close to Wisp" ); iprintlnbold( "Too Close to Wisp" );
#/ #/
} }
_k382 = getNextArrayKey( _a382, _k382 );
} }
a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 ); a_zombies = ctw_find_zombies_for_powerup( self.origin, 256 );
array_thread( a_zombies, ::ctw_power_up_zombie ); array_thread( a_zombies, ::ctw_power_up_zombie );
if ( a_zombies.size ) if ( a_zombies.size )
{ {
self.n_sq_energy += 10; self.n_sq_energy += 10;
if ( self.n_sq_energy > 30 ) if ( self.n_sq_energy > 30 )
{
self.n_sq_energy = 30; self.n_sq_energy = 30;
} }
}
else else
{
self.n_sq_energy--; self.n_sq_energy--;
} if ( self.n_sq_energy <= 15.0 && !flag( "sq_m_wisp_weak" ) )
if ( self.n_sq_energy <= 15 && !flag( "sq_m_wisp_weak" ) )
{
flag_set( "sq_m_wisp_weak" ); flag_set( "sq_m_wisp_weak" );
} else if ( self.n_sq_energy > 15.0 && flag( "sq_m_wisp_weak" ) )
else
{
if ( self.n_sq_energy > 15 && flag( "sq_m_wisp_weak" ) )
{
flag_clear( "sq_m_wisp_weak" ); flag_clear( "sq_m_wisp_weak" );
}
}
/# /#
iprintlnbold( self.n_sq_energy ); iprintlnbold( self.n_sq_energy );
#/ #/
}
while ( n_starter_dist < 262144 );
level thread ctw_max_fail_vo(); level thread ctw_max_fail_vo();
flag_set( "sq_wisp_failed" ); flag_set( "sq_wisp_failed" );
} }
@ -338,12 +355,12 @@ ctw_max_fail_vo()
ctw_max_wisp_enery_watch() ctw_max_wisp_enery_watch()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
if ( self.n_sq_energy <= 0 ) if ( self.n_sq_energy <= 0 )
{
flag_set( "sq_wisp_failed" ); flag_set( "sq_wisp_failed" );
}
wait 1; wait 1;
} }
} }
@ -352,37 +369,33 @@ debug_origin()
{ {
/# /#
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
debugstar( self.origin, 1, ( 1, 0, 0 ) ); debugstar( self.origin, 1, ( 1, 0, 0 ) );
wait 0,05; wait 0.05;
#/
} }
#/
} }
ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore ) ctw_find_zombies_for_powerup( v_origin, n_radius, m_ignore )
{ {
if ( !isDefined( m_ignore ) ) if ( !isdefined( m_ignore ) )
{
m_ignore = undefined; m_ignore = undefined;
}
a_zombies = getaispeciesarray( level.zombie_team, "zombie" ); a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
n_radius_sq = n_radius * n_radius; n_radius_sq = n_radius * n_radius;
a_near_zombies = []; a_near_zombies = [];
_a473 = a_zombies;
_k473 = getFirstArrayKey( _a473 ); foreach ( e_zombie in a_zombies )
while ( isDefined( _k473 ) )
{ {
e_zombie = _a473[ _k473 ]; if ( distancesquared( e_zombie.origin, v_origin ) < n_radius_sq && !isdefined( e_zombie.sq_wisp_powered ) )
if ( distancesquared( e_zombie.origin, v_origin ) < n_radius_sq && !isDefined( e_zombie.sq_wisp_powered ) )
{ {
if ( sighttracepassed( v_origin, e_zombie gettagorigin( "J_SpineLower" ), 1, m_ignore ) ) if ( sighttracepassed( v_origin, e_zombie gettagorigin( "J_SpineLower" ), 1, m_ignore ) )
{ a_near_zombies[a_near_zombies.size] = e_zombie;
a_near_zombies[ a_near_zombies.size ] = e_zombie;
} }
} }
_k473 = getNextArrayKey( _a473, _k473 );
}
return a_near_zombies; return a_near_zombies;
} }
@ -392,24 +405,23 @@ ctw_power_up_zombie()
self.sq_wisp_powered = 1; self.sq_wisp_powered = 1;
n_oldhealth = self.maxhealth; n_oldhealth = self.maxhealth;
self.maxhealth *= 2; self.maxhealth *= 2;
if ( self.maxhealth < n_oldhealth ) if ( self.maxhealth < n_oldhealth )
{
self.maxhealth = n_oldhealth; self.maxhealth = n_oldhealth;
}
self.health = self.maxhealth; self.health = self.maxhealth;
if ( self.zombie_move_speed != "sprint" ) if ( self.zombie_move_speed != "sprint" )
{ {
self set_zombie_run_cycle( "sprint" ); self set_zombie_run_cycle( "sprint" );
self.zombie_move_speed_original = self.zombie_move_speed; self.zombie_move_speed_original = self.zombie_move_speed;
} }
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
str_fx = "fx_wisp_m"; str_fx = "fx_wisp_m";
}
else else
{
str_fx = "vulture_fx_wisp"; str_fx = "vulture_fx_wisp";
}
self thread ctw_power_up_zombie_m_fx( str_fx ); self thread ctw_power_up_zombie_m_fx( str_fx );
} }
@ -417,12 +429,13 @@ ctw_power_up_zombie_m_fx( str_fx )
{ {
self endon( "delete" ); self endon( "delete" );
self endon( "death" ); self endon( "death" );
while ( isDefined( self ) && isalive( self ) )
while ( isdefined( self ) && isalive( self ) )
{ {
playfxontag( level._effect[ str_fx ], self, "J_Wrist_RI" ); playfxontag( level._effect[str_fx], self, "J_Wrist_RI" );
wait 0,25; wait 0.25;
playfxontag( level._effect[ str_fx ], self, "J_Wrist_LE" ); playfxontag( level._effect[str_fx], self, "J_Wrist_LE" );
wait 0,25; wait 0.25;
self playloopsound( "zmb_sq_wisp_possess" ); self playloopsound( "zmb_sq_wisp_possess" );
} }
} }

View File

@ -1,11 +1,13 @@
#include maps/mp/zombies/_zm_spawner; // T6 GSC SOURCE
#include maps/mp/zm_buried_sq_ftl; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_buried_sq; #include common_scripts\utility;
#include maps/mp/zombies/_zm_buildables; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_sidequests; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_sidequests;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_buildables;
#include common_scripts/utility; #include maps\mp\zm_buried_sq;
#include maps\mp\zm_buried_sq_ftl;
#include maps\mp\zombies\_zm_spawner;
init() init()
{ {
@ -16,14 +18,12 @@ init()
init_stage() init_stage()
{ {
level.sq_ftl_lantern_fuel = 0; level.sq_ftl_lantern_fuel = 0;
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max(); level thread stage_vo_max();
}
else else
{
level thread stage_vo_ric(); level thread stage_vo_ric();
}
level._cur_stage_name = "ftl"; level._cur_stage_name = "ftl";
clientnotify( "ftl" ); clientnotify( "ftl" );
} }
@ -34,22 +34,17 @@ stage_logic()
iprintlnbold( "FTL Started" ); iprintlnbold( "FTL Started" );
#/ #/
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
max_fill_lantern_watcher(); max_fill_lantern_watcher();
}
else else
{
ric_fill_lantern_watcher(); ric_fill_lantern_watcher();
}
flag_wait( "ftl_lantern_charged" ); flag_wait( "ftl_lantern_charged" );
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
thread stage_vo_filled_max(); thread stage_vo_filled_max();
}
else else
{
thread stage_vo_filled_ric(); thread stage_vo_filled_ric();
}
sq_ftl_show_marker(); sq_ftl_show_marker();
wait_for_buildable( "buried_sq_oillamp" ); wait_for_buildable( "buried_sq_oillamp" );
wait_network_frame(); wait_network_frame();
@ -58,6 +53,7 @@ stage_logic()
exit_stage( success ) exit_stage( success )
{ {
} }
stage_vo_max() stage_vo_max()
@ -65,51 +61,49 @@ stage_vo_max()
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_0" ); sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_0" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" ); sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_1" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" ); sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_3" );
level waittill( "sq_ftl_lantern_inc" ); level waittill( "sq_ftl_lantern_inc" );
sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" ); sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_pl_2" );
} }
sq_ftl_maxis_vo_on_holder( str_vox ) sq_ftl_maxis_vo_on_holder( str_vox )
{ {
player = sq_ftl_get_lantern_holder(); player = sq_ftl_get_lantern_holder();
if ( isDefined( player ) )
{ if ( isdefined( player ) )
maxissay( str_vox, player ); maxissay( str_vox, player );
}
} }
sq_ftl_show_marker() sq_ftl_show_marker()
{ {
m_marker = getent( "sq_lantern_symbol", "targetname" ); m_marker = getent( "sq_lantern_symbol", "targetname" );
m_marker.origin += vectorScale( ( 0, 0, 1 ), 2 ); m_marker.origin += vectorscale( ( 0, 0, 1 ), 2.0 );
level.sq_lamp_generator_unitrig.origin = level.sq_lamp_generator_unitrig.realorigin; level.sq_lamp_generator_unitrig.origin = level.sq_lamp_generator_unitrig.realorigin;
} }
sq_ftl_get_lantern_holder() sq_ftl_get_lantern_holder()
{ {
players = get_players(); players = get_players();
_a107 = players;
_k107 = getFirstArrayKey( _a107 ); foreach ( player in players )
while ( isDefined( _k107 ) )
{
player = _a107[ _k107 ];
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{ {
if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
return player; return player;
} }
_k107 = getNextArrayKey( _a107, _k107 );
}
} }
stage_vo_filled_max() stage_vo_filled_max()
{ {
maps/mp/zm_buried_sq_ftl::sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_ll_0" ); maps\mp\zm_buried_sq_ftl::sq_ftl_maxis_vo_on_holder( "vox_maxi_sidequest_ll_0" );
} }
stage_vo_ric() stage_vo_ric()
{ {
richtofensay( "vox_zmba_sidequest_pl_0", 12 ); richtofensay( "vox_zmba_sidequest_pl_0", 12 );
level waittill( "sq_ftl_lantern_inc" ); level waittill( "sq_ftl_lantern_inc" );
richtofensay( "vox_zmba_sidequest_pl_1", 6 ); richtofensay( "vox_zmba_sidequest_pl_1", 6 );
} }
@ -123,53 +117,44 @@ max_fill_lantern_watcher()
{ {
a_zombies = getaispeciesarray( level.zombie_team, "zombie" ); a_zombies = getaispeciesarray( level.zombie_team, "zombie" );
array_thread( a_zombies, ::max_lantern_zombie_death_watcher ); array_thread( a_zombies, ::max_lantern_zombie_death_watcher );
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::max_lantern_zombie_death_watcher ); maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::max_lantern_zombie_death_watcher );
} }
max_lantern_zombie_death_watcher() max_lantern_zombie_death_watcher()
{ {
level endon( "ftl_lantern_charged" ); level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) ) if ( flag( "ftl_lantern_charged" ) )
{
return; return;
}
self waittill( "death", attacker ); self waittill( "death", attacker );
if ( !isDefined( attacker ) || isplayer( attacker ) )
{ if ( !isdefined( attacker ) || isplayer( attacker ) )
return; return;
}
players = getplayers(); players = getplayers();
_a164 = players;
_k164 = getFirstArrayKey( _a164 ); foreach ( player in players )
while ( isDefined( _k164 ) )
{ {
player = _a164[ _k164 ]; if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isDefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
{ {
if ( isdefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
player ftl_lantern_increment(); player ftl_lantern_increment();
} }
} }
_k164 = getNextArrayKey( _a164, _k164 );
}
} }
ric_fill_lantern_watcher() ric_fill_lantern_watcher()
{ {
a_axis = getaiarray( "axis" ); a_axis = getaiarray( "axis" );
a_ghost = []; a_ghost = [];
_a183 = a_axis;
_k183 = getFirstArrayKey( _a183 ); foreach ( e_axis in a_axis )
while ( isDefined( _k183 ) )
{ {
e_axis = _a183[ _k183 ];
if ( is_true( e_axis.is_ghost ) ) if ( is_true( e_axis.is_ghost ) )
{ a_ghost[a_ghost.size] = e_axis;
a_ghost[ a_ghost.size ] = e_axis;
}
_k183 = getNextArrayKey( _a183, _k183 );
} }
array_thread( a_ghost, ::ric_lantern_ghost_death_watcher ); array_thread( a_ghost, ::ric_lantern_ghost_death_watcher );
a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" ); a_ghost_spawners = getspawnerarray( "ghost_zombie_spawner", "script_noteworthy" );
array_thread( a_ghost_spawners, ::add_spawn_function, ::ric_lantern_ghost_death_watcher ); array_thread( a_ghost_spawners, ::add_spawn_function, ::ric_lantern_ghost_death_watcher );
@ -178,26 +163,22 @@ ric_fill_lantern_watcher()
ric_lantern_ghost_death_watcher() ric_lantern_ghost_death_watcher()
{ {
level endon( "ftl_lantern_charged" ); level endon( "ftl_lantern_charged" );
if ( flag( "ftl_lantern_charged" ) ) if ( flag( "ftl_lantern_charged" ) )
{
return; return;
}
self waittill( "death", attacker ); self waittill( "death", attacker );
players = getplayers(); players = getplayers();
_a210 = players;
_k210 = getFirstArrayKey( _a210 ); foreach ( player in players )
while ( isDefined( _k210 ) )
{ {
player = _a210[ _k210 ]; if ( isdefined( player player_get_buildable_piece( 2 ) ) && isdefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
if ( isDefined( player player_get_buildable_piece( 2 ) ) && isDefined( player player_get_buildable_piece( 2 ).buildablename == "sq_ghost_lamp" ) )
{
if ( isDefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
{ {
if ( isdefined( self ) && distancesquared( player.origin, self.origin ) < 65536 )
player ftl_lantern_increment(); player ftl_lantern_increment();
} }
} }
_k210 = getNextArrayKey( _a210, _k210 );
}
} }
ftl_lantern_increment() ftl_lantern_increment()

View File

@ -1,9 +1,11 @@
#include maps/mp/zm_buried_sq; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_buildables; // 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_buildables;
#include maps\mp\zm_buried_sq;
init() init()
{ {
@ -14,26 +16,23 @@ init()
sq_gl_setup_buildable_trig() sq_gl_setup_buildable_trig()
{ {
while ( !isDefined( level.sq_lamp_generator_unitrig ) ) while ( !isdefined( level.sq_lamp_generator_unitrig ) )
{
wait 1; wait 1;
}
level.sq_lamp_generator_unitrig.realorigin = level.sq_lamp_generator_unitrig.origin; level.sq_lamp_generator_unitrig.realorigin = level.sq_lamp_generator_unitrig.origin;
level.sq_lamp_generator_unitrig.origin += vectorScale( ( 0, 0, 1 ), 10000 ); level.sq_lamp_generator_unitrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 );
} }
init_stage() init_stage()
{ {
s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" ); s_start = getstruct( "sq_ghost_lamp_start", "script_noteworthy" );
gl_lantern_spawn( s_start ); gl_lantern_spawn( s_start );
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max(); level thread stage_vo_max();
}
else else
{
level thread stage_vo_ric(); level thread stage_vo_ric();
}
level._cur_stage_name = "gl"; level._cur_stage_name = "gl";
clientnotify( "gl" ); clientnotify( "gl" );
} }
@ -52,30 +51,34 @@ stage_logic()
exit_stage( success ) exit_stage( success )
{ {
} }
stage_vo_max() stage_vo_max()
{ {
level waittill( "lantern_crashing" ); level waittill( "lantern_crashing" );
maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern ); maxissay( "vox_maxi_sidequest_gl_2", level.vh_lantern );
} }
stage_vo_ric() stage_vo_ric()
{ {
richtofensay( "vox_zmba_sidequest_gl_0", 8 ); richtofensay( "vox_zmba_sidequest_gl_0", 8 );
level waittill( "lantern_crashing" ); level waittill( "lantern_crashing" );
richtofensay( "vox_zmba_sidequest_gl_1", 6 ); richtofensay( "vox_zmba_sidequest_gl_1", 6 );
} }
gl_lantern_spawn( s_start ) gl_lantern_spawn( s_start )
{ {
level.vh_lantern = spawnvehicle( "tag_origin", "ghost_lantern_ai", "heli_quadrotor2_zm", s_start.origin, ( 0, 0, 1 ) ); level.vh_lantern = spawnvehicle( "tag_origin", "ghost_lantern_ai", "heli_quadrotor2_zm", s_start.origin, ( 0, 0, 0 ) );
level.vh_lantern makevehicleunusable(); level.vh_lantern makevehicleunusable();
level.vh_lantern setneargoalnotifydist( 128 ); level.vh_lantern setneargoalnotifydist( 128 );
level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin ); level.vh_lantern.m_lantern = spawn( "script_model", level.vh_lantern.origin );
level.vh_lantern.m_lantern setmodel( "p6_zm_bu_lantern_silver_on" ); level.vh_lantern.m_lantern setmodel( "p6_zm_bu_lantern_silver_on" );
level.vh_lantern.m_lantern linkto( level.vh_lantern, "tag_origin" ); level.vh_lantern.m_lantern linkto( level.vh_lantern, "tag_origin" );
playfxontag( level._effect[ "sq_glow" ], level.vh_lantern.m_lantern, "tag_origin" ); playfxontag( level._effect["sq_glow"], level.vh_lantern.m_lantern, "tag_origin" );
level.vh_lantern.m_lantern playsound( "zmb_sq_glantern_impact" ); level.vh_lantern.m_lantern playsound( "zmb_sq_glantern_impact" );
level.vh_lantern.m_lantern playloopsound( "zmb_sq_glantern_full_loop_3d" ); level.vh_lantern.m_lantern playloopsound( "zmb_sq_glantern_full_loop_3d" );
level.vh_lantern thread gl_lantern_damage_watcher(); level.vh_lantern thread gl_lantern_damage_watcher();
@ -84,22 +87,20 @@ gl_lantern_spawn( s_start )
gl_lantern_delete() gl_lantern_delete()
{ {
if ( isDefined( level.vh_lantern ) ) if ( isdefined( level.vh_lantern ) )
{
if ( isDefined( level.vh_lantern.m_lantern ) )
{ {
if ( isdefined( level.vh_lantern.m_lantern ) )
level.vh_lantern.m_lantern delete(); level.vh_lantern.m_lantern delete();
}
if ( isDefined( level.vh_lantern.t_pickup ) ) if ( isdefined( level.vh_lantern.t_pickup ) )
{
level.vh_lantern.t_pickup delete(); level.vh_lantern.t_pickup delete();
}
level.vh_lantern cancelaimove(); level.vh_lantern cancelaimove();
level.vh_lantern clearvehgoalpos(); level.vh_lantern clearvehgoalpos();
if ( isDefined( level.vh_lantern.m_link ) )
{ if ( isdefined( level.vh_lantern.m_link ) )
level.vh_lantern.m_link delete(); level.vh_lantern.m_link delete();
}
level.vh_lantern delete(); level.vh_lantern delete();
} }
} }
@ -107,16 +108,17 @@ gl_lantern_delete()
gl_lantern_move( s_current ) gl_lantern_move( s_current )
{ {
level endon( "lantern_crashing" ); level endon( "lantern_crashing" );
while ( 1 )
while ( true )
{ {
s_current = gl_lantern_get_next_struct( s_current ); s_current = gl_lantern_get_next_struct( s_current );
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{ {
if ( randomint( 100 ) < 50 ) if ( randomint( 100 ) < 50 )
{
s_current = level.vh_lantern gl_lantern_teleport(); s_current = level.vh_lantern gl_lantern_teleport();
} }
}
level.vh_lantern gl_lantern_move_to_struct( s_current ); level.vh_lantern gl_lantern_move_to_struct( s_current );
} }
} }
@ -125,20 +127,19 @@ gl_lantern_get_next_struct( s_current )
{ {
a_struct_links = []; a_struct_links = [];
a_target_structs = getstructarray( s_current.target, "targetname" ); a_target_structs = getstructarray( s_current.target, "targetname" );
while ( isDefined( s_current.script_string ) )
if ( isdefined( s_current.script_string ) )
{ {
a_names = strtok( s_current.script_string, " " ); a_names = strtok( s_current.script_string, " " );
_a171 = a_names;
_k171 = getFirstArrayKey( _a171 ); foreach ( str_name in a_names )
while ( isDefined( _k171 ) )
{ {
str_name = _a171[ _k171 ];
a_new_structs = getstructarray( str_name, "targetname" ); a_new_structs = getstructarray( str_name, "targetname" );
a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 ); a_target_structs = arraycombine( a_target_structs, a_new_structs, 0, 0 );
_k171 = getNextArrayKey( _a171, _k171 );
} }
} }
return array_randomize( a_target_structs )[ 0 ];
return array_randomize( a_target_structs )[0];
} }
gl_lantern_move_to_struct( s_goto ) gl_lantern_move_to_struct( s_goto )
@ -146,18 +147,18 @@ gl_lantern_move_to_struct( s_goto )
self endon( "death" ); self endon( "death" );
self endon( "delete" ); self endon( "delete" );
self setvehgoalpos( s_goto.origin, 1 ); self setvehgoalpos( s_goto.origin, 1 );
self pathvariableoffset( vectorScale( ( 0, 0, 1 ), 128 ), 1 ); self pathvariableoffset( vectorscale( ( 1, 1, 1 ), 128.0 ), 1 );
self waittill_either( "goal", "near_goal" ); self waittill_either( "goal", "near_goal" );
} }
gl_lantern_teleport() gl_lantern_teleport()
{ {
self notify( "lantern_teleporting" ); self notify( "lantern_teleporting" );
playfx( level._effect[ "fx_wisp_lg_m" ], self.origin ); playfx( level._effect["fx_wisp_lg_m"], self.origin );
playsoundatposition( "zmb_sq_glantern_impact", self.origin ); playsoundatposition( "zmb_sq_glantern_impact", self.origin );
gl_lantern_delete(); gl_lantern_delete();
a_path_spots = getstructarray( "sq_ghost_lamp_path", "script_noteworthy" ); a_path_spots = getstructarray( "sq_ghost_lamp_path", "script_noteworthy" );
s_teleport_spot = array_randomize( a_path_spots )[ 0 ]; s_teleport_spot = array_randomize( a_path_spots )[0];
gl_lantern_spawn( s_teleport_spot ); gl_lantern_spawn( s_teleport_spot );
return s_teleport_spot; return s_teleport_spot;
} }
@ -166,24 +167,24 @@ gl_lantern_damage_watcher()
{ {
self.m_lantern endon( "delete" ); self.m_lantern endon( "delete" );
self.m_lantern setcandamage( 1 ); self.m_lantern setcandamage( 1 );
while ( 1 )
while ( true )
{ {
self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type ); self.m_lantern waittill( "damage", amount, attacker, dir, point, dmg_type );
if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" ) if ( dmg_type == "MOD_GRENADE" || dmg_type == "MOD_GRENADE_SPLASH" )
{
break; break;
} }
else
{
}
}
self.m_lantern playsound( "zmb_sq_glantern_impact" ); self.m_lantern playsound( "zmb_sq_glantern_impact" );
self gl_lantern_crash_movement(); self gl_lantern_crash_movement();
self thread gl_lantern_pickup_watch(); self thread gl_lantern_pickup_watch();
self thread gl_lantern_stop_spin_on_land(); self thread gl_lantern_stop_spin_on_land();
level thread gl_lantern_respawn_wait(); level thread gl_lantern_respawn_wait();
level waittill( "gl_lantern_respawn" ); level waittill( "gl_lantern_respawn" );
if ( isDefined( self.m_lantern ) )
if ( isdefined( self.m_lantern ) )
{ {
s_start_spot = gl_lantern_teleport(); s_start_spot = gl_lantern_teleport();
gl_lantern_move( s_start_spot ); gl_lantern_move( s_start_spot );
@ -193,11 +194,11 @@ gl_lantern_damage_watcher()
gl_lantern_stop_spin_on_land() gl_lantern_stop_spin_on_land()
{ {
self endon( "delete" ); self endon( "delete" );
while ( isDefined( self ) && length( self.velocity ) > 3 )
{ while ( isdefined( self ) && length( self.velocity ) > 3 )
wait 0,1; wait 0.1;
}
if ( isDefined( self ) ) if ( isdefined( self ) )
{ {
self.m_link = spawn( "script_model", self.origin ); self.m_link = spawn( "script_model", self.origin );
self.m_link setmodel( "tag_origin" ); self.m_link setmodel( "tag_origin" );
@ -220,15 +221,19 @@ gl_lantern_pickup_watch()
self.t_pickup triggerignoreteam(); self.t_pickup triggerignoreteam();
self.t_pickup enablelinkto(); self.t_pickup enablelinkto();
self.t_pickup linkto( self ); self.t_pickup linkto( self );
self.t_pickup waittill( "trigger", player ); self.t_pickup waittill( "trigger", player );
player player_take_piece( level.zombie_buildables[ "buried_sq_oillamp" ].buildablepieces[ 0 ] );
player player_take_piece( level.zombie_buildables["buried_sq_oillamp"].buildablepieces[0] );
piece = player player_get_buildable_piece( 2 ); piece = player player_get_buildable_piece( 2 );
if ( isDefined( piece ) )
if ( isdefined( piece ) )
{ {
piece.sq_is_ghost_lamp = 1; piece.sq_is_ghost_lamp = 1;
piece.start_origin = vectorScale( ( 0, 0, 1 ), 512 ); piece.start_origin = vectorscale( ( 0, 0, -1 ), 512.0 );
piece.start_angles = ( 0, 0, 1 ); piece.start_angles = ( 0, 0, 0 );
} }
self.t_pickup delete(); self.t_pickup delete();
self.m_lantern delete(); self.m_lantern delete();
self delete(); self delete();
@ -240,16 +245,16 @@ gl_lantern_crash_movement()
level notify( "lantern_crashing" ); level notify( "lantern_crashing" );
self cancelaimove(); self cancelaimove();
self clearvehgoalpos(); self clearvehgoalpos();
self setphysacceleration( vectorScale( ( 0, 0, 1 ), 800 ) ); self setphysacceleration( vectorscale( ( 0, 0, -1 ), 800.0 ) );
hitdir = ( 0, 0, 1 ); hitdir = ( 1, 0, 0 );
side_dir = vectorcross( hitdir, ( 0, 0, 1 ) ); side_dir = vectorcross( hitdir, ( 0, 0, 1 ) );
side_dir_mag = randomfloatrange( -100, 100 ); side_dir_mag = randomfloatrange( -100, 100 );
side_dir_mag += sign( side_dir_mag ) * 80; side_dir_mag += sign( side_dir_mag ) * 80;
side_dir *= side_dir_mag; side_dir *= side_dir_mag;
self setvehvelocity( self.velocity + vectorScale( ( 0, 0, 1 ), 100 ) + vectornormalize( side_dir ) ); self setvehvelocity( self.velocity + vectorscale( ( 0, 0, 1 ), 100.0 ) + vectornormalize( side_dir ) );
ang_vel = self getangularvelocity(); ang_vel = self getangularvelocity();
ang_vel = ( ang_vel[ 0 ] * 0,3, ang_vel[ 1 ], ang_vel[ 2 ] * 0,3 ); ang_vel = ( ang_vel[0] * 0.3, ang_vel[1], ang_vel[2] * 0.3 );
yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[ 1 ] ); yaw_vel = randomfloatrange( 0, 210 ) * sign( ang_vel[1] );
yaw_vel += sign( yaw_vel ) * 180; yaw_vel += sign( yaw_vel ) * 180;
ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) ); ang_vel += ( randomfloatrange( -1, 1 ), yaw_vel, randomfloatrange( -1, 1 ) );
self setangularvelocity( ang_vel ); self setangularvelocity( ang_vel );

View File

@ -1,11 +1,11 @@
#include maps/mp/zombies/_zm_zonemgr; // T6 GSC SOURCE
#include maps/mp/zm_buried_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_buried_sq;
#using_animtree( "fxanim_props_dlc3" ); #include maps\mp\zombies\_zm_zonemgr;
init() init()
{ {
@ -19,13 +19,10 @@ init()
init_stage() init_stage()
{ {
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max(); level thread stage_vo_max();
}
else else
{
level thread stage_vo_ric(); level thread stage_vo_ric();
}
level._cur_stage_name = "ip"; level._cur_stage_name = "ip";
clientnotify( "ip" ); clientnotify( "ip" );
} }
@ -40,7 +37,9 @@ stage_vo_max()
maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot ); maxissay( "vox_maxi_sidequest_ip_1", m_maxis_vo_spot );
m_lightboard = getent( "sq_bp_board", "targetname" ); m_lightboard = getent( "sq_bp_board", "targetname" );
trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", m_lightboard.origin, 0, 128, 72 );
trigger waittill( "trigger" ); trigger waittill( "trigger" );
maxissay( "vox_maxi_sidequest_ip_2", m_lightboard ); maxissay( "vox_maxi_sidequest_ip_2", m_lightboard );
maxissay( "vox_maxi_sidequest_ip_3", m_lightboard ); maxissay( "vox_maxi_sidequest_ip_3", m_lightboard );
} }
@ -48,17 +47,16 @@ stage_vo_max()
stage_vo_ric() stage_vo_ric()
{ {
richtofensay( "vox_zmba_sidequest_ip_0", 10 ); richtofensay( "vox_zmba_sidequest_ip_0", 10 );
richtofensay( "vox_zmba_sidequest_ip_1", 5,5 ); richtofensay( "vox_zmba_sidequest_ip_1", 5.5 );
richtofensay( "vox_zmba_sidequest_ip_2", 8 ); richtofensay( "vox_zmba_sidequest_ip_2", 8 );
richtofensay( "vox_zmba_sidequest_ip_3", 11 ); richtofensay( "vox_zmba_sidequest_ip_3", 11 );
if ( !isDefined( level.rich_sq_player ) )
{ if ( !isdefined( level.rich_sq_player ) )
return; return;
}
while ( !level.rich_sq_player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_maze" ) ) while ( !level.rich_sq_player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_maze" ) )
{
wait 1; wait 1;
}
richtofensay( "vox_zmba_sidequest_ip_4", 8 ); richtofensay( "vox_zmba_sidequest_ip_4", 8 );
} }
@ -73,6 +71,7 @@ stage_logic()
array_thread( a_button_structs, ::sq_bp_spawn_trigger ); array_thread( a_button_structs, ::sq_bp_spawn_trigger );
m_lightboard = getent( "sq_bp_board", "targetname" ); m_lightboard = getent( "sq_bp_board", "targetname" );
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 ); m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
while ( !flag( "sq_ip_puzzle_complete" ) ) while ( !flag( "sq_ip_puzzle_complete" ) )
{ {
sq_bp_start_puzzle_lights(); sq_bp_start_puzzle_lights();
@ -84,17 +83,22 @@ stage_logic()
wait_network_frame(); wait_network_frame();
} }
} }
else sq_ml_spawn_levers(); else
{
sq_ml_spawn_levers();
a_levers = getentarray( "sq_ml_lever", "targetname" ); a_levers = getentarray( "sq_ml_lever", "targetname" );
array_thread( a_levers, ::sq_ml_spawn_trigger ); array_thread( a_levers, ::sq_ml_spawn_trigger );
level thread sq_ml_puzzle_logic(); level thread sq_ml_puzzle_logic();
flag_wait( "sq_ip_puzzle_complete" ); flag_wait( "sq_ip_puzzle_complete" );
}
wait_network_frame(); wait_network_frame();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
exit_stage( success ) exit_stage( success )
{ {
} }
sq_bp_spawn_trigger() sq_bp_spawn_trigger()
@ -105,9 +109,11 @@ sq_bp_spawn_trigger()
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" ); self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
self.trig triggerignoreteam(); self.trig triggerignoreteam();
self.trig usetriggerrequirelookat(); self.trig usetriggerrequirelookat();
while ( 1 )
while ( true )
{ {
self.trig waittill( "trigger" ); self.trig waittill( "trigger" );
self.trig sethintstring( "" ); self.trig sethintstring( "" );
level thread sq_bp_button_pressed( self.script_string, self.trig ); level thread sq_bp_button_pressed( self.script_string, self.trig );
wait 1; wait 1;
@ -125,7 +131,7 @@ sq_bp_spawn_board()
sq_bp_button_pressed( str_tag, trig ) sq_bp_button_pressed( str_tag, trig )
{ {
if ( isDefined( level.str_sq_bp_active_light ) ) if ( isdefined( level.str_sq_bp_active_light ) )
{ {
if ( level.str_sq_bp_active_light == str_tag ) if ( level.str_sq_bp_active_light == str_tag )
{ {
@ -145,11 +151,11 @@ sq_bp_button_pressed( str_tag, trig )
m_light = sq_bp_light_on( str_tag, "yellow" ); m_light = sq_bp_light_on( str_tag, "yellow" );
trig playsound( "zmb_sq_bell_no" ); trig playsound( "zmb_sq_bell_no" );
} }
wait 1; wait 1;
if ( isDefined( m_light ) )
{ if ( isdefined( m_light ) )
level setclientfield( m_light, 0 ); level setclientfield( m_light, 0 );
}
} }
sq_bp_start_puzzle_lights() sq_bp_start_puzzle_lights()
@ -158,50 +164,42 @@ sq_bp_start_puzzle_lights()
level endon( "sq_bp_timeout" ); level endon( "sq_bp_timeout" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
a_tags = []; a_tags = [];
_a190 = a_button_structs;
_k190 = getFirstArrayKey( _a190 ); foreach ( m_button in a_button_structs )
while ( isDefined( _k190 ) ) a_tags[a_tags.size] = m_button.script_string;
{
m_button = _a190[ _k190 ];
a_tags[ a_tags.size ] = m_button.script_string;
_k190 = getNextArrayKey( _a190, _k190 );
}
a_tags = array_randomize( a_tags ); a_tags = array_randomize( a_tags );
m_lightboard = getent( "sq_bp_board", "targetname" ); m_lightboard = getent( "sq_bp_board", "targetname" );
if ( !isDefined( level.t_start ) )
{ if ( !isdefined( level.t_start ) )
level.t_start = spawn( "trigger_radius_use", m_lightboard.origin, 0, 16, 16 ); level.t_start = spawn( "trigger_radius_use", m_lightboard.origin, 0, 16, 16 );
}
level.t_start setcursorhint( "HINT_NOICON" ); level.t_start setcursorhint( "HINT_NOICON" );
level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" ); level.t_start sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
level.t_start triggerignoreteam(); level.t_start triggerignoreteam();
level.t_start usetriggerrequirelookat(); level.t_start usetriggerrequirelookat();
level.t_start waittill( "trigger" ); level.t_start waittill( "trigger" );
level.t_start delete(); level.t_start delete();
_a210 = a_tags;
_k210 = getFirstArrayKey( _a210 ); foreach ( str_tag in a_tags )
while ( isDefined( _k210 ) )
{ {
str_tag = _a210[ _k210 ];
wait_network_frame(); wait_network_frame();
wait_network_frame(); wait_network_frame();
level thread sq_bp_set_current_bulb( str_tag ); level thread sq_bp_set_current_bulb( str_tag );
level waittill( "sq_bp_correct_button" ); level waittill( "sq_bp_correct_button" );
_k210 = getNextArrayKey( _a210, _k210 );
} }
flag_set( "sq_ip_puzzle_complete" ); flag_set( "sq_ip_puzzle_complete" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
_a221 = a_button_structs;
_k221 = getFirstArrayKey( _a221 ); foreach ( s_button in a_button_structs )
while ( isDefined( _k221 ) )
{
s_button = _a221[ _k221 ];
if ( isDefined( s_button.trig ) )
{ {
if ( isdefined( s_button.trig ) )
s_button.trig delete(); s_button.trig delete();
} }
_k221 = getNextArrayKey( _a221, _k221 );
}
} }
sq_bp_set_current_bulb( str_tag ) sq_bp_set_current_bulb( str_tag )
@ -209,10 +207,10 @@ sq_bp_set_current_bulb( str_tag )
level endon( "sq_bp_correct_button" ); level endon( "sq_bp_correct_button" );
level endon( "sq_bp_wrong_button" ); level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" ); level endon( "sq_bp_timeout" );
if ( isDefined( level.m_sq_bp_active_light ) )
{ if ( isdefined( level.m_sq_bp_active_light ) )
level.str_sq_bp_active_light = ""; level.str_sq_bp_active_light = "";
}
level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" ); level.m_sq_bp_active_light = sq_bp_light_on( str_tag, "yellow" );
level.str_sq_bp_active_light = str_tag; level.str_sq_bp_active_light = str_tag;
wait 10; wait 10;
@ -222,29 +220,25 @@ sq_bp_set_current_bulb( str_tag )
sq_bp_delete_green_lights() sq_bp_delete_green_lights()
{ {
a_button_structs = getstructarray( "sq_bp_button", "targetname" ); a_button_structs = getstructarray( "sq_bp_button", "targetname" );
_a251 = a_button_structs;
_k251 = getFirstArrayKey( _a251 ); foreach ( m_button in a_button_structs )
while ( isDefined( _k251 ) )
{ {
m_button = _a251[ _k251 ];
str_clientfield = "buried_sq_bp_" + m_button.script_string; str_clientfield = "buried_sq_bp_" + m_button.script_string;
level setclientfield( str_clientfield, 0 ); level setclientfield( str_clientfield, 0 );
_k251 = getNextArrayKey( _a251, _k251 );
} }
if ( isDefined( level.m_sq_bp_active_light ) )
{ if ( isdefined( level.m_sq_bp_active_light ) )
level.str_sq_bp_active_light = ""; level.str_sq_bp_active_light = "";
}
} }
sq_bp_light_on( str_tag, str_color ) sq_bp_light_on( str_tag, str_color )
{ {
str_clientfield = "buried_sq_bp_" + str_tag; str_clientfield = "buried_sq_bp_" + str_tag;
n_color = 1; n_color = 1;
if ( str_color == "green" ) if ( str_color == "green" )
{
n_color = 2; n_color = 2;
}
level setclientfield( str_clientfield, 0 ); level setclientfield( str_clientfield, 0 );
wait_network_frame(); wait_network_frame();
level setclientfield( str_clientfield, n_color ); level setclientfield( str_clientfield, n_color );
@ -255,40 +249,43 @@ debug_tag( str_tag )
{ {
/# /#
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
debugstar( self gettagorigin( str_tag ), 1, ( 0, 1, 0 ) ); debugstar( self gettagorigin( str_tag ), 1, ( 1, 0, 0 ) );
wait 0,05; wait 0.05;
#/
} }
#/
} }
sq_ml_spawn_lever( n_index ) sq_ml_spawn_lever( n_index )
{ {
m_lever = spawn( "script_model", ( 0, 1, 0 ) ); m_lever = spawn( "script_model", ( 0, 0, 0 ) );
m_lever setmodel( self.model ); m_lever setmodel( self.model );
m_lever.targetname = "sq_ml_lever"; m_lever.targetname = "sq_ml_lever";
while ( 1 )
while ( true )
{ {
v_spot = self.origin; v_spot = self.origin;
v_angles = self.angles; v_angles = self.angles;
if ( isDefined( level._maze._active_perm_list[ n_index ] ) )
if ( isdefined( level._maze._active_perm_list[n_index] ) )
{ {
is_flip = randomint( 2 ); is_flip = randomint( 2 );
s_spot = getstruct( level._maze._active_perm_list[ n_index ], "script_noteworthy" ); s_spot = getstruct( level._maze._active_perm_list[n_index], "script_noteworthy" );
v_right = anglesToRight( s_spot.angles ); v_right = anglestoright( s_spot.angles );
v_offset = vectornormalize( v_right ) * 2; v_offset = vectornormalize( v_right ) * 2;
if ( is_flip ) if ( is_flip )
{
v_offset *= -1; v_offset *= -1;
}
v_spot = s_spot.origin + vectorScale( ( 0, 1, 0 ), 48 ) + v_offset; v_spot = s_spot.origin + vectorscale( ( 0, 0, 1 ), 48.0 ) + v_offset;
v_angles = s_spot.angles + vectorScale( ( 0, 1, 0 ), 90 ); v_angles = s_spot.angles + vectorscale( ( 0, 1, 0 ), 90.0 );
if ( is_flip ) if ( is_flip )
{ v_angles = s_spot.angles - vectorscale( ( 0, 1, 0 ), 90.0 );
v_angles = s_spot.angles - vectorScale( ( 0, 1, 0 ), 90 );
}
} }
m_lever.origin = v_spot; m_lever.origin = v_spot;
m_lever.angles = v_angles; m_lever.angles = v_angles;
/# /#
@ -302,18 +299,18 @@ sq_ml_show_lever_debug( v_spot, n_index )
{ {
level endon( "zm_buried_maze_changed" ); level endon( "zm_buried_maze_changed" );
/# /#
while ( 1 ) while ( true )
{ {
line( self.origin, v_spot, ( 0, 1, 0 ) ); line( self.origin, v_spot, ( 0, 0, 1 ) );
print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 ); print3d( self.origin, "" + n_index, ( 0, 1, 0 ), 1, 2 );
wait 0,05; wait 0.05;
#/
} }
#/
} }
sq_ml_spawn_trigger() sq_ml_spawn_trigger()
{ {
v_right = anglesToForward( self.angles ); v_right = anglestoforward( self.angles );
v_offset = vectornormalize( v_right ) * 8; v_offset = vectornormalize( v_right ) * 8;
self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 ); self.trig = spawn( "trigger_box_use", self.origin - v_offset, 0, 16, 16, 16 );
self.trig enablelinkto(); self.trig enablelinkto();
@ -324,17 +321,21 @@ sq_ml_spawn_trigger()
self.trig usetriggerrequirelookat(); self.trig usetriggerrequirelookat();
self.is_flipped = 0; self.is_flipped = 0;
self useanimtree( -1 ); self useanimtree( -1 );
while ( 1 )
while ( true )
{ {
self.trig waittill( "trigger" ); self.trig waittill( "trigger" );
self setanim( level.maze_switch_anim[ "switch_down" ] );
self setanim( level.maze_switch_anim["switch_down"] );
self.trig sethintstring( "" ); self.trig sethintstring( "" );
self.is_flipped = 1; self.is_flipped = 1;
self.n_flip_number = level.sq_ml_curr_lever; self.n_flip_number = level.sq_ml_curr_lever;
level.sq_ml_curr_lever++; level.sq_ml_curr_lever++;
self.trig playsound( "zmb_sq_maze_switch" ); self.trig playsound( "zmb_sq_maze_switch" );
level waittill( "sq_ml_reset_levers" ); level waittill( "sq_ml_reset_levers" );
self setanim( level.maze_switch_anim[ "switch_up" ] );
self setanim( level.maze_switch_anim["switch_up"] );
self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" ); self.trig sethintstring( &"ZM_BURIED_SQ_SWIT_U" );
self.is_flipped = 0; self.is_flipped = 0;
} }
@ -342,17 +343,13 @@ sq_ml_spawn_trigger()
sq_ml_spawn_levers() sq_ml_spawn_levers()
{ {
if ( maps/mp/zombies/_zm_zonemgr::player_in_zone( "zone_maze" ) ) if ( maps\mp\zombies\_zm_zonemgr::player_in_zone( "zone_maze" ) )
{
level waittill( "zm_buried_maze_changed" ); level waittill( "zm_buried_maze_changed" );
}
a_lever_structs = getstructarray( "sq_maze_lever", "targetname" ); a_lever_structs = getstructarray( "sq_maze_lever", "targetname" );
i = 0;
while ( i < a_lever_structs.size ) for ( i = 0; i < a_lever_structs.size; i++ )
{ a_lever_structs[i] thread sq_ml_spawn_lever( i );
a_lever_structs[ i ] thread sq_ml_spawn_lever( i );
i++;
}
} }
sq_ml_puzzle_logic() sq_ml_puzzle_logic()
@ -360,38 +357,33 @@ sq_ml_puzzle_logic()
a_levers = getentarray( "sq_ml_lever", "targetname" ); a_levers = getentarray( "sq_ml_lever", "targetname" );
level.sq_ml_curr_lever = 0; level.sq_ml_curr_lever = 0;
a_levers = array_randomize( a_levers ); a_levers = array_randomize( a_levers );
i = 0;
while ( i < a_levers.size ) for ( i = 0; i < a_levers.size; i++ )
{ a_levers[i].n_lever_order = i;
a_levers[ i ].n_lever_order = i;
i++; while ( true )
}
while ( 1 )
{ {
level.sq_ml_curr_lever = 0; level.sq_ml_curr_lever = 0;
sq_ml_puzzle_wait_for_levers(); sq_ml_puzzle_wait_for_levers();
n_correct = 0; n_correct = 0;
_a424 = a_levers;
_k424 = getFirstArrayKey( _a424 ); foreach ( m_lever in a_levers )
while ( isDefined( _k424 ) )
{ {
m_lever = _a424[ _k424 ];
if ( m_lever.n_flip_number == m_lever.n_lever_order ) if ( m_lever.n_flip_number == m_lever.n_lever_order )
{ {
playfxontag( level._effect[ "sq_spark" ], m_lever, "tag_origin" ); playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
n_correct++; n_correct++;
m_lever playsound( "zmb_sq_maze_correct_spark" ); m_lever playsound( "zmb_sq_maze_correct_spark" );
} }
_k424 = getNextArrayKey( _a424, _k424 );
} }
/# /#
iprintlnbold( "Levers Correct: " + n_correct ); iprintlnbold( "Levers Correct: " + n_correct );
#/ #/
if ( n_correct == a_levers.size ) if ( n_correct == a_levers.size )
{
flag_set( "sq_ip_puzzle_complete" ); flag_set( "sq_ip_puzzle_complete" );
}
level waittill( "zm_buried_maze_changed" ); level waittill( "zm_buried_maze_changed" );
level notify( "sq_ml_reset_levers" ); level notify( "sq_ml_reset_levers" );
wait 1; wait 1;
} }
@ -401,20 +393,17 @@ sq_ml_puzzle_wait_for_levers()
{ {
a_levers = getentarray( "sq_ml_lever", "targetname" ); a_levers = getentarray( "sq_ml_lever", "targetname" );
are_all_flipped = 0; are_all_flipped = 0;
while ( !are_all_flipped ) while ( !are_all_flipped )
{ {
are_all_flipped = 1; are_all_flipped = 1;
_a458 = a_levers;
_k458 = getFirstArrayKey( _a458 ); foreach ( m_lever in a_levers )
while ( isDefined( _k458 ) )
{ {
m_lever = _a458[ _k458 ];
if ( m_lever.is_flipped == 0 ) if ( m_lever.is_flipped == 0 )
{
are_all_flipped = 0; are_all_flipped = 0;
} }
_k458 = getNextArrayKey( _a458, _k458 );
}
wait 1; wait 1;
} }
} }

View File

@ -1,8 +1,10 @@
#include maps/mp/zm_buried_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_buried_sq;
init() init()
{ {
@ -21,10 +23,9 @@ stage_logic()
/# /#
iprintlnbold( "LL Started" ); iprintlnbold( "LL Started" );
#/ #/
if ( !isDefined( level.generator_power_states_color ) ) if ( !isdefined( level.generator_power_states_color ) )
{
level.generator_power_states_color = 0; level.generator_power_states_color = 0;
}
sq_ll_show_code(); sq_ll_show_code();
wait_network_frame(); wait_network_frame();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
@ -35,63 +36,50 @@ sq_ll_show_code()
a_spots = getstructarray( "sq_code_pos", "targetname" ); a_spots = getstructarray( "sq_code_pos", "targetname" );
a_signs = getentarray( "sq_tunnel_sign", "targetname" ); a_signs = getentarray( "sq_tunnel_sign", "targetname" );
a_codes = []; a_codes = [];
_a50 = a_signs;
_k50 = getFirstArrayKey( _a50 ); foreach ( m_sign in a_signs )
while ( isDefined( _k50 ) )
{ {
m_sign = _a50[ _k50 ];
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{ {
if ( isDefined( m_sign.is_max_sign ) ) if ( isdefined( m_sign.is_max_sign ) )
a_codes[a_codes.size] = m_sign.model + "_code";
continue;
}
if ( isdefined( m_sign.is_ric_sign ) )
a_codes[a_codes.size] = m_sign.model + "_code";
}
for ( i = 0; i < a_codes.size; i++ )
{ {
a_codes[ a_codes.size ] = m_sign.model + "_code"; if ( a_codes[i] == "p6_zm_bu_sign_tunnel_consumption_code" )
a_codes[i] = "p6_zm_bu_sign_tunnel_consump_code";
} }
}
else for ( i = 0; i < a_codes.size; i++ )
{ {
if ( isDefined( m_sign.is_ric_sign ) ) m_code = spawn( "script_model", a_spots[i].origin );
{ m_code.angles = a_spots[i].angles;
a_codes[ a_codes.size ] = m_sign.model + "_code"; m_code setmodel( a_codes[i] );
}
}
_k50 = getNextArrayKey( _a50, _k50 );
}
i = 0;
while ( i < a_codes.size )
{
if ( a_codes[ i ] == "p6_zm_bu_sign_tunnel_consumption_code" )
{
a_codes[ i ] = "p6_zm_bu_sign_tunnel_consump_code";
}
i++;
}
i = 0;
while ( i < a_codes.size )
{
m_code = spawn( "script_model", a_spots[ i ].origin );
m_code.angles = a_spots[ i ].angles;
m_code setmodel( a_codes[ i ] );
i++;
} }
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread sq_ll_show_code_vo_max(); level thread sq_ll_show_code_vo_max();
}
else else
{
level thread sq_ll_show_code_vo_ric(); level thread sq_ll_show_code_vo_ric();
}
} }
exit_stage( success ) exit_stage( success )
{ {
} }
sq_ll_show_code_vo_max() sq_ll_show_code_vo_max()
{ {
a_signs = getentarray( "sq_tunnel_sign", "targetname" ); a_signs = getentarray( "sq_tunnel_sign", "targetname" );
maxissay( "vox_maxi_sidequest_signs_0", a_signs[ 0 ] ); maxissay( "vox_maxi_sidequest_signs_0", a_signs[0] );
maxissay( "vox_maxi_sidequest_signs_1", a_signs[ 0 ] ); maxissay( "vox_maxi_sidequest_signs_1", a_signs[0] );
} }
sq_ll_show_code_vo_ric() sq_ll_show_code_vo_ric()

View File

@ -1,22 +1,22 @@
#include maps/mp/zm_buried_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_buried_sq;
init() init()
{ {
flag_init( "sq_amplifiers_on" ); flag_init( "sq_amplifiers_on" );
a_amp_structs = getstructarray( "sq_amplifier_spot" ); a_amp_structs = getstructarray( "sq_amplifier_spot" );
_a16 = a_amp_structs;
_k16 = getFirstArrayKey( _a16 ); foreach ( s_amp_spot in a_amp_structs )
while ( isDefined( _k16 ) )
{ {
s_amp_spot = _a16[ _k16 ];
m_amplifier = spawn( "script_model", s_amp_spot.origin ); m_amplifier = spawn( "script_model", s_amp_spot.origin );
m_amplifier thread mta_amplifier_init(); m_amplifier thread mta_amplifier_init();
_k16 = getNextArrayKey( _a16, _k16 );
} }
declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage ); declare_sidequest_stage( "sq", "mta", ::init_stage, ::stage_logic, ::exit_stage );
} }
@ -42,12 +42,15 @@ stage_logic()
exit_stage( success ) exit_stage( success )
{ {
} }
stage_vo_max() stage_vo_max()
{ {
level thread stage_vo_max_amp_broken(); level thread stage_vo_max_amp_broken();
level waittill( "mta_amp_found", amp ); level waittill( "mta_amp_found", amp );
maxissay( "vox_maxi_sidequest_amp_0", amp ); maxissay( "vox_maxi_sidequest_amp_0", amp );
maxissay( "vox_maxi_sidequest_amp_1", amp ); maxissay( "vox_maxi_sidequest_amp_1", amp );
} }
@ -55,12 +58,19 @@ stage_vo_max()
stage_vo_max_amp_broken() stage_vo_max_amp_broken()
{ {
level waittill( "mta_amp_broken", amp ); level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_2", amp ); maxissay( "vox_maxi_sidequest_amp_2", amp );
level waittill( "mta_amp_broken", amp ); level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_3", amp ); maxissay( "vox_maxi_sidequest_amp_3", amp );
level waittill( "mta_amp_broken", amp ); level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_4", amp ); maxissay( "vox_maxi_sidequest_amp_4", amp );
level waittill( "mta_amp_broken", amp ); level waittill( "mta_amp_broken", amp );
maxissay( "vox_maxi_sidequest_amp_5", amp ); maxissay( "vox_maxi_sidequest_amp_5", amp );
maxissay( "vox_maxi_sidequest_gl_0", amp ); maxissay( "vox_maxi_sidequest_gl_0", amp );
maxissay( "vox_maxi_sidequest_gl_1", amp ); maxissay( "vox_maxi_sidequest_gl_1", amp );
@ -69,7 +79,9 @@ stage_vo_max_amp_broken()
stage_vo_ric() stage_vo_ric()
{ {
level thread stage_vo_ric_amp_amplified(); level thread stage_vo_ric_amp_amplified();
level waittill( "mta_amp_found_by_sam" ); level waittill( "mta_amp_found_by_sam" );
richtofensay( "vox_zmba_sidequest_amp_0", 10 ); richtofensay( "vox_zmba_sidequest_amp_0", 10 );
richtofensay( "vox_zmba_sidequest_amp_1", 7 ); richtofensay( "vox_zmba_sidequest_amp_1", 7 );
} }
@ -77,6 +89,7 @@ stage_vo_ric()
stage_vo_ric_amp_amplified() stage_vo_ric_amp_amplified()
{ {
level waittill( "mta_amp_amplified" ); level waittill( "mta_amp_amplified" );
richtofensay( "vox_zmba_sidequest_amp_2", 6 ); richtofensay( "vox_zmba_sidequest_amp_2", 6 );
richtofensay( "vox_zmba_sidequest_amp_3", 4 ); richtofensay( "vox_zmba_sidequest_amp_3", 4 );
} }
@ -85,20 +98,18 @@ mta_amplifier_found_watcher()
{ {
self endon( "damaged_by_subwoofer" ); self endon( "damaged_by_subwoofer" );
self endon( "amplifier_filled" ); self endon( "amplifier_filled" );
if ( self.amplifier_state != "base" ) if ( self.amplifier_state != "base" )
{
return; return;
}
trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 ); trigger = spawn( "trigger_radius", self.origin, 0, 128, 72 );
trigger waittill( "trigger", who ); trigger waittill( "trigger", who );
if ( isDefined( level.rich_sq_player ) && who == level.rich_sq_player )
{ if ( isdefined( level.rich_sq_player ) && who == level.rich_sq_player )
level notify( "mta_amp_found_by_sam" ); level notify( "mta_amp_found_by_sam" );
}
else else
{ level notify( "mta_amp_found", self );
level notify( "mta_amp_found" );
}
} }
mta_amplifier_init() mta_amplifier_init()
@ -121,9 +132,9 @@ mta_amplifier_subwoofer_watch()
#/ #/
self.amplifier_state = "broken"; self.amplifier_state = "broken";
self setmodel( "p6_zm_bu_ether_amplifier_dmg" ); self setmodel( "p6_zm_bu_ether_amplifier_dmg" );
self stoploopsound( 0,1 ); self stoploopsound( 0.1 );
self playsound( "zmb_sq_amplifier_destroy" ); self playsound( "zmb_sq_amplifier_destroy" );
level notify( "mta_amp_broken" ); level notify( "mta_amp_broken", self );
mta_check_all_amplifier_states(); mta_check_all_amplifier_states();
} }
@ -131,14 +142,17 @@ mta_amplifier_damage_watch()
{ {
self endon( "damaged_by_subwoofer" ); self endon( "damaged_by_subwoofer" );
n_slowgun_count = 0; n_slowgun_count = 0;
while ( 1 )
while ( true )
{ {
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon ); self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( str_weapon == "slowgun_zm" || str_weapon == "slowgun_upgraded_zm" ) if ( str_weapon == "slowgun_zm" || str_weapon == "slowgun_upgraded_zm" )
{ {
n_slowgun_count++; n_slowgun_count++;
shader_amount = linear_map( n_slowgun_count, 0, 25, 0, 1 ); shader_amount = linear_map( n_slowgun_count, 0, 25, 0.0, 1.0 );
self setclientfield( "AmplifierShaderConstant", shader_amount ); self setclientfield( "AmplifierShaderConstant", shader_amount );
if ( n_slowgun_count >= 25 ) if ( n_slowgun_count >= 25 )
{ {
/# /#
@ -153,19 +167,18 @@ mta_amplifier_damage_watch()
break; break;
} }
} }
else
{
wait_network_frame(); wait_network_frame();
} }
}
mta_check_all_amplifier_states(); mta_check_all_amplifier_states();
} }
mta_amplifier_filled_fx() mta_amplifier_filled_fx()
{ {
while ( 1 ) while ( true )
{ {
playfx( level._effect[ "sq_ether_amp_trail" ], self.origin + vectorScale( ( 0, 0, 1 ), 46 ) ); playfx( level._effect["sq_ether_amp_trail"], self.origin + vectorscale( ( 0, 0, 1 ), 46.0 ) );
wait 1; wait 1;
} }
} }
@ -175,30 +188,18 @@ mta_check_all_amplifier_states()
is_all_broken = 1; is_all_broken = 1;
is_all_filled = 1; is_all_filled = 1;
a_amplifiers = getentarray( "sq_amplifier", "targetname" ); a_amplifiers = getentarray( "sq_amplifier", "targetname" );
_a226 = a_amplifiers;
_k226 = getFirstArrayKey( _a226 ); foreach ( m_amplifier in a_amplifiers )
while ( isDefined( _k226 ) )
{ {
m_amplifier = _a226[ _k226 ];
if ( m_amplifier.amplifier_state != "filled" ) if ( m_amplifier.amplifier_state != "filled" )
{
is_all_filled = 0; is_all_filled = 0;
}
if ( m_amplifier.amplifier_state != "broken" ) if ( m_amplifier.amplifier_state != "broken" )
{
is_all_broken = 0; is_all_broken = 0;
} }
_k226 = getNextArrayKey( _a226, _k226 );
}
if ( is_all_filled ) if ( is_all_filled )
{
flag_set( "sq_amplifiers_on" ); flag_set( "sq_amplifiers_on" );
} else if ( is_all_broken )
else
{
if ( is_all_broken )
{
flag_set( "sq_amplifiers_broken" ); flag_set( "sq_amplifiers_broken" );
}
}
} }

View File

@ -1,8 +1,10 @@
#include maps/mp/zm_buried_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_buried_sq;
init() init()
{ {
@ -15,13 +17,10 @@ init()
init_stage() init_stage()
{ {
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max(); level thread stage_vo_max();
}
else else
{
level thread stage_vo_ric(); level thread stage_vo_ric();
}
level._cur_stage_name = "ows"; level._cur_stage_name = "ows";
clientnotify( "ows" ); clientnotify( "ows" );
} }
@ -51,11 +50,13 @@ stage_logic()
ows_targets_start(); ows_targets_start();
flag_clear( "sq_ows_start" ); flag_clear( "sq_ows_start" );
} }
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
exit_stage( success ) exit_stage( success )
{ {
} }
ows_fountain_wait() ows_fountain_wait()
@ -67,7 +68,9 @@ ows_fountain_wait()
t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" ); t_fountain sethintstring( &"ZM_BURIED_SQ_FOUNT_U" );
t_fountain triggerignoreteam(); t_fountain triggerignoreteam();
t_fountain usetriggerrequirelookat(); t_fountain usetriggerrequirelookat();
t_fountain waittill( "trigger" ); t_fountain waittill( "trigger" );
t_fountain playsound( "zmb_sq_coin_toss" ); t_fountain playsound( "zmb_sq_coin_toss" );
t_fountain delete(); t_fountain delete();
flag_set( "sq_ows_start" ); flag_set( "sq_ows_start" );
@ -79,25 +82,26 @@ ows_targets_start()
flag_clear( "sq_ows_target_missed" ); flag_clear( "sq_ows_target_missed" );
level thread sndsidequestowsmusic(); level thread sndsidequestowsmusic();
a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" ); a_sign_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
while ( n_cur_second < 40 ) while ( n_cur_second < 40 )
{ {
a_spawn_spots = ows_targets_get_cur_spots( n_cur_second ); a_spawn_spots = ows_targets_get_cur_spots( n_cur_second );
if ( isDefined( a_spawn_spots ) && a_spawn_spots.size > 0 )
{ if ( isdefined( a_spawn_spots ) && a_spawn_spots.size > 0 )
ows_targets_spawn( a_spawn_spots ); ows_targets_spawn( a_spawn_spots );
}
wait 1; wait 1;
n_cur_second++; n_cur_second++;
} }
if ( !flag( "sq_ows_target_missed" ) ) if ( !flag( "sq_ows_target_missed" ) )
{ {
flag_set( "sq_ows_success" ); flag_set( "sq_ows_success" );
playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) ); playsoundatposition( "zmb_sq_target_success", ( 0, 0, 0 ) );
} }
else else
{
playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) ); playsoundatposition( "zmb_sq_target_fail", ( 0, 0, 0 ) );
}
level notify( "sndEndOWSMusic" ); level notify( "sndEndOWSMusic" );
} }
@ -106,47 +110,40 @@ ows_targets_get_cur_spots( n_time )
a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" ); a_target_spots = getstructarray( "otw_target_spot", "script_noteworthy" );
a_to_spawn = []; a_to_spawn = [];
str_time = "" + n_time; str_time = "" + n_time;
_a133 = a_target_spots;
_k133 = getFirstArrayKey( _a133 ); foreach ( s_spot in a_target_spots )
while ( isDefined( _k133 ) )
{ {
s_spot = _a133[ _k133 ]; if ( isdefined( s_spot.script_string ) )
if ( isDefined( s_spot.script_string ) )
{ {
a_spawn_times = strtok( s_spot.script_string, " " ); a_spawn_times = strtok( s_spot.script_string, " " );
if ( isinarray( a_spawn_times, str_time ) ) if ( isinarray( a_spawn_times, str_time ) )
{ a_to_spawn[a_to_spawn.size] = s_spot;
a_to_spawn[ a_to_spawn.size ] = s_spot;
} }
} }
_k133 = getNextArrayKey( _a133, _k133 );
}
return a_to_spawn; return a_to_spawn;
} }
ows_targets_spawn( a_spawn_spots ) ows_targets_spawn( a_spawn_spots )
{ {
_a151 = a_spawn_spots; foreach ( s_spot in a_spawn_spots )
_k151 = getFirstArrayKey( _a151 );
while ( isDefined( _k151 ) )
{ {
s_spot = _a151[ _k151 ];
m_target = spawn( "script_model", s_spot.origin ); m_target = spawn( "script_model", s_spot.origin );
m_target.angles = s_spot.angles; m_target.angles = s_spot.angles;
m_target setmodel( "p6_zm_bu_target" ); m_target setmodel( "p6_zm_bu_target" );
m_target ghost(); m_target ghost();
wait_network_frame(); wait_network_frame();
m_target show(); m_target show();
playfxontag( level._effect[ "sq_spawn" ], m_target, "tag_origin" ); playfxontag( level._effect["sq_spawn"], m_target, "tag_origin" );
m_target playsound( "zmb_sq_target_spawn" ); m_target playsound( "zmb_sq_target_spawn" );
if ( isDefined( s_spot.target ) )
{ if ( isdefined( s_spot.target ) )
m_target thread ows_target_move( s_spot.target ); m_target thread ows_target_move( s_spot.target );
}
m_target thread ows_target_think(); m_target thread ows_target_think();
m_target thread sndhit(); m_target thread sndhit();
m_target thread sndtime(); m_target thread sndtime();
_k151 = getNextArrayKey( _a151, _k151 );
} }
} }
@ -155,13 +152,17 @@ ows_target_think()
self setcandamage( 1 ); self setcandamage( 1 );
self thread ows_target_delete_timer(); self thread ows_target_delete_timer();
self waittill_either( "ows_target_timeout", "damage" ); self waittill_either( "ows_target_timeout", "damage" );
if ( isDefined( self.m_linker ) )
if ( isdefined( self.m_linker ) )
{ {
self unlink(); self unlink();
self.m_linker delete(); self.m_linker delete();
} }
self rotatepitch( -90, 0,15, 0,05, 0,05 );
self rotatepitch( -90, 0.15, 0.05, 0.05 );
self waittill( "rotatedone" ); self waittill( "rotatedone" );
self delete(); self delete();
} }
@ -171,7 +172,7 @@ ows_target_move( str_target )
self.m_linker = spawn( "script_model", self.origin ); self.m_linker = spawn( "script_model", self.origin );
self.m_linker.angles = self.angles; self.m_linker.angles = self.angles;
self linkto( self.m_linker ); self linkto( self.m_linker );
self.m_linker moveto( s_target.origin, 4, 0,05, 0,05 ); self.m_linker moveto( s_target.origin, 4, 0.05, 0.05 );
} }
ows_target_delete_timer() ows_target_delete_timer()
@ -188,36 +189,43 @@ ows_target_delete_timer()
sndsidequestowsmusic() sndsidequestowsmusic()
{ {
while ( is_true( level.music_override ) ) while ( is_true( level.music_override ) )
{ wait 0.1;
wait 0,1;
}
level.music_override = 1; level.music_override = 1;
level setclientfield( "mus_zmb_egg_snapshot_loop", 1 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 1 );
ent = spawn( "script_origin", ( 0, 0, 0 ) ); ent = spawn( "script_origin", ( 0, 0, 0 ) );
ent playloopsound( "mus_sidequest_ows" ); ent playloopsound( "mus_sidequest_ows" );
level waittill( "sndEndOWSMusic" ); level waittill( "sndEndOWSMusic" );
level setclientfield( "mus_zmb_egg_snapshot_loop", 0 ); level setclientfield( "mus_zmb_egg_snapshot_loop", 0 );
level.music_override = 0; level.music_override = 0;
ent stoploopsound( 4 ); ent stoploopsound( 4 );
if ( !flag( "sq_ows_success" ) ) if ( !flag( "sq_ows_success" ) )
{ {
wait 0,5; wait 0.5;
ent playsound( "mus_sidequest_0" ); ent playsound( "mus_sidequest_0" );
} }
wait 3,5;
wait 3.5;
ent delete(); ent delete();
} }
sndhit() sndhit()
{ {
self endon( "ows_target_timeout" ); self endon( "ows_target_timeout" );
self waittill( "damage" ); self waittill( "damage" );
self playsound( "zmb_sq_target_hit" ); self playsound( "zmb_sq_target_hit" );
} }
sndtime() sndtime()
{ {
self endon( "zmb_sq_target_hit" ); self endon( "zmb_sq_target_hit" );
self waittill( "ows_target_timeout" ); self waittill( "ows_target_timeout" );
self playsound( "zmb_sq_target_flip" ); self playsound( "zmb_sq_target_flip" );
} }

View File

@ -1,17 +1,17 @@
#include maps/mp/zm_buried_buildables; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_unitrigger; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_weap_time_bomb; #include common_scripts\utility;
#include maps/mp/zm_buried_sq; #include maps\mp\_utility;
#include maps/mp/zombies/_zm; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_buildables; #include maps\mp\zombies\_zm_sidequests;
#include maps/mp/gametypes_zm/_hud_util; #include maps\mp\_visionset_mgr;
#include maps/mp/_visionset_mgr; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/zombies/_zm_sidequests; #include maps\mp\zombies\_zm_buildables;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm;
#include maps/mp/_utility; #include maps\mp\zm_buried_sq;
#include common_scripts/utility; #include maps\mp\zombies\_zm_weap_time_bomb;
#include maps\mp\zombies\_zm_unitrigger;
#using_animtree( "zm_buried_props" ); #include maps\mp\zm_buried_buildables;
init() init()
{ {
@ -23,12 +23,12 @@ init()
flag_init( "sq_tpo_generator_powered" ); flag_init( "sq_tpo_generator_powered" );
flag_init( "sq_wisp_saved_with_time_bomb" ); flag_init( "sq_wisp_saved_with_time_bomb" );
flag_init( "sq_tpo_stage_started" ); flag_init( "sq_tpo_stage_started" );
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state ); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_save( ::time_bomb_saves_wisp_state );
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state ); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_add_custom_func_global_restore( ::time_bomb_restores_wisp_state );
/# /#
level thread debug_give_piece(); level thread debug_give_piece();
#/ #/
level._effect[ "sq_tpo_time_bomb_fx" ] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" ); level._effect["sq_tpo_time_bomb_fx"] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" );
level.sq_tpo = spawnstruct(); level.sq_tpo = spawnstruct();
level thread setup_buildable_switch(); level thread setup_buildable_switch();
} }
@ -36,13 +36,10 @@ init()
init_stage() init_stage()
{ {
if ( flag( "sq_is_max_tower_built" ) ) if ( flag( "sq_is_max_tower_built" ) )
{
level thread stage_vo_max(); level thread stage_vo_max();
}
else else
{
level thread stage_vo_ric(); level thread stage_vo_ric();
}
level._cur_stage_name = "tpo"; level._cur_stage_name = "tpo";
clientnotify( "tpo" ); clientnotify( "tpo" );
} }
@ -64,10 +61,14 @@ stage_vo_ric()
richtofensay( "vox_zmba_sidequest_step8_0", 11 ); richtofensay( "vox_zmba_sidequest_step8_0", 11 );
richtofensay( "vox_zmba_sidequest_step8_1", 6 ); richtofensay( "vox_zmba_sidequest_step8_1", 6 );
richtofensay( "vox_zmba_sidequest_step8_2", 6 ); richtofensay( "vox_zmba_sidequest_step8_2", 6 );
level waittill( "sq_tpo_special_round_started" ); level waittill( "sq_tpo_special_round_started" );
wait 2; wait 2;
richtofensay( "vox_zmba_sidequest_step8_3", 6 ); richtofensay( "vox_zmba_sidequest_step8_3", 6 );
level waittill( "sq_tpo_special_round_ended" ); level waittill( "sq_tpo_special_round_ended" );
richtofensay( "vox_zmba_sidequest_step8_6", 4 ); richtofensay( "vox_zmba_sidequest_step8_6", 4 );
} }
@ -77,14 +78,11 @@ stage_logic()
iprintlnbold( "TPO Started" ); iprintlnbold( "TPO Started" );
#/ #/
flag_set( "sq_tpo_stage_started" ); flag_set( "sq_tpo_stage_started" );
if ( flag( "sq_is_ric_tower_built" ) ) if ( flag( "sq_is_ric_tower_built" ) )
{
stage_logic_richtofen(); stage_logic_richtofen();
}
else if ( flag( "sq_is_max_tower_built" ) ) else if ( flag( "sq_is_max_tower_built" ) )
{
stage_logic_maxis(); stage_logic_maxis();
}
else else
{ {
/# /#
@ -104,18 +102,27 @@ stage_logic_richtofen()
iprintlnbold( "TPO: Richtofen started" ); iprintlnbold( "TPO: Richtofen started" );
#/ #/
e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" ); e_time_bomb_volume = getent( "sq_tpo_timebomb_volume", "targetname" );
flag_clear( "sq_tpo_time_bomb_in_valid_location" );
if ( isDefined( level.time_bomb_save_data ) && isDefined( level.time_bomb_save_data.time_bomb_model ) && isDefined( level.time_bomb_save_data.time_bomb_model.sq_location_valid ) ) do
{ {
flag_clear( "sq_tpo_time_bomb_in_valid_location" );
do
{
if ( !( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) && !isdefined( level.time_bomb_save_data.time_bomb_model.sq_location_valid ) ) )
level waittill( "new_time_bomb_set" ); level waittill( "new_time_bomb_set" );
}
b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume ); b_time_bomb_in_valid_location = level.time_bomb_save_data.time_bomb_model istouching( e_time_bomb_volume );
level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location; level.time_bomb_save_data.time_bomb_model.sq_location_valid = b_time_bomb_in_valid_location;
playfxontag( level._effect[ "sq_tpo_time_bomb_fx" ], level.time_bomb_save_data.time_bomb_model, "tag_origin" ); }
while ( !b_time_bomb_in_valid_location );
playfxontag( level._effect["sq_tpo_time_bomb_fx"], level.time_bomb_save_data.time_bomb_model, "tag_origin" );
flag_set( "sq_tpo_time_bomb_in_valid_location" ); flag_set( "sq_tpo_time_bomb_in_valid_location" );
level thread sq_tpo_check_players_in_time_bomb_volume( e_time_bomb_volume ); level thread sq_tpo_check_players_in_time_bomb_volume( e_time_bomb_volume );
wait_for_time_bomb_to_be_detonated_or_thrown_again(); wait_for_time_bomb_to_be_detonated_or_thrown_again();
level notify( "sq_tpo_stop_checking_time_bomb_volume" ); level notify( "sq_tpo_stop_checking_time_bomb_volume" );
if ( flag( "time_bomb_restore_active" ) ) if ( flag( "time_bomb_restore_active" ) )
{ {
if ( flag( "sq_tpo_players_in_position_for_time_warp" ) ) if ( flag( "sq_tpo_players_in_position_for_time_warp" ) )
@ -127,7 +134,10 @@ stage_logic_richtofen()
level notify( "sq_tpo_special_round_ended" ); level notify( "sq_tpo_special_round_ended" );
} }
} }
wait_network_frame(); wait_network_frame();
}
while ( !flag( "sq_tpo_generator_powered" ) );
} }
stage_logic_maxis() stage_logic_maxis()
@ -136,32 +146,36 @@ stage_logic_maxis()
iprintlnbold( "TPO: Maxis started" ); iprintlnbold( "TPO: Maxis started" );
#/ #/
flag_wait( "sq_wisp_saved_with_time_bomb" ); flag_wait( "sq_wisp_saved_with_time_bomb" );
while ( !flag( "sq_wisp_success" ) ) while ( !flag( "sq_wisp_success" ) )
{ {
stage_start( "sq", "ts" ); stage_start( "sq", "ts" );
level waittill( "sq_ts_over" ); level waittill( "sq_ts_over" );
stage_start( "sq", "ctw" ); stage_start( "sq", "ctw" );
level waittill( "sq_ctw_over" ); level waittill( "sq_ctw_over" );
} }
level._cur_stage_name = "tpo"; level._cur_stage_name = "tpo";
} }
sq_tpo_check_players_in_time_bomb_volume( e_volume ) sq_tpo_check_players_in_time_bomb_volume( e_volume )
{ {
level endon( "sq_tpo_stop_checking_time_bomb_volume" ); level endon( "sq_tpo_stop_checking_time_bomb_volume" );
while ( 1 )
while ( true )
{ {
b_players_ready = _are_all_players_in_time_bomb_volume( e_volume ); b_players_ready = _are_all_players_in_time_bomb_volume( e_volume );
level._time_bomb.functionality_override = b_players_ready; level._time_bomb.functionality_override = b_players_ready;
if ( b_players_ready ) if ( b_players_ready )
{
flag_set( "sq_tpo_players_in_position_for_time_warp" ); flag_set( "sq_tpo_players_in_position_for_time_warp" );
}
else else
{
flag_clear( "sq_tpo_players_in_position_for_time_warp" ); flag_clear( "sq_tpo_players_in_position_for_time_warp" );
}
wait 0,25; wait 0.25;
} }
} }
@ -170,23 +184,17 @@ _are_all_players_in_time_bomb_volume( e_volume )
n_required_players = 4; n_required_players = 4;
a_players = get_players(); a_players = get_players();
/# /#
if ( getDvarInt( #"5256118F" ) > 0 ) if ( getdvarint( _hash_5256118F ) > 0 )
{
n_required_players = a_players.size; n_required_players = a_players.size;
#/ #/
}
n_players_in_position = 0; n_players_in_position = 0;
_a239 = a_players;
_k239 = getFirstArrayKey( _a239 ); foreach ( player in a_players )
while ( isDefined( _k239 ) )
{ {
player = _a239[ _k239 ];
if ( player istouching( e_volume ) ) if ( player istouching( e_volume ) )
{
n_players_in_position++; n_players_in_position++;
} }
_k239 = getNextArrayKey( _a239, _k239 );
}
b_all_in_valid_position = n_players_in_position == n_required_players; b_all_in_valid_position = n_players_in_position == n_required_players;
return b_all_in_valid_position; return b_all_in_valid_position;
} }
@ -204,21 +212,17 @@ special_round_start()
#/ #/
flag_set( "sq_tpo_special_round_active" ); flag_set( "sq_tpo_special_round_active" );
level.sq_tpo.times_searched = 0; level.sq_tpo.times_searched = 0;
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_saves_data( 0 ); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_saves_data( 0 );
flag_clear( "time_bomb_detonation_enabled" ); flag_clear( "time_bomb_detonation_enabled" );
fake_time_warp(); fake_time_warp();
level thread sndsidequestnoirmusic(); level thread sndsidequestnoirmusic();
make_super_zombies( 1 ); make_super_zombies( 1 );
level thread spawn_zombies_after_time_bomb_round_killed(); level thread spawn_zombies_after_time_bomb_round_killed();
a_players = get_players(); a_players = get_players();
_a279 = a_players;
_k279 = getFirstArrayKey( _a279 ); foreach ( player in a_players )
while ( isDefined( _k279 ) )
{
player = _a279[ _k279 ];
vsmgr_activate( "visionset", "cheat_bw", player ); vsmgr_activate( "visionset", "cheat_bw", player );
_k279 = getNextArrayKey( _a279, _k279 );
}
level setclientfield( "sq_tpo_special_round_active", 1 ); level setclientfield( "sq_tpo_special_round_active", 1 );
} }
@ -234,21 +238,23 @@ make_super_zombies( b_toggle )
n_round = level.round_number; n_round = level.round_number;
level notify( "super_zombies_end" ); level notify( "super_zombies_end" );
} }
level.zombie_total = n_round; level.zombie_total = n_round;
ai_calculate_health( n_round ); ai_calculate_health( n_round );
level.zombie_move_speed = n_round * level.zombie_vars[ "zombie_move_speed_multiplier" ]; level.zombie_move_speed = n_round * level.zombie_vars["zombie_move_speed_multiplier"];
} }
watch_for_time_bombs( n_round ) watch_for_time_bombs( n_round )
{ {
level notify( "super_zombies_end" ); level notify( "super_zombies_end" );
level endon( "super_zombies_end" ); level endon( "super_zombies_end" );
while ( 1 )
while ( true )
{ {
level waittill_any( "time_bomb_detonation_complete", "start_of_round" ); level waittill_any( "time_bomb_detonation_complete", "start_of_round" );
level.zombie_total = n_round; level.zombie_total = n_round;
ai_calculate_health( n_round ); ai_calculate_health( n_round );
level.zombie_move_speed = n_round * level.zombie_vars[ "zombie_move_speed_multiplier" ]; level.zombie_move_speed = n_round * level.zombie_vars["zombie_move_speed_multiplier"];
} }
} }
@ -260,11 +266,11 @@ spawn_zombies_after_time_bomb_round_killed()
fake_time_warp() fake_time_warp()
{ {
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_destroy_hud_elem(); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_destroy_hud_elem();
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_show_overlay(); maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_show_overlay();
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies(); maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_kill_all_active_enemies();
playsoundatposition( "zmb_timebomb_timechange_2d_sq", ( 0, 0, 0 ) ); playsoundatposition( "zmb_timebomb_timechange_2d_sq", ( 0, 0, 0 ) );
maps/mp/zombies/_zm_weap_time_bomb::_time_bomb_hide_overlay(); maps\mp\zombies\_zm_weap_time_bomb::_time_bomb_hide_overlay();
} }
special_round_end() special_round_end()
@ -277,17 +283,15 @@ special_round_end()
make_super_zombies( 0 ); make_super_zombies( 0 );
level._time_bomb.functionality_override = 0; level._time_bomb.functionality_override = 0;
flag_set( "time_bomb_detonation_enabled" ); flag_set( "time_bomb_detonation_enabled" );
maps/mp/zombies/_zm_weap_time_bomb::time_bomb_restores_saved_data(); maps\mp\zombies\_zm_weap_time_bomb::time_bomb_restores_saved_data();
a_players = get_players(); a_players = get_players();
_a356 = a_players;
_k356 = getFirstArrayKey( _a356 ); foreach ( player in a_players )
while ( isDefined( _k356 ) )
{ {
player = _a356[ _k356 ];
vsmgr_deactivate( "visionset", "cheat_bw", player ); vsmgr_deactivate( "visionset", "cheat_bw", player );
player notify( "search_done" ); player notify( "search_done" );
_k356 = getNextArrayKey( _a356, _k356 );
} }
clean_up_special_round(); clean_up_special_round();
flag_clear( "sq_tpo_special_round_active" ); flag_clear( "sq_tpo_special_round_active" );
} }
@ -295,30 +299,23 @@ special_round_end()
clean_up_special_round() clean_up_special_round()
{ {
a_models = getentarray( "sq_tpo_corpse_model", "targetname" ); a_models = getentarray( "sq_tpo_corpse_model", "targetname" );
_a370 = a_models;
_k370 = getFirstArrayKey( _a370 ); foreach ( model in a_models )
while ( isDefined( _k370 ) )
{ {
model = _a370[ _k370 ];
model _delete_unitrigger(); model _delete_unitrigger();
model delete(); model delete();
_k370 = getNextArrayKey( _a370, _k370 );
} }
} }
_delete_unitrigger() _delete_unitrigger()
{ {
if ( isDefined( self.unitrigger ) ) if ( isdefined( self.unitrigger ) )
{
self.unitrigger.registered = 0; self.unitrigger.registered = 0;
}
if ( isDefined( self.unitrigger.trigger ) ) if ( isdefined( self.unitrigger.trigger ) )
{ {
if ( isDefined( self.unitrigger.trigger.stub ) ) if ( isdefined( self.unitrigger.trigger.stub ) )
{ self.unitrigger.trigger maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
self.unitrigger.trigger maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.unitrigger.trigger.stub );
return;
}
else else
{ {
self.trigger notify( "kill_trigger" ); self.trigger notify( "kill_trigger" );
@ -339,14 +336,16 @@ start_item_hunt_with_timeout( n_timeout )
exit_stage( success ) exit_stage( success )
{ {
} }
debug_give_piece() debug_give_piece()
{ {
while ( 1 ) while ( true )
{ {
level waittill( "sq_tpo_give_item" ); level waittill( "sq_tpo_give_item" );
get_players()[ 0 ] give_player_sq_tpo_switch();
get_players()[0] give_player_sq_tpo_switch();
} }
} }
@ -361,12 +360,11 @@ setup_random_corpse_positions()
{ {
a_corpse_models = get_randomized_corpse_list(); a_corpse_models = get_randomized_corpse_list();
a_corpse_structs = array_randomize( getstructarray( "sq_tpo_corpse_spawn_location", "targetname" ) ); a_corpse_structs = array_randomize( getstructarray( "sq_tpo_corpse_spawn_location", "targetname" ) );
i = 0;
while ( i < a_corpse_models.size ) for ( i = 0; i < a_corpse_models.size; i++ )
{ {
a_corpse_structs[ i ] promote_to_corpse_model( a_corpse_models[ i ] ); a_corpse_structs[i] promote_to_corpse_model( a_corpse_models[i] );
a_corpse_structs[ i ] thread _debug_show_location(); a_corpse_structs[i] thread _debug_show_location();
i++;
} }
} }
@ -374,20 +372,20 @@ _debug_show_location()
{ {
/# /#
level endon( "sq_tpo_item_hunt_done" ); level endon( "sq_tpo_item_hunt_done" );
while ( 1 )
while ( true )
{ {
if ( getDvarInt( #"5256118F" ) > 0 ) if ( getdvarint( _hash_5256118F ) > 0 )
{ debugstar( self.origin, 20, ( 0, 1, 0 ) );
debugstar( self.origin, 20, ( 0, 0, 0 ) );
}
wait 1; wait 1;
#/
} }
#/
} }
promote_to_corpse_model( str_model ) promote_to_corpse_model( str_model )
{ {
v_spawn_point = groundtrace( self.origin + vectorScale( ( 0, 0, 0 ), 10 ), self.origin + vectorScale( ( 0, 0, 0 ), 300 ), 0, undefined )[ "position" ]; v_spawn_point = groundtrace( self.origin + vectorscale( ( 0, 0, 1 ), 10.0 ), self.origin + vectorscale( ( 0, 0, -1 ), 300.0 ), 0, undefined )["position"];
self.corpse_model = spawn( "script_model", v_spawn_point ); self.corpse_model = spawn( "script_model", v_spawn_point );
self.corpse_model.angles = self.angles; self.corpse_model.angles = self.angles;
self.corpse_model setmodel( str_model ); self.corpse_model setmodel( str_model );
@ -396,12 +394,14 @@ promote_to_corpse_model( str_model )
self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think ); self.corpse_model.unitrigger = setup_unitrigger( &"ZM_BURIED_SQ_SCH", ::unitrigger_think );
} }
#using_animtree("zm_buried_props");
_pose_corpse() _pose_corpse()
{ {
/# /#
assert( isDefined( self.script_noteworthy ), "sq_tpo_corpse_spawn_location at " + self.origin + " is missing script_noteworthy! This is required to set deadpose" ); assert( isdefined( self.script_noteworthy ), "sq_tpo_corpse_spawn_location at " + self.origin + " is missing script_noteworthy! This is required to set deadpose" );
#/ #/
switch( self.script_noteworthy ) switch ( self.script_noteworthy )
{ {
case "deadpose_1": case "deadpose_1":
anim_pose = %pb_gen_m_floor_armdown_onback_deathpose; anim_pose = %pb_gen_m_floor_armdown_onback_deathpose;
@ -448,8 +448,9 @@ _pose_corpse()
#/ #/
break; break;
} }
self.corpse_model useanimtree( -1 ); self.corpse_model useanimtree( -1 );
self.corpse_model setanim( anim_pose, 1, 0,05, 1 ); self.corpse_model setanim( anim_pose, 1, 0.05, 1 );
} }
setup_unitrigger( str_hint, func_update ) setup_unitrigger( str_hint, func_update )
@ -459,8 +460,8 @@ setup_unitrigger( str_hint, func_update )
script_width = 0; script_width = 0;
script_length = undefined; script_length = undefined;
unitrigger_stub = spawnstruct(); unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin + vectorScale( ( 0, 0, 0 ), 10 ); unitrigger_stub.origin = self.origin + vectorscale( ( 0, 0, 1 ), 10.0 );
unitrigger_stub.script_length = 13,5; unitrigger_stub.script_length = 13.5;
unitrigger_stub.script_width = script_width; unitrigger_stub.script_width = script_width;
unitrigger_stub.script_height = script_height; unitrigger_stub.script_height = script_height;
unitrigger_stub.radius = radius; unitrigger_stub.radius = radius;
@ -469,7 +470,7 @@ setup_unitrigger( str_hint, func_update )
unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use";
unitrigger_stub.require_look_at = 1; unitrigger_stub.require_look_at = 1;
unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt; unitrigger_stub.prompt_and_visibility_func = ::piecetrigger_update_prompt;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, func_update ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, func_update );
return unitrigger_stub; return unitrigger_stub;
} }
@ -489,6 +490,7 @@ piecestub_update_prompt( player )
unitrigger_killed() unitrigger_killed()
{ {
self waittill( "kill_trigger" ); self waittill( "kill_trigger" );
self _delete_progress_bar(); self _delete_progress_bar();
} }
@ -496,92 +498,91 @@ unitrigger_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
self thread unitrigger_killed(); self thread unitrigger_killed();
b_trigger_used = 0;
while ( !b_trigger_used ) for ( b_trigger_used = 0; !b_trigger_used; b_trigger_used = 1 )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
b_progress_bar_done = 0; b_progress_bar_done = 0;
n_frame_count = 0; n_frame_count = 0;
while ( player usebuttonpressed() && !b_progress_bar_done ) while ( player usebuttonpressed() && !b_progress_bar_done )
{ {
if ( !isDefined( self.progress_bar ) ) if ( !isdefined( self.progress_bar ) )
{ {
self.progress_bar = player createprimaryprogressbar(); self.progress_bar = player createprimaryprogressbar();
self.progress_bar_text = player createprimaryprogressbartext(); self.progress_bar_text = player createprimaryprogressbartext();
self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" ); self.progress_bar_text settext( &"ZM_BURIED_SQ_SEARCHING" );
self thread _kill_progress_bar(); self thread _kill_progress_bar();
} }
n_progress_amount = n_frame_count / 30;
n_progress_amount = n_frame_count / 30.0;
self.progress_bar updatebar( n_progress_amount ); self.progress_bar updatebar( n_progress_amount );
n_frame_count++; n_frame_count++;
if ( n_progress_amount == 1 ) if ( n_progress_amount == 1 )
{
b_progress_bar_done = 1; b_progress_bar_done = 1;
wait 0.05;
} }
wait 0,05;
}
self _delete_progress_bar(); self _delete_progress_bar();
if ( b_progress_bar_done ) asm_cond( b_progress_bar_done, loc_27AB );
{
b_trigger_used = 1;
}
} }
if ( b_progress_bar_done ) if ( b_progress_bar_done )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( item_is_on_corpse() ) if ( item_is_on_corpse() )
{ {
iprintlnbold( &"ZM_BURIED_SQ_FND" ); iprintlnbold( &"ZM_BURIED_SQ_FND" );
player give_player_sq_tpo_switch(); player give_player_sq_tpo_switch();
} }
else else
{
iprintlnbold( &"ZM_BURIED_SQ_NFND" ); iprintlnbold( &"ZM_BURIED_SQ_NFND" );
}
self thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub ); self thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
} }
} }
give_player_sq_tpo_switch() give_player_sq_tpo_switch()
{ {
self player_take_piece( level.zombie_buildables[ "buried_sq_tpo_switch" ].buildablepieces[ 0 ] ); self player_take_piece( level.zombie_buildables["buried_sq_tpo_switch"].buildablepieces[0] );
flag_set( "sq_tpo_found_item" ); flag_set( "sq_tpo_found_item" );
level.sq_tpo_unitrig.origin = level.sq_tpo_unitrig.realorigin; level.sq_tpo_unitrig.origin = level.sq_tpo_unitrig.realorigin;
} }
item_is_on_corpse() item_is_on_corpse()
{ {
if ( !isDefined( level.sq_tpo.times_searched ) ) if ( !isdefined( level.sq_tpo.times_searched ) )
{
level.sq_tpo.times_searched = 0; level.sq_tpo.times_searched = 0;
}
switch( level.sq_tpo.times_searched ) switch ( level.sq_tpo.times_searched )
{ {
case 0: case "0":
n_chance = 1; n_chance = 1;
break; break;
case 1: case "1":
n_chance = 15; n_chance = 15;
break; break;
case 2: case "2":
n_chance = 33; n_chance = 33;
break; break;
case 3: case "3":
n_chance = 100; n_chance = 100;
break; break;
} }
if ( randomint( 100 ) > ( 100 - n_chance ) )
{ b_found_item = randomint( 100 ) > 100 - n_chance && !flag( "sq_tpo_found_item" );
b_found_item = !flag( "sq_tpo_found_item" );
}
level.sq_tpo.times_searched++; level.sq_tpo.times_searched++;
return b_found_item; return b_found_item;
} }
_delete_progress_bar() _delete_progress_bar()
{ {
if ( isDefined( self.progress_bar ) ) if ( isdefined( self.progress_bar ) )
{ {
self.progress_bar destroyelem(); self.progress_bar destroyelem();
self.progress_bar_text destroyelem(); self.progress_bar_text destroyelem();
@ -593,13 +594,15 @@ _kill_progress_bar()
{ {
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self waittill( "search_done" ); self waittill( "search_done" );
self _delete_progress_bar(); self _delete_progress_bar();
} }
setup_buildable_switch() setup_buildable_switch()
{ {
s_switch_piece = generate_zombie_buildable_piece( "buried_sq_tpo_switch", "p6_zm_buildable_pswitch_lever_handed", 32, 64, 2,4, "zom_icon_trap_switch_handle", ::onpickup_switch, ::ondrop_switch, undefined, undefined, 0, 5, 2 ); s_switch_piece = generate_zombie_buildable_piece( "buried_sq_tpo_switch", "p6_zm_buildable_pswitch_lever_handed", 32, 64, 2.4, "zom_icon_trap_switch_handle", ::onpickup_switch, ::ondrop_switch, undefined, undefined, 0, 5, 2 );
s_switch_piece.hint_grab = level.str_buildables_grab_part; s_switch_piece.hint_grab = level.str_buildables_grab_part;
s_switch_piece.hint_swap = level.str_buildables_swap_part; s_switch_piece.hint_swap = level.str_buildables_swap_part;
s_switch_piece manage_multiple_pieces( 1 ); s_switch_piece manage_multiple_pieces( 1 );
@ -610,12 +613,12 @@ setup_buildable_switch()
s_switch.triggerthink = ::triggerthink_switch; s_switch.triggerthink = ::triggerthink_switch;
s_switch.onuseplantobject = ::onuseplantobject_switch; s_switch.onuseplantobject = ::onuseplantobject_switch;
include_buildable( s_switch ); include_buildable( s_switch );
while ( !isDefined( level.sq_tpo_unitrig ) )
{ while ( !isdefined( level.sq_tpo_unitrig ) )
wait 1; wait 1;
}
level.sq_tpo_unitrig.realorigin = level.sq_tpo_unitrig.origin; level.sq_tpo_unitrig.realorigin = level.sq_tpo_unitrig.origin;
level.sq_tpo_unitrig.origin += vectorScale( ( 0, 0, 0 ), 10000 ); level.sq_tpo_unitrig.origin += vectorscale( ( 0, 0, -1 ), 10000.0 );
} }
onuseplantobject_switch( player ) onuseplantobject_switch( player )
@ -625,24 +628,25 @@ onuseplantobject_switch( player )
onpickup_switch( player ) onpickup_switch( player )
{ {
maps/mp/zm_buried_buildables::onpickup_common( player ); maps\mp\zm_buried_buildables::onpickup_common( player );
} }
ondrop_switch( player ) ondrop_switch( player )
{ {
maps/mp/zm_buried_buildables::ondrop_common( player ); maps\mp\zm_buried_buildables::ondrop_common( player );
} }
onspawn_switch( player ) onspawn_switch( player )
{ {
} }
triggerthink_switch() triggerthink_switch()
{ {
if ( isDefined( getent( "guillotine_trigger", "targetname" ) ) ) if ( isdefined( getent( "guillotine_trigger", "targetname" ) ) )
{ {
str_trigger_generator_name = "guillotine_trigger"; str_trigger_generator_name = "guillotine_trigger";
level.sq_tpo_unitrig = maps/mp/zombies/_zm_buildables::buildable_trigger_think( str_trigger_generator_name, "buried_sq_tpo_switch", "none", "", 1, 0 ); level.sq_tpo_unitrig = maps\mp\zombies\_zm_buildables::buildable_trigger_think( str_trigger_generator_name, "buried_sq_tpo_switch", "none", "", 1, 0 );
level.sq_tpo_unitrig.ignore_open_sesame = 1; level.sq_tpo_unitrig.ignore_open_sesame = 1;
level.sq_tpo_unitrig.buildablestub_reject_func = ::guillotine_trigger_reject_func; level.sq_tpo_unitrig.buildablestub_reject_func = ::guillotine_trigger_reject_func;
} }
@ -651,25 +655,24 @@ triggerthink_switch()
guillotine_trigger_reject_func( player ) guillotine_trigger_reject_func( player )
{ {
b_should_reject = 0; b_should_reject = 0;
if ( flag( "sq_tpo_special_round_active" ) ) if ( flag( "sq_tpo_special_round_active" ) )
{
b_should_reject = 1; b_should_reject = 1;
}
return b_should_reject; return b_should_reject;
} }
time_bomb_saves_wisp_state() time_bomb_saves_wisp_state()
{ {
if ( !isDefined( self.sq_data ) ) if ( !isdefined( self.sq_data ) )
{
self.sq_data = spawnstruct(); self.sq_data = spawnstruct();
}
self.sq_data.wisp_stage_complete = flag( "sq_wisp_success" ); self.sq_data.wisp_stage_complete = flag( "sq_wisp_success" );
} }
time_bomb_restores_wisp_state() time_bomb_restores_wisp_state()
{ {
if ( isDefined( self.sq_data ) && isDefined( self.sq_data.wisp_stage_complete ) && !self.sq_data.wisp_stage_complete && flag( "sq_tpo_stage_started" ) ) if ( isdefined( self.sq_data ) && isdefined( self.sq_data.wisp_stage_complete ) && !self.sq_data.wisp_stage_complete && flag( "sq_tpo_stage_started" ) )
{ {
flag_clear( "sq_wisp_success" ); flag_clear( "sq_wisp_success" );
flag_clear( "sq_wisp_failed" ); flag_clear( "sq_wisp_failed" );
@ -680,14 +683,15 @@ time_bomb_restores_wisp_state()
sndsidequestnoirmusic() sndsidequestnoirmusic()
{ {
if ( is_true( level.music_override ) ) if ( is_true( level.music_override ) )
{
return; return;
}
level.music_override = 1; level.music_override = 1;
level setclientfield( "mus_noir_snapshot_loop", 1 ); level setclientfield( "mus_noir_snapshot_loop", 1 );
ent = spawn( "script_origin", ( 0, 0, 0 ) ); ent = spawn( "script_origin", ( 0, 0, 0 ) );
ent playloopsound( "mus_sidequest_noir" ); ent playloopsound( "mus_sidequest_noir" );
level waittill( "sndEndNoirMusic" ); level waittill( "sndEndNoirMusic" );
level setclientfield( "mus_noir_snapshot_loop", 0 ); level setclientfield( "mus_noir_snapshot_loop", 0 );
level.music_override = 0; level.music_override = 0;
ent stoploopsound( 2 ); ent stoploopsound( 2 );

View File

@ -1,7 +1,9 @@
#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 common_scripts\utility;
#include common_scripts/utility; #include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
init() init()
{ {
@ -12,15 +14,13 @@ init()
init_stage() init_stage()
{ {
a_signs = getentarray( "sq_tunnel_sign", "targetname" ); a_signs = getentarray( "sq_tunnel_sign", "targetname" );
_a18 = a_signs;
_k18 = getFirstArrayKey( _a18 ); foreach ( m_sign in a_signs )
while ( isDefined( _k18 ) )
{ {
m_sign = _a18[ _k18 ];
m_sign setcandamage( 1 ); m_sign setcandamage( 1 );
m_sign thread ts_sign_damage_watch(); m_sign thread ts_sign_damage_watch();
_k18 = getNextArrayKey( _a18, _k18 );
} }
level._cur_stage_name = "ts"; level._cur_stage_name = "ts";
clientnotify( "ts" ); clientnotify( "ts" );
} }
@ -31,37 +31,39 @@ stage_logic()
iprintlnbold( "TS Started" ); iprintlnbold( "TS Started" );
#/ #/
level waittill( "sq_sign_damaged" ); level waittill( "sq_sign_damaged" );
wait_network_frame(); wait_network_frame();
stage_completed( "sq", level._cur_stage_name ); stage_completed( "sq", level._cur_stage_name );
} }
exit_stage( success ) exit_stage( success )
{ {
} }
ts_sign_damage_watch() ts_sign_damage_watch()
{ {
level endon( "sq_sign_damaged" ); level endon( "sq_sign_damaged" );
self ts_sign_deactivate(); self ts_sign_deactivate();
while ( 1 )
while ( true )
{ {
self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon ); self waittill( "damage", n_damage, e_attacker, v_direction, v_point, str_type, str_tag, str_model, str_part, str_weapon );
if ( flag( "sq_ts_quicktest" ) ) if ( flag( "sq_ts_quicktest" ) )
{ {
level.m_sq_start_sign = self; level.m_sq_start_sign = self;
level.e_sq_sign_attacker = e_attacker; level.e_sq_sign_attacker = e_attacker;
level notify( "sq_sign_damaged" ); level notify( "sq_sign_damaged" );
} }
if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) ) if ( ts_is_bowie_knife( str_weapon ) || ts_is_galvaknuckles( str_weapon ) )
{ {
if ( self.ts_sign_activated ) if ( self.ts_sign_activated )
{
self thread ts_sign_deactivate(); self thread ts_sign_deactivate();
}
else else
{
self thread ts_sign_activate(); self thread ts_sign_activate();
}
ts_sign_check_all_activated( e_attacker, self ); ts_sign_check_all_activated( e_attacker, self );
} }
} }
@ -70,19 +72,21 @@ ts_sign_damage_watch()
ts_sign_activate() ts_sign_activate()
{ {
self.ts_sign_activated = 1; self.ts_sign_activated = 1;
while ( !isDefined( self.fx_ent ) )
if ( !isdefined( self.fx_ent ) )
{ {
v_forward = anglesToForward( self.angles ); v_forward = anglestoforward( self.angles );
v_offset = vectornormalize( v_forward ) * 2; v_offset = vectornormalize( v_forward ) * 2;
self.fx_ent = spawn( "script_model", ( self.origin - vectorScale( ( 0, 0, 1 ), 20 ) ) + v_offset ); self.fx_ent = spawn( "script_model", self.origin - vectorscale( ( 0, 0, 1 ), 20.0 ) + v_offset );
self.fx_ent.angles = anglesToForward( self.angles ); self.fx_ent.angles = anglestoforward( self.angles );
self.fx_ent setmodel( "tag_origin" ); self.fx_ent setmodel( "tag_origin" );
self.fx_ent playsound( "zmb_sq_wisp_spawn" ); self.fx_ent playsound( "zmb_sq_wisp_spawn" );
self.fx_ent playloopsound( "zmb_sq_wisp_wall_loop" ); self.fx_ent playloopsound( "zmb_sq_wisp_wall_loop" );
while ( isDefined( self.fx_ent ) )
while ( isdefined( self.fx_ent ) )
{ {
playfxontag( level._effect[ "sq_ether_amp_trail" ], self.fx_ent, "tag_origin" ); playfxontag( level._effect["sq_ether_amp_trail"], self.fx_ent, "tag_origin" );
wait 0,3; wait 0.3;
} }
} }
} }
@ -90,7 +94,8 @@ ts_sign_activate()
ts_sign_deactivate() ts_sign_deactivate()
{ {
self.ts_sign_activated = 0; self.ts_sign_activated = 0;
if ( isDefined( self.fx_ent ) )
if ( isdefined( self.fx_ent ) )
{ {
self.fx_ent stoploopsound( 2 ); self.fx_ent stoploopsound( 2 );
self.fx_ent delete(); self.fx_ent delete();
@ -103,25 +108,21 @@ ts_sign_check_all_activated( e_attacker, m_last_touched )
a_signs_active = []; a_signs_active = [];
is_max_complete = 1; is_max_complete = 1;
is_ric_complete = 1; is_ric_complete = 1;
_a125 = a_signs;
_k125 = getFirstArrayKey( _a125 ); foreach ( m_sign in a_signs )
while ( isDefined( _k125 ) )
{ {
m_sign = _a125[ _k125 ];
if ( m_sign.ts_sign_activated ) if ( m_sign.ts_sign_activated )
{ {
a_signs_active[ a_signs_active.size ] = m_sign; a_signs_active[a_signs_active.size] = m_sign;
if ( !is_true( m_sign.is_max_sign ) ) if ( !is_true( m_sign.is_max_sign ) )
{
is_max_complete = 0; is_max_complete = 0;
}
if ( !is_true( m_sign.is_ric_sign ) ) if ( !is_true( m_sign.is_ric_sign ) )
{
is_ric_complete = 0; is_ric_complete = 0;
} }
} }
_k125 = getNextArrayKey( _a125, _k125 );
}
if ( a_signs_active.size == 3 ) if ( a_signs_active.size == 3 )
{ {
if ( is_max_complete || is_ric_complete ) if ( is_max_complete || is_ric_complete )
@ -135,18 +136,16 @@ ts_sign_check_all_activated( e_attacker, m_last_touched )
ts_is_bowie_knife( str_weapon ) ts_is_bowie_knife( str_weapon )
{ {
if ( str_weapon != "knife_ballistic_bowie_zm" || str_weapon == "knife_ballistic_bowie_upgraded_zm" && str_weapon == "bowie_knife_zm" ) if ( str_weapon == "knife_ballistic_bowie_zm" || str_weapon == "knife_ballistic_bowie_upgraded_zm" || str_weapon == "bowie_knife_zm" )
{ return true;
return 1;
} return false;
return 0;
} }
ts_is_galvaknuckles( str_weapon ) ts_is_galvaknuckles( str_weapon )
{ {
if ( str_weapon == "tazer_knuckles_zm" ) if ( str_weapon == "tazer_knuckles_zm" )
{ return true;
return 1;
} return false;
return 0;
} }

View File

@ -1,18 +1,21 @@
#include maps/mp/zombies/_zm_magicbox; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/gametypes_zm/_zm_gametype; #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\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zombies\_zm_magicbox;
precache() precache()
{ {
} }
main() main()
{ {
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "processing" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "processing" );
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" );
zm_treasure_chest_init(); zm_treasure_chest_init();
} }
@ -21,6 +24,6 @@ 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" );
} }

View File

@ -1,28 +1,29 @@
//checked includes changed to match cerberus output // T6 GSC SOURCE
#include maps/mp/gametypes_zm/zcleansed; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/gametypes_zm/_zm_gametype; #include maps\mp\_utility;
#include maps/mp/_visionset_mgr; #include common_scripts\utility;
#include character/c_zom_zombie_buried_saloongirl_mp; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zm_buried_gamemodes; #include maps\mp\zm_buried_gamemodes;
#include maps/mp/zombies/_zm_utility; #include character\c_zom_zombie_buried_saloongirl_mp;
#include common_scripts/utility; #include maps\mp\_visionset_mgr;
#include maps/mp/_utility; #include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\gametypes_zm\zcleansed;
precache() //checked matches cerberus output precache()
{ {
precachemodel( "zm_collision_buried_street_turned" ); precachemodel( "zm_collision_buried_street_turned" );
precachemodel( "p6_zm_bu_buildable_bench_tarp" ); precachemodel( "p6_zm_bu_buildable_bench_tarp" );
character/c_zom_zombie_buried_saloongirl_mp::precache(); character\c_zom_zombie_buried_saloongirl_mp::precache();
precachemodel( "c_zom_buried_zombie_sgirl_viewhands" ); precachemodel( "c_zom_buried_zombie_sgirl_viewhands" );
maps/mp/_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, 21, 15, 1, maps/mp/_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 1, 21, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 );
} }
main() //checked matches cerberus output main()
{ {
flag_init( "sloth_blocker_towneast" ); flag_init( "sloth_blocker_towneast" );
level.custom_zombie_player_loadout = ::custom_zombie_player_loadout; level.custom_zombie_player_loadout = ::custom_zombie_player_loadout;
getspawnpoints(); getspawnpoints();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "street" ); maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "street" );
generatebuildabletarps(); generatebuildabletarps();
deletechalktriggers(); deletechalktriggers();
deleteslothbarricade( "candystore_alley" ); deleteslothbarricade( "candystore_alley" );
@ -30,16 +31,18 @@ main() //checked matches cerberus output
deletebuyabledebris( 1 ); deletebuyabledebris( 1 );
powerswitchstate( 1 ); powerswitchstate( 1 );
level.cleansed_loadout = getgametypesetting( "cleansedLoadout" ); level.cleansed_loadout = getgametypesetting( "cleansedLoadout" );
if ( level.cleansed_loadout ) if ( level.cleansed_loadout )
{ {
level.humanify_custom_loadout = maps/mp/gametypes_zm/zcleansed::gunprogressionthink; level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::gunprogressionthink;
level.cleansed_zombie_round = 5; level.cleansed_zombie_round = 5;
} }
else else
{ {
level.humanify_custom_loadout = maps/mp/gametypes_zm/zcleansed::shotgunloadout; level.humanify_custom_loadout = maps\mp\gametypes_zm\zcleansed::shotgunloadout;
level.cleansed_zombie_round = 2; level.cleansed_zombie_round = 2;
} }
spawnmapcollision( "zm_collision_buried_street_turned" ); spawnmapcollision( "zm_collision_buried_street_turned" );
flag_wait( "initial_blackscreen_passed" ); flag_wait( "initial_blackscreen_passed" );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
@ -47,13 +50,13 @@ main() //checked matches cerberus output
clientnotify( "pwr" ); clientnotify( "pwr" );
} }
custom_zombie_player_loadout() //checked matches cerberus output custom_zombie_player_loadout()
{ {
self character/c_zom_zombie_buried_saloongirl_mp::main(); self character\c_zom_zombie_buried_saloongirl_mp::main();
self setviewmodel( "c_zom_buried_zombie_sgirl_viewhands" ); self setviewmodel( "c_zom_buried_zombie_sgirl_viewhands" );
} }
getspawnpoints() //checked matches cerberus output getspawnpoints()
{ {
level._turned_zombie_spawners = getentarray( "game_mode_spawners", "targetname" ); level._turned_zombie_spawners = getentarray( "game_mode_spawners", "targetname" );
level._turned_zombie_spawnpoints = getstructarray( "street_turned_zombie_spawn", "targetname" ); level._turned_zombie_spawnpoints = getstructarray( "street_turned_zombie_spawn", "targetname" );
@ -61,6 +64,7 @@ getspawnpoints() //checked matches cerberus output
level._turned_powerup_spawnpoints = getstructarray( "street_turned_powerups", "targetname" ); level._turned_powerup_spawnpoints = getstructarray( "street_turned_powerups", "targetname" );
} }
onendgame() //checked matches cerberus output onendgame()
{ {
} }

View File

@ -1,9 +1,11 @@
#include maps/mp/zombies/_zm_ai_ghost; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_zonemgr; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zm_buried; #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\zm_buried;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_ai_ghost;
ghost_init_start() ghost_init_start()
{ {
@ -20,10 +22,12 @@ ghost_init_end()
prespawn_start() prespawn_start()
{ {
} }
prespawn_end() prespawn_end()
{ {
} }
ghost_round_start() ghost_round_start()
@ -39,78 +43,73 @@ ghost_round_end()
is_player_in_ghost_zone( player ) is_player_in_ghost_zone( player )
{ {
result = 0; result = 0;
if ( !isDefined( level.ghost_zone_overrides ) )
{ if ( !isdefined( level.ghost_zone_overrides ) )
level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" ); level.ghost_zone_overrides = getentarray( "ghost_round_override", "script_noteworthy" );
}
is_player_in_override_trigger = 0; is_player_in_override_trigger = 0;
while ( isDefined( level.zombie_ghost_round_states ) && !is_true( level.zombie_ghost_round_states.is_started ) )
if ( isdefined( level.zombie_ghost_round_states ) && !is_true( level.zombie_ghost_round_states.is_started ) )
{ {
_a86 = level.ghost_zone_overrides; foreach ( trigger in level.ghost_zone_overrides )
_k86 = getFirstArrayKey( _a86 );
while ( isDefined( _k86 ) )
{ {
trigger = _a86[ _k86 ];
if ( player istouching( trigger ) ) if ( player istouching( trigger ) )
{ {
is_player_in_override_trigger = 1; is_player_in_override_trigger = 1;
break; break;
} }
else
{
_k86 = getNextArrayKey( _a86, _k86 );
}
} }
} }
curr_zone = player get_current_zone(); curr_zone = player get_current_zone();
if ( !is_player_in_override_trigger && isDefined( curr_zone ) && curr_zone == "zone_mansion" )
{ if ( !is_player_in_override_trigger && isdefined( curr_zone ) && curr_zone == "zone_mansion" )
result = 1; result = 1;
}
return result; return result;
} }
ghost_bad_path_init() ghost_bad_path_init()
{ {
level.bad_zones = []; level.bad_zones = [];
level.bad_zones[ 0 ] = spawnstruct(); level.bad_zones[0] = spawnstruct();
level.bad_zones[ 0 ].name = "zone_underground_courthouse"; level.bad_zones[0].name = "zone_underground_courthouse";
level.bad_zones[ 0 ].adjacent = []; level.bad_zones[0].adjacent = [];
level.bad_zones[ 0 ].adjacent[ 0 ] = "zone_underground_courthouse2"; level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
level.bad_zones[ 0 ].adjacent[ 1 ] = "zone_tunnels_north2"; level.bad_zones[0].adjacent[1] = "zone_tunnels_north2";
level.bad_zones[ 0 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open; level.bad_zones[0].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[ 1 ] = spawnstruct(); level.bad_zones[1] = spawnstruct();
level.bad_zones[ 1 ].name = "zone_underground_courthouse2"; level.bad_zones[1].name = "zone_underground_courthouse2";
level.bad_zones[ 1 ].adjacent = []; level.bad_zones[1].adjacent = [];
level.bad_zones[ 1 ].adjacent[ 0 ] = "zone_underground_courthouse"; level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
level.bad_zones[ 1 ].adjacent[ 1 ] = "zone_tunnels_north2"; level.bad_zones[1].adjacent[1] = "zone_tunnels_north2";
level.bad_zones[ 1 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open; level.bad_zones[1].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[ 2 ] = spawnstruct(); level.bad_zones[2] = spawnstruct();
level.bad_zones[ 2 ].name = "zone_tunnels_north2"; level.bad_zones[2].name = "zone_tunnels_north2";
level.bad_zones[ 2 ].adjacent = []; level.bad_zones[2].adjacent = [];
level.bad_zones[ 2 ].adjacent[ 0 ] = "zone_underground_courthouse2"; level.bad_zones[2].adjacent[0] = "zone_underground_courthouse2";
level.bad_zones[ 2 ].adjacent[ 1 ] = "zone_underground_courthouse"; level.bad_zones[2].adjacent[1] = "zone_underground_courthouse";
level.bad_zones[ 2 ].flag = "tunnels2courthouse"; level.bad_zones[2].flag = "tunnels2courthouse";
level.bad_zones[ 2 ].flag_adjacent = "zone_tunnels_north"; level.bad_zones[2].flag_adjacent = "zone_tunnels_north";
level.bad_zones[ 2 ].ignore_func = ::maps/mp/zm_buried::is_courthouse_open; level.bad_zones[2].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[ 3 ] = spawnstruct(); level.bad_zones[3] = spawnstruct();
level.bad_zones[ 3 ].name = "zone_tunnels_north"; level.bad_zones[3].name = "zone_tunnels_north";
level.bad_zones[ 3 ].adjacent = []; level.bad_zones[3].adjacent = [];
level.bad_zones[ 3 ].adjacent[ 0 ] = "zone_tunnels_center"; level.bad_zones[3].adjacent[0] = "zone_tunnels_center";
level.bad_zones[ 3 ].flag = "tunnels2courthouse"; level.bad_zones[3].flag = "tunnels2courthouse";
level.bad_zones[ 3 ].flag_adjacent = "zone_tunnels_north2"; level.bad_zones[3].flag_adjacent = "zone_tunnels_north2";
level.bad_zones[ 3 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open; level.bad_zones[3].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[ 4 ] = spawnstruct(); level.bad_zones[4] = spawnstruct();
level.bad_zones[ 4 ].name = "zone_tunnels_center"; level.bad_zones[4].name = "zone_tunnels_center";
level.bad_zones[ 4 ].adjacent = []; level.bad_zones[4].adjacent = [];
level.bad_zones[ 4 ].adjacent[ 0 ] = "zone_tunnels_north"; level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
level.bad_zones[ 4 ].adjacent[ 1 ] = "zone_tunnels_south"; level.bad_zones[4].adjacent[1] = "zone_tunnels_south";
level.bad_zones[ 4 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open; level.bad_zones[4].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[ 5 ] = spawnstruct(); level.bad_zones[5] = spawnstruct();
level.bad_zones[ 5 ].name = "zone_tunnels_south"; level.bad_zones[5].name = "zone_tunnels_south";
level.bad_zones[ 5 ].adjacent = []; level.bad_zones[5].adjacent = [];
level.bad_zones[ 5 ].adjacent[ 0 ] = "zone_tunnels_center"; level.bad_zones[5].adjacent[0] = "zone_tunnels_center";
level.bad_zones[ 5 ].ignore_func = ::maps/mp/zm_buried::is_tunnel_open; level.bad_zones[5].ignore_func = maps\mp\zm_buried::is_tunnel_open;
} }
ghost_bad_path_failsafe() ghost_bad_path_failsafe()
@ -119,215 +118,185 @@ ghost_bad_path_failsafe()
self notify( "stop_bad_path_failsafe" ); self notify( "stop_bad_path_failsafe" );
self endon( "stop_bad_path_failsafe" ); self endon( "stop_bad_path_failsafe" );
self thread non_ghost_round_failsafe(); self thread non_ghost_round_failsafe();
while ( 1 )
while ( true )
{ {
player = self.favoriteenemy; player = self.favoriteenemy;
if ( isDefined( player ) )
if ( isdefined( player ) )
{ {
in_bad_zone = 0; in_bad_zone = 0;
_a174 = level.bad_zones;
_k174 = getFirstArrayKey( _a174 ); foreach ( zone in level.bad_zones )
while ( isDefined( _k174 ) )
{ {
zone = _a174[ _k174 ]; if ( isdefined( zone.ignore_func ) )
if ( isDefined( zone.ignore_func ) )
{ {
if ( level [[ zone.ignore_func ]]() ) if ( level [[ zone.ignore_func ]]() )
{
break; break;
} }
}
else if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.name ) ) if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.name ) )
{
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.name ) )
{ {
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.name ) )
break; break;
}
else ghost_is_adjacent = 0; ghost_is_adjacent = 0;
_a192 = zone.adjacent;
_k192 = getFirstArrayKey( _a192 ); foreach ( adjacent in zone.adjacent )
while ( isDefined( _k192 ) )
{ {
adjacent = _a192[ _k192 ]; if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( adjacent ) )
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( adjacent ) )
{ {
ghost_is_adjacent = 1; ghost_is_adjacent = 1;
break; break;
} }
else
{
_k192 = getNextArrayKey( _a192, _k192 );
} }
}
if ( isDefined( zone.flag ) && flag( zone.flag ) ) if ( isdefined( zone.flag ) && flag( zone.flag ) )
{
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
{ {
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( zone.flag_adjacent ) )
ghost_is_adjacent = 1; ghost_is_adjacent = 1;
} }
}
if ( !ghost_is_adjacent ) if ( !ghost_is_adjacent )
{ {
in_bad_zone = 1; in_bad_zone = 1;
break; break;
} }
} }
else
{
_k174 = getNextArrayKey( _a174, _k174 );
}
} }
if ( in_bad_zone ) if ( in_bad_zone )
{ {
nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" ); nodes = getnodesinradiussorted( player.origin, 540, 180, 60, "Path" );
if ( nodes.size > 0 ) if ( nodes.size > 0 )
{ node = nodes[randomint( nodes.size )];
node = nodes[ randomint( nodes.size ) ];
}
else else
{
node = getnearestnode( player.origin ); node = getnearestnode( player.origin );
}
if ( isDefined( node ) ) if ( isdefined( node ) )
{ {
while ( 1 ) while ( true )
{ {
if ( !is_true( self.is_traversing ) ) if ( !is_true( self.is_traversing ) )
{
break; break;
wait 0.1;
} }
else
{
wait 0,1;
}
}
self forceteleport( node.origin, ( 0, 0, 0 ) ); self forceteleport( node.origin, ( 0, 0, 0 ) );
} }
} }
} }
wait 0,25;
wait 0.25;
} }
} }
non_ghost_round_failsafe() non_ghost_round_failsafe()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
self waittill( "bad_path" ); self waittill( "bad_path" );
if ( self.state == "runaway_update" ) if ( self.state == "runaway_update" )
{ {
if ( !maps/mp/zombies/_zm_ai_ghost::is_ghost_round_started() && is_true( self.is_spawned_in_ghost_zone ) ) if ( !maps\mp\zombies\_zm_ai_ghost::is_ghost_round_started() && is_true( self.is_spawned_in_ghost_zone ) )
{ {
self maps/mp/zombies/_zm_ai_ghost::start_evaporate( 1 ); self maps\mp\zombies\_zm_ai_ghost::start_evaporate( 1 );
return; return;
} }
} }
wait 0,25;
wait 0.25;
} }
} }
disable_traversal_clip_around_mansion() disable_traversal_clip_around_mansion()
{ {
while ( isDefined( level.ghost_zone_door_clips ) && level.ghost_zone_door_clips.size > 0 ) if ( isdefined( level.ghost_zone_door_clips ) && level.ghost_zone_door_clips.size > 0 )
{ {
_a276 = level.ghost_zone_door_clips; foreach ( door_clip in level.ghost_zone_door_clips )
_k276 = getFirstArrayKey( _a276 );
while ( isDefined( _k276 ) )
{
door_clip = _a276[ _k276 ];
door_clip notsolid(); door_clip notsolid();
_k276 = getNextArrayKey( _a276, _k276 );
}
} }
} }
ghost_bad_spawn_zone_init() ghost_bad_spawn_zone_init()
{ {
level.ghost_bad_spawn_zones = []; level.ghost_bad_spawn_zones = [];
level.ghost_bad_spawn_zones[ 0 ] = "zone_mansion_backyard"; level.ghost_bad_spawn_zones[0] = "zone_mansion_backyard";
level.ghost_bad_spawn_zones[ 1 ] = "zone_maze"; level.ghost_bad_spawn_zones[1] = "zone_maze";
level.ghost_bad_spawn_zones[ 2 ] = "zone_maze_staircase"; level.ghost_bad_spawn_zones[2] = "zone_maze_staircase";
} }
can_use_mansion_back_flying_out_node( zone_name ) can_use_mansion_back_flying_out_node( zone_name )
{ {
if ( zone_name == "zone_mansion_backyard" ) if ( zone_name == "zone_mansion_backyard" )
{ return true;
return 1;
}
if ( zone_name == "zone_maze" ) if ( zone_name == "zone_maze" )
{ return true;
return 1;
}
if ( zone_name == "zone_maze_staircase" ) if ( zone_name == "zone_maze_staircase" )
{ return true;
return 1;
} return false;
return 0;
} }
ghost_teleport_to_playable_area() ghost_teleport_to_playable_area()
{ {
level endon( "intermission" ); level endon( "intermission" );
if ( level.intermission ) if ( level.intermission )
{
return; return;
}
level endon( "ghost_round_end" ); level endon( "ghost_round_end" );
monitor_time = 0; monitor_time = 0;
while ( 1 )
while ( true )
{ {
ghosts = get_current_ghosts(); ghosts = get_current_ghosts();
_a332 = ghosts;
_k332 = getFirstArrayKey( _a332 ); foreach ( ghost in ghosts )
while ( isDefined( _k332 ) )
{ {
ghost = _a332[ _k332 ]; if ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
while ( !is_true( self.is_spawned_in_ghost_zone ) && !is_true( self.is_teleported_in_bad_zone ) )
{ {
_a336 = level.ghost_bad_spawn_zones; foreach ( bad_spawn_zone_name in level.ghost_bad_spawn_zones )
_k336 = getFirstArrayKey( _a336 );
while ( isDefined( _k336 ) )
{ {
bad_spawn_zone_name = _a336[ _k336 ]; if ( ghost maps\mp\zombies\_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
if ( ghost maps/mp/zombies/_zm_zonemgr::entity_in_zone( bad_spawn_zone_name ) )
{ {
if ( is_player_valid( ghost.favoriteenemy ) ) if ( is_player_valid( ghost.favoriteenemy ) )
{ {
destination_node = ghost maps/mp/zombies/_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy ); destination_node = ghost maps\mp\zombies\_zm_ai_ghost::get_best_flying_target_node( ghost.favoriteenemy );
if ( isDefined( destination_node ) )
if ( isdefined( destination_node ) )
{ {
ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) ); ghost forceteleport( destination_node.origin, ( 0, 0, 0 ) );
self.is_teleported_in_bad_zone = 1; self.is_teleported_in_bad_zone = 1;
} }
} }
if ( !is_true( self.is_teleported_in_bad_zone ) ) if ( !is_true( self.is_teleported_in_bad_zone ) )
{ {
if ( can_use_mansion_back_flying_out_node( bad_spawn_zone_name ) ) if ( can_use_mansion_back_flying_out_node( bad_spawn_zone_name ) )
{ ghost forceteleport( level.ghost_back_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
ghost forceteleport( level.ghost_back_flying_out_path_starts[ 0 ].origin, ( 0, 0, 0 ) );
}
else else
{ ghost forceteleport( level.ghost_front_flying_out_path_starts[0].origin, ( 0, 0, 0 ) );
ghost forceteleport( level.ghost_front_flying_out_path_starts[ 0 ].origin, ( 0, 0, 0 ) );
}
self.is_teleported_in_bad_zone = 1; self.is_teleported_in_bad_zone = 1;
} }
} }
_k336 = getNextArrayKey( _a336, _k336 );
} }
} }
_k332 = getNextArrayKey( _a332, _k332 );
} }
monitor_time += 0,1;
monitor_time += 0.1;
if ( monitor_time > level.ghost_round_start_monitor_time ) if ( monitor_time > level.ghost_round_start_monitor_time )
{ break;
return;
} wait 0.1;
else
{
wait 0,1;
}
} }
} }

View File

@ -1,41 +1,45 @@
#include maps/mp/animscripts/zm_shared; // T6 GSC SOURCE
#include maps/mp/animscripts/zm_run; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_ai_sloth; #include common_scripts\utility;
#include maps/mp/zombies/_zm_ai_sloth_utility; #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_ai_sloth_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_ai_sloth;
#include maps\mp\animscripts\zm_run;
#include maps\mp\animscripts\zm_shared;
crawler_condition() crawler_condition()
{ {
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
i = 0;
while ( i < zombies.size ) for ( i = 0; i < zombies.size; i++ )
{ {
zombie = zombies[ i ]; zombie = zombies[i];
if ( !is_true( zombie.has_legs ) ) if ( !is_true( zombie.has_legs ) )
{ {
dist = distancesquared( self.origin, zombie.origin ); dist = distancesquared( self.origin, zombie.origin );
if ( dist < 32400 ) if ( dist < 32400 )
{ {
self.crawler = zombie; self.crawler = zombie;
if ( isDefined( level.sloth.custom_crawler_pickup_func ) )
{ if ( isdefined( level.sloth.custom_crawler_pickup_func ) )
self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]](); self.crawler thread [[ level.sloth.custom_crawler_pickup_func ]]();
}
return 1; return true;
} }
} }
i++;
} }
return 0;
return false;
} }
crawler_action() crawler_action()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_action" ); self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action(); self maps\mp\zombies\_zm_ai_sloth::common_context_action();
self thread watch_sloth_on_exit_side(); self thread watch_sloth_on_exit_side();
self thread watch_sloth_on_same_side(); self thread watch_sloth_on_same_side();
self thread crawler_watch_death(); self thread crawler_watch_death();
@ -43,44 +47,46 @@ crawler_action()
anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 ); anim_id = self getanimfromasd( "zm_sloth_pickup_crawler", 0 );
sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id ); sloth_goal = getstartorigin( self.crawler.origin, self.crawler.angles, anim_id );
sloth_offset = distance( sloth_goal, self.crawler.origin ); sloth_offset = distance( sloth_goal, self.crawler.origin );
while ( 1 )
while ( true )
{ {
while ( self sloth_is_traversing() ) if ( self sloth_is_traversing() )
{ {
wait 0,1; wait 0.1;
continue;
} }
vec_forward = vectornormalize( anglesToForward( self.crawler.angles ) );
start_pos = self.crawler.origin - ( vec_forward * sloth_offset ); vec_forward = vectornormalize( anglestoforward( self.crawler.angles ) );
raised_start_pos = ( start_pos[ 0 ], start_pos[ 1 ], start_pos[ 2 ] + sloth_offset ); start_pos = self.crawler.origin - vec_forward * sloth_offset;
raised_start_pos = ( start_pos[0], start_pos[1], start_pos[2] + sloth_offset );
ground_pos = groundpos( raised_start_pos ); ground_pos = groundpos( raised_start_pos );
height_check = abs( self.crawler.origin[ 2 ] - ground_pos[ 2 ] ); height_check = abs( self.crawler.origin[2] - ground_pos[2] );
if ( height_check > 8 ) if ( height_check > 8 )
{
self setanimstatefromasd( "zm_player_idle" ); self setanimstatefromasd( "zm_player_idle" );
}
else else
{ {
self maps/mp/animscripts/zm_run::needsupdate(); self maps\mp\animscripts\zm_run::needsupdate();
self setgoalpos( start_pos ); self setgoalpos( start_pos );
} }
if ( !isDefined( self.crawler ) || self.crawler.health <= 0 )
if ( !isdefined( self.crawler ) || self.crawler.health <= 0 )
{ {
self.context_done = 1; self.context_done = 1;
return; return;
} }
dist = distancesquared( self.origin, start_pos ); dist = distancesquared( self.origin, start_pos );
z_dist = abs( self.origin[ 2 ] - start_pos[ 2 ] ); z_dist = abs( self.origin[2] - start_pos[2] );
if ( dist < 1024 && z_dist < 12 ) if ( dist < 1024 && z_dist < 12 )
{
break; break;
wait 0.1;
} }
else
{ self orientmode( "face angle", self.crawler.angles[1] );
wait 0,1; wait 0.25;
}
}
self orientmode( "face angle", self.crawler.angles[ 1 ] );
wait 0,25;
self.crawler.is_inert = 1; self.crawler.is_inert = 1;
self.crawler.ignoreall = 1; self.crawler.ignoreall = 1;
self.crawler notify( "stop_find_flesh" ); self.crawler notify( "stop_find_flesh" );
@ -91,7 +97,7 @@ crawler_action()
crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" ); crawler_pickup = self append_hunched( "zm_crawler_pickup_by_sloth" );
self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup ); self animscripted( self.anchor.origin, self.anchor.angles, sloth_pickup );
self.crawler animscripted( self.anchor.origin, self.anchor.angles, crawler_pickup ); self.crawler animscripted( self.anchor.origin, self.anchor.angles, crawler_pickup );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_pickup_crawler_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "sloth_pickup_crawler_anim" );
self.carrying_crawler = 1; self.carrying_crawler = 1;
self.crawler.guts_explosion = 1; self.crawler.guts_explosion = 1;
self.pre_traverse = ::crawler_pre_traverse; self.pre_traverse = ::crawler_pre_traverse;
@ -102,24 +108,25 @@ crawler_action()
self set_zombie_run_cycle( "walk_crawlerhold" ); self set_zombie_run_cycle( "walk_crawlerhold" );
self.locomotion = "walk_crawlerhold"; self.locomotion = "walk_crawlerhold";
self.setanimstatefromspeed = ::slothanimstatefromspeed; self.setanimstatefromspeed = ::slothanimstatefromspeed;
self.crawler_end = getTime() + 5000; self.crawler_end = gettime() + 5000;
self.crawler.actor_damage_func = ::crawler_damage_func; self.crawler.actor_damage_func = ::crawler_damage_func;
self.sloth_damage_func = ::crawler_damage_func; self.sloth_damage_func = ::crawler_damage_func;
roam = array_randomize( level.roam_points ); roam = array_randomize( level.roam_points );
roam_index = 0; roam_index = 0;
while ( 1 )
while ( true )
{ {
if ( is_true( self.release_crawler ) ) if ( is_true( self.release_crawler ) )
{
break; break;
}
else if ( self sloth_is_traversing() )
{ {
while ( self sloth_is_traversing() ) wait 0.1;
{ continue;
wait 0,1;
} }
dist = distancesquared( self.origin, self.candy_player.origin ); dist = distancesquared( self.origin, self.candy_player.origin );
if ( dist < 25600 || is_true( self.candy_player.is_in_ghost_zone ) && is_true( self.on_exit_side ) ) if ( dist < 25600 || is_true( self.candy_player.is_in_ghost_zone ) && is_true( self.on_exit_side ) )
{ {
self.check_turn = 1; self.check_turn = 1;
@ -133,47 +140,48 @@ crawler_action()
{ {
self stopanimscripted(); self stopanimscripted();
self.crawler stopanimscripted(); self.crawler stopanimscripted();
if ( should_ignore_candybooze( self.candy_player ) ) if ( should_ignore_candybooze( self.candy_player ) )
{ {
dist = distancesquared( self.origin, roam[ roam_index ].origin ); dist = distancesquared( self.origin, roam[roam_index].origin );
if ( dist < 1024 ) if ( dist < 1024 )
{ {
roam_index++; roam_index++;
if ( roam_index >= roam.size ) if ( roam_index >= roam.size )
{
roam_index = 0; roam_index = 0;
} }
self maps\mp\zombies\_zm_ai_sloth::sloth_check_turn( roam[roam_index].origin );
self setgoalpos( roam[roam_index].origin );
} }
self maps/mp/zombies/_zm_ai_sloth::sloth_check_turn( roam[ roam_index ].origin ); else if ( !self sloth_move_to_same_side() )
self setgoalpos( roam[ roam_index ].origin );
}
else
{
if ( !self sloth_move_to_same_side() )
{ {
if ( is_true( self.check_turn ) ) if ( is_true( self.check_turn ) )
{ {
self.check_turn = 0; self.check_turn = 0;
if ( self sloth_is_same_zone( self.candy_player ) ) if ( self sloth_is_same_zone( self.candy_player ) )
{ self maps\mp\zombies\_zm_ai_sloth::sloth_check_turn( self.candy_player.origin, -0.965 );
self maps/mp/zombies/_zm_ai_sloth::sloth_check_turn( self.candy_player.origin, -0,965 );
}
} }
self setgoalpos( self.candy_player.origin ); self setgoalpos( self.candy_player.origin );
} }
}
self crawler_update_locomotion(); self crawler_update_locomotion();
} }
wait 0,1;
} wait 0.1;
} }
self.setanimstatefromspeed = undefined; self.setanimstatefromspeed = undefined;
self.crawler unlink(); self.crawler unlink();
sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" ); sloth_putdown = self append_hunched( "zm_sloth_putdown_crawler" );
crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" ); crawler_putdown = self append_hunched( "zm_crawler_putdown_by_sloth" );
self animscripted( self.origin, self.angles, sloth_putdown ); self animscripted( self.origin, self.angles, sloth_putdown );
self.crawler animscripted( self.origin, self.angles, crawler_putdown ); self.crawler animscripted( self.origin, self.angles, crawler_putdown );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_putdown_crawler_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "sloth_putdown_crawler_anim" );
self.carrying_crawler = 0; self.carrying_crawler = 0;
self.crawler.deathfunction = ::crawler_death; self.crawler.deathfunction = ::crawler_death;
sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" ); sloth_kill = self append_hunched( "zm_sloth_kill_crawler_stomp" );
@ -181,14 +189,16 @@ crawler_action()
self notify( "stop_crawler_watch" ); self notify( "stop_crawler_watch" );
self animscripted( self.origin, self.angles, sloth_kill ); self animscripted( self.origin, self.angles, sloth_kill );
self.crawler animscripted( self.origin, self.angles, crawler_kill ); self.crawler animscripted( self.origin, self.angles, crawler_kill );
maps/mp/animscripts/zm_shared::donotetracks( "sloth_kill_crawler_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "sloth_kill_crawler_anim" );
if ( isDefined( self.crawler ) )
if ( isdefined( self.crawler ) )
{ {
self.crawler dodamage( self.crawler.health * 10, self.crawler.origin ); self.crawler dodamage( self.crawler.health * 10, self.crawler.origin );
self.crawler playsound( "zmb_ai_sloth_attack_impact" ); self.crawler playsound( "zmb_ai_sloth_attack_impact" );
} }
self.sloth_damage_func = undefined; self.sloth_damage_func = undefined;
self maps/mp/zombies/_zm_ai_sloth::sloth_set_traverse_funcs(); self maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined; self.crawler = undefined;
self.context_done = 1; self.context_done = 1;
} }
@ -196,134 +206,114 @@ crawler_action()
watch_sloth_on_exit_side() watch_sloth_on_exit_side()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
if ( is_true( self.context_done ) ) if ( is_true( self.context_done ) )
{
return; return;
}
self.on_exit_side = 0; self.on_exit_side = 0;
player = self.candy_player; player = self.candy_player;
if ( isDefined( player ) && is_true( player.is_in_ghost_zone ) )
if ( isdefined( player ) && is_true( player.is_in_ghost_zone ) )
{ {
name = player.current_ghost_room_name; name = player.current_ghost_room_name;
if ( isDefined( name ) )
if ( isdefined( name ) )
{ {
room = level.ghost_rooms[ name ]; room = level.ghost_rooms[name];
if ( is_true( room.to_maze ) ) if ( is_true( room.to_maze ) )
{ {
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() ) if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
{
self.on_exit_side = 1; self.on_exit_side = 1;
} }
break; else if ( is_true( room.from_maze ) )
}
else
{
if ( is_true( room.from_maze ) )
{
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{ {
if ( !self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
self.on_exit_side = 1; self.on_exit_side = 1;
} }
} }
} }
}
} wait 0.25;
wait 0,25;
} }
} }
watch_sloth_on_same_side() watch_sloth_on_same_side()
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
if ( is_true( self.context_done ) ) if ( is_true( self.context_done ) )
{
return; return;
}
self.on_same_side = 0; self.on_same_side = 0;
player = self.candy_player; player = self.candy_player;
if ( isDefined( player ) )
if ( isdefined( player ) )
{ {
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() ) if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
{
if ( player maps/mp/zombies/_zm_ai_sloth::behind_mansion_zone() )
{ {
if ( player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
self.on_same_side = 1; self.on_same_side = 1;
} }
break; else if ( !player maps\mp\zombies\_zm_ai_sloth::behind_mansion_zone() )
}
else
{
if ( !player maps/mp/zombies/_zm_ai_sloth::behind_mansion_zone() )
{
self.on_same_side = 1; self.on_same_side = 1;
} }
}
} wait 0.25;
wait 0,25;
} }
} }
sloth_move_to_same_side() sloth_move_to_same_side()
{ {
self endon( "death" ); self endon( "death" );
if ( isDefined( self.teleport_time ) )
if ( isdefined( self.teleport_time ) )
{ {
if ( ( getTime() - self.teleport_time ) < 1000 ) if ( gettime() - self.teleport_time < 1000 )
{ return false;
return 0;
}
} }
player = self.candy_player; player = self.candy_player;
if ( is_true( player.is_in_ghost_zone ) ) if ( is_true( player.is_in_ghost_zone ) )
{ {
if ( is_true( self.on_exit_side ) ) if ( is_true( self.on_exit_side ) )
{ return false;
return 0;
}
} }
else if ( is_true( self.on_same_side ) )
return false;
if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
else else
{ self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
if ( is_true( self.on_same_side ) )
{ return true;
return 0;
}
}
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
}
else
{
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
}
return 1;
} }
sloth_is_same_zone( player ) sloth_is_same_zone( player )
{ {
zone_sloth = self get_current_zone(); zone_sloth = self get_current_zone();
zone_player = player get_current_zone(); zone_player = player get_current_zone();
if ( !isDefined( zone_sloth ) || !isDefined( zone_player ) )
{ if ( !isdefined( zone_sloth ) || !isdefined( zone_player ) )
return 0; return false;
}
if ( zone_sloth == zone_player ) if ( zone_sloth == zone_player )
{ return true;
return 1;
} return false;
return 0;
} }
append_hunched( asd_name ) append_hunched( asd_name )
{ {
if ( self.is_inside ) if ( self.is_inside )
{
return asd_name + "_hunched"; return asd_name + "_hunched";
}
return asd_name; return asd_name;
} }
@ -337,9 +327,7 @@ crawler_update_locomotion()
self.locomotion = "walk_crawlerhold_hunched"; self.locomotion = "walk_crawlerhold_hunched";
} }
} }
else else if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
{
if ( self.zombie_move_speed == "walk_crawlerhold_hunched" )
{ {
if ( !self.is_inside ) if ( !self.is_inside )
{ {
@ -347,24 +335,24 @@ crawler_update_locomotion()
self.locomotion = "walk_crawlerhold"; self.locomotion = "walk_crawlerhold";
} }
} }
}
} }
crawler_watch_death() crawler_watch_death()
{ {
self endon( "stop_crawler_watch" ); self endon( "stop_crawler_watch" );
self.crawler waittill( "death" ); self.crawler waittill( "death" );
self stop_action(); self stop_action();
/# /#
sloth_print( "crawler died" ); sloth_print( "crawler died" );
#/ #/
if ( isDefined( self.crawler ) ) if ( isdefined( self.crawler ) )
{
self.crawler unlink(); self.crawler unlink();
}
self.setanimstatefromspeed = undefined; self.setanimstatefromspeed = undefined;
self.sloth_damage_func = undefined; self.sloth_damage_func = undefined;
self maps/mp/zombies/_zm_ai_sloth::sloth_set_traverse_funcs(); self maps\mp\zombies\_zm_ai_sloth::sloth_set_traverse_funcs();
self.crawler = undefined; self.crawler = undefined;
self.context_done = 1; self.context_done = 1;
} }
@ -375,7 +363,7 @@ crawler_pre_traverse()
crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" ); crawler_sling = self append_hunched( "zm_crawler_sloth_crawlerhold_sling" );
self setanimstatefromasd( sloth_sling ); self setanimstatefromasd( sloth_sling );
self.crawler setanimstatefromasd( crawler_sling ); self.crawler setanimstatefromasd( crawler_sling );
self maps/mp/animscripts/zm_shared::donotetracks( "sloth_crawlerhold_sling_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_sling_anim" );
self.crawler thread crawler_traverse_idle(); self.crawler thread crawler_traverse_idle();
} }
@ -383,10 +371,11 @@ crawler_traverse_idle()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_traverse_idle" ); self endon( "stop_traverse_idle" );
while ( 1 )
while ( true )
{ {
self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" ); self setanimstatefromasd( "zm_crawler_sloth_crawlerhold_slung_idle" );
wait 0,1; wait 0.1;
} }
} }
@ -397,7 +386,7 @@ crawler_post_traverse()
crawler_unsling = self append_hunched( "zm_crawler_sloth_crawlerhold_unsling" ); crawler_unsling = self append_hunched( "zm_crawler_sloth_crawlerhold_unsling" );
self setanimstatefromasd( sloth_unsling ); self setanimstatefromasd( sloth_unsling );
self.crawler setanimstatefromasd( crawler_unsling ); self.crawler setanimstatefromasd( crawler_unsling );
self maps/mp/animscripts/zm_shared::donotetracks( "sloth_crawlerhold_unsling_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "sloth_crawlerhold_unsling_anim" );
} }
crawler_death() crawler_death()
@ -413,22 +402,21 @@ crawler_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, swe
is_crawler_alive() is_crawler_alive()
{ {
if ( isDefined( self.crawler ) && self.crawler.health > 0 ) if ( isdefined( self.crawler ) && self.crawler.health > 0 )
{ return true;
return 1;
} return false;
return 0;
} }
slothanimstatefromspeed( animstate, substate ) slothanimstatefromspeed( animstate, substate )
{ {
if ( isDefined( self.crawler ) ) if ( isdefined( self.crawler ) )
{ {
crawler_walk = "zm_crawler_crawlerhold_walk"; crawler_walk = "zm_crawler_crawlerhold_walk";
if ( self.is_inside ) if ( self.is_inside )
{
crawler_walk += "_hunched"; crawler_walk += "_hunched";
}
self.crawler setanimstatefromasd( crawler_walk ); self.crawler setanimstatefromasd( crawler_walk );
} }
} }

View File

@ -1,7 +1,9 @@
#include maps/mp/zombies/_zm_ai_sloth_utility; // 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_ai_sloth_utility;
sloth_ffotd_init() sloth_ffotd_init()
{ {
@ -11,4 +13,5 @@ sloth_ffotd_init()
sloth_ffotd_prespawn() sloth_ffotd_prespawn()
{ {
} }

View File

@ -1,44 +1,43 @@
#include maps/mp/zombies/_zm_unitrigger; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_hackables_box; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_magicbox; #include common_scripts\utility;
#include maps/mp/zm_buried; #include maps\mp\_utility;
#include maps/mp/animscripts/zm_shared; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_ai_sloth; #include maps\mp\zombies\_zm_ai_sloth_utility;
#include maps/mp/zombies/_zm_ai_sloth_utility; #include maps\mp\zombies\_zm_ai_sloth;
#include maps/mp/zombies/_zm_utility; #include maps\mp\animscripts\zm_shared;
#include maps/mp/_utility; #include maps\mp\zm_buried;
#include common_scripts/utility; #include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_hackables_box;
#include maps\mp\zombies\_zm_unitrigger;
box_lock_condition() box_lock_condition()
{ {
box = level.chests[ level.chest_index ]; box = level.chests[level.chest_index];
if ( !isDefined( box ) )
{ if ( !isdefined( box ) )
return 0; return false;
}
/# /#
self sloth_debug_context( box, sqrt( 32400 ) ); self sloth_debug_context( box, sqrt( 32400 ) );
#/ #/
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ return false;
return 0;
}
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{ return false;
return 0;
}
dist = distancesquared( self.origin, box.origin ); dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 ) if ( dist < 32400 )
{ return true;
return 1;
} return false;
return 0;
} }
box_get_ground_offset() box_get_ground_offset()
{ {
vec_right = vectornormalize( anglesToRight( self.angles ) ); vec_right = vectornormalize( anglestoright( self.angles ) );
box_pos = self.origin - ( vec_right * 36 ); box_pos = self.origin - vec_right * 36;
ground_pos = groundpos( box_pos ); ground_pos = groundpos( box_pos );
return ground_pos; return ground_pos;
} }
@ -48,9 +47,10 @@ common_abort_box( box )
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ {
self.context_done = 1; self.context_done = 1;
return 1; return true;
} }
if ( isDefined( box ) )
if ( isdefined( box ) )
{ {
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{ {
@ -58,59 +58,54 @@ common_abort_box( box )
sloth_print( "box was opened...abort" ); sloth_print( "box was opened...abort" );
#/ #/
self.context_done = 1; self.context_done = 1;
return 1; return true;
} }
} }
return 0;
return false;
} }
common_move_to_maze( box ) common_move_to_maze( box )
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
if ( self common_abort_box( box ) ) if ( self common_abort_box( box ) )
{ return false;
return 0;
} if ( self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
if ( self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
break; break;
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
wait 0.2;
} }
else
{ return true;
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.maze_depart, level.maze_arrive );
wait 0,2;
}
}
return 1;
} }
common_move_to_courtyard( box ) common_move_to_courtyard( box )
{ {
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
if ( self common_abort_box( box ) ) if ( self common_abort_box( box ) )
{ return false;
return 0;
} if ( !self maps\mp\zombies\_zm_ai_sloth::sloth_behind_mansion() )
if ( !self maps/mp/zombies/_zm_ai_sloth::sloth_behind_mansion() )
{
break; break;
self maps\mp\zombies\_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
wait 0.2;
} }
else
{ return true;
self maps/mp/zombies/_zm_ai_sloth::action_navigate_mansion( level.courtyard_depart, level.courtyard_arrive );
wait 0,2;
}
}
return 1;
} }
common_move_to_box( box, range, ignore_open, asd_name ) common_move_to_box( box, range, ignore_open, asd_name )
{ {
if ( isDefined( asd_name ) ) if ( isdefined( asd_name ) )
{ {
anim_id = self getanimfromasd( asd_name, 0 ); anim_id = self getanimfromasd( asd_name, 0 );
start_org = getstartorigin( box.origin, box.angles, anim_id ); start_org = getstartorigin( box.origin, box.angles, anim_id );
@ -120,200 +115,189 @@ common_move_to_box( box, range, ignore_open, asd_name )
} }
else else
{ {
vec_right = vectornormalize( anglesToRight( box.angles ) ); vec_right = vectornormalize( anglestoright( box.angles ) );
box_pos = box.origin - ( vec_right * 36 ); box_pos = box.origin - vec_right * 36;
ground_pos = groundpos( box_pos ); ground_pos = groundpos( box_pos );
self setgoalpos( ground_pos ); self setgoalpos( ground_pos );
} }
while ( 1 )
while ( true )
{ {
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ {
self.context_done = 1; self.context_done = 1;
return 0; return false;
} }
if ( !is_true( ignore_open ) || is_true( box._box_open ) && is_true( box._box_opened_by_fire_sale ) )
if ( !is_true( ignore_open ) && ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) )
{ {
/# /#
sloth_print( "box was opened...abort" ); sloth_print( "box was opened...abort" );
#/ #/
self.context_done = 1; self.context_done = 1;
return 0; return false;
} }
dist = distancesquared( self.origin, ground_pos ); dist = distancesquared( self.origin, ground_pos );
if ( dist < range ) if ( dist < range )
{
break; break;
wait 0.1;
} }
else
{ if ( isdefined( asd_name ) )
wait 0,1;
}
}
if ( isDefined( asd_name ) )
{ {
self setgoalpos( self.origin ); self setgoalpos( self.origin );
self sloth_face_object( box, "angle", start_ang[ 1 ], 0,9 ); self sloth_face_object( box, "angle", start_ang[1], 0.9 );
} }
else else
{ {
angles = vectorToAngle( vec_right ); angles = vectortoangles( vec_right );
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = angles; self.anchor.angles = angles;
self orientmode( "face angle", angles[ 1 ] ); self orientmode( "face angle", angles[1] );
wait 0,2; wait 0.2;
} }
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ {
self.context_done = 1; self.context_done = 1;
return 0; return false;
} }
return 1;
return true;
} }
box_lock_action() box_lock_action()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_action" ); self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action(); self maps\mp\zombies\_zm_ai_sloth::common_context_action();
box = level.chests[ level.chest_index ]; box = level.chests[level.chest_index];
if ( !self common_move_to_box( box, 1024 ) ) if ( !self common_move_to_box( box, 1024 ) )
{
return; return;
}
self animscripted( box.origin, box.angles, "zm_lock_magicbox" ); self animscripted( box.origin, box.angles, "zm_lock_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "lock_magicbox_anim", ::box_notetracks, box ); maps\mp\animscripts\zm_shared::donotetracks( "lock_magicbox_anim", ::box_notetracks, box );
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ {
self.context_done = 1; self.context_done = 1;
return; return;
} }
setdvar( "magic_chest_movable", "0" ); setdvar( "magic_chest_movable", "0" );
/# /#
sloth_print( "box will not move" ); sloth_print( "box will not move" );
#/ #/
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_lock" ); maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_lock" );
maps/mp/zombies/_zm_ai_sloth::unregister_candy_context( "box_move" ); maps\mp\zombies\_zm_ai_sloth::unregister_candy_context( "box_move" );
self.context_done = 1; self.context_done = 1;
} }
box_move_condition() box_move_condition()
{ {
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ return false;
return 0;
}
self.box_move = undefined; self.box_move = undefined;
self.box_current = undefined; self.box_current = undefined;
self.box_current_in_maze = 0; self.box_current_in_maze = 0;
box_current = level.chests[ level.chest_index ]; box_current = level.chests[level.chest_index];
if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) ) if ( is_true( box_current._box_open ) || is_true( box_current._box_opened_by_fire_sale ) )
{ return false;
return 0;
}
if ( box_current.script_noteworthy == "courtroom_chest1" ) if ( box_current.script_noteworthy == "courtroom_chest1" )
{ {
if ( !maps/mp/zm_buried::is_courthouse_open() ) if ( !maps\mp\zm_buried::is_courthouse_open() )
{ return false;
return 0;
}
} }
if ( box_current.script_noteworthy == "tunnels_chest1" ) if ( box_current.script_noteworthy == "tunnels_chest1" )
{ {
if ( !maps/mp/zm_buried::is_tunnel_open() ) if ( !maps\mp\zm_buried::is_tunnel_open() )
{ return false;
return 0;
}
} }
if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" ) if ( box_current.script_noteworthy == "maze_chest1" || box_current.script_noteworthy == "maze_chest2" )
{ {
self.box_current_in_maze = 1; self.box_current_in_maze = 1;
if ( !is_maze_open() ) if ( !is_maze_open() )
{ return false;
return 0;
} }
}
i = 0; for ( i = 0; i < level.chests.size; i++ )
while ( i < level.chests.size )
{ {
if ( i == level.chest_index ) if ( i == level.chest_index )
{
i++;
continue; continue;
}
else box = level.chests[i];
{ self.box_move_in_maze = box.script_noteworthy == "maze_chest1" || box.script_noteworthy == "maze_chest2";
box = level.chests[ i ];
if ( box.script_noteworthy != "maze_chest1" )
{
self.box_move_in_maze = box.script_noteworthy == "maze_chest2";
}
dist = distancesquared( self.origin, box.origin ); dist = distancesquared( self.origin, box.origin );
if ( dist < 32400 ) if ( dist < 32400 )
{ {
self.box_move_index = i; self.box_move_index = i;
self.box_move = box; self.box_move = box;
self.box_current = box_current; self.box_current = box_current;
return 1; return true;
} }
} }
i++;
} return false;
return 0;
} }
box_move_action() box_move_action()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_action" ); self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action(); self maps\mp\zombies\_zm_ai_sloth::common_context_action();
/# /#
sloth_print( "moving box from: " + self.box_current.script_noteworthy + " to: " + self.box_move.script_noteworthy ); sloth_print( "moving box from: " + self.box_current.script_noteworthy + " to: " + self.box_move.script_noteworthy );
#/ #/
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_magicbox_point" ) ) if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_magicbox_point" ) )
{
return; return;
}
self maps/mp/zombies/_zm_ai_sloth::action_animscripted( "zm_magicbox_point", "magicbox_point_anim", self.box_move.origin, self.box_move.angles ); self maps\mp\zombies\_zm_ai_sloth::action_animscripted( "zm_magicbox_point", "magicbox_point_anim", self.box_move.origin, self.box_move.angles );
if ( is_true( self.box_current_in_maze ) ) if ( is_true( self.box_current_in_maze ) )
{ {
if ( !is_true( self.box_move_in_maze ) ) if ( !is_true( self.box_move_in_maze ) )
{ {
if ( !self common_move_to_maze( self.box_current ) ) if ( !self common_move_to_maze( self.box_current ) )
{
return; return;
} }
} }
} else if ( is_true( self.box_move_in_maze ) )
else
{
if ( is_true( self.box_move_in_maze ) )
{ {
if ( !self common_move_to_courtyard( self.box_current ) ) if ( !self common_move_to_courtyard( self.box_current ) )
{
return; return;
} }
}
}
if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) ) if ( !self common_move_to_box( self.box_current, 1024, 0, "zm_pull_magicbox" ) )
{
return; return;
}
self animscripted( self.box_current.origin, self.box_current.angles, "zm_pull_magicbox" ); self animscripted( self.box_current.origin, self.box_current.angles, "zm_pull_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "pull_magicbox_anim", ::box_notetracks, self.box_current ); maps\mp\animscripts\zm_shared::donotetracks( "pull_magicbox_anim", ::box_notetracks, self.box_current );
if ( self common_abort_box( self.box_current ) ) if ( self common_abort_box( self.box_current ) )
{ {
self box_move_interrupt(); self box_move_interrupt();
return; return;
} }
if ( isDefined( level.sloth.custom_box_move_func ) )
{ if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 0 ); self thread [[ level.sloth.custom_box_move_func ]]( 0 );
}
level.sloth_moving_box = 1; level.sloth_moving_box = 1;
self.ignore_common_run = 1; self.ignore_common_run = 1;
self set_zombie_run_cycle( "run_holding_magicbox" ); self set_zombie_run_cycle( "run_holding_magicbox" );
self.locomotion = "run_holding_magicbox"; self.locomotion = "run_holding_magicbox";
if ( is_true( self.box_current_in_maze ) ) if ( is_true( self.box_current_in_maze ) )
{ {
if ( !is_true( self.box_move_in_maze ) ) if ( !is_true( self.box_move_in_maze ) )
@ -325,9 +309,7 @@ box_move_action()
} }
} }
} }
else else if ( is_true( self.box_move_in_maze ) )
{
if ( is_true( self.box_move_in_maze ) )
{ {
if ( !self common_move_to_maze( undefined ) ) if ( !self common_move_to_maze( undefined ) )
{ {
@ -335,36 +317,36 @@ box_move_action()
return; return;
} }
} }
}
if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) ) if ( !self common_move_to_box( self.box_move, 1024, 0, "zm_place_magicbox" ) )
{ {
self box_move_interrupt(); self box_move_interrupt();
return; return;
} }
self animscripted( self.box_move.origin, self.box_move.angles, "zm_place_magicbox" ); self animscripted( self.box_move.origin, self.box_move.angles, "zm_place_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "place_magicbox_anim", ::box_notetracks, self.box_move ); maps\mp\animscripts\zm_shared::donotetracks( "place_magicbox_anim", ::box_notetracks, self.box_move );
self.box_current = undefined; self.box_current = undefined;
self.context_done = 1; self.context_done = 1;
level.sloth_moving_box = undefined; level.sloth_moving_box = undefined;
if ( isDefined( level.sloth.custom_box_move_func ) )
{ if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 1 ); self thread [[ level.sloth.custom_box_move_func ]]( 1 );
}
} }
box_notetracks( note, box ) box_notetracks( note, box )
{ {
if ( !flag( "moving_chest_now" ) || is_true( box._box_open ) && is_true( box._box_opened_by_fire_sale ) ) if ( flag( "moving_chest_now" ) || is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{
return 0; return 0;
}
if ( note == "pulled" ) if ( note == "pulled" )
{ {
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin ); playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
tag_name = "tag_stowed_back"; tag_name = "tag_stowed_back";
twr_origin = self gettagorigin( tag_name ); twr_origin = self gettagorigin( tag_name );
twr_angles = self gettagangles( tag_name ); twr_angles = self gettagangles( tag_name );
if ( !isDefined( self.box_model ) )
if ( !isdefined( self.box_model ) )
{ {
self.box_model = spawn( "script_model", twr_origin ); self.box_model = spawn( "script_model", twr_origin );
self.box_model.angles = twr_angles; self.box_model.angles = twr_angles;
@ -377,32 +359,29 @@ box_notetracks( note, box )
self.box_model show(); self.box_model show();
self.box_model_visible = 1; self.box_model_visible = 1;
} }
self.box_current maps/mp/zombies/_zm_magicbox::hide_chest();
self.box_current maps\mp\zombies\_zm_magicbox::hide_chest();
} }
else if ( note == "placed" ) else if ( note == "placed" )
{ {
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin ); playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
self box_model_hide(); self box_model_hide();
if ( isDefined( self.box_move.zbarrier ) )
if ( isdefined( self.box_move.zbarrier ) )
{ {
self.box_move.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" ); self.box_move.zbarrier maps\mp\zombies\_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_move.hidden = 0; self.box_move.hidden = 0;
self.box_move thread [[ level.pandora_show_func ]](); self.box_move thread [[ level.pandora_show_func ]]();
level.chest_index = self.box_move_index; level.chest_index = self.box_move_index;
} }
} }
else else if ( note == "locked" )
{ playfx( level._effect["fx_buried_sloth_box_slam"], box.origin );
if ( note == "locked" )
{
playfx( level._effect[ "fx_buried_sloth_box_slam" ], box.origin );
}
}
} }
box_model_hide() box_model_hide()
{ {
if ( isDefined( self.box_model ) ) if ( isdefined( self.box_model ) )
{ {
self.box_model ghost(); self.box_model ghost();
self.box_model_visible = 0; self.box_model_visible = 0;
@ -411,19 +390,19 @@ box_model_hide()
box_move_interrupt() box_move_interrupt()
{ {
if ( isDefined( self.box_current ) ) if ( isdefined( self.box_current ) )
{ {
if ( isDefined( self.box_current.zbarrier ) ) if ( isdefined( self.box_current.zbarrier ) )
{ {
self.box_current.zbarrier maps/mp/zombies/_zm_magicbox::set_magic_box_zbarrier_state( "initial" ); self.box_current.zbarrier maps\mp\zombies\_zm_magicbox::set_magic_box_zbarrier_state( "initial" );
self.box_current.hidden = 0; self.box_current.hidden = 0;
self.box_current thread [[ level.pandora_show_func ]](); self.box_current thread [[ level.pandora_show_func ]]();
} }
} }
if ( isDefined( level.sloth.custom_box_move_func ) )
{ if ( isdefined( level.sloth.custom_box_move_func ) )
self thread [[ level.sloth.custom_box_move_func ]]( 1 ); self thread [[ level.sloth.custom_box_move_func ]]( 1 );
}
level.sloth_moving_box = undefined; level.sloth_moving_box = undefined;
self box_model_hide(); self box_model_hide();
} }
@ -431,40 +410,39 @@ box_move_interrupt()
box_spin_condition() box_spin_condition()
{ {
if ( flag( "moving_chest_now" ) ) if ( flag( "moving_chest_now" ) )
{ return false;
return 0;
} box = level.chests[level.chest_index];
box = level.chests[ level.chest_index ];
if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) ) if ( is_true( box._box_open ) || is_true( box._box_opened_by_fire_sale ) )
{ {
ground_pos = groundpos( box.origin ); ground_pos = groundpos( box.origin );
dist = distancesquared( self.origin, ground_pos ); dist = distancesquared( self.origin, ground_pos );
if ( dist < 32400 ) if ( dist < 32400 )
{ return true;
return 1;
} }
}
return 0; return false;
} }
box_spin_action() box_spin_action()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_action" ); self endon( "stop_action" );
self maps/mp/zombies/_zm_ai_sloth::common_context_action(); self maps\mp\zombies\_zm_ai_sloth::common_context_action();
box = level.chests[ level.chest_index ]; box = level.chests[level.chest_index];
hackable = spawnstruct(); hackable = spawnstruct();
hackable.chest = box; hackable.chest = box;
if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) ) if ( !self common_move_to_box( box, 1024, 1, "zm_cycle_magicbox" ) )
{
return; return;
}
if ( !self box_spin_qualifier( hackable ) ) if ( !self box_spin_qualifier( hackable ) )
{
return; return;
}
self animscripted( box.origin, box.angles, "zm_cycle_magicbox" ); self animscripted( box.origin, box.angles, "zm_cycle_magicbox" );
maps/mp/animscripts/zm_shared::donotetracks( "cycle_magicbox_anim", ::box_kick, hackable ); maps\mp\animscripts\zm_shared::donotetracks( "cycle_magicbox_anim", ::box_kick, hackable );
self.context_done = 1; self.context_done = 1;
} }
@ -473,47 +451,48 @@ box_kick( note, hackable )
if ( note == "kick" ) if ( note == "kick" )
{ {
if ( !self box_spin_qualifier( hackable ) ) if ( !self box_spin_qualifier( hackable ) )
{
return; return;
}
if ( !flag( "moving_chest_now" ) ) if ( !flag( "moving_chest_now" ) )
{ {
hackable thread box_trigger(); hackable thread box_trigger();
hackable maps/mp/zombies/_zm_hackables_box::respin_box( self.candy_player ); hackable maps\mp\zombies\_zm_hackables_box::respin_box( self.candy_player );
} }
} }
} }
box_trigger() box_trigger()
{ {
if ( isDefined( self.chest ) ) if ( isdefined( self.chest ) )
{ {
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.chest.unitrigger_stub ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.chest.unitrigger_stub );
self.chest.zbarrier waittill( "randomization_done" ); self.chest.zbarrier waittill( "randomization_done" );
if ( !flag( "moving_chest_now" ) ) if ( !flag( "moving_chest_now" ) )
{ thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.chest.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.chest.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think );
}
} }
} }
box_spin_qualifier( hackable ) box_spin_qualifier( hackable )
{ {
if ( isDefined( hackable.chest ) ) if ( isdefined( hackable.chest ) )
{ {
if ( !isDefined( hackable.chest.chest_user ) ) if ( !isdefined( hackable.chest.chest_user ) )
{ {
self.context_done = 1; self.context_done = 1;
return 0; return false;
} }
} }
if ( !hackable maps/mp/zombies/_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
if ( !hackable maps\mp\zombies\_zm_hackables_box::hack_box_qualifier( self.candy_player ) )
{ {
/# /#
sloth_print( "hack_box_qualifier failed" ); sloth_print( "hack_box_qualifier failed" );
#/ #/
self.context_done = 1; self.context_done = 1;
return 0; return false;
} }
return 1;
return true;
} }

View File

@ -1,67 +1,65 @@
#include maps/mp/zombies/_zm_ai_sloth; // T6 GSC SOURCE
#include maps/mp/zm_buried; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_zonemgr; #include common_scripts\utility;
#include maps/mp/animscripts/zm_utility; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/_utility; #include maps\mp\animscripts\zm_utility;
#include common_scripts/utility; #include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zm_buried;
#include maps\mp\zombies\_zm_ai_sloth;
should_ignore_candybooze( player ) should_ignore_candybooze( player )
{ {
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_courthouse" ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_courthouse2" ) ) if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_courthouse" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_courthouse2" ) )
{ {
if ( !maps/mp/zm_buried::is_courthouse_open() ) if ( !maps\mp\zm_buried::is_courthouse_open() )
return true;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) )
{ {
return 1; if ( !maps\mp\zm_buried::is_courthouse_open() )
return true;
} }
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_north2" ) ) if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_center" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_north" ) || player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_tunnels_south" ) )
{ {
if ( !maps/mp/zm_buried::is_courthouse_open() ) if ( !maps\mp\zm_buried::is_tunnel_open() )
return true;
}
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_start_lower" ) )
return true;
if ( player maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_underground_bar" ) )
{ {
return 1; if ( !maps\mp\zombies\_zm_ai_sloth::is_bar_open() )
return true;
} }
}
if ( !player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_center" ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_north" ) && player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_tunnels_south" ) ) return false;
{
if ( !maps/mp/zm_buried::is_tunnel_open() )
{
return 1;
}
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_start_lower" ) )
{
return 1;
}
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_underground_bar" ) )
{
if ( !maps/mp/zombies/_zm_ai_sloth::is_bar_open() )
{
return 1;
}
}
return 0;
} }
watch_crash_pos() watch_crash_pos()
{ {
dist_crash = 4096; dist_crash = 4096;
level.crash_pos = []; level.crash_pos = [];
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1012, 56 ); level.crash_pos[level.crash_pos.size] = ( 3452, 1012, 56 );
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1092, 56 ); level.crash_pos[level.crash_pos.size] = ( 3452, 1092, 56 );
level.crash_pos[ level.crash_pos.size ] = ( 3452, 1056, 56 ); level.crash_pos[level.crash_pos.size] = ( 3452, 1056, 56 );
while ( 1 )
while ( true )
{ {
while ( !isDefined( self.state ) || self.state != "berserk" ) if ( !isdefined( self.state ) || self.state != "berserk" )
{ {
wait 0,1; wait 0.1;
continue;
} }
_a82 = level.crash_pos;
_k82 = getFirstArrayKey( _a82 ); foreach ( pos in level.crash_pos )
while ( isDefined( _k82 ) )
{ {
pos = _a82[ _k82 ];
dist = distancesquared( self.origin, pos ); dist = distancesquared( self.origin, pos );
if ( dist < dist_crash ) if ( dist < dist_crash )
{ {
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
@ -69,12 +67,12 @@ watch_crash_pos()
self linkto( self.anchor ); self linkto( self.anchor );
self setclientfield( "sloth_berserk", 0 ); self setclientfield( "sloth_berserk", 0 );
self sloth_set_state( "crash", 0 ); self sloth_set_state( "crash", 0 );
wait 0,25; wait 0.25;
self unlink(); self unlink();
} }
_k82 = getNextArrayKey( _a82, _k82 );
} }
wait 0,05;
wait 0.05;
} }
} }
@ -83,10 +81,9 @@ sloth_is_pain()
if ( is_true( self.is_pain ) ) if ( is_true( self.is_pain ) )
{ {
anim_state = self getanimstatefromasd(); anim_state = self getanimstatefromasd();
if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" ) if ( anim_state == "zm_pain" || anim_state == "zm_pain_no_restart" )
{ return true;
return 1;
}
else else
{ {
self.reset_asd = undefined; self.reset_asd = undefined;
@ -99,7 +96,8 @@ sloth_is_pain()
#/ #/
} }
} }
return 0;
return false;
} }
sloth_is_traversing() sloth_is_traversing()
@ -107,10 +105,9 @@ sloth_is_traversing()
if ( is_true( self.is_traversing ) ) if ( is_true( self.is_traversing ) )
{ {
anim_state = self getanimstatefromasd(); anim_state = self getanimstatefromasd();
if ( anim_state != "zm_traverse" && anim_state != "zm_traverse_no_restart" && anim_state != "zm_traverse_barrier" && anim_state != "zm_traverse_barrier_no_restart" && anim_state != "zm_sling_equipment" && anim_state != "zm_unsling_equipment" && anim_state != "zm_sling_magicbox" && anim_state != "zm_unsling_magicbox" && anim_state != "zm_sloth_crawlerhold_sling" && anim_state != "zm_sloth_crawlerhold_unsling" || anim_state == "zm_sloth_crawlerhold_sling_hunched" && anim_state == "zm_sloth_crawlerhold_unsling_hunched" )
{ if ( anim_state == "zm_traverse" || anim_state == "zm_traverse_no_restart" || anim_state == "zm_traverse_barrier" || anim_state == "zm_traverse_barrier_no_restart" || anim_state == "zm_sling_equipment" || anim_state == "zm_unsling_equipment" || anim_state == "zm_sling_magicbox" || anim_state == "zm_unsling_magicbox" || anim_state == "zm_sloth_crawlerhold_sling" || anim_state == "zm_sloth_crawlerhold_unsling" || anim_state == "zm_sloth_crawlerhold_sling_hunched" || anim_state == "zm_sloth_crawlerhold_unsling_hunched" )
return 1; return true;
}
else else
{ {
self.is_traversing = 0; self.is_traversing = 0;
@ -119,58 +116,48 @@ sloth_is_traversing()
#/ #/
} }
} }
return 0;
return false;
} }
sloth_face_object( facee, type, data, dot_limit ) sloth_face_object( facee, type, data, dot_limit )
{ {
if ( type == "angle" ) if ( type == "angle" )
{
self orientmode( "face angle", data ); self orientmode( "face angle", data );
} else if ( type == "point" )
else
{
if ( type == "point" )
{
self orientmode( "face point", data ); self orientmode( "face point", data );
}
} time_started = gettime();
time_started = getTime();
while ( 1 ) while ( true )
{ {
if ( type == "angle" ) if ( type == "angle" )
{ {
delta = abs( self.angles[ 1 ] - data ); delta = abs( self.angles[1] - data );
if ( delta <= 15 ) if ( delta <= 15 )
{
break; break;
} }
else } else if ( isdefined( dot_limit ) )
else if ( isDefined( dot_limit ) )
{ {
if ( self is_facing( facee, dot_limit ) ) if ( self is_facing( facee, dot_limit ) )
{
break; break;
} }
else }
else if ( self is_facing( facee ) ) else if ( self is_facing( facee ) )
{
break; break;
}
else if ( ( getTime() - time_started ) > 1000 ) if ( gettime() - time_started > 1000 )
{ {
/# /#
sloth_print( "face took too long" ); sloth_print( "face took too long" );
#/ #/
break; break;
} }
else
{ wait 0.1;
wait 0,1;
}
} }
/# /#
time_elapsed = getTime() - time_started; time_elapsed = gettime() - time_started;
sloth_print( "time to face: " + time_elapsed ); sloth_print( "time to face: " + time_elapsed );
#/ #/
} }
@ -178,25 +165,24 @@ sloth_face_object( facee, type, data, dot_limit )
sloth_print( str ) sloth_print( str )
{ {
/# /#
if ( getDvarInt( #"B6252E7C" ) ) if ( getdvarint( _hash_B6252E7C ) )
{ {
iprintln( "sloth: " + str ); iprintln( "sloth: " + str );
if ( isDefined( self.debug_msg ) )
if ( isdefined( self.debug_msg ) )
{ {
self.debug_msg[ self.debug_msg.size ] = str; self.debug_msg[self.debug_msg.size] = str;
if ( self.debug_msg.size > 64 ) if ( self.debug_msg.size > 64 )
{
self.debug_msg = []; self.debug_msg = [];
} }
return;
}
else else
{ {
self.debug_msg = []; self.debug_msg = [];
self.debug_msg[ self.debug_msg.size ] = str; self.debug_msg[self.debug_msg.size] = str;
}
}
#/ #/
}
}
} }
sloth_debug_context( item, dist ) sloth_debug_context( item, dist )
@ -206,6 +192,6 @@ sloth_debug_context( item, dist )
{ {
debugstar( item.origin, 100, ( 1, 1, 1 ) ); debugstar( item.origin, 100, ( 1, 1, 1 ) );
circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 ); circle( item.origin, dist, ( 1, 1, 1 ), 0, 1, 100 );
#/
} }
#/
} }

View File

@ -1,32 +1,31 @@
#include maps/mp/zombies/_zm_unitrigger; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_stats; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_score; #include common_scripts\utility;
#include maps/mp/zombies/_zm_powerups; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_weapons; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_magicbox; #include maps\mp\zombies\_zm_magicbox;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_weapons;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_powerups;
#include common_scripts/utility; #include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_unitrigger;
init() init()
{ {
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
if ( !isDefined( level.ta_vaultfee ) )
{ if ( !isdefined( level.ta_vaultfee ) )
level.ta_vaultfee = 100; level.ta_vaultfee = 100;
}
if ( !isDefined( level.ta_tellerfee ) ) if ( !isdefined( level.ta_tellerfee ) )
{
level.ta_tellerfee = 100; level.ta_tellerfee = 100;
}
} }
main() main()
{ {
if ( !isDefined( level.banking_map ) ) if ( !isdefined( level.banking_map ) )
{
level.banking_map = level.script; level.banking_map = level.script;
}
level thread bank_teller_init(); level thread bank_teller_init();
level thread bank_deposit_box(); level thread bank_deposit_box();
} }
@ -34,12 +33,13 @@ main()
bank_teller_init() bank_teller_init()
{ {
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if ( isDefined( level.bank_teller_dmg_trig ) )
if ( isdefined( level.bank_teller_dmg_trig ) )
{ {
level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" ); 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.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
level thread bank_teller_logic(); level thread bank_teller_logic();
level.bank_teller_transfer_trig.origin += vectorScale( ( 0, 0, -1 ), 25 ); level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 );
level.bank_teller_transfer_trig trigger_off(); level.bank_teller_transfer_trig trigger_off();
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee ); level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
} }
@ -48,10 +48,12 @@ bank_teller_init()
bank_teller_logic() bank_teller_logic()
{ {
level endon( "end_game" ); level endon( "end_game" );
while ( 1 )
while ( true )
{ {
level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah ); 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" )
if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
{ {
bank_teller_give_money(); bank_teller_give_money();
level.bank_teller_transfer_trig trigger_off(); level.bank_teller_transfer_trig trigger_off();
@ -65,23 +67,25 @@ bank_teller_give_money()
level endon( "stop_bank_teller" ); level endon( "stop_bank_teller" );
level.bank_teller_transfer_trig trigger_on(); level.bank_teller_transfer_trig trigger_on();
bank_transfer = undefined; bank_transfer = undefined;
while ( 1 )
while ( true )
{ {
level.bank_teller_transfer_trig waittill( "trigger", player ); level.bank_teller_transfer_trig waittill( "trigger", player );
if ( !is_player_valid( player, 0 ) || player.score < ( 1000 + level.ta_tellerfee ) )
{ if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee )
continue; continue;
}
if ( !isDefined( bank_transfer ) ) 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 ) ); 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 thread stop_bank_teller();
bank_transfer.value = 0; bank_transfer.value = 0;
} }
bank_transfer.value += 1000; bank_transfer.value += 1000;
bank_transfer notify( "powerup_reset" ); bank_transfer notify( "powerup_reset" );
bank_transfer thread maps/mp/zombies/_zm_powerups::powerup_timeout(); bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout();
player maps/mp/zombies/_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee ); player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
level notify( "bank_teller_used" ); level notify( "bank_teller_used" );
} }
} }
@ -89,7 +93,9 @@ bank_teller_give_money()
stop_bank_teller() stop_bank_teller()
{ {
level endon( "end_game" ); level endon( "end_game" );
self waittill( "death" ); self waittill( "death" );
level notify( "stop_bank_teller" ); level notify( "stop_bank_teller" );
} }
@ -106,14 +112,11 @@ delete_bank_teller()
onplayerconnect_bank_deposit_box() onplayerconnect_bank_deposit_box()
{ {
online_game = sessionmodeisonlinegame(); online_game = sessionmodeisonlinegame();
if ( !online_game ) if ( !online_game )
{
self.account_value = 0; self.account_value = 0;
}
else else
{ self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map );
self.account_value = self maps/mp/zombies/_zm_stats::get_map_stat( "depositBox", level.banking_map );
}
} }
bank_deposit_box() bank_deposit_box()
@ -142,77 +145,55 @@ bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, ove
{ {
unitrigger_stub = spawnstruct(); unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin; unitrigger_stub.origin = self.origin;
if ( isDefined( self.script_angles ) )
{ if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles; unitrigger_stub.angles = self.script_angles;
}
else else
{
unitrigger_stub.angles = self.angles; unitrigger_stub.angles = self.angles;
}
unitrigger_stub.script_angles = unitrigger_stub.angles; unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isDefined( override_length ) )
{ if ( isdefined( override_length ) )
unitrigger_stub.script_length = override_length; unitrigger_stub.script_length = override_length;
} else if ( isdefined( self.script_length ) )
else if ( isDefined( self.script_length ) )
{
unitrigger_stub.script_length = self.script_length; unitrigger_stub.script_length = self.script_length;
}
else else
{
unitrigger_stub.script_length = 32; unitrigger_stub.script_length = 32;
}
if ( isDefined( override_width ) ) if ( isdefined( override_width ) )
{
unitrigger_stub.script_width = override_width; unitrigger_stub.script_width = override_width;
} else if ( isdefined( self.script_width ) )
else if ( isDefined( self.script_width ) )
{
unitrigger_stub.script_width = self.script_width; unitrigger_stub.script_width = self.script_width;
}
else else
{
unitrigger_stub.script_width = 32; unitrigger_stub.script_width = 32;
}
if ( isDefined( override_height ) ) if ( isdefined( override_height ) )
{
unitrigger_stub.script_height = override_height; unitrigger_stub.script_height = override_height;
} else if ( isdefined( self.script_height ) )
else if ( isDefined( self.script_height ) )
{
unitrigger_stub.script_height = self.script_height; unitrigger_stub.script_height = self.script_height;
}
else else
{
unitrigger_stub.script_height = 64; unitrigger_stub.script_height = 64;
}
if ( isDefined( override_radius ) ) if ( isdefined( override_radius ) )
{
unitrigger_stub.script_radius = override_radius; unitrigger_stub.script_radius = override_radius;
} else if ( isdefined( self.radius ) )
else if ( isDefined( self.radius ) )
{
unitrigger_stub.radius = self.radius; unitrigger_stub.radius = self.radius;
}
else else
{
unitrigger_stub.radius = 32; unitrigger_stub.radius = 32;
}
if ( isDefined( self.script_unitrigger_type ) ) if ( isdefined( self.script_unitrigger_type ) )
{
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type; unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
}
else else
{ {
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 ); unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
} }
unitrigger_stub.cursor_hint = "HINT_NOICON"; unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.targetname = name; unitrigger_stub.targetname = name;
maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = prompt_fn; unitrigger_stub.prompt_and_visibility_func = prompt_fn;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
} }
trigger_deposit_update_prompt( player ) trigger_deposit_update_prompt( player )
@ -221,41 +202,40 @@ trigger_deposit_update_prompt( player )
{ {
player show_balance(); player show_balance();
self sethintstring( "" ); self sethintstring( "" );
return 0; return false;
} }
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
return 1; return true;
} }
trigger_deposit_think() trigger_deposit_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
while ( 1 )
while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
while ( !is_player_valid( player ) )
{ if ( !is_player_valid( player ) )
continue; continue;
}
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max ) if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
{ {
player playsoundtoplayer( "zmb_vault_bank_deposit", player ); player playsoundtoplayer( "zmb_vault_bank_deposit", player );
player.score -= level.bank_deposit_ddl_increment_amount; player.score -= level.bank_deposit_ddl_increment_amount;
player.account_value += level.bank_account_increment; player.account_value += level.bank_account_increment;
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isDefined( level.custom_bank_deposit_vo ) )
{ if ( isdefined( level.custom_bank_deposit_vo ) )
player thread [[ level.custom_bank_deposit_vo ]](); player thread [[ level.custom_bank_deposit_vo ]]();
}
if ( player.account_value >= level.bank_account_max ) if ( player.account_value >= level.bank_account_max )
{
self sethintstring( "" ); self sethintstring( "" );
} }
}
else else
{
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
}
player show_balance(); player show_balance();
} }
} }
@ -266,47 +246,45 @@ trigger_withdraw_update_prompt( player )
{ {
self sethintstring( "" ); self sethintstring( "" );
player show_balance(); player show_balance();
return 0; return false;
} }
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
return 1; return true;
} }
trigger_withdraw_think() trigger_withdraw_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
while ( 1 )
while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
while ( !is_player_valid( player ) )
{ if ( !is_player_valid( player ) )
continue; continue;
}
if ( player.account_value >= level.bank_account_increment ) if ( player.account_value >= level.bank_account_increment )
{ {
player playsoundtoplayer( "zmb_vault_bank_withdraw", player ); player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
player.score += level.bank_deposit_ddl_increment_amount; player.score += level.bank_deposit_ddl_increment_amount;
level notify( "bank_withdrawal" ); level notify( "bank_withdrawal" );
player.account_value -= level.bank_account_increment; player.account_value -= level.bank_account_increment;
player maps/mp/zombies/_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map ); player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isDefined( level.custom_bank_withdrawl_vo ) )
{ if ( isdefined( level.custom_bank_withdrawl_vo ) )
player thread [[ level.custom_bank_withdrawl_vo ]](); player thread [[ level.custom_bank_withdrawl_vo ]]();
}
else else
{
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
}
player thread player_withdraw_fee(); player thread player_withdraw_fee();
if ( player.account_value < level.bank_account_increment ) if ( player.account_value < level.bank_account_increment )
{
self sethintstring( "" ); self sethintstring( "" );
} }
}
else else
{
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
}
player show_balance(); player show_balance();
} }
} }

View File

@ -1,33 +1,35 @@
#include maps/mp/gametypes_zm/_hud_util; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_unitrigger; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_buildables; #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_buildables;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\gametypes_zm\_hud_util;
add_buildable_to_pool( stub, poolname ) add_buildable_to_pool( stub, poolname )
{ {
if ( !isDefined( level.buildablepools ) ) if ( !isdefined( level.buildablepools ) )
{
level.buildablepools = []; level.buildablepools = [];
}
if ( !isDefined( level.buildablepools[ poolname ] ) ) if ( !isdefined( level.buildablepools[poolname] ) )
{ {
level.buildablepools[ poolname ] = spawnstruct(); level.buildablepools[poolname] = spawnstruct();
level.buildablepools[ poolname ].stubs = []; level.buildablepools[poolname].stubs = [];
}
level.buildablepools[ poolname ].stubs[ level.buildablepools[ poolname ].stubs.size ] = stub;
if ( !isDefined( level.buildablepools[ poolname ].buildable_slot ) )
{
level.buildablepools[ poolname ].buildable_slot = stub.buildablestruct.buildable_slot;
} }
level.buildablepools[poolname].stubs[level.buildablepools[poolname].stubs.size] = stub;
if ( !isdefined( level.buildablepools[poolname].buildable_slot ) )
level.buildablepools[poolname].buildable_slot = stub.buildablestruct.buildable_slot;
else else
{ {
/# /#
assert( level.buildablepools[ poolname ].buildable_slot == stub.buildablestruct.buildable_slot ); assert( level.buildablepools[poolname].buildable_slot == stub.buildablestruct.buildable_slot );
#/ #/
} }
stub.buildable_pool = level.buildablepools[ poolname ];
stub.buildable_pool = level.buildablepools[poolname];
stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func; stub.original_prompt_and_visibility_func = stub.prompt_and_visibility_func;
stub.original_trigger_func = stub.trigger_func; stub.original_trigger_func = stub.trigger_func;
stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt; stub.prompt_and_visibility_func = ::pooledbuildabletrigger_update_prompt;
@ -37,57 +39,49 @@ add_buildable_to_pool( stub, poolname )
reregister_unitrigger( unitrigger_stub, new_trigger_func ) reregister_unitrigger( unitrigger_stub, new_trigger_func )
{ {
static = 0; static = 0;
if ( isDefined( unitrigger_stub.in_zone ) )
{ if ( isdefined( unitrigger_stub.in_zone ) )
static = 1; static = 1;
}
unregister_unitrigger( unitrigger_stub ); unregister_unitrigger( unitrigger_stub );
unitrigger_stub.trigger_func = new_trigger_func; unitrigger_stub.trigger_func = new_trigger_func;
if ( static ) if ( static )
{
register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 ); register_static_unitrigger( unitrigger_stub, new_trigger_func, 0 );
}
else else
{
register_unitrigger( unitrigger_stub, new_trigger_func ); register_unitrigger( unitrigger_stub, new_trigger_func );
}
} }
randomize_pooled_buildables( poolname ) randomize_pooled_buildables( poolname )
{ {
level waittill( "buildables_setup" ); level waittill( "buildables_setup" );
while ( isDefined( level.buildablepools[ poolname ] ) )
if ( isdefined( level.buildablepools[poolname] ) )
{ {
count = level.buildablepools[ poolname ].stubs.size; count = level.buildablepools[poolname].stubs.size;
while ( count > 1 )
if ( count > 1 )
{ {
targets = []; targets = [];
i = 0;
while ( i < count ) for ( i = 0; i < count; i++ )
{ {
while ( 1 ) while ( true )
{ {
p = randomint( count ); p = randomint( count );
if ( !isDefined( targets[ p ] ) )
if ( !isdefined( targets[p] ) )
{ {
targets[ p ] = i; targets[p] = i;
i++; break;
continue;
} }
else }
}
for ( i = 0; i < count; i++ )
{ {
} if ( isdefined( targets[i] ) && targets[i] != i )
} swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[targets[i]] );
i++;
}
i = 0;
while ( i < count )
{
if ( isDefined( targets[ i ] ) && targets[ i ] != i )
{
swap_buildable_fields( level.buildablepools[ poolname ].stubs[ i ], level.buildablepools[ poolname ].stubs[ targets[ i ] ] );
}
i++;
} }
} }
} }
@ -95,28 +89,20 @@ randomize_pooled_buildables( poolname )
pooledbuildable_has_piece( piece ) pooledbuildable_has_piece( piece )
{ {
return isDefined( self pooledbuildable_stub_for_piece( piece ) ); return isdefined( self pooledbuildable_stub_for_piece( piece ) );
} }
pooledbuildable_stub_for_piece( piece ) pooledbuildable_stub_for_piece( piece )
{ {
_a104 = self.stubs; foreach ( stub in self.stubs )
_k104 = getFirstArrayKey( _a104 );
while ( isDefined( _k104 ) )
{
stub = _a104[ _k104 ];
if ( isDefined( stub.bound_to_buildable ) )
{
}
else
{ {
if ( isdefined( stub.bound_to_buildable ) )
continue;
if ( stub.buildablezone buildable_has_piece( piece ) ) if ( stub.buildablezone buildable_has_piece( piece ) )
{
return stub; return stub;
} }
}
_k104 = getNextArrayKey( _a104, _k104 );
}
return undefined; return undefined;
} }
@ -124,119 +110,92 @@ pooledbuildabletrigger_update_prompt( player )
{ {
can_use = self.stub pooledbuildablestub_update_prompt( player, self ); can_use = self.stub pooledbuildablestub_update_prompt( player, self );
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isDefined( self.stub.cursor_hint ) )
{ if ( isdefined( self.stub.cursor_hint ) )
if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) )
{ {
if ( self.stub.cursor_hint == "HINT_WEAPON" && isdefined( self.stub.cursor_hint_weapon ) )
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
}
else else
{
self setcursorhint( self.stub.cursor_hint ); self setcursorhint( self.stub.cursor_hint );
} }
}
return can_use; return can_use;
} }
pooledbuildablestub_update_prompt( player, trigger ) pooledbuildablestub_update_prompt( player, trigger )
{ {
if ( !self anystub_update_prompt( player ) ) if ( !self anystub_update_prompt( player ) )
{
return 0; return 0;
}
can_use = 1; can_use = 1;
if ( isDefined( self.custom_buildablestub_update_prompt ) && !( self [[ self.custom_buildablestub_update_prompt ]]( player ) ) )
{ if ( isdefined( self.custom_buildablestub_update_prompt ) && !self [[ self.custom_buildablestub_update_prompt ]]( player ) )
return 0; return 0;
}
self.cursor_hint = "HINT_NOICON"; self.cursor_hint = "HINT_NOICON";
self.cursor_hint_weapon = undefined; self.cursor_hint_weapon = undefined;
if ( isDefined( self.built ) && !self.built )
if ( !( isdefined( self.built ) && self.built ) )
{ {
slot = self.buildablestruct.buildable_slot; slot = self.buildablestruct.buildable_slot;
if ( !isDefined( player player_get_buildable_piece( slot ) ) )
if ( !isdefined( player player_get_buildable_piece( slot ) ) )
{ {
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) ) if ( isdefined( level.zombie_buildables[self.equipname].hint_more ) )
{ self.hint_string = level.zombie_buildables[self.equipname].hint_more;
self.hint_string = level.zombie_buildables[ self.equipname ].hint_more;
}
else else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE"; self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
}
if ( isDefined( level.custom_buildable_need_part_vo ) ) if ( isdefined( level.custom_buildable_need_part_vo ) )
{
player thread [[ level.custom_buildable_need_part_vo ]](); player thread [[ level.custom_buildable_need_part_vo ]]();
}
return 0; return 0;
} }
else if ( isdefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isdefined( level.zombie_buildables[self.bound_to_buildable.equipname].hint_wrong ) )
self.hint_string = level.zombie_buildables[self.bound_to_buildable.equipname].hint_wrong;
else else
{
if ( isDefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone buildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isDefined( level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong ) )
{
self.hint_string = level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong;
}
else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
}
if ( isDefined( level.custom_buildable_wrong_part_vo ) ) if ( isdefined( level.custom_buildable_wrong_part_vo ) )
{
player thread [[ level.custom_buildable_wrong_part_vo ]](); player thread [[ level.custom_buildable_wrong_part_vo ]]();
}
return 0; return 0;
} }
else if ( !isdefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isdefined( level.zombie_buildables[self.equipname].hint_wrong ) )
self.hint_string = level.zombie_buildables[self.equipname].hint_wrong;
else else
{
if ( !isDefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( player player_get_buildable_piece( slot ) ) )
{
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_wrong ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint_wrong;
}
else
{
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG"; self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
}
return 0; return 0;
} }
else else if ( isdefined( self.bound_to_buildable ) )
{
if ( isDefined( self.bound_to_buildable ) )
{ {
/# /#
assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" ); assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" );
#/ #/
if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) ) if ( isdefined( level.zombie_buildables[self.equipname].hint ) )
{ self.hint_string = level.zombie_buildables[self.equipname].hint;
self.hint_string = level.zombie_buildables[ self.equipname ].hint; else
self.hint_string = "Missing buildable hint";
} }
else else
{ {
/#
assert( isdefined( level.zombie_buildables[self.equipname].hint ), "Missing buildable hint" );
#/
if ( isdefined( level.zombie_buildables[self.equipname].hint ) )
self.hint_string = level.zombie_buildables[self.equipname].hint;
else
self.hint_string = "Missing buildable hint"; self.hint_string = "Missing buildable hint";
} }
} }
else /#
assert( isDefined( level.zombie_buildables[ self.equipname ].hint ), "Missing buildable hint" );
#/
if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) )
{
self.hint_string = level.zombie_buildables[ self.equipname ].hint;
}
else else
{
self.hint_string = "Missing buildable hint";
}
}
}
}
}
else
{
return trigger [[ self.original_prompt_and_visibility_func ]]( player ); return trigger [[ self.original_prompt_and_visibility_func ]]( player );
}
return 1; return 1;
} }
@ -291,11 +250,13 @@ swap_buildable_fields( stub1, stub2 )
bench1 = undefined; bench1 = undefined;
bench2 = undefined; bench2 = undefined;
transfer_pos_as_is = 1; transfer_pos_as_is = 1;
if ( isDefined( stub1.model.target ) && isDefined( stub2.model.target ) )
if ( isdefined( stub1.model.target ) && isdefined( stub2.model.target ) )
{ {
bench1 = find_bench( stub1.model.target ); bench1 = find_bench( stub1.model.target );
bench2 = find_bench( stub2.model.target ); bench2 = find_bench( stub2.model.target );
if ( isDefined( bench1 ) && isDefined( bench2 ) )
if ( isdefined( bench1 ) && isdefined( bench2 ) )
{ {
transfer_pos_as_is = 0; transfer_pos_as_is = 0;
w2lo1 = bench1 worldtolocalcoords( stub1.model.origin ); w2lo1 = bench1 worldtolocalcoords( stub1.model.origin );
@ -307,13 +268,16 @@ swap_buildable_fields( stub1, stub2 )
stub2.model.origin = bench1 localtoworldcoords( w2lo2 ); stub2.model.origin = bench1 localtoworldcoords( w2lo2 );
stub2.model.angles = bench1.angles + w2la2; stub2.model.angles = bench1.angles + w2la2;
} }
tmt = stub2.model.target; tmt = stub2.model.target;
stub2.model.target = stub1.model.target; stub2.model.target = stub1.model.target;
stub1.model.target = tmt; stub1.model.target = tmt;
} }
tm = stub2.model; tm = stub2.model;
stub2.model = stub1.model; stub2.model = stub1.model;
stub1.model = tm; stub1.model = tm;
if ( transfer_pos_as_is ) if ( transfer_pos_as_is )
{ {
tmo = stub2.model.origin; tmo = stub2.model.origin;
@ -328,92 +292,90 @@ swap_buildable_fields( stub1, stub2 )
pooled_buildable_place_think() pooled_buildable_place_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( isDefined( self.stub.built ) && self.stub.built )
{ if ( isdefined( self.stub.built ) && self.stub.built )
return buildable_place_think(); return buildable_place_think();
}
player_built = undefined; player_built = undefined;
while ( isDefined( self.stub.built ) && !self.stub.built )
while ( !( isdefined( self.stub.built ) && self.stub.built ) )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
while ( player != self.parent_player )
if ( player != self.parent_player )
continue;
if ( isdefined( player.screecher_weapon ) )
continue;
if ( !is_player_valid( player ) )
{ {
player thread ignore_triggers( 0.5 );
continue; continue;
} }
while ( isDefined( player.screecher_weapon ) )
{
continue;
}
while ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0,5 );
}
bind_to = self.stub; bind_to = self.stub;
slot = bind_to.buildablestruct.buildable_slot; slot = bind_to.buildablestruct.buildable_slot;
if ( !isDefined( self.stub.bound_to_buildable ) )
{ if ( !isdefined( self.stub.bound_to_buildable ) )
bind_to = self.stub.buildable_pool pooledbuildable_stub_for_piece( player player_get_buildable_piece( slot ) ); bind_to = self.stub.buildable_pool pooledbuildable_stub_for_piece( player player_get_buildable_piece( slot ) );
}
while ( isDefined( bind_to ) && isDefined( self.stub.bound_to_buildable ) || self.stub.bound_to_buildable != bind_to && isDefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable ) if ( !isdefined( bind_to ) || isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to || isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isDefined( self.stub.oncantuse ) )
{ if ( isdefined( self.stub.oncantuse ) )
self.stub [[ self.stub.oncantuse ]]( player ); self.stub [[ self.stub.oncantuse ]]( player );
continue;
} }
}
status = player player_can_build( bind_to.buildablezone ); status = player player_can_build( bind_to.buildablezone );
if ( !status ) if ( !status )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isDefined( bind_to.oncantuse ) )
{ if ( isdefined( bind_to.oncantuse ) )
bind_to [[ bind_to.oncantuse ]]( player ); bind_to [[ bind_to.oncantuse ]]( player );
} }
continue;
}
else else
{ {
if ( isDefined( bind_to.onbeginuse ) ) if ( isdefined( bind_to.onbeginuse ) )
{
self.stub [[ bind_to.onbeginuse ]]( player ); self.stub [[ bind_to.onbeginuse ]]( player );
}
result = self buildable_use_hold_think( player, bind_to ); result = self buildable_use_hold_think( player, bind_to );
team = player.pers[ "team" ]; team = player.pers["team"];
if ( result ) if ( result )
{ {
if ( isDefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to ) if ( isdefined( self.stub.bound_to_buildable ) && self.stub.bound_to_buildable != bind_to )
{ result = 0;
if ( isdefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
result = 0; result = 0;
} }
if ( isDefined( bind_to.bound_to_buildable ) && self.stub != bind_to.bound_to_buildable )
{ if ( isdefined( bind_to.onenduse ) )
result = 0;
}
}
if ( isDefined( bind_to.onenduse ) )
{
self.stub [[ bind_to.onenduse ]]( team, player, result ); self.stub [[ bind_to.onenduse ]]( team, player, result );
}
while ( !result ) if ( !result )
{
continue; continue;
}
if ( !isDefined( self.stub.bound_to_buildable ) && isDefined( bind_to ) ) if ( !isdefined( self.stub.bound_to_buildable ) && isdefined( bind_to ) )
{ {
if ( bind_to != self.stub ) if ( bind_to != self.stub )
{
swap_buildable_fields( self.stub, bind_to ); swap_buildable_fields( self.stub, bind_to );
}
self.stub.bound_to_buildable = self.stub; self.stub.bound_to_buildable = self.stub;
} }
if ( isDefined( self.stub.onuse ) )
{ if ( isdefined( self.stub.onuse ) )
self.stub [[ self.stub.onuse ]]( player ); self.stub [[ self.stub.onuse ]]( player );
}
if ( isDefined( player player_get_buildable_piece( slot ) ) ) if ( isdefined( player player_get_buildable_piece( slot ) ) )
{ {
prompt = player player_build( self.stub.buildablezone ); prompt = player player_build( self.stub.buildablezone );
player_built = player; player_built = player;
@ -422,21 +384,22 @@ pooled_buildable_place_think()
} }
} }
} }
switch( self.stub.persistent )
switch ( self.stub.persistent )
{ {
case 1: case "1":
self bptrigger_think_persistent( player_built ); self bptrigger_think_persistent( player_built );
break; break;
case 0: case "0":
self bptrigger_think_one_time( player_built ); self bptrigger_think_one_time( player_built );
break; break;
case 3: case "3":
self bptrigger_think_unbuild( player_built ); self bptrigger_think_unbuild( player_built );
break; break;
case 2: case "2":
self bptrigger_think_one_use_and_fly( player_built ); self bptrigger_think_one_use_and_fly( player_built );
break; break;
case 4: case "4":
self [[ self.stub.custom_completion_callback ]]( player_built ); self [[ self.stub.custom_completion_callback ]]( player_built );
break; break;
} }

View File

@ -1,49 +1,48 @@
#include maps/mp/zombies/_zm_buildables; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_power; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_unitrigger; #include common_scripts\utility;
#include maps/mp/zombies/_zm; #include maps\mp\_utility;
#include maps/mp/gametypes_zm/_weaponobjects; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_equipment; #include maps\mp\zombies\_zm_equipment;
#include maps/mp/zombies/_zm_utility; #include maps\mp\gametypes_zm\_weaponobjects;
#include maps/mp/_utility; #include maps\mp\zombies\_zm;
#include common_scripts/utility; #include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_power;
#using_animtree( "zombie_springpad" ); #include maps\mp\zombies\_zm_buildables;
init( pickupstring, howtostring ) init( pickupstring, howtostring )
{ {
if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_springpad_zm" ) ) if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
{
return; return;
}
level.springpad_name = "equip_springpad_zm"; level.springpad_name = "equip_springpad_zm";
init_animtree(); init_animtree();
maps/mp/zombies/_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad ); maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" ); maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
level thread onplayerconnect(); level thread onplayerconnect();
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_springpad", pickupstring ); maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
level._effect[ "springpade_on" ] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" ); level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
if ( !isDefined( level.springpad_trigger_radius ) )
{ if ( !isdefined( level.springpad_trigger_radius ) )
level.springpad_trigger_radius = 72; level.springpad_trigger_radius = 72;
}
thread wait_init_damage(); thread wait_init_damage();
} }
wait_init_damage() wait_init_damage()
{ {
while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) ) while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) )
{
wait 1; wait 1;
}
level.springpad_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 ); level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 );
} }
onplayerconnect() onplayerconnect()
{ {
for ( ;; ) for (;;)
{ {
level waittill( "connecting", player ); level waittill( "connecting", player );
player thread onplayerspawned(); player thread onplayerspawned();
} }
} }
@ -52,9 +51,11 @@ onplayerspawned()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
self thread setupwatchers(); self thread setupwatchers();
for ( ;; )
for (;;)
{ {
self waittill( "spawned_player" ); self waittill( "spawned_player" );
self thread watchspringpaduse(); self thread watchspringpaduse();
} }
} }
@ -62,8 +63,9 @@ onplayerspawned()
setupwatchers() setupwatchers()
{ {
self waittill( "weapon_watchers_created" ); self waittill( "weapon_watchers_created" );
watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject; watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject;
} }
watchspringpaduse() watchspringpaduse()
@ -72,9 +74,11 @@ watchspringpaduse()
self endon( "watchSpringPadUse" ); self endon( "watchSpringPadUse" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; )
for (;;)
{ {
self waittill( "equipment_placed", weapon, weapname ); self waittill( "equipment_placed", weapon, weapname );
if ( weapname == level.springpad_name ) if ( weapname == level.springpad_name )
{ {
self cleanupoldspringpad(); self cleanupoldspringpad();
@ -86,17 +90,19 @@ watchspringpaduse()
cleanupoldspringpad() cleanupoldspringpad()
{ {
if ( isDefined( self.buildablespringpad ) ) if ( isdefined( self.buildablespringpad ) )
{ {
if ( isDefined( self.buildablespringpad.stub ) ) if ( isdefined( self.buildablespringpad.stub ) )
{ {
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
self.buildablespringpad.stub = undefined; self.buildablespringpad.stub = undefined;
} }
self.buildablespringpad delete(); self.buildablespringpad delete();
self.springpad_kills = undefined; self.springpad_kills = undefined;
} }
if ( isDefined( level.springpad_sound_ent ) )
if ( isdefined( level.springpad_sound_ent ) )
{ {
level.springpad_sound_ent delete(); level.springpad_sound_ent delete();
level.springpad_sound_ent = undefined; level.springpad_sound_ent = undefined;
@ -113,30 +119,35 @@ watchforcleanup()
placespringpad( origin, angles ) placespringpad( origin, angles )
{ {
if ( isDefined( self.turret_placement ) && !self.turret_placement[ "result" ] ) if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] )
{ {
forward = anglesToForward( angles ); forward = anglestoforward( angles );
origin -= -24 * forward; origin -= -24 * forward;
} }
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
if ( isDefined( item ) ) item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
if ( isdefined( item ) )
{ {
item.springpad_kills = self.springpad_kills; item.springpad_kills = self.springpad_kills;
item.requires_pickup = 1; item.requires_pickup = 1;
item.zombie_attack_callback = ::springpad_fling_attacker; item.zombie_attack_callback = ::springpad_fling_attacker;
} }
self.springpad_kills = undefined; self.springpad_kills = undefined;
return item; return item;
} }
dropspringpad() dropspringpad()
{ {
item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 ); item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 );
if ( isDefined( item ) )
if ( isdefined( item ) )
{ {
item.springpad_kills = self.springpad_kills; item.springpad_kills = self.springpad_kills;
item.requires_pickup = 1; item.requires_pickup = 1;
} }
self.springpad_kills = undefined; self.springpad_kills = undefined;
return item; return item;
} }
@ -151,22 +162,16 @@ transferspringpad( fromplayer, toplayer )
{ {
buildablespringpad = toplayer.buildablespringpad; buildablespringpad = toplayer.buildablespringpad;
toarmed = 0; toarmed = 0;
if ( isDefined( buildablespringpad ) )
{ if ( isdefined( buildablespringpad ) )
if ( isDefined( buildablespringpad.is_armed ) ) toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed;
{
toarmed = buildablespringpad.is_armed;
}
}
springpad_kills = toplayer.springpad_kills; springpad_kills = toplayer.springpad_kills;
fromarmed = 0; fromarmed = 0;
if ( isDefined( fromplayer.buildablespringpad ) )
{ if ( isdefined( fromplayer.buildablespringpad ) )
if ( isDefined( fromplayer.buildablespringpad.is_armed ) ) fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed;
{
fromarmed = fromplayer.buildablespringpad.is_armed;
}
}
toplayer.buildablespringpad = fromplayer.buildablespringpad; toplayer.buildablespringpad = fromplayer.buildablespringpad;
toplayer.buildablespringpad.original_owner = toplayer; toplayer.buildablespringpad.original_owner = toplayer;
toplayer.buildablespringpad.owner = toplayer; toplayer.buildablespringpad.owner = toplayer;
@ -176,25 +181,23 @@ transferspringpad( fromplayer, toplayer )
fromplayer.buildablespringpad = buildablespringpad; fromplayer.buildablespringpad = buildablespringpad;
fromplayer.springpad_kills = springpad_kills; fromplayer.springpad_kills = springpad_kills;
fromplayer notify( "equip_springpad_zm_taken" ); fromplayer notify( "equip_springpad_zm_taken" );
if ( isDefined( fromplayer.buildablespringpad ) )
if ( isdefined( fromplayer.buildablespringpad ) )
{ {
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed ); fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
fromplayer.buildablespringpad.original_owner = fromplayer; fromplayer.buildablespringpad.original_owner = fromplayer;
fromplayer.buildablespringpad.owner = fromplayer; fromplayer.buildablespringpad.owner = fromplayer;
} }
else else
{ fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
}
} }
springpad_in_range( delta, origin, radius ) springpad_in_range( delta, origin, radius )
{ {
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) ) if ( distancesquared( self.target.origin, origin ) < radius * radius )
{ return true;
return 1;
} return false;
return 0;
} }
springpad_power_on( origin, radius ) springpad_power_on( origin, radius )
@ -202,12 +205,11 @@ springpad_power_on( origin, radius )
/# /#
println( "^1ZM POWER: trap on\n" ); println( "^1ZM POWER: trap on\n" );
#/ #/
if ( !isDefined( self.target ) ) if ( !isdefined( self.target ) )
{
return; return;
}
self.target.power_on = 1; self.target.power_on = 1;
self.target.power_on_time = getTime(); self.target.power_on_time = gettime();
} }
springpad_power_off( origin, radius ) springpad_power_off( origin, radius )
@ -215,10 +217,9 @@ springpad_power_off( origin, radius )
/# /#
println( "^1ZM POWER: trap off\n" ); println( "^1ZM POWER: trap off\n" );
#/ #/
if ( !isDefined( self.target ) ) if ( !isdefined( self.target ) )
{
return; return;
}
self.target.power_on = 0; self.target.power_on = 0;
} }
@ -229,45 +230,50 @@ startspringpaddeploy( weapon, armed )
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
self thread watchforcleanup(); self thread watchforcleanup();
electricradius = 45; electricradius = 45;
if ( isDefined( self.springpad_kills ) )
if ( isdefined( self.springpad_kills ) )
{ {
weapon.springpad_kills = self.springpad_kills; weapon.springpad_kills = self.springpad_kills;
self.springpad_kills = undefined; self.springpad_kills = undefined;
} }
if ( !isDefined( weapon.springpad_kills ) )
{ if ( !isdefined( weapon.springpad_kills ) )
weapon.springpad_kills = 0; weapon.springpad_kills = 0;
}
if ( isDefined( weapon ) ) if ( isdefined( weapon ) )
{ {
/# /#
weapon thread debugspringpad( electricradius ); weapon thread debugspringpad( electricradius );
#/ #/
if ( isDefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
{ {
weapon.power_on = 0; weapon.power_on = 0;
maps/mp/zombies/_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon ); maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon );
} }
else else
{
weapon.power_on = 1; weapon.power_on = 1;
}
if ( !weapon.power_on ) if ( !weapon.power_on )
{
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
}
self thread springpadthink( weapon, electricradius, armed ); self thread springpadthink( weapon, electricradius, armed );
if ( isDefined( level.equipment_springpad_needs_power ) && !level.equipment_springpad_needs_power )
if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) )
{ {
} }
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon );
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon );
weapon waittill( "death" ); weapon waittill( "death" );
if ( isDefined( level.springpad_sound_ent ) )
if ( isdefined( level.springpad_sound_ent ) )
{ {
level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" ); level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" );
level.springpad_sound_ent delete(); level.springpad_sound_ent delete();
level.springpad_sound_ent = undefined; level.springpad_sound_ent = undefined;
} }
self notify( "springpad_cleanup" ); self notify( "springpad_cleanup" );
} }
} }
@ -277,6 +283,8 @@ init_animtree()
scriptmodelsuseanimtree( -1 ); scriptmodelsuseanimtree( -1 );
} }
#using_animtree("zombie_springpad");
springpad_animate( weapon, armed ) springpad_animate( weapon, armed )
{ {
self endon( "death" ); self endon( "death" );
@ -289,12 +297,13 @@ springpad_animate( weapon, armed )
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch ); l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
weapon thread springpad_audio(); weapon thread springpad_audio();
prearmed = 0; prearmed = 0;
if ( isDefined( armed ) && armed )
{ if ( isdefined( armed ) && armed )
prearmed = 1; prearmed = 1;
}
fast_reset = 0; fast_reset = 0;
while ( isDefined( weapon ) )
while ( isdefined( weapon ) )
{ {
if ( !prearmed ) if ( !prearmed )
{ {
@ -302,32 +311,35 @@ springpad_animate( weapon, armed )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie ); weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
weapon thread playspringpadresetaudio( f_animlength ); weapon thread playspringpadresetaudio( f_animlength );
wait f_animlength; wait( f_animlength );
} }
else else
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_reset ); weapon setanim( %o_zombie_buildable_tramplesteam_reset );
weapon thread playspringpadresetaudio( r_animlength ); weapon thread playspringpadresetaudio( r_animlength );
wait r_animlength; wait( r_animlength );
} }
} }
else else
{ wait 0.05;
wait 0,05;
}
prearmed = 0; prearmed = 0;
weapon notify( "armed" ); weapon notify( "armed" );
fast_reset = 0; fast_reset = 0;
if ( isDefined( weapon ) )
if ( isdefined( weapon ) )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle ); weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
weapon waittill( "fling", fast ); weapon waittill( "fling", fast );
fast_reset = fast; fast_reset = fast;
} }
if ( isDefined( weapon ) )
if ( isdefined( weapon ) )
{ {
weapon setanim( %o_zombie_buildable_tramplesteam_launch ); weapon setanim( %o_zombie_buildable_tramplesteam_launch );
wait l_animlength; wait( l_animlength );
} }
} }
} }
@ -338,14 +350,16 @@ playspringpadresetaudio( time )
ent = spawn( "script_origin", self.origin ); ent = spawn( "script_origin", self.origin );
ent playloopsound( "zmb_highrise_launcher_reset_loop" ); ent playloopsound( "zmb_highrise_launcher_reset_loop" );
self thread deleteentwhensounddone( time, ent ); self thread deleteentwhensounddone( time, ent );
self waittill( "death" ); self waittill( "death" );
ent delete(); ent delete();
} }
deleteentwhensounddone( time, ent ) deleteentwhensounddone( time, ent )
{ {
self endon( "death" ); self endon( "death" );
wait time; wait( time );
self notify( "springpadAudioCleanup" ); self notify( "springpadAudioCleanup" );
ent delete(); ent delete();
} }
@ -354,7 +368,9 @@ springpad_audio()
{ {
loop_ent = spawn( "script_origin", self.origin ); loop_ent = spawn( "script_origin", self.origin );
loop_ent playloopsound( "zmb_highrise_launcher_loop" ); loop_ent playloopsound( "zmb_highrise_launcher_loop" );
self waittill( "death" ); self waittill( "death" );
loop_ent delete(); loop_ent delete();
} }
@ -362,9 +378,10 @@ springpad_fx( weapon )
{ {
weapon endon( "death" ); weapon endon( "death" );
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
while ( isDefined( weapon ) )
while ( isdefined( weapon ) )
{ {
playfxontag( level._effect[ "springpade_on" ], weapon, "tag_origin" ); playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
wait 1; wait 1;
} }
} }
@ -377,106 +394,106 @@ springpadthink( weapon, electricradius, armed )
weapon endon( "death" ); weapon endon( "death" );
radiussquared = electricradius * electricradius; radiussquared = electricradius * electricradius;
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 ); trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
trigger.origin += anglesToForward( flat_angle( weapon.angles ) ) * -15; trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15;
trigger.angles = weapon.angles; trigger.angles = weapon.angles;
trigger enablelinkto(); trigger enablelinkto();
trigger linkto( weapon ); trigger linkto( weapon );
weapon.trigger = trigger; weapon.trigger = trigger;
/# /#
trigger.extent = ( 24, 24, 16 ); trigger.extent = ( 24.0, 24.0, 16.0 );
#/ #/
weapon thread springpadthinkcleanup( trigger ); weapon thread springpadthinkcleanup( trigger );
direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) ); direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
direction_vector = vectorScale( direction_forward, 1024 ); direction_vector = vectorscale( direction_forward, 1024 );
direction_origin = weapon.origin + direction_vector; direction_origin = weapon.origin + direction_vector;
home_angles = weapon.angles; home_angles = weapon.angles;
weapon.is_armed = 0; weapon.is_armed = 0;
self thread springpad_fx( weapon ); self thread springpad_fx( weapon );
self thread springpad_animate( weapon, armed ); self thread springpad_animate( weapon, armed );
weapon waittill( "armed" ); weapon waittill( "armed" );
weapon.is_armed = 1; weapon.is_armed = 1;
weapon.fling_targets = []; weapon.fling_targets = [];
self thread targeting_thread( weapon, trigger ); self thread targeting_thread( weapon, trigger );
while ( isDefined( weapon ) )
while ( isdefined( weapon ) )
{ {
wait_for_targets( weapon ); wait_for_targets( weapon );
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
{ {
weapon notify( "fling" ); weapon notify( "fling", weapon.zombies_only );
weapon.is_armed = 0; weapon.is_armed = 0;
weapon.zombies_only = 1; weapon.zombies_only = 1;
_a490 = weapon.fling_targets;
_k490 = getFirstArrayKey( _a490 ); foreach ( ent in weapon.fling_targets )
while ( isDefined( _k490 ) )
{ {
ent = _a490[ _k490 ];
if ( isplayer( ent ) ) if ( isplayer( ent ) )
{ {
ent thread player_fling( weapon.origin + vectorScale( ( 0, 0, 1 ), 30 ), weapon.angles, direction_vector, weapon ); ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon );
continue;
} }
else if ( isDefined( ent ) && isDefined( ent.custom_springpad_fling ) )
{ if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) )
if ( !isDefined( self.num_zombies_flung ) )
{ {
if ( !isdefined( self.num_zombies_flung ) )
self.num_zombies_flung = 0; self.num_zombies_flung = 0;
}
self.num_zombies_flung++; self.num_zombies_flung++;
self notify( "zombie_flung" ); self notify( "zombie_flung" );
ent thread [[ ent.custom_springpad_fling ]]( weapon, self ); ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
continue;
} }
else
{ if ( isdefined( ent ) )
if ( isDefined( ent ) )
{
if ( !isDefined( self.num_zombies_flung ) )
{ {
if ( !isdefined( self.num_zombies_flung ) )
self.num_zombies_flung = 0; self.num_zombies_flung = 0;
}
self.num_zombies_flung++; self.num_zombies_flung++;
self notify( "zombie_flung" ); self notify( "zombie_flung" );
if ( !isDefined( weapon.fling_scaler ) )
{ if ( !isdefined( weapon.fling_scaler ) )
weapon.fling_scaler = 1; weapon.fling_scaler = 1;
}
if ( isDefined( weapon.direction_vec_override ) ) if ( isdefined( weapon.direction_vec_override ) )
{
direction_vector = weapon.direction_vec_override; direction_vector = weapon.direction_vec_override;
}
ent dodamage( ent.health + 666, ent.origin ); ent dodamage( ent.health + 666, ent.origin );
ent startragdoll(); ent startragdoll();
ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler ); ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
weapon.springpad_kills++; weapon.springpad_kills++;
} }
} }
_k490 = getNextArrayKey( _a490, _k490 );
}
if ( weapon.springpad_kills >= 28 ) if ( weapon.springpad_kills >= 28 )
{
self thread springpad_expired( weapon ); self thread springpad_expired( weapon );
}
weapon.fling_targets = []; weapon.fling_targets = [];
weapon waittill( "armed" ); weapon waittill( "armed" );
weapon.is_armed = 1; weapon.is_armed = 1;
continue;
} }
else else
{ wait 0.1;
wait 0,1;
}
} }
} }
wait_for_targets( weapon ) wait_for_targets( weapon )
{ {
weapon endon( "hi_priority_target" ); weapon endon( "hi_priority_target" );
while ( isDefined( weapon ) )
while ( isdefined( weapon ) )
{ {
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 ) if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
{ {
wait 0,15; wait 0.15;
return; return;
} }
wait 0,05;
wait 0.05;
} }
} }
@ -487,64 +504,50 @@ targeting_thread( weapon, trigger )
self endon( "equip_springpad_zm_taken" ); self endon( "equip_springpad_zm_taken" );
weapon endon( "death" ); weapon endon( "death" );
weapon.zombies_only = 1; weapon.zombies_only = 1;
while ( isDefined( weapon ) )
while ( isdefined( weapon ) )
{ {
if ( weapon.is_armed ) if ( weapon.is_armed )
{ {
zombies = getaiarray( level.zombie_team ); zombies = getaiarray( level.zombie_team );
_a577 = zombies;
_k577 = getFirstArrayKey( _a577 ); foreach ( zombie in zombies )
while ( isDefined( _k577 ) )
{
zombie = _a577[ _k577 ];
if ( !isDefined( zombie ) || !isalive( zombie ) )
{
}
else
{
if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
{
break;
}
else
{ {
if ( !isdefined( zombie ) || !isalive( zombie ) )
continue;
if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
continue;
if ( zombie istouching( trigger ) ) if ( zombie istouching( trigger ) )
{
weapon springpad_add_fling_ent( zombie ); weapon springpad_add_fling_ent( zombie );
} }
}
}
_k577 = getNextArrayKey( _a577, _k577 );
}
players = get_players(); players = get_players();
_a605 = players;
_k605 = getFirstArrayKey( _a605 ); foreach ( player in players )
while ( isDefined( _k605 ) )
{ {
player = _a605[ _k605 ];
if ( is_player_valid( player ) && player istouching( trigger ) ) if ( is_player_valid( player ) && player istouching( trigger ) )
{ {
weapon springpad_add_fling_ent( player ); weapon springpad_add_fling_ent( player );
weapon.zombies_only = 0; weapon.zombies_only = 0;
} }
_k605 = getNextArrayKey( _a605, _k605 );
} }
if ( !weapon.zombies_only ) if ( !weapon.zombies_only )
{
weapon notify( "hi_priority_target" ); weapon notify( "hi_priority_target" );
} }
}
wait 0,05; wait 0.05;
} }
} }
springpad_fling_attacker( ent ) springpad_fling_attacker( ent )
{ {
springpad_add_fling_ent( ent ); springpad_add_fling_ent( ent );
if ( isDefined( level.springpad_attack_delay ) )
{ if ( isdefined( level.springpad_attack_delay ) )
wait level.springpad_attack_delay; wait( level.springpad_attack_delay );
}
} }
springpad_add_fling_ent( ent ) springpad_add_fling_ent( ent )
@ -554,29 +557,30 @@ springpad_add_fling_ent( ent )
springpad_expired( weapon ) springpad_expired( weapon )
{ {
weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 ); weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" ); self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
self.springpad_kills = 0; self.springpad_kills = 0;
} }
player_fling( origin, angles, velocity, weapon ) player_fling( origin, angles, velocity, weapon )
{ {
torigin = ( self.origin[ 0 ], self.origin[ 1 ], origin[ 2 ] ); torigin = ( self.origin[0], self.origin[1], origin[2] );
aorigin = ( origin + torigin ) * 0,5; aorigin = ( origin + torigin ) * 0.5;
trace = physicstrace( origin, torigin, vectorScale( ( 0, 0, 1 ), 15 ), ( 15, 15, 30 ), self ); trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
if ( isDefined( trace ) || !isDefined( trace[ "fraction" ] ) && trace[ "fraction" ] < 1 )
{ if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 )
if ( !isDefined( weapon.springpad_kills ) )
{ {
if ( !isdefined( weapon.springpad_kills ) )
weapon.springpad_kills = 0; weapon.springpad_kills = 0;
}
weapon.springpad_kills += 5; weapon.springpad_kills += 5;
if ( weapon.springpad_kills >= 28 ) if ( weapon.springpad_kills >= 28 )
{
weapon.owner thread springpad_expired( weapon ); weapon.owner thread springpad_expired( weapon );
}
return; return;
} }
self setorigin( aorigin ); self setorigin( aorigin );
wait_network_frame(); wait_network_frame();
self setvelocity( velocity ); self setvelocity( velocity );
@ -585,47 +589,44 @@ player_fling( origin, angles, velocity, weapon )
springpadthinkcleanup( trigger ) springpadthinkcleanup( trigger )
{ {
self waittill( "death" ); self waittill( "death" );
if ( isDefined( trigger ) )
{ if ( isdefined( trigger ) )
trigger delete(); trigger delete();
}
} }
debugspringpad( radius ) debugspringpad( radius )
{ {
/# /#
color_armed = ( 0, 0, 1 ); color_armed = ( 0, 1, 0 );
color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 ); color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 );
while ( isDefined( self ) )
while ( isdefined( self ) )
{ {
if ( getDvarInt( #"EB512CB7" ) ) if ( getdvarint( _hash_EB512CB7 ) )
{ {
if ( isDefined( self.trigger ) ) if ( isdefined( self.trigger ) )
{ {
color = color_unarmed; color = color_unarmed;
if ( isDefined( self.is_armed ) && self.is_armed )
{ if ( isdefined( self.is_armed ) && self.is_armed )
color = color_armed; color = color_armed;
}
vec = self.trigger.extent; vec = self.trigger.extent;
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[ 1 ], color, 1, 0, 1 ); box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
} }
color = ( 0, 0, 1 );
color = ( 0, 1, 0 );
text = ""; text = "";
if ( isDefined( self.springpad_kills ) )
{ if ( isdefined( self.springpad_kills ) )
text = "" + self.springpad_kills + ""; text = "" + self.springpad_kills + "";
} else if ( isdefined( self.owner.springpad_kills ) )
else
{
if ( isDefined( self.owner.springpad_kills ) )
{
text = "[" + self.owner.springpad_kills + "]"; text = "[" + self.owner.springpad_kills + "]";
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 );
} }
wait 0.05;
} }
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), text, color, 1, 0,5, 1 );
}
wait 0,05;
#/ #/
}
} }

View File

@ -1,17 +1,22 @@
#include maps/mp/zombies/_zm_turned; // 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/gametypes_zm/_hud_util; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/_utility; #include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_turned;
register_game_module() register_game_module()
{ {
} }
onstartgametype( name ) onstartgametype( name )
{ {
} }
onstartcleansedgametype() onstartcleansedgametype()
{ {
} }

View File

@ -1,11 +1,14 @@
#include maps/mp/zombies/_zm_game_module_utility; // 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/gametypes_zm/_hud_util; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/_utility; #include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_utility;
#include maps\mp\zombies\_zm_game_module;
register_game_module() 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,6 +1,9 @@
#include maps/mp/zombies/_zm_game_module_utility; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module_meat_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/gametypes_zm/_hud_util; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_utility;

View File

@ -1,30 +1,26 @@
#include maps/mp/zombies/_zm_powerups; // T6 GSC SOURCE
#include maps/mp/gametypes_zm/zmeat; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_audio_announcer; #include common_scripts\utility;
#include maps/mp/zombies/_zm_laststand; #include maps\mp\_utility;
#include maps/mp/zombies/_zm_game_module_utility; #include maps\mp\zombies\_zm_utility;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_game_module_utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_laststand;
#include common_scripts/utility; #include maps\mp\zombies\_zm_audio_announcer;
#include maps\mp\gametypes_zm\zmeat;
#include maps\mp\zombies\_zm_powerups;
award_grenades_for_team( team ) award_grenades_for_team( team )
{ {
players = get_players(); players = get_players();
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
{
i++;
continue; continue;
}
else lethal_grenade = players[i] get_player_lethal_grenade();
{ players[i] giveweapon( lethal_grenade );
lethal_grenade = players[ i ] get_player_lethal_grenade(); players[i] setweaponammoclip( lethal_grenade, 4 );
players[ i ] giveweapon( lethal_grenade );
players[ i ] setweaponammoclip( lethal_grenade, 4 );
}
i++;
} }
} }
@ -32,20 +28,15 @@ get_players_on_meat_team( team )
{ {
players = get_players(); players = get_players();
players_on_team = []; players_on_team = [];
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
{
i++;
continue; continue;
players_on_team[players_on_team.size] = players[i];
} }
else
{
players_on_team[ players_on_team.size ] = players[ i ];
}
i++;
}
return players_on_team; return players_on_team;
} }
@ -53,56 +44,44 @@ get_alive_players_on_meat_team( team )
{ {
players = get_players(); players = get_players();
players_on_team = []; players_on_team = [];
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team ) if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
{
i++;
continue; continue;
}
else if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{
if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{
i++;
continue; continue;
players_on_team[players_on_team.size] = players[i];
} }
else
{
players_on_team[ players_on_team.size ] = players[ i ];
}
}
i++;
}
return players_on_team; return players_on_team;
} }
init_minigun_ring() init_minigun_ring()
{ {
if ( isDefined( level._minigun_ring ) ) if ( isdefined( level._minigun_ring ) )
{
return; return;
}
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" ); ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
if ( !isDefined( ring_pos ) )
{ if ( !isdefined( ring_pos ) )
return; return;
}
level._minigun_ring = spawn( "script_model", ring_pos.origin ); level._minigun_ring = spawn( "script_model", ring_pos.origin );
level._minigun_ring.angles = ring_pos.angles; level._minigun_ring.angles = ring_pos.angles;
level._minigun_ring setmodel( ring_pos.script_parameters ); level._minigun_ring setmodel( ring_pos.script_parameters );
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" ); level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
if ( isDefined( level._minigun_ring_clip ) )
{ if ( isdefined( level._minigun_ring_clip ) )
level._minigun_ring_clip linkto( level._minigun_ring ); level._minigun_ring_clip linkto( level._minigun_ring );
}
else else
{
iprintlnbold( "BUG: no level._minigun_ring_clip" ); iprintlnbold( "BUG: no level._minigun_ring_clip" );
}
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" ); level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
if ( isDefined( level._minigun_ring_trig ) )
if ( isdefined( level._minigun_ring_trig ) )
{ {
level._minigun_ring_trig enablelinkto(); level._minigun_ring_trig enablelinkto();
level._minigun_ring_trig linkto( level._minigun_ring ); level._minigun_ring_trig linkto( level._minigun_ring );
@ -113,41 +92,38 @@ init_minigun_ring()
level thread ring_toss( level._minigun_ring_trig, "minigun" ); level thread ring_toss( level._minigun_ring_trig, "minigun" );
} }
else else
{
iprintlnbold( "BUG: no level._minigun_ring_trig" ); iprintlnbold( "BUG: no level._minigun_ring_trig" );
}
level._minigun_ring thread move_ring( ring_pos ); level._minigun_ring thread move_ring( ring_pos );
level._minigun_ring thread rotate_ring( 1 ); level._minigun_ring thread rotate_ring( 1 );
} }
init_ammo_ring() init_ammo_ring()
{ {
if ( isDefined( level._ammo_ring ) ) if ( isdefined( level._ammo_ring ) )
{
return; return;
}
name = level._meat_location + "_meat_ammo"; name = level._meat_location + "_meat_ammo";
ring_pos = getstruct( name, "script_noteworthy" ); ring_pos = getstruct( name, "script_noteworthy" );
if ( !isDefined( ring_pos ) )
{ if ( !isdefined( ring_pos ) )
return; return;
}
level._ammo_ring = spawn( "script_model", ring_pos.origin ); level._ammo_ring = spawn( "script_model", ring_pos.origin );
level._ammo_ring.angles = ring_pos.angles; level._ammo_ring.angles = ring_pos.angles;
level._ammo_ring setmodel( ring_pos.script_parameters ); level._ammo_ring setmodel( ring_pos.script_parameters );
name = level._meat_location + "_meat_ammo_clip"; name = level._meat_location + "_meat_ammo_clip";
level._ammo_ring_clip = getent( name, "script_noteworthy" ); level._ammo_ring_clip = getent( name, "script_noteworthy" );
if ( isDefined( level._ammo_ring_clip ) )
{ if ( isdefined( level._ammo_ring_clip ) )
level._ammo_ring_clip linkto( level._ammo_ring ); level._ammo_ring_clip linkto( level._ammo_ring );
}
else else
{
iprintlnbold( "BUG: no level._ammo_ring_clip" ); iprintlnbold( "BUG: no level._ammo_ring_clip" );
}
name = level._meat_location + "_meat_ammo_trig"; name = level._meat_location + "_meat_ammo_trig";
level._ammo_ring_trig = getent( name, "targetname" ); level._ammo_ring_trig = getent( name, "targetname" );
if ( isDefined( level._ammo_ring_clip ) )
if ( isdefined( level._ammo_ring_clip ) )
{ {
level._ammo_ring_trig enablelinkto(); level._ammo_ring_trig enablelinkto();
level._ammo_ring_trig linkto( level._ammo_ring ); level._ammo_ring_trig linkto( level._ammo_ring );
@ -158,63 +134,66 @@ init_ammo_ring()
level thread ring_toss( level._ammo_ring_trig, "ammo" ); level thread ring_toss( level._ammo_ring_trig, "ammo" );
} }
else else
{
iprintlnbold( "BUG: no level._ammo_ring_trig" ); iprintlnbold( "BUG: no level._ammo_ring_trig" );
}
level._ammo_ring thread move_ring( ring_pos ); level._ammo_ring thread move_ring( ring_pos );
level._ammo_ring thread rotate_ring( 1 ); level._ammo_ring thread rotate_ring( 1 );
} }
init_splitter_ring() init_splitter_ring()
{ {
if ( isDefined( level._splitter_ring ) ) if ( isdefined( level._splitter_ring ) )
{
return; return;
}
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" ); ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
if ( !isDefined( ring_pos ) )
{ if ( !isdefined( ring_pos ) )
return; return;
}
level._splitter_ring = spawn( "script_model", ring_pos.origin ); level._splitter_ring = spawn( "script_model", ring_pos.origin );
level._splitter_ring.angles = ring_pos.angles; level._splitter_ring.angles = ring_pos.angles;
level._splitter_ring setmodel( ring_pos.script_parameters ); level._splitter_ring setmodel( ring_pos.script_parameters );
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" ); level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" ); level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" );
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
{ {
level._splitter_ring_trig1 enablelinkto(); level._splitter_ring_trig1 enablelinkto();
level._splitter_ring_trig2 enablelinkto(); level._splitter_ring_trig2 enablelinkto();
} }
else else
{
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" ); iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
}
level._splitter_ring notsolid(); level._splitter_ring notsolid();
level._meat_icon = spawn( "script_model", level._splitter_ring.origin ); level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) ); level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
level._meat_icon linkto( level._splitter_ring ); level._meat_icon linkto( level._splitter_ring );
level._meat_icon setclientfield( "ring_glow_meatfx", 1 ); level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
{ {
level._splitter_ring_trig1 linkto( level._splitter_ring ); level._splitter_ring_trig1 linkto( level._splitter_ring );
level._splitter_ring_trig2 linkto( level._splitter_ring ); level._splitter_ring_trig2 linkto( level._splitter_ring );
level thread ring_toss( level._splitter_ring_trig1, "splitter" ); level thread ring_toss( level._splitter_ring_trig1, "splitter" );
level thread ring_toss( level._splitter_ring_trig2, "splitter" ); level thread ring_toss( level._splitter_ring_trig2, "splitter" );
} }
level._splitter_ring thread move_ring( ring_pos ); level._splitter_ring thread move_ring( ring_pos );
} }
ring_toss( trig, type ) ring_toss( trig, type )
{ {
level endon( "end_game" ); level endon( "end_game" );
while ( 1 )
while ( true )
{ {
while ( isDefined( level._ring_triggered ) && level._ring_triggered ) if ( isdefined( level._ring_triggered ) && level._ring_triggered )
{ {
wait 0,05; wait 0.05;
continue;
} }
if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving )
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) )
{ {
if ( level.item_meat istouching( trig ) ) if ( level.item_meat istouching( trig ) )
{ {
@ -223,7 +202,8 @@ ring_toss( trig, type )
level thread ring_cooldown(); level thread ring_cooldown();
} }
} }
wait 0,05;
wait 0.05;
} }
} }
@ -235,7 +215,7 @@ ring_cooldown()
ring_toss_prize( type, trig ) ring_toss_prize( type, trig )
{ {
switch( type ) switch ( type )
{ {
case "splitter": case "splitter":
level thread meat_splitter( trig ); level thread meat_splitter( trig );
@ -253,43 +233,41 @@ meat_splitter( trig )
{ {
level endon( "meat_grabbed" ); level endon( "meat_grabbed" );
level endon( "meat_kicked" ); level endon( "meat_kicked" );
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
{ while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
wait 0,05; wait 0.05;
}
exit_trig = getent( trig.target, "targetname" ); exit_trig = getent( trig.target, "targetname" );
exit_struct = getstruct( trig.target, "targetname" ); exit_struct = getstruct( trig.target, "targetname" );
while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
{ while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
wait 0,05; wait 0.05;
}
while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) ) while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
{ wait 0.05;
wait 0,05;
} if ( !isdefined( level.item_meat ) )
if ( !isDefined( level.item_meat ) )
{
return; return;
}
playfx( level._effect[ "fw_burst" ], exit_trig.origin ); playfx( level._effect["fw_burst"], exit_trig.origin );
flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) ); flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) );
velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) ); velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) );
velocity1 = ( velocity[ 0 ] + 75, velocity[ 1 ] + 75, randomintrange( 75, 125 ) ); velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
velocity2 = ( velocity[ 0 ] - 75, velocity[ 1 ] - 75, randomintrange( 75, 125 ) ); velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) );
velocity3 = ( velocity[ 0 ], velocity[ 1 ], 100 ); velocity3 = ( velocity[0], velocity[1], 100 );
level._fake_meats = []; level._fake_meats = [];
level._meat_splitter_activated = 1; level._meat_splitter_activated = 1;
org = exit_trig.origin; org = exit_trig.origin;
player = get_players()[ 0 ]; player = get_players()[0];
player._spawning_meat = 1; player._spawning_meat = 1;
player endon( "disconnect" ); player endon( "disconnect" );
thread split_meat( player, org, velocity1, velocity2, velocity ); thread split_meat( player, org, velocity1, velocity2, velocity );
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
wait 0,1; wait 0.1;
while ( isDefined( level.splitting_meat ) && level.splitting_meat )
{ while ( isdefined( level.splitting_meat ) && level.splitting_meat )
wait 0,05; wait 0.05;
}
player._spawning_meat = 0; player._spawning_meat = 0;
} }
@ -298,86 +276,77 @@ split_meat( player, org, vel1, vel2, vel3 )
level.splitting_meat = 1; level.splitting_meat = 1;
level.item_meat cleanup_meat(); level.item_meat cleanup_meat();
wait_network_frame(); wait_network_frame();
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 ); level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 );
wait_network_frame(); wait_network_frame();
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 ); level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 );
wait_network_frame(); wait_network_frame();
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 ); level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
real_meat = random( level._fake_meats ); real_meat = random( level._fake_meats );
_a330 = level._fake_meats;
_k330 = getFirstArrayKey( _a330 ); foreach ( meat in level._fake_meats )
while ( isDefined( _k330 ) )
{ {
meat = _a330[ _k330 ];
if ( real_meat != meat ) if ( real_meat != meat )
{ {
meat._fake_meat = 1; meat._fake_meat = 1;
meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup(); meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup();
continue;
} }
else
{
meat._fake_meat = 0; meat._fake_meat = 0;
level.item_meat = meat; level.item_meat = meat;
} }
_k330 = getNextArrayKey( _a330, _k330 );
}
level.splitting_meat = 0; level.splitting_meat = 0;
} }
minigun_prize( trig ) minigun_prize( trig )
{ {
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
{ wait 0.05;
wait 0,05;
} if ( !isdefined( level.item_meat ) )
if ( !isDefined( level.item_meat ) )
{
return; return;
}
if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown ) if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
{
return; return;
}
level thread minigun_toss_cooldown(); level thread minigun_toss_cooldown();
if ( !is_player_valid( level._last_person_to_throw_meat ) ) if ( !is_player_valid( level._last_person_to_throw_meat ) )
{
return; return;
}
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" ); level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" );
level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat ); level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
} }
ammo_prize( trig ) ammo_prize( trig )
{ {
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) ) while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
{ wait 0.05;
wait 0,05;
} if ( !isdefined( level.item_meat ) )
if ( !isDefined( level.item_meat ) )
{
return; return;
}
if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown ) if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
{
return; return;
}
playfx( level._effect[ "poltergeist" ], trig.origin ); playfx( level._effect["poltergeist"], trig.origin );
level thread ammo_toss_cooldown(); level thread ammo_toss_cooldown();
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" ); level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" );
level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat ); level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
} }
minigun_toss_cooldown() minigun_toss_cooldown()
{ {
level._minigun_toss_cooldown = 1; level._minigun_toss_cooldown = 1;
if ( isDefined( level._minigun_icon ) )
{ if ( isdefined( level._minigun_icon ) )
level._minigun_icon delete(); level._minigun_icon delete();
}
waittill_any_or_timeout( 120, "meat_end" ); waittill_any_or_timeout( 120, "meat_end" );
playfx( level._effect[ "poltergeist" ], level._minigun_ring_trig.origin ); playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin ); level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin );
level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) ); level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) );
level._minigun_icon linkto( level._minigun_ring ); level._minigun_icon linkto( level._minigun_ring );
@ -388,12 +357,12 @@ minigun_toss_cooldown()
ammo_toss_cooldown() ammo_toss_cooldown()
{ {
level._ammo_toss_cooldown = 1; level._ammo_toss_cooldown = 1;
if ( isDefined( level._ammo_icon ) )
{ if ( isdefined( level._ammo_icon ) )
level._ammo_icon delete(); level._ammo_icon delete();
}
waittill_any_or_timeout( 60, "meat_end" ); waittill_any_or_timeout( 60, "meat_end" );
playfx( level._effect[ "poltergeist" ], level._ammo_ring_trig.origin ); playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin ); level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin );
level._ammo_icon setmodel( "zombie_ammocan" ); level._ammo_icon setmodel( "zombie_ammocan" );
level._ammo_icon linkto( level._ammo_ring ); level._ammo_icon linkto( level._ammo_ring );
@ -405,119 +374,120 @@ wait_for_team_death( team )
{ {
level endon( "meat_end" ); level endon( "meat_end" );
encounters_team = undefined; encounters_team = undefined;
while ( 1 )
while ( true )
{ {
wait 1; wait 1;
while ( isDefined( level._checking_for_save ) && level._checking_for_save )
{ while ( isdefined( level._checking_for_save ) && level._checking_for_save )
wait 0,1; wait 0.1;
}
alive_team_players = get_alive_players_on_meat_team( team ); alive_team_players = get_alive_players_on_meat_team( team );
while ( alive_team_players.size > 0 )
if ( alive_team_players.size > 0 )
{ {
encounters_team = alive_team_players[ 0 ]._encounters_team; encounters_team = alive_team_players[0]._encounters_team;
continue;
} }
break;
} }
if ( !isDefined( encounters_team ) )
{ if ( !isdefined( encounters_team ) )
return; return;
}
winning_team = "A"; winning_team = "A";
if ( encounters_team == "A" ) if ( encounters_team == "A" )
{
winning_team = "B"; winning_team = "B";
}
level notify( "meat_end" ); level notify( "meat_end", winning_team );
} }
check_should_save_player( team ) check_should_save_player( team )
{ {
if ( !isDefined( level._meat_on_team ) ) if ( !isdefined( level._meat_on_team ) )
{ return false;
return 0;
}
level._checking_for_save = 1; level._checking_for_save = 1;
players = get_players_on_meat_team( team ); players = get_players_on_meat_team( team );
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
player = players[ i ]; player = players[i];
if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
{ {
while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
{ {
if ( level._meat_on_team != player._meat_team ) if ( level._meat_on_team != player._meat_team )
{
break; break;
}
else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team ) if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
{
break; break;
wait 0.05;
} }
else
{ if ( !isdefined( player ) )
wait 0,05;
}
}
if ( !isDefined( player ) )
{ {
level._checking_for_save = 0; level._checking_for_save = 0;
return 0; return false;
} }
if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player )
if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) )
{ {
level._checking_for_save = 0; level._checking_for_save = 0;
return 0; return false;
} }
if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
{ {
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
level thread revive_saved_player( player ); level thread revive_saved_player( player );
return 1; return true;
} }
} }
} }
i++;
} }
level._checking_for_save = 0; level._checking_for_save = 0;
return 0; return false;
} }
watch_save_player() watch_save_player()
{ {
if ( !isDefined( level._meat_on_team ) ) if ( !isdefined( level._meat_on_team ) )
{ return false;
return 0;
} if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self ) return false;
{
return 0;
}
level._checking_for_save = 1; level._checking_for_save = 1;
while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) )
{ {
if ( level._meat_on_team != self._meat_team ) if ( level._meat_on_team != self._meat_team )
{ break;
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team )
break;
wait 0.05;
} }
else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team )
if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
{ {
} if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
else
{
wait 0,05;
}
}
if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
{
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{ {
level thread revive_saved_player( self ); level thread revive_saved_player( self );
return 1; return true;
} }
} }
level._checking_for_save = 0; level._checking_for_save = 0;
return 0; return false;
} }
revive_saved_player( player ) revive_saved_player( player )
@ -525,11 +495,11 @@ revive_saved_player( player )
player endon( "disconnect" ); player endon( "disconnect" );
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" ); player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
player playsound( level.zmb_laugh_alias ); player playsound( level.zmb_laugh_alias );
wait 0,25; wait 0.25;
playfx( level._effect[ "poltergeist" ], player.origin ); playfx( level._effect["poltergeist"], player.origin );
playsoundatposition( "zmb_bolt", player.origin ); playsoundatposition( "zmb_bolt", player.origin );
earthquake( 0,5, 0,75, player.origin, 1000 ); earthquake( 0.5, 0.75, player.origin, 1000 );
player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); player thread maps\mp\zombies\_zm_laststand::auto_revive( player );
player._saved_by_throw++; player._saved_by_throw++;
level._checking_for_save = 0; level._checking_for_save = 0;
} }
@ -542,11 +512,11 @@ get_game_module_players( player )
item_meat_spawn( origin ) item_meat_spawn( origin )
{ {
org = origin; org = origin;
player = get_players()[ 0 ]; player = get_players()[0];
player._spawning_meat = 1; player._spawning_meat = 1;
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) ); player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) );
playsoundatposition( "zmb_spawn_powerup", org ); playsoundatposition( "zmb_spawn_powerup", org );
wait 0,1; wait 0.1;
player._spawning_meat = undefined; player._spawning_meat = undefined;
} }
@ -562,6 +532,7 @@ init_item_meat( gametype )
set_gamemode_var_once( "item_meat_name", "item_head_zm" ); set_gamemode_var_once( "item_meat_name", "item_head_zm" );
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" ); set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
} }
precacheitem( get_gamemode_var( "item_meat_name" ) ); precacheitem( get_gamemode_var( "item_meat_name" ) );
set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) ); set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) );
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) ); level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
@ -576,42 +547,47 @@ meat_intro( launch_spot )
level thread multi_launch( launch_spot ); level thread multi_launch( launch_spot );
launch_meat( launch_spot ); launch_meat( launch_spot );
drop_meat( level._meat_start_point ); drop_meat( level._meat_start_point );
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 ); level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
} }
launch_meat( launch_spot ) launch_meat( launch_spot )
{ {
level waittill( "launch_meat" ); level waittill( "launch_meat" );
spots = getstructarray( launch_spot, "targetname" ); spots = getstructarray( launch_spot, "targetname" );
if ( isDefined( spots ) && spots.size > 0 )
if ( isdefined( spots ) && spots.size > 0 )
{ {
spot = random( spots ); spot = random( spots );
meat = spawn( "script_model", spot.origin ); meat = spawn( "script_model", spot.origin );
meat setmodel( "tag_origin" ); meat setmodel( "tag_origin" );
wait_network_frame(); wait_network_frame();
playfxontag( level._effect[ "fw_trail" ], meat, "tag_origin" ); playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
meat playloopsound( "zmb_souls_loop", 0,75 ); meat playloopsound( "zmb_souls_loop", 0.75 );
dest = spot; dest = spot;
while ( isDefined( dest ) && isDefined( dest.target ) )
while ( isdefined( dest ) && isdefined( dest.target ) )
{ {
new_dest = getstruct( dest.target, "targetname" ); new_dest = getstruct( dest.target, "targetname" );
dest = new_dest; dest = new_dest;
dist = distance( new_dest.origin, meat.origin ); dist = distance( new_dest.origin, meat.origin );
time = dist / 700; time = dist / 700;
meat moveto( new_dest.origin, time ); meat moveto( new_dest.origin, time );
meat waittill( "movedone" ); meat waittill( "movedone" );
} }
meat playsound( "zmb_souls_end" ); meat playsound( "zmb_souls_end" );
playfx( level._effect[ "fw_burst" ], meat.origin ); playfx( level._effect["fw_burst"], meat.origin );
wait randomfloatrange( 0,2, 0,5 ); wait( randomfloatrange( 0.2, 0.5 ) );
meat playsound( "zmb_souls_end" ); meat playsound( "zmb_souls_end" );
playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) ); playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
wait randomfloatrange( 0,5, 0,75 ); wait( randomfloatrange( 0.5, 0.75 ) );
meat playsound( "zmb_souls_end" ); meat playsound( "zmb_souls_end" );
playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) ); playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
wait randomfloatrange( 0,5, 0,75 ); wait( randomfloatrange( 0.5, 0.75 ) );
meat playsound( "zmb_souls_end" ); meat playsound( "zmb_souls_end" );
playfx( level._effect[ "fw_burst" ], meat.origin ); playfx( level._effect["fw_burst"], meat.origin );
meat delete(); meat delete();
} }
} }
@ -619,41 +595,42 @@ launch_meat( launch_spot )
multi_launch( launch_spot ) multi_launch( launch_spot )
{ {
spots = getstructarray( launch_spot, "targetname" ); spots = getstructarray( launch_spot, "targetname" );
if ( isDefined( spots ) && spots.size > 0 )
if ( isdefined( spots ) && spots.size > 0 )
{ {
x = 0; for ( x = 0; x < 3; x++ )
while ( x < 3 )
{ {
i = 0; for ( i = 0; i < spots.size; i++ )
while ( i < spots.size )
{ {
delay = randomfloatrange( 0,1, 0,25 ); delay = randomfloatrange( 0.1, 0.25 );
level thread fake_launch( spots[ i ], delay ); level thread fake_launch( spots[i], delay );
i++;
} }
wait randomfloatrange( 0,25, 0,75 );
wait( randomfloatrange( 0.25, 0.75 ) );
if ( x > 1 ) if ( x > 1 )
level notify( "launch_meat" );
}
}
else
{ {
wait( randomfloatrange( 0.25, 0.75 ) );
level notify( "launch_meat" ); level notify( "launch_meat" );
} }
x++;
}
}
else wait randomfloatrange( 0,25, 0,75 );
level notify( "launch_meat" );
} }
fake_launch( launch_spot, delay ) fake_launch( launch_spot, delay )
{ {
wait delay; wait( delay );
wait randomfloatrange( 0,1, 4 ); wait( randomfloatrange( 0.1, 4 ) );
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) ); meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
meat setmodel( "tag_origin" ); meat setmodel( "tag_origin" );
wait_network_frame(); wait_network_frame();
playfxontag( level._effect[ "fw_trail_cheap" ], meat, "tag_origin" ); playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
meat playloopsound( "zmb_souls_loop", 0,75 ); meat playloopsound( "zmb_souls_loop", 0.75 );
dest = launch_spot; dest = launch_spot;
while ( isDefined( dest ) && isDefined( dest.target ) )
while ( isdefined( dest ) && isdefined( dest.target ) )
{ {
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ); random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
new_dest = getstruct( dest.target, "targetname" ); new_dest = getstruct( dest.target, "targetname" );
@ -661,25 +638,29 @@ fake_launch( launch_spot, delay )
dist = distance( new_dest.origin + random_offset, meat.origin ); dist = distance( new_dest.origin + random_offset, meat.origin );
time = dist / 700; time = dist / 700;
meat moveto( new_dest.origin + random_offset, time ); meat moveto( new_dest.origin + random_offset, time );
meat waittill( "movedone" ); meat waittill( "movedone" );
} }
meat playsound( "zmb_souls_end" ); meat playsound( "zmb_souls_end" );
playfx( level._effect[ "fw_pre_burst" ], meat.origin ); playfx( level._effect["fw_pre_burst"], meat.origin );
meat delete(); meat delete();
} }
drop_meat( drop_spot ) drop_meat( drop_spot )
{ {
meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) ); meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) );
meat setmodel( "tag_origin" ); meat setmodel( "tag_origin" );
dist = distance( meat.origin, drop_spot ); dist = distance( meat.origin, drop_spot );
time = dist / 400; time = dist / 400;
wait 2; wait 2;
meat moveto( drop_spot, time ); meat moveto( drop_spot, time );
wait_network_frame(); wait_network_frame();
playfxontag( level._effect[ "fw_drop" ], meat, "tag_origin" ); playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
meat waittill( "movedone" ); meat waittill( "movedone" );
playfx( level._effect[ "fw_impact" ], drop_spot );
playfx( level._effect["fw_impact"], drop_spot );
level notify( "reset_meat" ); level notify( "reset_meat" );
meat delete(); meat delete();
} }

View File

@ -1,42 +1,38 @@
#include maps/mp/zombies/_zm_game_module_cleansed; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_turned; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/gametypes_zm/_hud_util; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_turned;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zombies\_zm_game_module_cleansed;
register_game_module() register_game_module()
{ {
level.game_module_turned_index = 6; level.game_module_turned_index = 6;
maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", ::maps/mp/zombies/_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, ::maps/mp/zombies/_zm_game_module_cleansed::onspawnzombie, ::maps/mp/zombies/_zm_game_module_cleansed::onstartgametype ); maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_turned_index, "zturned", maps\mp\zombies\_zm_game_module_cleansed::onpreinitgametype, ::onpostinitgametype, undefined, maps\mp\zombies\_zm_game_module_cleansed::onspawnzombie, maps\mp\zombies\_zm_game_module_cleansed::onstartgametype );
} }
register_turned_match( start_func, end_func, name ) register_turned_match( start_func, end_func, name )
{ {
if ( !isDefined( level._registered_turned_matches ) ) if ( !isdefined( level._registered_turned_matches ) )
{
level._registered_turned_matches = []; level._registered_turned_matches = [];
}
match = spawnstruct(); match = spawnstruct();
match.match_name = name; match.match_name = name;
match.match_start_func = start_func; match.match_start_func = start_func;
match.match_end_func = end_func; match.match_end_func = end_func;
level._registered_turned_matches[ level._registered_turned_matches.size ] = match; level._registered_turned_matches[level._registered_turned_matches.size] = match;
} }
get_registered_turned_match( name ) get_registered_turned_match( name )
{ {
_a41 = level._registered_turned_matches; foreach ( struct in level._registered_turned_matches )
_k41 = getFirstArrayKey( _a41 );
while ( isDefined( _k41 ) )
{ {
struct = _a41[ _k41 ];
if ( struct.match_name == name ) if ( struct.match_name == name )
{
return struct; return struct;
} }
_k41 = getNextArrayKey( _a41, _k41 );
}
} }
set_current_turned_match( name ) set_current_turned_match( name )
@ -51,14 +47,13 @@ get_current_turned_match()
init_zombie_weapon() init_zombie_weapon()
{ {
maps/mp/zombies/_zm_turned::init(); maps\mp\zombies\_zm_turned::init();
} }
onpostinitgametype() onpostinitgametype()
{ {
if ( level.scr_zm_game_module != level.game_module_turned_index ) if ( level.scr_zm_game_module != level.game_module_turned_index )
{
return; return;
}
level thread init_zombie_weapon(); level thread init_zombie_weapon();
} }

View File

@ -1,9 +1,11 @@
#include maps/mp/zombies/_zm_game_module_meat; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_game_module_meat_utility; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_utility; #include maps\mp\_utility;
#include common_scripts/utility; #include maps\mp\gametypes_zm\_hud_util;
#include maps/mp/gametypes_zm/_hud_util; #include common_scripts\utility;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_meat;
init_item_meat() init_item_meat()
{ {
@ -16,16 +18,14 @@ 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 )
{ {
_a23 = positions; foreach ( position in positions )
_k23 = getFirstArrayKey( _a23 );
while ( isDefined( _k23 ) )
{ {
position = _a23[ _k23 ];
self moveto( position.origin, randomintrange( 30, 45 ) ); self moveto( position.origin, randomintrange( 30, 45 ) );
self waittill( "movedone" ); self waittill( "movedone" );
_k23 = getNextArrayKey( _a23, _k23 );
} }
} }
} }
@ -34,11 +34,11 @@ 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,10 +1,13 @@
#include maps/mp/zombies/_zm_audio; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_score; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_laststand; #include common_scripts\utility;
#include maps/mp/zombies/_zm_weapons; #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_weapons;
#include common_scripts/utility; #include maps\mp\zombies\_zm_laststand;
#include maps\mp\zombies\_zm_pers_upgrades_functions;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_audio;
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
{ {
@ -12,86 +15,82 @@ init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgrad
precacheitem( flourish_weapon_name ); precacheitem( flourish_weapon_name );
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ); add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" ); melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
i = 0;
while ( i < melee_weapon_triggers.size ) for ( i = 0; i < melee_weapon_triggers.size; i++ )
{
knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" );
if ( isDefined( knife_model ) )
{ {
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
if ( isdefined( knife_model ) )
knife_model hide(); knife_model hide();
}
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format )
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
{ {
melee_weapon_triggers[ i ] sethintstring( hint_string, cost ); melee_weapon_triggers[i] sethintstring( hint_string, cost );
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
{ {
cursor_hint = "HINT_WEAPON"; cursor_hint = "HINT_WEAPON";
cursor_hint_weapon = weapon_name; cursor_hint_weapon = weapon_name;
melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
} }
else else
{ melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
}
} }
else else
{ {
weapon_display = get_weapon_display_name( weapon_name ); weapon_display = get_weapon_display_name( weapon_name );
hint_string = &"ZOMBIE_WEAPONCOSTONLY"; hint_string = &"ZOMBIE_WEAPONCOSTONLY";
melee_weapon_triggers[ i ] sethintstring( hint_string, weapon_display, cost ); melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
{ {
cursor_hint = "HINT_WEAPON"; cursor_hint = "HINT_WEAPON";
cursor_hint_weapon = weapon_name; cursor_hint_weapon = weapon_name;
melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon ); melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
break;
} }
else else
{ melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
} }
melee_weapon_triggers[i] usetriggerrequirelookat();
} }
melee_weapon_triggers[ i ] usetriggerrequirelookat();
i++;
}
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" ); melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
i = 0;
while ( i < melee_weapon_structs.size ) for ( i = 0; i < melee_weapon_structs.size; i++ )
{ prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
i++;
}
register_melee_weapon_for_level( weapon_name ); register_melee_weapon_for_level( weapon_name );
if ( !isDefined( level.ballistic_weapon_name ) )
{ if ( !isdefined( level.ballistic_weapon_name ) )
level.ballistic_weapon_name = []; level.ballistic_weapon_name = [];
}
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name; level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
{ if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
level.ballistic_upgraded_weapon_name = []; level.ballistic_upgraded_weapon_name = [];
}
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name; level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
/# /#
if ( !isDefined( level.zombie_weapons[ weapon_name ] ) ) if ( !isdefined( level.zombie_weapons[weapon_name] ) )
{
if ( isDefined( level.devgui_add_weapon ) )
{ {
if ( isdefined( level.devgui_add_weapon ) )
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost ); [[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
}
#/ #/
}
}
} }
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
{ {
if ( isDefined( stub ) ) if ( isdefined( stub ) )
{ {
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
{ {
stub.hint_string = hint_string; stub.hint_string = hint_string;
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
{ {
stub.cursor_hint = "HINT_WEAPON"; stub.cursor_hint = "HINT_WEAPON";
stub.cursor_hint_weapon = weapon_name; stub.cursor_hint_weapon = weapon_name;
@ -107,7 +106,8 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
stub.hint_parm1 = get_weapon_display_name( weapon_name ); stub.hint_parm1 = get_weapon_display_name( weapon_name );
stub.hint_parm2 = cost; stub.hint_parm2 = cost;
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
{ {
stub.cursor_hint = "HINT_WEAPON"; stub.cursor_hint = "HINT_WEAPON";
stub.cursor_hint_weapon = weapon_name; stub.cursor_hint_weapon = weapon_name;
@ -118,6 +118,7 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
stub.cursor_hint_weapon = undefined; stub.cursor_hint_weapon = undefined;
} }
} }
stub.cost = cost; stub.cost = cost;
stub.weapon_name = weapon_name; stub.weapon_name = weapon_name;
stub.vo_dialog_id = vo_dialog_id; stub.vo_dialog_id = vo_dialog_id;
@ -132,45 +133,35 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
add_stub( stub, weapon_name ) add_stub( stub, weapon_name )
{ {
melee_weapon = undefined; melee_weapon = undefined;
i = 0;
while ( i < level._melee_weapons.size ) for ( i = 0; i < level._melee_weapons.size; i++ )
{ {
if ( level._melee_weapons[ i ].weapon_name == weapon_name ) if ( level._melee_weapons[i].weapon_name == weapon_name )
{ {
melee_weapon = level._melee_weapons[ i ]; melee_weapon = level._melee_weapons[i];
break; break;
} }
else
{
i++;
} }
}
if ( isDefined( stub ) && isDefined( melee_weapon ) ) if ( isdefined( stub ) && isdefined( melee_weapon ) )
{
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn ); prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
}
} }
give_melee_weapon_by_name( weapon_name ) give_melee_weapon_by_name( weapon_name )
{ {
melee_weapon = undefined; melee_weapon = undefined;
i = 0;
while ( i < level._melee_weapons.size ) for ( i = 0; i < level._melee_weapons.size; i++ )
{ {
if ( level._melee_weapons[ i ].weapon_name == weapon_name ) if ( level._melee_weapons[i].weapon_name == weapon_name )
{ {
melee_weapon = level._melee_weapons[ i ]; melee_weapon = level._melee_weapons[i];
break; break;
} }
else
{
i++;
} }
}
if ( isDefined( melee_weapon ) ) if ( isdefined( melee_weapon ) )
{
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined ); self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
}
} }
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn ) add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
@ -185,210 +176,186 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
melee_weapon.hint_string = hint_string; melee_weapon.hint_string = hint_string;
melee_weapon.vo_dialog_id = vo_dialog_id; melee_weapon.vo_dialog_id = vo_dialog_id;
melee_weapon.flourish_fn = flourish_fn; melee_weapon.flourish_fn = flourish_fn;
if ( !isDefined( level._melee_weapons ) )
{ if ( !isdefined( level._melee_weapons ) )
level._melee_weapons = []; level._melee_weapons = [];
}
level._melee_weapons[ level._melee_weapons.size ] = melee_weapon; level._melee_weapons[level._melee_weapons.size] = melee_weapon;
} }
player_can_see_weapon_prompt( weapon_name ) player_can_see_weapon_prompt( weapon_name )
{ {
if ( is_true( level._allow_melee_weapon_switching ) ) if ( is_true( level._allow_melee_weapon_switching ) )
{ return true;
return 1;
} if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) ) return false;
{
return 0; return true;
}
return 1;
} }
spectator_respawn_all() spectator_respawn_all()
{ {
i = 0; for ( i = 0; i < level._melee_weapons.size; i++ )
while ( i < level._melee_weapons.size ) self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
{
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].weapon_name );
i++;
}
} }
spectator_respawn( wallbuy_targetname, weapon_name ) spectator_respawn( wallbuy_targetname, weapon_name )
{ {
melee_triggers = getentarray( wallbuy_targetname, "targetname" ); melee_triggers = getentarray( wallbuy_targetname, "targetname" );
players = get_players(); players = get_players();
i = 0;
while ( i < melee_triggers.size ) for ( i = 0; i < melee_triggers.size; i++ )
{ {
melee_triggers[ i ] setvisibletoall(); melee_triggers[i] setvisibletoall();
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
{ {
j = 0; for ( j = 0; j < players.size; j++ )
while ( j < players.size )
{ {
if ( !players[ j ] player_can_see_weapon_prompt( weapon_name ) ) if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
{ melee_triggers[i] setinvisibletoplayer( players[j] );
melee_triggers[ i ] setinvisibletoplayer( players[ j ] );
}
j++;
} }
} }
i++;
} }
} }
trigger_hide_all() trigger_hide_all()
{ {
i = 0; for ( i = 0; i < level._melee_weapons.size; i++ )
while ( i < level._melee_weapons.size ) self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
{
self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname );
i++;
}
} }
trigger_hide( wallbuy_targetname ) trigger_hide( wallbuy_targetname )
{ {
melee_triggers = getentarray( wallbuy_targetname, "targetname" ); melee_triggers = getentarray( wallbuy_targetname, "targetname" );
i = 0;
while ( i < melee_triggers.size ) for ( i = 0; i < melee_triggers.size; i++ )
{ melee_triggers[i] setinvisibletoplayer( self );
melee_triggers[ i ] setinvisibletoplayer( self );
i++;
}
} }
has_any_ballistic_knife() has_any_ballistic_knife()
{ {
if ( self hasweapon( "knife_ballistic_zm" ) ) if ( self hasweapon( "knife_ballistic_zm" ) )
{ return true;
return 1;
}
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
return true;
for ( i = 0; i < level._melee_weapons.size; i++ )
{ {
return 1; if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
return true;
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
return true;
} }
i = 0;
while ( i < level._melee_weapons.size ) return false;
{
if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) )
{
return 1;
}
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
{
return 1;
}
i++;
}
return 0;
} }
has_upgraded_ballistic_knife() has_upgraded_ballistic_knife()
{ {
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) ) if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
return true;
for ( i = 0; i < level._melee_weapons.size; i++ )
{ {
return 1; if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
return true;
} }
i = 0;
while ( i < level._melee_weapons.size ) return false;
{
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
{
return 1;
}
i++;
}
return 0;
} }
give_ballistic_knife( weapon_string, upgraded ) give_ballistic_knife( weapon_string, upgraded )
{ {
current_melee_weapon = self get_player_melee_weapon(); current_melee_weapon = self get_player_melee_weapon();
if ( isDefined( current_melee_weapon ) )
if ( isdefined( current_melee_weapon ) )
{ {
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) ) if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
{ weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ];
} if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) ) weapon_string = level.ballistic_weapon_name[current_melee_weapon];
{
weapon_string = level.ballistic_weapon_name[ current_melee_weapon ];
}
} }
return weapon_string; return weapon_string;
} }
change_melee_weapon( weapon_name, current_weapon ) change_melee_weapon( weapon_name, current_weapon )
{ {
current_melee_weapon = self get_player_melee_weapon(); current_melee_weapon = self get_player_melee_weapon();
if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
{ {
self takeweapon( current_melee_weapon ); self takeweapon( current_melee_weapon );
unacquire_weapon_toggle( current_melee_weapon ); unacquire_weapon_toggle( current_melee_weapon );
} }
self set_player_melee_weapon( weapon_name ); self set_player_melee_weapon( weapon_name );
had_ballistic = 0; had_ballistic = 0;
had_ballistic_upgraded = 0; had_ballistic_upgraded = 0;
ballistic_was_primary = 0; ballistic_was_primary = 0;
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
i = 0;
while ( i < primaryweapons.size ) for ( i = 0; i < primaryweapons.size; i++ )
{ {
primary_weapon = primaryweapons[ i ]; primary_weapon = primaryweapons[i];
if ( issubstr( primary_weapon, "knife_ballistic_" ) ) if ( issubstr( primary_weapon, "knife_ballistic_" ) )
{ {
had_ballistic = 1; had_ballistic = 1;
if ( primary_weapon == current_weapon ) if ( primary_weapon == current_weapon )
{
ballistic_was_primary = 1; ballistic_was_primary = 1;
}
self notify( "zmb_lost_knife" ); self notify( "zmb_lost_knife" );
self takeweapon( primary_weapon ); self takeweapon( primary_weapon );
unacquire_weapon_toggle( primary_weapon ); unacquire_weapon_toggle( primary_weapon );
if ( issubstr( primary_weapon, "upgraded" ) ) if ( issubstr( primary_weapon, "upgraded" ) )
{
had_ballistic_upgraded = 1; had_ballistic_upgraded = 1;
} }
} }
i++;
}
if ( had_ballistic ) if ( had_ballistic )
{ {
if ( had_ballistic_upgraded ) if ( had_ballistic_upgraded )
{ {
new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
if ( ballistic_was_primary ) if ( ballistic_was_primary )
{
current_weapon = new_ballistic; current_weapon = new_ballistic;
}
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
} }
else else
{ {
new_ballistic = level.ballistic_weapon_name[ weapon_name ]; new_ballistic = level.ballistic_weapon_name[weapon_name];
if ( ballistic_was_primary ) if ( ballistic_was_primary )
{
current_weapon = new_ballistic; current_weapon = new_ballistic;
}
self giveweapon( new_ballistic, 0 ); self giveweapon( new_ballistic, 0 );
} }
} }
return current_weapon; return current_weapon;
} }
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ) melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
{ {
self.first_time_triggered = 0; self.first_time_triggered = 0;
while ( isDefined( self.stub ) )
if ( isdefined( self.stub ) )
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( isDefined( self.stub.first_time_triggered ) )
{ if ( isdefined( self.stub.first_time_triggered ) )
self.first_time_triggered = self.stub.first_time_triggered; self.first_time_triggered = self.stub.first_time_triggered;
}
weapon_name = self.stub.weapon_name; weapon_name = self.stub.weapon_name;
cost = self.stub.cost; cost = self.stub.cost;
flourish_fn = self.stub.flourish_fn; flourish_fn = self.stub.flourish_fn;
@ -397,135 +364,130 @@ melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapo
ballistic_weapon_name = self.stub.ballistic_weapon_name; ballistic_weapon_name = self.stub.ballistic_weapon_name;
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name; ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
players = getplayers(); players = getplayers();
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
{ {
i = 0; for ( i = 0; i < players.size; i++ )
while ( i < players.size )
{ {
if ( !players[ i ] player_can_see_weapon_prompt( weapon_name ) ) if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
{ self setinvisibletoplayer( players[i] );
self setinvisibletoplayer( players[ i ] );
}
i++;
} }
} }
} }
for ( ;; )
for (;;)
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
if ( !is_player_valid( player ) ) if ( !is_player_valid( player ) )
{ {
player thread ignore_triggers( 0,5 ); player thread ignore_triggers( 0.5 );
continue; continue;
} }
else if ( player in_revive_trigger() )
if ( player in_revive_trigger() )
{ {
wait 0,1; wait 0.1;
continue; continue;
} }
else if ( player isthrowinggrenade() )
if ( player isthrowinggrenade() )
{ {
wait 0,1; wait 0.1;
continue; continue;
} }
else if ( player.is_drinking > 0 )
if ( player.is_drinking > 0 )
{ {
wait 0,1; wait 0.1;
continue; continue;
} }
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
{ {
wait 0,1; wait 0.1;
continue; continue;
} }
else
{
if ( player isswitchingweapons() ) if ( player isswitchingweapons() )
{ {
wait 0,1; wait 0.1;
break; continue;
} }
else current_weapon = player getcurrentweapon();
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() ) current_weapon = player getcurrentweapon();
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
{ {
wait 0,1; wait 0.1;
break; continue;
} }
else
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
{ {
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) wait 0.1;
{ continue;
wait 0,1;
break;
} }
else
{
player_has_weapon = player hasweapon( weapon_name ); player_has_weapon = player hasweapon( weapon_name );
if ( !player_has_weapon ) if ( !player_has_weapon )
{ {
cost = self.stub.cost;
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
cost = int( cost / 2 );
if ( player.score >= cost ) if ( player.score >= cost )
{ {
if ( self.first_time_triggered == 0 ) if ( self.first_time_triggered == 0 )
{ {
model = getent( self.target, "targetname" ); model = getent( self.target, "targetname" );
if ( isDefined( model ) )
{ if ( isdefined( model ) )
model thread melee_weapon_show( player ); model thread melee_weapon_show( player );
} else if ( isdefined( self.clientfieldname ) )
else
{
if ( isDefined( self.clientfieldname ) )
{
level setclientfield( self.clientfieldname, 1 ); level setclientfield( self.clientfieldname, 1 );
}
}
self.first_time_triggered = 1; self.first_time_triggered = 1;
if ( isDefined( self.stub ) )
{ if ( isdefined( self.stub ) )
self.stub.first_time_triggered = 1; self.stub.first_time_triggered = 1;
} }
}
player maps/mp/zombies/_zm_score::minus_to_player_score( cost ); player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" ); bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self ); player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
} }
else else
{ {
play_sound_on_ent( "no_purchase" ); play_sound_on_ent( "no_purchase" );
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 ); player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
} }
break;
continue;
} }
else
{ if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
{
self setinvisibletoplayer( player ); self setinvisibletoplayer( player );
} }
}
}
}
}
}
} }
melee_weapon_show( player ) melee_weapon_show( player )
{ {
player_angles = vectorToAngle( player.origin - self.origin ); player_angles = vectortoangles( player.origin - self.origin );
player_yaw = player_angles[ 1 ]; player_yaw = player_angles[1];
weapon_yaw = self.angles[ 1 ]; weapon_yaw = self.angles[1];
yaw_diff = angleClamp180( player_yaw - weapon_yaw ); yaw_diff = angleclamp180( player_yaw - weapon_yaw );
if ( yaw_diff > 0 ) if ( yaw_diff > 0 )
{
yaw = weapon_yaw - 90; yaw = weapon_yaw - 90;
}
else else
{
yaw = weapon_yaw + 90; yaw = weapon_yaw + 90;
}
self.og_origin = self.origin; self.og_origin = self.origin;
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8; self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
wait 0,05; wait 0.05;
self show(); self show();
play_sound_at_pos( "weapon_show", self.origin, self ); play_sound_at_pos( "weapon_show", self.origin, self );
time = 1; time = 1;
@ -534,24 +496,22 @@ melee_weapon_show( player )
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger ) give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
{ {
if ( isDefined( flourish_fn ) ) if ( isdefined( flourish_fn ) )
{
self thread [[ flourish_fn ]](); self thread [[ flourish_fn ]]();
}
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name ); gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id ); self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" ); self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name ); self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
{ if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
return; return;
}
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching ) if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
{
if ( isDefined( trigger ) )
{ {
if ( isdefined( trigger ) )
trigger setinvisibletoplayer( self ); trigger setinvisibletoplayer( self );
}
self trigger_hide_all(); self trigger_hide_all();
} }
} }
@ -577,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
#/ #/
self enable_player_move_states(); self enable_player_move_states();
weapon = flourish_weapon_name; weapon = flourish_weapon_name;
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
{ {
self takeweapon( weapon ); self takeweapon( weapon );
self.lastactiveweapon = "none"; self.lastactiveweapon = "none";
return; return;
} }
self takeweapon( weapon ); self takeweapon( weapon );
self giveweapon( weapon_name ); self giveweapon( weapon_name );
gun = change_melee_weapon( weapon_name, gun ); gun = change_melee_weapon( weapon_name, gun );
if ( self hasweapon( "knife_zm" ) ) if ( self hasweapon( "knife_zm" ) )
{
self takeweapon( "knife_zm" ); self takeweapon( "knife_zm" );
}
if ( self is_multiple_drinking() ) if ( self is_multiple_drinking() )
{ {
self decrement_is_drinking(); self decrement_is_drinking();
@ -602,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
return; return;
} }
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) ) else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
{
self switchtoweapon( gun ); self switchtoweapon( gun );
}
else else
{ {
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
{ if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
self switchtoweapon( primaryweapons[ 0 ] ); self switchtoweapon( primaryweapons[0] );
}
} }
self waittill( "weapon_change_complete" ); self waittill( "weapon_change_complete" );
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
{ if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
self decrement_is_drinking(); self decrement_is_drinking();
}
} }

View File

@ -1,24 +1,26 @@
#include maps/mp/_visionset_mgr; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_perks; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_net; #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_net;
#include maps\mp\zombies\_zm_perks;
#include maps\mp\_visionset_mgr;
enable_divetonuke_perk_for_level() 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() 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 );
@ -26,21 +28,22 @@ init_divetonuke()
divetonuke_precache() 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" ); precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" ); precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke" ); precachemodel( "zombie_vending_nuke" );
precachemodel( "zombie_vending_nuke_on" ); precachemodel( "zombie_vending_nuke_on" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets[ "divetonuke" ] = spawnstruct(); level.machine_assets["divetonuke"] = spawnstruct();
level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke";
level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke";
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on";
} }
divetonuke_register_clientfield() divetonuke_register_clientfield()
@ -61,49 +64,48 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio
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() divetonuke_perk_machine_think()
{ {
init_divetonuke(); init_divetonuke();
while ( 1 )
while ( true )
{ {
machine = getentarray( "vending_divetonuke", "targetname" ); machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" ); machine_triggers = getentarray( "vending_divetonuke", "target" );
i = 0;
while ( i < machine.size ) for ( i = 0; i < machine.size; i++ )
{ machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model );
i++;
}
array_thread( machine_triggers, ::set_power_on, 0 ); array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" ); level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" ); level waittill( "divetonuke_on" );
i = 0;
while ( i < machine.size ) for ( i = 0; i < machine.size; i++ )
{ {
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
machine[ i ] playsound( "zmb_perks_power_on" ); machine[i] playsound( "zmb_perks_power_on" );
machine[ i ] thread perk_fx( "divetonuke_light" ); machine[i] thread perk_fx( "divetonuke_light" );
machine[ i ] thread play_loop_on_machine(); machine[i] thread play_loop_on_machine();
i++;
} }
level notify( "specialty_flakjacket_power_on" ); level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 ); array_thread( machine_triggers, ::set_power_on, 1 );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_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_on_callback );
}
level waittill( "divetonuke_off" ); level waittill( "divetonuke_off" );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) )
{ if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) )
array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback ); array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
}
array_thread( machine, ::turn_perk_off ); array_thread( machine, ::turn_perk_off );
} }
} }
@ -111,29 +113,60 @@ divetonuke_perk_machine_think()
divetonuke_host_migration_func() divetonuke_host_migration_func()
{ {
flop = getentarray( "vending_divetonuke", "targetname" ); flop = getentarray( "vending_divetonuke", "targetname" );
_a138 = flop;
_k138 = getFirstArrayKey( _a138 ); foreach ( perk in flop )
while ( isDefined( _k138 ) )
{ {
perk = _a138[ _k138 ]; 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 perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" ); perk thread perk_fx( "divetonuke_light" );
} }
_k138 = getNextArrayKey( _a138, _k138 );
} }
} }
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 )
attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
else
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
playfx( level._effect[ "divetonuke_groundhit" ], origin );
playfx( level._effect["divetonuke_groundhit"], origin );
attacker playsound( "zmb_phdflop_explo" ); attacker playsound( "zmb_phdflop_explo" );
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1; wait 1;
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
}
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
{
self endon( "disconnect" );
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
network_stall_counter = 0;
if ( isdefined( a_zombies ) )
{
for ( i = 0; i < a_zombies.size; i++ )
{
e_zombie = a_zombies[i];
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
continue;
dist = distance( e_zombie.origin, origin );
damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius );
e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod );
network_stall_counter--;
if ( network_stall_counter <= 0 )
{
wait_network_frame();
network_stall_counter = randomintrange( 1, 3 );
}
}
}
} }

View File

@ -1,14 +1,15 @@
#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.ballistic_knife_autorecover ) ) if ( !isdefined( level.ballistic_knife_autorecover ) )
{
level.ballistic_knife_autorecover = 1; level.ballistic_knife_autorecover = 1;
}
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 ) if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{ {
precachemodel( "t5_weapon_ballistic_knife_projectile" ); precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" ); precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
@ -21,9 +22,12 @@ on_spawn( watcher, player )
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 ); self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0; isfriendly = 0;
if ( isDefined( endpos ) )
if ( isdefined( endpos ) )
{ {
retrievable_model = spawn( "script_model", endpos ); retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" ); retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
@ -31,47 +35,38 @@ on_spawn( watcher, player )
retrievable_model.owner = player; retrievable_model.owner = player;
retrievable_model.angles = angles; retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon; retrievable_model.name = watcher.weapon;
if ( isDefined( prey ) )
if ( isdefined( prey ) )
{ {
if ( isplayer( prey ) && player.team == prey.team ) if ( isplayer( prey ) && player.team == prey.team )
{
isfriendly = 1; isfriendly = 1;
} else 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 linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
} }
else else if ( isfriendly )
{
if ( isfriendly )
{ {
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 ); normal = ( 0, 0, 1 );
} }
} }
}
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; watcher.objectarray[watcher.objectarray.size] = retrievable_model;
if ( isfriendly ) if ( isfriendly )
{
retrievable_model waittill( "stationary" ); retrievable_model waittill( "stationary" );
}
retrievable_model thread drop_knives_to_ground( player ); retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly ) if ( isfriendly )
{ player notify( "ballistic_knife_stationary", retrievable_model, normal );
player notify( "ballistic_knife_stationary" );
}
else else
{ player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey ); retrievable_model thread wait_to_show_glowing_model( prey );
} }
} }
@ -90,60 +85,59 @@ on_spawn_retrieve_trigger( watcher, player )
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 ); player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) )
{ if ( !isdefined( retrievable_model ) )
return; return;
}
trigger_pos = []; trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
{ {
trigger_pos[ 0 ] = prey.origin[ 0 ]; trigger_pos[0] = prey.origin[0];
trigger_pos[ 1 ] = prey.origin[ 1 ]; trigger_pos[1] = prey.origin[1];
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10; trigger_pos[2] = prey.origin[2] + 10;
} }
else else
{ {
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] ); trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] ); trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] ); trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
} }
if ( is_true( level.ballistic_knife_autorecover ) ) if ( is_true( level.ballistic_knife_autorecover ) )
{ {
trigger_pos[ 2 ] -= 50; trigger_pos[2] -= 50.0;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 ); pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
} }
else else
{ {
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) ); pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger setcursorhint( "HINT_NOICON" ); pickup_trigger setcursorhint( "HINT_NOICON" );
} }
pickup_trigger.owner = player; pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger; retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP"; hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isDefined( hint_string ) )
{ if ( isdefined( hint_string ) )
pickup_trigger sethintstring( hint_string ); pickup_trigger sethintstring( hint_string );
}
else else
{
pickup_trigger sethintstring( &"GENERIC_PICKUP" ); pickup_trigger sethintstring( &"GENERIC_PICKUP" );
}
pickup_trigger setteamfortrigger( player.team ); pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger ); player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto(); pickup_trigger enablelinkto();
if ( isDefined( prey ) )
{ if ( isdefined( prey ) )
pickup_trigger linkto( prey ); pickup_trigger linkto( prey );
}
else else
{
pickup_trigger linkto( retrievable_model ); pickup_trigger linkto( retrievable_model );
}
if ( isDefined( level.knife_planted ) ) if ( isdefined( level.knife_planted ) )
{
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey ); [[ 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 ); retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model ); player thread watch_shutdown( pickup_trigger, retrievable_model );
} }
@ -152,12 +146,13 @@ debug_print( endpos )
{ {
/# /#
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
print3d( endpos, "pickup_trigger" ); print3d( endpos, "pickup_trigger" );
wait 0,05; wait 0.05;
#/
} }
#/
} }
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse ) watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
@ -167,53 +162,45 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
level endon( "game_ended" ); level endon( "game_ended" );
max_ammo = weaponmaxammo( weapon ) + 1; max_ammo = weaponmaxammo( weapon ) + 1;
autorecover = is_true( level.ballistic_knife_autorecover ); autorecover = is_true( level.ballistic_knife_autorecover );
while ( 1 )
while ( true )
{ {
trigger waittill( "trigger", player ); trigger waittill( "trigger", player );
while ( !isalive( player ) )
{ if ( !isalive( player ) )
continue; continue;
}
if ( !player isonground() && !is_true( trigger.force_pickup ) ) if ( !player isonground() && !is_true( trigger.force_pickup ) )
{
continue; continue;
}
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{
continue; continue;
}
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
{
continue; continue;
}
ammo_stock = player getweaponammostock( weapon ); ammo_stock = player getweaponammostock( weapon );
ammo_clip = player getweaponammoclip( weapon ); ammo_clip = player getweaponammoclip( weapon );
current_weapon = player getcurrentweapon(); current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip; total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1; hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon ) if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
{
hasreloaded = 0; hasreloaded = 0;
}
if ( total_ammo >= max_ammo || !hasreloaded ) if ( total_ammo >= max_ammo || !hasreloaded )
{
continue; continue;
}
if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) ) if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
{
if ( isDefined( playersoundonuse ) )
{ {
if ( isdefined( playersoundonuse ) )
player playlocalsound( playersoundonuse ); player playlocalsound( playersoundonuse );
}
if ( isDefined( npcsoundonuse ) ) if ( isdefined( npcsoundonuse ) )
{
player playsound( npcsoundonuse ); player playsound( npcsoundonuse );
}
player thread [[ callback ]]( weapon, model, trigger ); player thread [[ callback ]]( weapon, model, trigger );
return; break;
}
else
{
} }
} }
} }
@ -223,13 +210,13 @@ pick_up( weapon, model, trigger )
if ( self hasweapon( weapon ) ) if ( self hasweapon( weapon ) )
{ {
current_weapon = self getcurrentweapon(); current_weapon = self getcurrentweapon();
if ( current_weapon != weapon ) if ( current_weapon != weapon )
{ {
clip_ammo = self getweaponammoclip( weapon ); clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo ) if ( !clip_ammo )
{
self setweaponammoclip( weapon, 1 ); self setweaponammoclip( weapon, 1 );
}
else else
{ {
new_ammo_stock = self getweaponammostock( weapon ) + 1; new_ammo_stock = self getweaponammostock( weapon ) + 1;
@ -242,20 +229,20 @@ pick_up( weapon, model, trigger )
self setweaponammostock( weapon, new_ammo_stock ); self setweaponammostock( weapon, new_ammo_stock );
} }
} }
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" ); 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(); model destroy_ent();
trigger 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();
} }
} }
@ -271,12 +258,14 @@ 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 ); level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
if ( distancesquared( origin, self.origin ) < radius * radius )
{ {
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player ); self thread update_retrieve_trigger( player );
} }
} }
@ -286,9 +275,11 @@ 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" ); prey waittill( "death" );
self unlink(); self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) ); self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player ); self thread update_retrieve_trigger( player );
} }
@ -296,13 +287,16 @@ 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 ); self [[ level.custom_update_retrieve_trigger ]]( player );
return; return;
} }
self waittill( "stationary" ); self waittill( "stationary" );
trigger = self.retrievabletrigger; trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 ); trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self ); trigger linkto( self );
} }

View File

@ -1,19 +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 else
{
cost = 3000; 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", undefined ); maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" ); maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" ); maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
} }

View File

@ -1,30 +1,30 @@
#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_equipment; #include maps\mp\zombies\_zm_equipment;
#include maps/mp/zombies/_zm_utility; #include maps\mp\zombies\_zm_score;
#include maps/mp/_utility; #include maps\mp\zombies\_zm_audio;
#include common_scripts/utility; #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;
while ( i < trigs.size ) for ( i = 0; i < trigs.size; i++ )
{
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) )
{ {
model = getent( trigs[i].target, "targetname" );
if ( isdefined( model ) )
model hide(); model hide();
} }
i++;
}
array_thread( trigs, ::buy_claymores ); array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds(); level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage; level.claymores_on_damage = ::satchel_damage;
@ -32,7 +32,7 @@ init()
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener; level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 ); level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20; level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" ); level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
} }
buy_claymores() buy_claymores()
@ -41,26 +41,28 @@ buy_claymores()
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" ); 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;
if ( who has_powerup_weapon() )
{ {
wait 0.1;
continue; continue;
} }
while ( who has_powerup_weapon() )
{
wait 0,1;
}
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
if ( who.score >= self.zombie_cost ) if ( who.score >= self.zombie_cost )
@ -68,43 +70,41 @@ buy_claymores()
if ( !who is_player_placeable_mine( "claymore_zm" ) ) if ( !who is_player_placeable_mine( "claymore_zm" ) )
{ {
play_sound_at_pos( "purchase", self.origin ); play_sound_at_pos( "purchase", self.origin );
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost ); who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup(); who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" ); who thread show_claymore_hint( "claymore_purchased" );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) )
{ if ( isdefined( self.stub ) )
self.claymores_triggered = self.stub.claymores_triggered; self.claymores_triggered = self.stub.claymores_triggered;
}
if ( self.claymores_triggered == 0 ) if ( self.claymores_triggered == 0 )
{ {
model = getent( self.target, "targetname" ); model = getent( self.target, "targetname" );
if ( isDefined( model ) )
{ if ( isdefined( model ) )
model thread maps/mp/zombies/_zm_weapons::weapon_show( who ); model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
else if ( isdefined( self.clientfieldname ) )
level setclientfield( self.clientfieldname, 1 );
self.claymores_triggered = 1;
if ( isdefined( self.stub ) )
self.stub.claymores_triggered = 1;
}
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( who );
}
else
who thread show_claymore_hint( "already_purchased" );
} }
else else
{ {
if ( isDefined( self.clientfieldname ) ) who play_sound_on_ent( "no_purchase" );
{ who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
level setclientfield( self.clientfieldname, 1 );
}
}
self.claymores_triggered = 1;
if ( isDefined( self.stub ) )
{
self.stub.claymores_triggered = 1;
}
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( who );
i++;
}
}
else who thread show_claymore_hint( "already_purchased" );
} }
} }
} }
@ -116,33 +116,30 @@ claymore_unitrigger_update_prompt( player )
{ {
self sethintstring( "" ); self sethintstring( "" );
self setcursorhint( "HINT_NOICON" ); self setcursorhint( "HINT_NOICON" );
return 0; return false;
} }
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" ); self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return 1; 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; for ( j = 0; j < players.size; j++ )
while ( j < players.size )
{ {
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++;
} }
} }
j++;
}
wait 1; wait 1;
players = get_players(); players = get_players();
} }
@ -151,19 +148,17 @@ set_claymore_visible()
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 );
} }
@ -172,40 +167,38 @@ claymore_watch()
self endon( "death" ); self endon( "death" );
self notify( "claymore_watch" ); self notify( "claymore_watch" );
self endon( "claymore_watch" ); self endon( "claymore_watch" );
while ( 1 )
while ( true )
{ {
self waittill( "grenade_fire", claymore, weapname ); self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" ) if ( weapname == "claymore_zm" )
{ {
claymore.owner = self; claymore.owner = self;
claymore.team = self.team; claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" ); self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() ) if ( claymore claymore_safe_to_plant() )
{ {
if ( isDefined( level.claymore_planted ) ) if ( isdefined( level.claymore_planted ) )
{
self thread [[ level.claymore_planted ]]( claymore ); self thread [[ level.claymore_planted ]]( claymore );
}
claymore thread claymore_detonation(); claymore thread claymore_detonation();
claymore thread play_claymore_effects(); claymore thread play_claymore_effects();
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
break;
} }
else else
{
claymore thread claymore_wait_and_detonate(); 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" );
@ -215,22 +208,22 @@ claymore_setup()
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 thread claymore_watch();
@ -244,6 +237,7 @@ pickup_claymores()
{ {
clip_ammo = player getweaponammoclip( self.name ); clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name ); clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo ) if ( clip_ammo >= clip_max_ammo )
{ {
self destroy_ent(); self destroy_ent();
@ -251,15 +245,16 @@ pickup_claymores()
return; return;
} }
} }
self pick_up(); self pick_up();
clip_ammo = player getweaponammoclip( self.name ); clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name ); clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo ) if ( clip_ammo >= clip_max_ammo )
{
player notify( "zmb_disable_claymore_prompt" ); player notify( "zmb_disable_claymore_prompt" );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" ); player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps/mp/zombies/_zm_stats::increment_player_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 )
@ -272,13 +267,14 @@ pickup_claymores_trigger_listener_enable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" ); player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isDefined( trigger ) )
{ if ( !isdefined( trigger ) )
return; return;
}
trigger trigger_on(); trigger trigger_on();
trigger linkto( self ); trigger linkto( self );
} }
@ -288,13 +284,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
{ {
self endon( "delete" ); self endon( "delete" );
self endon( "death" ); self endon( "death" );
while ( 1 )
while ( true )
{ {
player waittill( "zmb_disable_claymore_prompt" ); player waittill( "zmb_disable_claymore_prompt" );
if ( !isDefined( trigger ) )
{ if ( !isdefined( trigger ) )
return; return;
}
trigger unlink(); trigger unlink();
trigger trigger_off(); trigger trigger_off();
} }
@ -302,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
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;
@ -324,44 +321,40 @@ claymore_detonation()
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 ); damagearea waittill( "trigger", ent );
if ( isDefined( self.owner ) && ent == self.owner )
{ if ( isdefined( self.owner ) && ent == self.owner )
continue; 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;
}
while ( !ent shouldaffectweaponobject( self ) ) if ( !ent shouldaffectweaponobject( self ) )
{
continue; continue;
}
if ( ent damageconetrace( self.origin, self ) > 0 ) if ( ent damageconetrace( self.origin, self ) > 0 )
{ {
self playsound( "wpn_claymore_alert" ); self playsound( "wpn_claymore_alert" );
wait 0,4; wait 0.4;
if ( isDefined( self.owner ) )
{ if ( isdefined( self.owner ) )
self detonate( self.owner ); self detonate( self.owner );
}
else else
{
self detonate( undefined ); self detonate( undefined );
}
return; return;
} }
} }
@ -370,15 +363,14 @@ claymore_detonation()
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()
@ -388,36 +380,36 @@ satchel_damage()
self.health = 100000; self.health = 100000;
self.maxhealth = self.health; self.maxhealth = self.health;
attacker = undefined; attacker = undefined;
while ( 1 )
while ( true )
{ {
self waittill( "damage", amount, attacker ); self waittill( "damage", amount, attacker );
if ( !isDefined( self ) )
{ if ( !isdefined( self ) )
return; return;
}
self.health = self.maxhealth; self.health = self.maxhealth;
while ( !isplayer( attacker ) )
{ if ( !isplayer( attacker ) )
continue; continue;
}
if ( isDefined( self.owner ) && attacker == self.owner ) if ( isdefined( self.owner ) && attacker == self.owner )
{
continue; 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 ) if ( level.satchelexplodethisframe )
{ wait( 0.1 + randomfloat( 0.4 ) );
wait ( 0,1 + randomfloat( 0,4 ) ); else
} wait 0.05;
else wait 0,05;
if ( !isDefined( self ) ) if ( !isdefined( self ) )
{
return; return;
}
level.satchelexplodethisframe = 1; level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame(); thread reset_satchel_explode_this_frame();
self detonate( attacker ); self detonate( attacker );
@ -425,7 +417,7 @@ satchel_damage()
reset_satchel_explode_this_frame() reset_satchel_explode_this_frame()
{ {
wait 0,05; wait 0.05;
level.satchelexplodethisframe = 0; level.satchelexplodethisframe = 0;
} }
@ -433,28 +425,28 @@ 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" ) )
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{ {
players = get_players(); players = get_players();
i = 0;
while ( i < players.size ) for ( i = 0; i < players.size; i++ )
{ {
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) ) if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
{ {
players[ i ] giveweapon( "claymore_zm" ); players[i] giveweapon( "claymore_zm" );
players[ i ] set_player_placeable_mine( "claymore_zm" ); players[i] set_player_placeable_mine( "claymore_zm" );
players[ i ] setactionslot( 4, "weapon", "claymore_zm" ); players[i] setactionslot( 4, "weapon", "claymore_zm" );
players[ i ] setweaponammoclip( "claymore_zm", 2 ); players[i] setweaponammoclip( "claymore_zm", 2 );
} }
i++;
} }
} }
} }
@ -464,13 +456,11 @@ 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 ); show_equipment_hint_text( text );
} }

View File

@ -1,74 +1,73 @@
#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 ) )
{ if ( isdefined( level.tazer_cost ) )
cost = level.tazer_cost; cost = level.tazer_cost;
}
else else
{
cost = 6000; cost = 6000;
}
level.use_tazer_impact_fx = 0; 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_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" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" ); 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 ); 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_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" ); level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
if ( level.script != "zm_transit" ) if ( level.script != "zm_transit" )
{ {
level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" ); level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
level.use_tazer_impact_fx = 1; level.use_tazer_impact_fx = 1;
} }
level.tazer_flourish_delay = 0,5;
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 ( isdefined( self ) && isalive( self ) )
{ {
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;
}
while ( type != "MOD_MELEE" ) if ( type != "MOD_MELEE" )
{
continue; continue;
}
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped ) if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
{
continue; continue;
}
ch = randomint( 100 ); ch = randomint( 100 );
if ( ch < 4 ) if ( ch < 4 )
{ playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" );
}
if ( level.use_tazer_impact_fx ) if ( level.use_tazer_impact_fx )
{ {
tags = []; tags = [];
tags[ 0 ] = "J_Head"; tags[0] = "J_Head";
tags[ 1 ] = "J_Neck"; tags[1] = "J_Neck";
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) ); playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
} }
} }
} }
@ -81,9 +80,11 @@ onplayerconnect()
onplayerspawned() onplayerspawned()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; )
for (;;)
{ {
self waittill( "spawned_player" ); self waittill( "spawned_player" );
self thread watchtazerknucklemelee(); self thread watchtazerknucklemelee();
} }
} }
@ -91,28 +92,30 @@ onplayerspawned()
watchtazerknucklemelee() watchtazerknucklemelee()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; )
for (;;)
{ {
self waittill( "weapon_melee", weapon ); self waittill( "weapon_melee", weapon );
if ( weapon == "tazer_knuckles_zm" ) if ( weapon == "tazer_knuckles_zm" )
{
self tazerknuckle_melee(); self tazerknuckle_melee();
} }
}
} }
tazerknuckle_melee() tazerknuckle_melee()
{ {
} }
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" ); self endon( "weapon_change" );
wait level.tazer_flourish_delay; wait( level.tazer_flourish_delay );
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" ); self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
self setclientfieldtoplayer( "tazer_flourish", 1 ); self setclientfieldtoplayer( "tazer_flourish", 1 );
wait_network_frame(); wait_network_frame();
self setclientfieldtoplayer( "tazer_flourish", 0 ); self setclientfieldtoplayer( "tazer_flourish", 0 );

View File

@ -1,17 +1,19 @@
#include maps/mp/zombies/_zm_audio; // T6 GSC SOURCE
#include maps/mp/zombies/_zm_unitrigger; // Decompiled by https://github.com/xensik/gsc-tool
#include maps/mp/zombies/_zm_stats; #include common_scripts\utility;
#include maps/mp/zombies/_zm_magicbox; #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_magicbox;
#include common_scripts/utility; #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() main()
{ {
if ( !isDefined( level.weapon_locker_map ) ) if ( !isdefined( level.weapon_locker_map ) )
{
level.weapon_locker_map = level.script; level.weapon_locker_map = level.script;
}
level.weapon_locker_online = sessionmodeisonlinegame(); level.weapon_locker_online = sessionmodeisonlinegame();
weapon_lockers = getstructarray( "weapons_locker", "targetname" ); weapon_lockers = getstructarray( "weapons_locker", "targetname" );
array_thread( weapon_lockers, ::triggerweaponslockerwatch ); array_thread( weapon_lockers, ::triggerweaponslockerwatch );
@ -20,139 +22,111 @@ main()
wl_has_stored_weapondata() wl_has_stored_weapondata()
{ {
if ( level.weapon_locker_online ) if ( level.weapon_locker_online )
{
return self has_stored_weapondata( level.weapon_locker_map ); return self has_stored_weapondata( level.weapon_locker_map );
}
else else
{ return isdefined( self.stored_weapon_data );
return isDefined( self.stored_weapon_data );
}
} }
wl_get_stored_weapondata() wl_get_stored_weapondata()
{ {
if ( level.weapon_locker_online ) if ( level.weapon_locker_online )
{
return self get_stored_weapondata( level.weapon_locker_map ); return self get_stored_weapondata( level.weapon_locker_map );
}
else else
{
return self.stored_weapon_data; return self.stored_weapon_data;
}
} }
wl_clear_stored_weapondata() wl_clear_stored_weapondata()
{ {
if ( level.weapon_locker_online ) if ( level.weapon_locker_online )
{
self clear_stored_weapondata( level.weapon_locker_map ); self clear_stored_weapondata( level.weapon_locker_map );
}
else else
{
self.stored_weapon_data = undefined; self.stored_weapon_data = undefined;
}
} }
wl_set_stored_weapondata( weapondata ) wl_set_stored_weapondata( weapondata )
{ {
if ( level.weapon_locker_online ) if ( level.weapon_locker_online )
{
self set_stored_weapondata( weapondata, level.weapon_locker_map ); self set_stored_weapondata( weapondata, level.weapon_locker_map );
}
else else
{
self.stored_weapon_data = weapondata; self.stored_weapon_data = weapondata;
}
} }
triggerweaponslockerwatch() triggerweaponslockerwatch()
{ {
unitrigger_stub = spawnstruct(); unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin; unitrigger_stub.origin = self.origin;
if ( isDefined( self.script_angles ) )
{ if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles; unitrigger_stub.angles = self.script_angles;
}
else else
{
unitrigger_stub.angles = self.angles; unitrigger_stub.angles = self.angles;
}
unitrigger_stub.script_angles = unitrigger_stub.angles; unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isDefined( self.script_length ) )
{ if ( isdefined( self.script_length ) )
unitrigger_stub.script_length = self.script_length; unitrigger_stub.script_length = self.script_length;
}
else else
{
unitrigger_stub.script_length = 16; unitrigger_stub.script_length = 16;
}
if ( isDefined( self.script_width ) ) if ( isdefined( self.script_width ) )
{
unitrigger_stub.script_width = self.script_width; unitrigger_stub.script_width = self.script_width;
}
else else
{
unitrigger_stub.script_width = 32; unitrigger_stub.script_width = 32;
}
if ( isDefined( self.script_height ) ) if ( isdefined( self.script_height ) )
{
unitrigger_stub.script_height = self.script_height; unitrigger_stub.script_height = self.script_height;
}
else else
{
unitrigger_stub.script_height = 64; unitrigger_stub.script_height = 64;
}
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 ); unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
unitrigger_stub.targetname = "weapon_locker"; unitrigger_stub.targetname = "weapon_locker";
unitrigger_stub.cursor_hint = "HINT_NOICON"; unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.clientfieldname = "weapon_locker"; unitrigger_stub.clientfieldname = "weapon_locker";
maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt; unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink ); maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink );
} }
triggerweaponslockerisvalidweapon( weaponname ) triggerweaponslockerisvalidweapon( weaponname )
{ {
weaponname = get_base_weapon_name( weaponname, 1 ); weaponname = get_base_weapon_name( weaponname, 1 );
if ( !is_weapon_included( weaponname ) ) if ( !is_weapon_included( weaponname ) )
{ return false;
return 0;
}
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) ) if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
{ return false;
return 0;
} return true;
return 1;
} }
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname ) triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
{ {
retrievingweapon = player wl_has_stored_weapondata(); retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon ) if ( !retrievingweapon )
{ {
weaponname = player get_nonalternate_weapon( weaponname ); weaponname = player get_nonalternate_weapon( weaponname );
if ( !triggerweaponslockerisvalidweapon( weaponname ) ) if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
}
else else
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
} }
}
else else
{ {
weapondata = player wl_get_stored_weapondata(); weapondata = player wl_get_stored_weapondata();
if ( isDefined( level.remap_weapon_locker_weapons ) )
{ if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
}
weapontogive = weapondata[ "name" ]; weapontogive = weapondata["name"];
primaries = player getweaponslistprimaries(); primaries = player getweaponslistprimaries();
maxweapons = get_player_weapon_limit( player ); maxweapons = get_player_weapon_limit( player );
weaponname = player get_nonalternate_weapon( weaponname ); weaponname = player get_nonalternate_weapon( weaponname );
if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == weaponname )
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
{ {
if ( !triggerweaponslockerisvalidweapon( weaponname ) ) if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{ {
@ -160,6 +134,7 @@ triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
return; return;
} }
} }
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
} }
} }
@ -173,91 +148,104 @@ triggerweaponslockerthinkupdateprompt( player )
triggerweaponslockerthink() triggerweaponslockerthink()
{ {
self.parent_player thread triggerweaponslockerweaponchangethink( self ); self.parent_player thread triggerweaponslockerweaponchangethink( self );
while ( 1 )
while ( true )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
retrievingweapon = player wl_has_stored_weapondata(); retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon ) if ( !retrievingweapon )
{ {
curweapon = player getcurrentweapon(); curweapon = player getcurrentweapon();
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
{ if ( !triggerweaponslockerisvalidweapon( curweapon ) )
continue; continue;
}
weapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player ); weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player wl_set_stored_weapondata( weapondata ); player wl_set_stored_weapondata( weapondata );
/# /#
assert( curweapon == weapondata[ "name" ], "weapon data does not match" ); assert( curweapon == weapondata["name"], "weapon data does not match" );
#/ #/
player takeweapon( curweapon ); player takeweapon( curweapon );
primaries = player getweaponslistprimaries(); primaries = player getweaponslistprimaries();
if ( isDefined( primaries[ 0 ] ) )
{ if ( isdefined( primaries[0] ) )
player switchtoweapon( primaries[ 0 ] ); player switchtoweapon( primaries[0] );
}
else else
{ player maps\mp\zombies\_zm_weapons::give_fallback_weapon();
player maps/mp/zombies/_zm_weapons::give_fallback_weapon();
}
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
player playsoundtoplayer( "evt_fridge_locker_close", player ); player playsoundtoplayer( "evt_fridge_locker_close", player );
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "weapon_storage" ); player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" );
} }
else else
{ {
curweapon = player getcurrentweapon(); curweapon = player getcurrentweapon();
primaries = player getweaponslistprimaries(); primaries = player getweaponslistprimaries();
weapondata = player wl_get_stored_weapondata(); weapondata = player wl_get_stored_weapondata();
if ( isDefined( level.remap_weapon_locker_weapons ) )
{ if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons ); weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
}
weapontogive = weapondata[ "name" ]; weapontogive = weapondata["name"];
while ( !triggerweaponslockerisvalidweapon( weapontogive ) )
if ( !triggerweaponslockerisvalidweapon( weapontogive ) )
{ {
player playlocalsound( level.zmb_laugh_alias ); player playlocalsound( level.zmb_laugh_alias );
player wl_clear_stored_weapondata(); player wl_clear_stored_weapondata();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); 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 ); curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 );
while ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base ) 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" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3; wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
} }
maxweapons = get_player_weapon_limit( player ); maxweapons = get_player_weapon_limit( player );
if ( isDefined( primaries ) || primaries.size >= maxweapons && weapontogive == curweapon )
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon )
{ {
curweapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( curweapon ); curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
while ( !triggerweaponslockerisvalidweapon( curweapon ) )
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
{ {
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" ); self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3; wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
} }
curweapondata = player maps/mp/zombies/_zm_weapons::get_player_weapondata( player );
player takeweapon( curweapondata[ "name" ] ); curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); player takeweapon( curweapondata["name"] );
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player wl_clear_stored_weapondata(); player wl_clear_stored_weapondata();
player wl_set_stored_weapondata( curweapondata ); player wl_set_stored_weapondata( curweapondata );
player switchtoweapon( weapondata[ "name" ] ); player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
} }
else else
{ {
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" ); player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
player wl_clear_stored_weapondata(); player wl_clear_stored_weapondata();
player maps/mp/zombies/_zm_weapons::weapondata_give( weapondata ); player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player switchtoweapon( weapondata[ "name" ] ); player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() ); self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
} }
level notify( "weapon_locker_grab" ); level notify( "weapon_locker_grab" );
player playsoundtoplayer( "evt_fridge_locker_open", player ); player playsoundtoplayer( "evt_fridge_locker_open", player );
} }
wait 0,5;
wait 0.5;
} }
} }
@ -266,73 +254,74 @@ triggerweaponslockerweaponchangethink( trigger )
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "death" ); self endon( "death" );
trigger endon( "kill_trigger" ); trigger endon( "kill_trigger" );
while ( 1 )
while ( true )
{ {
self waittill( "weapon_change", newweapon ); self waittill( "weapon_change", newweapon );
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon ); trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
} }
} }
add_weapon_locker_mapping( fromweapon, toweapon ) add_weapon_locker_mapping( fromweapon, toweapon )
{ {
if ( !isDefined( level.remap_weapon_locker_weapons ) ) if ( !isdefined( level.remap_weapon_locker_weapons ) )
{
level.remap_weapon_locker_weapons = []; level.remap_weapon_locker_weapons = [];
}
level.remap_weapon_locker_weapons[ fromweapon ] = toweapon; level.remap_weapon_locker_weapons[fromweapon] = toweapon;
} }
remap_weapon( weapondata, maptable ) remap_weapon( weapondata, maptable )
{ {
name = get_base_name( weapondata[ "name" ] ); name = get_base_name( weapondata["name"] );
att = get_attachment_name( weapondata[ "name" ] ); att = get_attachment_name( weapondata["name"] );
if ( isDefined( maptable[ name ] ) )
if ( isdefined( maptable[name] ) )
{ {
weapondata[ "name" ] = maptable[ name ]; weapondata["name"] = maptable[name];
name = weapondata[ "name" ]; name = weapondata["name"];
if ( is_weapon_upgraded( name ) ) if ( is_weapon_upgraded( name ) )
{ {
if ( isDefined( att ) && weapon_supports_attachments( name ) ) if ( isdefined( att ) && weapon_supports_attachments( name ) )
{ {
base = get_base_weapon_name( name, 1 ); base = get_base_weapon_name( name, 1 );
if ( !weapon_supports_this_attachment( base, att ) ) if ( !weapon_supports_this_attachment( base, att ) )
{
att = random_attachment( base ); att = random_attachment( base );
weapondata["name"] = weapondata["name"] + "+" + att;
} }
weapondata[ "name" ] = weapondata[ "name" ] + "+" + att; else if ( weapon_supports_default_attachment( name ) )
}
else
{
if ( weapon_supports_default_attachment( name ) )
{ {
att = default_attachment( name ); att = default_attachment( name );
weapondata[ "name" ] = weapondata[ "name" ] + "+" + att; weapondata["name"] = weapondata["name"] + "+" + att;
}
} }
} }
} }
else else
{
return weapondata; return weapondata;
}
name = weapondata[ "name" ]; name = weapondata["name"];
dw_name = weapondualwieldweaponname( name ); dw_name = weapondualwieldweaponname( name );
alt_name = weaponaltweaponname( name ); alt_name = weaponaltweaponname( name );
if ( name != "none" ) if ( name != "none" )
{ {
weapondata[ "clip" ] = int( min( weapondata[ "clip" ], weaponclipsize( name ) ) ); weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
weapondata[ "stock" ] = int( min( weapondata[ "stock" ], weaponmaxammo( name ) ) ); weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
} }
if ( dw_name != "none" ) if ( dw_name != "none" )
{ weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
weapondata[ "lh_clip" ] = int( min( weapondata[ "lh_clip" ], weaponclipsize( dw_name ) ) );
}
if ( alt_name != "none" ) if ( alt_name != "none" )
{ {
weapondata[ "alt_clip" ] = int( min( weapondata[ "alt_clip" ], weaponclipsize( alt_name ) ) ); weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
weapondata[ "alt_stock" ] = int( min( weapondata[ "alt_stock" ], weaponmaxammo( alt_name ) ) ); weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
} }
weapondata[ "dw_name" ] = dw_name;
weapondata[ "alt_name" ] = alt_name; weapondata["dw_name"] = dw_name;
weapondata["alt_name"] = alt_name;
return weapondata; return weapondata;
} }

View File

@ -1,7 +1,9 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {
a[ 0 ] = "c_zom_zombie_buried_sgirl_head1_mp"; a[0] = "c_zom_zombie_buried_sgirl_head1_mp";
a[ 1 ] = "c_zom_zombie_buried_sgirl_head2_mp"; a[1] = "c_zom_zombie_buried_sgirl_head2_mp";
return a; return a;
} }

View File

@ -1,8 +1,10 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {
a[ 0 ] = "c_zom_zombie_buried_sgirl_body1_mp"; a[0] = "c_zom_zombie_buried_sgirl_body1_mp";
a[ 1 ] = "c_zom_zombie_buried_sgirl_body2_mp"; a[1] = "c_zom_zombie_buried_sgirl_body2_mp";
a[ 2 ] = "c_zom_zombie_buried_sgirl_body3_mp"; a[2] = "c_zom_zombie_buried_sgirl_body3_mp";
return a; return a;
} }

View File

@ -1,11 +1,13 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
main() main()
{ {
a[ 0 ] = "c_zom_zombie_buried_sgirl_hair1"; a[0] = "c_zom_zombie_buried_sgirl_hair1";
a[ 1 ] = "c_zom_zombie_buried_sgirl_hair1_2"; a[1] = "c_zom_zombie_buried_sgirl_hair1_2";
a[ 2 ] = "c_zom_zombie_buried_sgirl_hair1_3"; a[2] = "c_zom_zombie_buried_sgirl_hair1_3";
a[ 3 ] = "c_zom_zombie_buried_sgirl_hair2"; a[3] = "c_zom_zombie_buried_sgirl_hair2";
a[ 4 ] = "c_zom_zombie_buried_sgirl_hair2_2"; a[4] = "c_zom_zombie_buried_sgirl_hair2_2";
a[ 5 ] = "c_zom_zombie_buried_sgirl_hair1_3"; a[5] = "c_zom_zombie_buried_sgirl_hair1_3";
return a; return a;
} }