Convert more builtins to use sys namespace. Add pluto_sys builtins and documentation.

This commit is contained in:
JezuzLizard 2024-02-21 22:18:11 -08:00
parent 2ab3179a84
commit d9bad17bb3
62 changed files with 1914 additions and 995 deletions

View File

@ -789,8 +789,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -806,18 +806,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_guard::precache(); character\c_zom_guard::precache();
character\c_zom_inmate1::precache(); character\c_zom_inmate1::precache();
character\c_zom_inmate2::precache(); character\c_zom_inmate2::precache();

View File

@ -64,20 +64,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_cellbreaker::main(); character\c_zom_cellbreaker::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_alcatraz_brutus" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_alcatraz_brutus" );
character\c_zom_cellbreaker::precache(); character\c_zom_cellbreaker::precache();
} }

View File

@ -37,20 +37,20 @@ main()
self.team = "allies"; self.team = "allies";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_ally_cdc::main(); character\c_zom_ally_cdc::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "allies" ); self sys::setspawnerteam( "allies" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" );
character\c_zom_ally_cdc::precache(); character\c_zom_ally_cdc::precache();
} }

View File

@ -37,20 +37,20 @@ main()
self.team = "allies"; self.team = "allies";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_ally_farmgirl::main(); character\c_zom_ally_farmgirl::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "allies" ); self sys::setspawnerteam( "allies" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_ally_basic" );
character\c_zom_ally_farmgirl::precache(); character\c_zom_ally_farmgirl::precache();
} }

View File

@ -368,20 +368,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_zombie_buried_civilian1::main(); character\c_zom_zombie_buried_civilian1::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_civilian1::precache(); character\c_zom_zombie_buried_civilian1::precache();
} }

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -387,18 +387,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_civilian2::precache(); character\c_zom_zombie_buried_civilian2::precache();
character\c_zom_zombie_buried_civilian2_nohat::precache(); character\c_zom_zombie_buried_civilian2_nohat::precache();
character\c_zom_zombie_buried_civilian2_nohat::precache(); character\c_zom_zombie_buried_civilian2_nohat::precache();

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -387,18 +387,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_civilian3::precache(); character\c_zom_zombie_buried_civilian3::precache();
character\c_zom_zombie_buried_civilian3_nohat::precache(); character\c_zom_zombie_buried_civilian3_nohat::precache();
character\c_zom_zombie_buried_civilian3_nohat::precache(); character\c_zom_zombie_buried_civilian3_nohat::precache();

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -387,18 +387,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_civilian4::precache(); character\c_zom_zombie_buried_civilian4::precache();
character\c_zom_zombie_buried_civilian4_nohat::precache(); character\c_zom_zombie_buried_civilian4_nohat::precache();
character\c_zom_zombie_buried_civilian4_nohat::precache(); character\c_zom_zombie_buried_civilian4_nohat::precache();

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 4 ); randchar = codescripts\character::get_random_character( 4 );
switch ( randchar ) switch ( randchar )
@ -390,18 +390,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_civilian5::precache(); character\c_zom_zombie_buried_civilian5::precache();
character\c_zom_zombie_buried_civilian5_nohat::precache(); character\c_zom_zombie_buried_civilian5_nohat::precache();
character\c_zom_zombie_buried_civilian5_nohat::precache(); character\c_zom_zombie_buried_civilian5_nohat::precache();

View File

@ -368,20 +368,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_zombie_buried_miner1::main(); character\c_zom_zombie_buried_miner1::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_miner1::precache(); character\c_zom_zombie_buried_miner1::precache();
} }

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -387,18 +387,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_miner2::precache(); character\c_zom_zombie_buried_miner2::precache();
character\c_zom_zombie_buried_miner2_nohat::precache(); character\c_zom_zombie_buried_miner2_nohat::precache();
character\c_zom_zombie_buried_miner2_nohat::precache(); character\c_zom_zombie_buried_miner2_nohat::precache();

View File

@ -370,8 +370,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -387,18 +387,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" );
character\c_zom_zombie_buried_miner3::precache(); character\c_zom_zombie_buried_miner3::precache();
character\c_zom_zombie_buried_miner3_nohat::precache(); character\c_zom_zombie_buried_miner3_nohat::precache();
character\c_zom_zombie_buried_miner3_nohat::precache(); character\c_zom_zombie_buried_miner3_nohat::precache();

View File

@ -789,8 +789,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -806,18 +806,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_zombie_buried_saloongirl1::precache(); character\c_zom_zombie_buried_saloongirl1::precache();
character\c_zom_zombie_buried_saloongirl2::precache(); character\c_zom_zombie_buried_saloongirl2::precache();
character\c_zom_zombie_buried_saloongirl3::precache(); character\c_zom_zombie_buried_saloongirl3::precache();

View File

@ -67,20 +67,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_zombie_buried_ghost_woman::main(); character\c_zom_zombie_buried_ghost_woman::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_ghost" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_ghost" );
character\c_zom_zombie_buried_ghost_woman::precache(); character\c_zom_zombie_buried_ghost_woman::precache();
} }

View File

@ -159,20 +159,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_buried_sloth::main(); character\c_zom_buried_sloth::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_buried_sloth" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_buried_sloth" );
character\c_zom_buried_sloth::precache(); character\c_zom_buried_sloth::precache();
} }

View File

@ -792,8 +792,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 6 ); randchar = codescripts\character::get_random_character( 6 );
switch ( randchar ) switch ( randchar )
@ -818,18 +818,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_zombie_civ_shorts::precache(); character\c_zom_zombie_civ_shorts::precache();
character\c_zom_zombie_civ_shorts2::precache(); character\c_zom_zombie_civ_shorts2::precache();
character\c_zom_zombie_civ_shorts3::precache(); character\c_zom_zombie_civ_shorts3::precache();

View File

@ -386,20 +386,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_zombie_scientist::main(); character\c_zom_zombie_scientist::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" );
character\c_zom_zombie_scientist::precache(); character\c_zom_zombie_scientist::precache();
} }

View File

@ -386,20 +386,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_zombie_soldier::main(); character\c_zom_zombie_soldier::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" );
character\c_zom_zombie_soldier::precache(); character\c_zom_zombie_soldier::precache();
} }

View File

@ -183,20 +183,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_leaper::main(); character\c_zom_leaper::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_highrise_leaper" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_highrise_leaper" );
character\c_zom_leaper::precache(); character\c_zom_leaper::precache();
} }

View File

@ -788,8 +788,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -802,18 +802,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_dlc0_zombie_hazmat_1::precache(); character\c_zom_dlc0_zombie_hazmat_1::precache();
character\c_zom_dlc0_zombie_hazmat_2::precache(); character\c_zom_dlc0_zombie_hazmat_2::precache();
} }

View File

@ -788,8 +788,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -802,18 +802,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_dlc0_zombie_hazmat_1_beyes::precache(); character\c_zom_dlc0_zombie_hazmat_1_beyes::precache();
character\c_zom_dlc0_zombie_hazmat_2_beyes::precache(); character\c_zom_dlc0_zombie_hazmat_2_beyes::precache();
} }

View File

@ -788,8 +788,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -802,18 +802,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_dlc0_zombie_soldier_1::precache(); character\c_zom_dlc0_zombie_soldier_1::precache();
character\c_zom_dlc0_zombie_soldier_civ_1::precache(); character\c_zom_dlc0_zombie_soldier_civ_1::precache();
} }

View File

@ -788,8 +788,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -802,18 +802,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_dlc0_zombie_soldier_1_beyes::precache(); character\c_zom_dlc0_zombie_soldier_1_beyes::precache();
character\c_zom_dlc0_zombie_soldier_civ_1_beyes::precache(); character\c_zom_dlc0_zombie_soldier_civ_1_beyes::precache();
} }

View File

@ -65,8 +65,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie_dog"; self.type = "zombie_dog";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 256.0, 0.0 ); self sys::setengagementmindist( 256.0, 0.0 );
self setengagementmaxdist( 768.0, 1024.0 ); self sys::setengagementmaxdist( 768.0, 1024.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -79,18 +79,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_nuked_dog" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_nuked_dog" );
character\character_sp_zombie_dog::precache(); character\character_sp_zombie_dog::precache();
character\character_sp_zombie_dog::precache(); character\character_sp_zombie_dog::precache();
} }

View File

@ -376,8 +376,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 6 ); randchar = codescripts\character::get_random_character( 6 );
switch ( randchar ) switch ( randchar )
@ -402,18 +402,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" );
character\c_zom_tomb_crusader_1a::precache(); character\c_zom_tomb_crusader_1a::precache();
character\c_zom_tomb_crusader_1a_nohat::precache(); character\c_zom_tomb_crusader_1a_nohat::precache();
character\c_zom_tomb_crusader_2b::precache(); character\c_zom_tomb_crusader_2b::precache();

View File

@ -791,8 +791,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 6 ); randchar = codescripts\character::get_random_character( 6 );
switch ( randchar ) switch ( randchar )
@ -817,18 +817,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_tomb_german_1a::precache(); character\c_zom_tomb_german_1a::precache();
character\c_zom_tomb_german_1a_nohat::precache(); character\c_zom_tomb_german_1a_nohat::precache();
character\c_zom_tomb_german_2b::precache(); character\c_zom_tomb_german_2b::precache();

View File

@ -375,8 +375,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 6 ); randchar = codescripts\character::get_random_character( 6 );
switch ( randchar ) switch ( randchar )
@ -401,18 +401,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" );
character\c_zom_tomb_german_2b_nohat::precache(); character\c_zom_tomb_german_2b_nohat::precache();
character\c_zom_tomb_german_3c::precache(); character\c_zom_tomb_german_3c::precache();
character\c_zom_tomb_german_3c_nohat::precache(); character\c_zom_tomb_german_3c_nohat::precache();

View File

@ -370,20 +370,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_tomb_crusader_zc::main(); character\c_zom_tomb_crusader_zc::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" );
character\c_zom_tomb_crusader_zc::precache(); character\c_zom_tomb_crusader_zc::precache();
} }

View File

@ -46,20 +46,20 @@ main()
self.team = "neutral"; self.team = "neutral";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_giant_robot::main(); character\c_zom_giant_robot::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "neutral" ); self sys::setspawnerteam( "neutral" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" );
character\c_zom_giant_robot::precache(); character\c_zom_giant_robot::precache();
} }

View File

@ -46,20 +46,20 @@ main()
self.team = "neutral"; self.team = "neutral";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_giant_robot_0::main(); character\c_zom_giant_robot_0::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "neutral" ); self sys::setspawnerteam( "neutral" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" );
character\c_zom_giant_robot_0::precache(); character\c_zom_giant_robot_0::precache();
} }

View File

@ -46,20 +46,20 @@ main()
self.team = "neutral"; self.team = "neutral";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_giant_robot_1::main(); character\c_zom_giant_robot_1::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "neutral" ); self sys::setspawnerteam( "neutral" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" );
character\c_zom_giant_robot_1::precache(); character\c_zom_giant_robot_1::precache();
} }

View File

@ -46,20 +46,20 @@ main()
self.team = "neutral"; self.team = "neutral";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_giant_robot_2::main(); character\c_zom_giant_robot_2::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "neutral" ); self sys::setspawnerteam( "neutral" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_giant_robot" );
character\c_zom_giant_robot_2::precache(); character\c_zom_giant_robot_2::precache();
} }

View File

@ -106,20 +106,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_dlc_mech::main(); character\c_zom_dlc_mech::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_tomb_mechz" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_tomb_mechz" );
character\c_zom_dlc_mech::precache(); character\c_zom_dlc_mech::precache();
} }

View File

@ -102,20 +102,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_avogadro::main(); character\c_zom_avogadro::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_avogadro" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_avogadro" );
character\c_zom_avogadro::precache(); character\c_zom_avogadro::precache();
} }

View File

@ -788,8 +788,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -802,18 +802,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_all_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
character\c_zom_zombie1_01::precache(); character\c_zom_zombie1_01::precache();
character\c_zom_zombie1_02::precache(); character\c_zom_zombie1_02::precache();
} }

View File

@ -466,8 +466,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -483,18 +483,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" );
character\c_zom_zombie2_01::precache(); character\c_zom_zombie2_01::precache();
character\c_zom_zombie2_02::precache(); character\c_zom_zombie2_02::precache();
character\c_zom_zombie2_03::precache(); character\c_zom_zombie2_03::precache();

View File

@ -468,8 +468,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 5 ); randchar = codescripts\character::get_random_character( 5 );
switch ( randchar ) switch ( randchar )
@ -491,18 +491,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" );
character\c_zom_zombie3_01::precache(); character\c_zom_zombie3_01::precache();
character\c_zom_zombie3_02::precache(); character\c_zom_zombie3_02::precache();
character\c_zom_zombie3_03::precache(); character\c_zom_zombie3_03::precache();

View File

@ -466,8 +466,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -483,18 +483,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" );
character\c_zom_zombie5_01::precache(); character\c_zom_zombie5_01::precache();
character\c_zom_zombie5_02::precache(); character\c_zom_zombie5_02::precache();
character\c_zom_zombie5_03::precache(); character\c_zom_zombie5_03::precache();

View File

@ -466,8 +466,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -483,18 +483,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" );
character\c_zom_zombie8_01::precache(); character\c_zom_zombie8_01::precache();
character\c_zom_zombie8_02::precache(); character\c_zom_zombie8_02::precache();
character\c_zom_zombie8_03::precache(); character\c_zom_zombie8_03::precache();

View File

@ -466,8 +466,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
randchar = codescripts\character::get_random_character( 3 ); randchar = codescripts\character::get_random_character( 3 );
switch ( randchar ) switch ( randchar )
@ -483,18 +483,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" );
character\c_zom_zombie9_01::precache(); character\c_zom_zombie9_01::precache();
character\c_zom_zombie9_02::precache(); character\c_zom_zombie9_02::precache();
character\c_zom_zombie9_03::precache(); character\c_zom_zombie9_03::precache();

View File

@ -59,20 +59,20 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie"; self.type = "zombie";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 0.0, 0.0 ); self sys::setengagementmindist( 0.0, 0.0 );
self setengagementmaxdist( 100.0, 300.0 ); self sys::setengagementmaxdist( 100.0, 300.0 );
character\c_zom_screecher::main(); character\c_zom_screecher::main();
self setcharacterindex( 0 ); self sys::setcharacterindex( 0 );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_screecher" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_screecher" );
character\c_zom_screecher::precache(); character\c_zom_screecher::precache();
} }

View File

@ -68,8 +68,8 @@ main()
self.team = "axis"; self.team = "axis";
self.type = "zombie_dog"; self.type = "zombie_dog";
self.weapon = ""; self.weapon = "";
self setengagementmindist( 256.0, 0.0 ); self sys::setengagementmindist( 256.0, 0.0 );
self setengagementmaxdist( 768.0, 1024.0 ); self sys::setengagementmaxdist( 768.0, 1024.0 );
randchar = codescripts\character::get_random_character( 2 ); randchar = codescripts\character::get_random_character( 2 );
switch ( randchar ) switch ( randchar )
@ -82,18 +82,18 @@ main()
break; break;
} }
self setcharacterindex( randchar ); self sys::setcharacterindex( randchar );
} }
spawner() spawner()
{ {
self setspawnerteam( "axis" ); self sys::setspawnerteam( "axis" );
} }
precache( ai_index ) precache( ai_index )
{ {
level thread reference_anims_from_animtree(); level thread reference_anims_from_animtree();
precacheanimstatedef( ai_index, #animtree, "zm_transit_dog" ); sys::precacheanimstatedef( ai_index, #animtree, "zm_transit_dog" );
character\character_sp_zombie_dog::precache(); character\character_sp_zombie_dog::precache();
character\character_sp_zombie_dog::precache(); character\character_sp_zombie_dog::precache();
} }

View File

@ -54747,3 +54747,196 @@
"angles" "0 0 0" "angles" "0 0 0"
"script_string" "zclassic_transit zstandard_farm zgrief_farm" "script_string" "zclassic_transit zstandard_farm zgrief_farm"
} }
{
"classname" "actor_zm_alcatraz_brutus"
"model" "c_zom_cellbreaker_fb"
"export" "2"
"angles" "0 180 0"
"spawnflags" "3"
"script_noteworthy" "brutus_zombie_spawner"
"origin" "100 100 -500"
}
{
"targetname" "zone_tow_spawners"
"script_noteworthy" "brutus_location"
"origin" "1382.76 -489.104 -67.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_tow_spawners"
"script_noteworthy" "brutus_location"
"origin" "1126.05 -502.775 -61.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_town_south_spawners"
"script_noteworthy" "brutus_location"
"origin" "1925.02 -1474.78 -56.3992"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_town_south_spawners"
"script_noteworthy" "brutus_location"
"origin" "959.013 -1474.86 -47.088"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_town_barber_spawners"
"script_noteworthy" "brutus_location"
"origin" "968.193 -911.043 120.125"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_town_north_spawners"
"script_noteworthy" "brutus_location"
"origin" "1530.97 750.57 -61.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_ban_spawners"
"script_noteworthy" "brutus_location"
"origin" "982.982 447.794 -39.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_bar_spawners"
"script_noteworthy" "brutus_location"
"origin" "2118.19 343.046 -55.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_bar_spawners"
"script_noteworthy" "brutus_location"
"origin" "2114.55 29.5759 88.125"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_town_east_spawners"
"script_noteworthy" "brutus_location"
"origin" "2333.71 -665.085 -55.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_tow_spawners"
"script_noteworthy" "brutus_location"
"origin" "1332.75 185.541 -69.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_town zstandard_town zgrief_town"
}
{
"targetname" "zone_pri_spawners"
"script_noteworthy" "brutus_location"
"origin" "-6834.19 5264.24 -58.2852"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_station_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "-6066.56 4846.77 -62.0586"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_station_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "-6231.13 5459.16 -55.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_station_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "-7059.45 4344.02 -63.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_station_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "-7461.69 4402.73 -63.875"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_trans_2b_spawners"
"script_noteworthy" "brutus_location"
"origin" "-7767.91 5305.2 -59.47"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_transit zstandard_transit zgrief_transit"
}
{
"targetname" "zone_far_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "7143.08 -5728.47 -46.6953"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}
{
"targetname" "zone_brn_spawners"
"script_noteworthy" "brutus_location"
"origin" "7783.4 -5056.01 40.387"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}
{
"targetname" "zone_brn_spawners"
"script_noteworthy" "brutus_location"
"origin" "8175.57 -5321.69 269.39"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}
{
"targetname" "zone_far_ext_spawners"
"script_noteworthy" "brutus_location"
"origin" "8685.24 -5735.16 50.125"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}
{
"targetname" "zone_farm_house_spawners"
"script_noteworthy" "brutus_location"
"origin" "8078.18 -6518.55 245.125"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}
{
"targetname" "zone_farm_house_spawners"
"script_noteworthy" "brutus_location"
"origin" "7929.28 -6417.91 117.125"
"classname" "script_struct"
"angles" "0 0 0"
"script_string" "zclassic_farm zstandard_farm zgrief_farm"
}

View File

@ -15,7 +15,7 @@
precache() precache()
{ {
precacheshellshock( "electrocution" ); sys::precacheshellshock( "electrocution" );
/# /#
precachemodel( "fx_axis_createfx" ); precachemodel( "fx_axis_createfx" );
#/ #/
@ -24,15 +24,15 @@ precache()
precache_fx() precache_fx()
{ {
level._effect["avogadro_bolt"] = loadfx( "maps/zombie/fx_zombie_tesla_bolt_secondary" ); level._effect["avogadro_bolt"] = sys::loadfx( "maps/zombie/fx_zombie_tesla_bolt_secondary" );
level._effect["avogadro_ascend"] = loadfx( "maps/zombie/fx_zmb_avog_ascend" ); level._effect["avogadro_ascend"] = sys::loadfx( "maps/zombie/fx_zmb_avog_ascend" );
level._effect["avogadro_ascend_aerial"] = loadfx( "maps/zombie/fx_zmb_avog_ascend_aerial" ); level._effect["avogadro_ascend_aerial"] = sys::loadfx( "maps/zombie/fx_zmb_avog_ascend_aerial" );
level._effect["avogadro_descend"] = loadfx( "maps/zombie/fx_zmb_avog_descend" ); level._effect["avogadro_descend"] = sys::loadfx( "maps/zombie/fx_zmb_avog_descend" );
level._effect["avogadro_phase_trail"] = loadfx( "maps/zombie/fx_zmb_avog_phase_trail" ); level._effect["avogadro_phase_trail"] = sys::loadfx( "maps/zombie/fx_zmb_avog_phase_trail" );
level._effect["avogadro_phasing"] = loadfx( "maps/zombie/fx_zmb_avog_phasing" ); level._effect["avogadro_phasing"] = sys::loadfx( "maps/zombie/fx_zmb_avog_phasing" );
level._effect["avogadro_health_full"] = loadfx( "maps/zombie/fx_zmb_avog_health_full" ); level._effect["avogadro_health_full"] = sys::loadfx( "maps/zombie/fx_zmb_avog_health_full" );
level._effect["avogadro_health_half"] = loadfx( "maps/zombie/fx_zmb_avog_health_half" ); level._effect["avogadro_health_half"] = sys::loadfx( "maps/zombie/fx_zmb_avog_health_half" );
level._effect["avogadro_health_low"] = loadfx( "maps/zombie/fx_zmb_avog_health_low" ); level._effect["avogadro_health_low"] = sys::loadfx( "maps/zombie/fx_zmb_avog_health_low" );
} }
main() main()
@ -44,7 +44,7 @@ init()
{ {
init_phase_anims(); init_phase_anims();
init_regions(); init_regions();
level.avogadro_spawners = getentarray( "avogadro_zombie_spawner", "script_noteworthy" ); level.avogadro_spawners = sys::getentarray( "avogadro_zombie_spawner", "script_noteworthy" );
array_thread( level.avogadro_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_avogadro::avogadro_prespawn ); array_thread( level.avogadro_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_avogadro::avogadro_prespawn );
level.zombie_ai_limit_avogadro = 1; level.zombie_ai_limit_avogadro = 1;
@ -59,25 +59,25 @@ init()
init_phase_anims() init_phase_anims()
{ {
level.avogadro_phase = []; level.avogadro_phase = [];
level.avogadro_phase[0] = spawnstruct(); level.avogadro_phase[0] = sys::spawnstruct();
level.avogadro_phase[0].animstate = "zm_teleport_forward"; level.avogadro_phase[0].animstate = "zm_teleport_forward";
level.avogadro_phase[1] = spawnstruct(); level.avogadro_phase[1] = sys::spawnstruct();
level.avogadro_phase[1].animstate = "zm_teleport_left"; level.avogadro_phase[1].animstate = "zm_teleport_left";
level.avogadro_phase[2] = spawnstruct(); level.avogadro_phase[2] = sys::spawnstruct();
level.avogadro_phase[2].animstate = "zm_teleport_right"; level.avogadro_phase[2].animstate = "zm_teleport_right";
level.avogadro_phase[3] = spawnstruct(); level.avogadro_phase[3] = sys::spawnstruct();
level.avogadro_phase[3].animstate = "zm_teleport_back"; level.avogadro_phase[3].animstate = "zm_teleport_back";
} }
init_regions() init_regions()
{ {
level.transit_region = []; level.transit_region = [];
level.transit_region["bus"] = spawnstruct(); level.transit_region["bus"] = sys::spawnstruct();
level.transit_region["diner"] = spawnstruct(); level.transit_region["diner"] = sys::spawnstruct();
level.transit_region["farm"] = spawnstruct(); level.transit_region["farm"] = sys::spawnstruct();
level.transit_region["cornfield"] = spawnstruct(); level.transit_region["cornfield"] = sys::spawnstruct();
level.transit_region["power"] = spawnstruct(); level.transit_region["power"] = sys::spawnstruct();
level.transit_region["town"] = spawnstruct(); level.transit_region["town"] = sys::spawnstruct();
level.transit_region["bus"].zones = []; level.transit_region["bus"].zones = [];
level.transit_region["bus"].zones[0] = "zone_pri"; level.transit_region["bus"].zones[0] = "zone_pri";
level.transit_region["bus"].zones[1] = "zone_station_ext"; level.transit_region["bus"].zones[1] = "zone_station_ext";
@ -148,7 +148,7 @@ avogadro_prespawn()
self.ignore_solo_last_stand = 1; self.ignore_solo_last_stand = 1;
self.ignore_riotshield = 1; self.ignore_riotshield = 1;
self.allowpain = 0; self.allowpain = 0;
self.core_model = getent( "core_model", "targetname" ); self.core_model = sys::getent( "core_model", "targetname" );
if ( isdefined( self.core_model ) ) if ( isdefined( self.core_model ) )
{ {
@ -159,20 +159,20 @@ avogadro_prespawn()
} }
self set_zombie_run_cycle( "walk" ); self set_zombie_run_cycle( "walk" );
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties();
self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area();
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.zmb_vocals_attack = "zmb_vocals_zombie_attack"; self.zmb_vocals_attack = "zmb_vocals_zombie_attack";
self.meleedamage = 5; self.meleedamage = 5;
self.actor_damage_func = ::avogadro_damage_func; self.actor_damage_func = ::avogadro_damage_func;
self.non_attacker_func = ::avogadro_non_attacker; self.non_attacker_func = ::avogadro_non_attacker;
self.anchor = spawn( "script_origin", self.origin ); self.anchor = sys::spawn( "script_origin", self.origin );
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self.phase_time = 0; self.phase_time = 0;
self.audio_loop_ent = spawn( "script_origin", self.origin ); self.audio_loop_ent = sys::spawn( "script_origin", self.origin );
self.audio_loop_ent linkto( self, "tag_origin" ); self.audio_loop_ent sys::linkto( self, "tag_origin" );
self.hit_by_melee = 0; self.hit_by_melee = 0;
self.damage_absorbed = 0; self.damage_absorbed = 0;
self.ignoreall = 1; self.ignoreall = 1;
@ -183,7 +183,7 @@ avogadro_prespawn()
self.jetgun_drag_func = ::drag_avogadro; self.jetgun_drag_func = ::drag_avogadro;
self.depot_lava_pit = ::busplowkillzombie; self.depot_lava_pit = ::busplowkillzombie;
self.busplowkillzombie = ::busplowkillzombie; self.busplowkillzombie = ::busplowkillzombie;
self.region_timer = gettime() + 500; self.region_timer = sys::gettime() + 500;
self.shield = 1; self.shield = 1;
} }
@ -198,7 +198,7 @@ avogadro_spawning_logic()
if ( getdvarint( #"_id_FA81816F" ) == 2 || getdvarint( #"_id_FA81816F" ) >= 4 ) if ( getdvarint( #"_id_FA81816F" ) == 2 || getdvarint( #"_id_FA81816F" ) >= 4 )
return; return;
#/ #/
spawner = getent( "avogadro_zombie_spawner", "script_noteworthy" ); spawner = sys::getent( "avogadro_zombie_spawner", "script_noteworthy" );
if ( !isdefined( spawner ) ) if ( !isdefined( spawner ) )
{ {
@ -219,10 +219,10 @@ avogadro_spawning_logic()
} }
ai waittill( "zombie_init_done" ); ai waittill( "zombie_init_done" );
core_mover = getent( "core_mover", "targetname" ); core_mover = sys::getent( "core_mover", "targetname" );
ai linkto( core_mover, "tag_origin" ); ai sys::linkto( core_mover, "tag_origin" );
ai.state = "chamber"; ai.state = "chamber";
ai setanimstatefromasd( "zm_chamber_idle" ); ai sys::setanimstatefromasd( "zm_chamber_idle" );
ai thread avogadro_think(); ai thread avogadro_think();
ai thread avogadro_bus_watcher(); ai thread avogadro_bus_watcher();
} }
@ -268,7 +268,7 @@ avogadro_think()
avogadro_bus_watcher() avogadro_bus_watcher()
{ {
plow_trigger = getent( "trigger_plow", "targetname" ); plow_trigger = sys::getent( "trigger_plow", "targetname" );
while ( true ) while ( true )
{ {
@ -278,11 +278,11 @@ avogadro_bus_watcher()
continue; continue;
} }
if ( isdefined( level.the_bus ) && ( isdefined( level.the_bus.ismoving ) && level.the_bus.ismoving ) && level.the_bus getspeedmph() > 5 ) if ( isdefined( level.the_bus ) && ( isdefined( level.the_bus.ismoving ) && level.the_bus.ismoving ) && level.the_bus sys::getspeedmph() > 5 )
{ {
if ( self istouching( plow_trigger ) ) if ( self sys::istouching( plow_trigger ) )
{ {
phase_node = getnode( "back_door_node", "targetname" ); phase_node = sys::getnode( "back_door_node", "targetname" );
self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); self avogadro_teleport( phase_node.origin, phase_node.angles, 1 );
} }
} }
@ -296,17 +296,17 @@ busplowkillzombie()
if ( isdefined( self.is_teleport ) && self.is_teleport ) if ( isdefined( self.is_teleport ) && self.is_teleport )
return; return;
phase_node = getnode( "back_door_node", "targetname" ); phase_node = sys::getnode( "back_door_node", "targetname" );
self avogadro_teleport( phase_node.origin, phase_node.angles, 1 ); self avogadro_teleport( phase_node.origin, phase_node.angles, 1 );
} }
phase_from_bus() phase_from_bus()
{ {
self ghost(); self sys::ghost();
self notsolid(); self sys::notsolid();
wait 3; wait 3;
self show(); self sys::show();
self solid(); self sys::solid();
self notify( "phase_from_bus_done" ); self notify( "phase_from_bus_done" );
} }
@ -316,28 +316,28 @@ wait_idle()
if ( getdvarint( #"_id_CFA4158E" ) ) if ( getdvarint( #"_id_CFA4158E" ) )
{ {
self.state = "wait_for_player"; self.state = "wait_for_player";
self unlink(); self sys::unlink();
} }
#/ #/
if ( flag( "power_on" ) ) if ( flag( "power_on" ) )
{ {
self.state = "wait_for_player"; self.state = "wait_for_player";
self unlink(); self sys::unlink();
} }
} }
player_look() player_look()
{ {
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
vec_enemy = self.origin - player.origin; vec_enemy = self.origin - player.origin;
vec_facing = anglestoforward( player.angles ); vec_facing = anglestoforward( player.angles );
norm_facing = vectornormalize( vec_facing ); norm_facing = sys::vectornormalize( vec_facing );
norm_enemy = vectornormalize( vec_enemy ); norm_enemy = sys::vectornormalize( vec_enemy );
dot = vectordot( norm_facing, norm_enemy ); dot = sys::vectordot( norm_facing, norm_enemy );
if ( dot > 0.707 ) if ( dot > 0.707 )
{ {
@ -397,11 +397,11 @@ chase_bus()
if ( !isdefined( self.chase_bus_entry ) ) if ( !isdefined( self.chase_bus_entry ) )
{ {
self.chase_bus_entry = opening; self.chase_bus_entry = opening;
dist_curr = distance2dsquared( self.origin, level.the_bus gettagorigin( self.chase_bus_entry.tagname ) ); dist_curr = sys::distance2dsquared( self.origin, level.the_bus sys::gettagorigin( self.chase_bus_entry.tagname ) );
continue; continue;
} }
dist_next = distance2dsquared( self.origin, level.the_bus gettagorigin( opening.tagname ) ); dist_next = sys::distance2dsquared( self.origin, level.the_bus sys::gettagorigin( opening.tagname ) );
if ( dist_next < dist_curr ) if ( dist_next < dist_curr )
{ {
@ -424,26 +424,26 @@ chase_bus_update()
return; return;
} }
tag_pos = level.the_bus gettagorigin( self.chase_bus_entry.tagname ); tag_pos = level.the_bus sys::gettagorigin( self.chase_bus_entry.tagname );
self setgoalpos( tag_pos ); self sys::setgoalpos( tag_pos );
if ( bus getspeedmph() > 5 ) if ( bus sys::getspeedmph() > 5 )
{ {
self.phase_state = level.avogadro_phase[0].animstate; self.phase_state = level.avogadro_phase[0].animstate;
self.phase_substate = 0; self.phase_substate = 0;
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.ignoreall = 1; self.ignoreall = 1;
self thread phase_failsafe(); self thread phase_failsafe();
self animcustom( ::play_phase_anim ); self sys::animcustom( ::play_phase_anim );
/# /#
avogadro_print( "long phase after bus" ); avogadro_print( "long phase after bus" );
#/ #/
self waittill( "phase_anim_done" ); self waittill( "phase_anim_done" );
self.ignoreall = 0; self.ignoreall = 0;
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
} }
dist_sq = distancesquared( self.origin, tag_pos ); dist_sq = sys::distancesquared( self.origin, tag_pos );
if ( dist_sq < 14400 ) if ( dist_sq < 14400 )
self bus_attack(); self bus_attack();
@ -454,16 +454,16 @@ bus_attack()
self endon( "stunned" ); self endon( "stunned" );
self endon( "stop_bus_attack" ); self endon( "stop_bus_attack" );
bus_attack_struct = []; bus_attack_struct = [];
bus_attack_struct[0] = spawnstruct(); bus_attack_struct[0] = sys::spawnstruct();
bus_attack_struct[0].window_tag = "window_left_rear_jnt"; bus_attack_struct[0].window_tag = "window_left_rear_jnt";
bus_attack_struct[0].substate = "bus_attack_back"; bus_attack_struct[0].substate = "bus_attack_back";
bus_attack_struct[1] = spawnstruct(); bus_attack_struct[1] = sys::spawnstruct();
bus_attack_struct[1].window_tag = "window_right_front_jnt"; bus_attack_struct[1].window_tag = "window_right_front_jnt";
bus_attack_struct[1].substate = "bus_attack_front"; bus_attack_struct[1].substate = "bus_attack_front";
bus_attack_struct[2] = spawnstruct(); bus_attack_struct[2] = sys::spawnstruct();
bus_attack_struct[2].window_tag = "window_left_2_jnt"; bus_attack_struct[2].window_tag = "window_left_2_jnt";
bus_attack_struct[2].substate = "bus_attack_left"; bus_attack_struct[2].substate = "bus_attack_left";
bus_attack_struct[3] = spawnstruct(); bus_attack_struct[3] = sys::spawnstruct();
bus_attack_struct[3].window_tag = "window_right_3_jnt"; bus_attack_struct[3].window_tag = "window_right_3_jnt";
bus_attack_struct[3].substate = "bus_attack_right"; bus_attack_struct[3].substate = "bus_attack_right";
random_attack_struct = array_randomize( bus_attack_struct ); random_attack_struct = array_randomize( bus_attack_struct );
@ -493,12 +493,12 @@ bus_attack()
if ( !self.bus_disabled ) if ( !self.bus_disabled )
{ {
self.shield = 1; self.shield = 1;
self unlink(); self sys::unlink();
self avogadro_exit( "bus" ); self avogadro_exit( "bus" );
} }
else else
{ {
func = getFunction( "maps/mp/zm_transit_bus", "bus_disabled_by_emp" ); func = pluto_sys::getfunction( "maps/mp/zm_transit_bus", "bus_disabled_by_emp" );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
level.the_bus thread [[ func ]]( 30 ); level.the_bus thread [[ func ]]( 30 );
@ -517,11 +517,11 @@ attach_to_bus()
/# /#
avogadro_print( "stay_attached " + self.bus_attack_struct.substate ); avogadro_print( "stay_attached " + self.bus_attack_struct.substate );
#/ #/
origin = level.the_bus gettagorigin( self.bus_attack_struct.window_tag ); origin = level.the_bus sys::gettagorigin( self.bus_attack_struct.window_tag );
angles = level.the_bus gettagangles( self.bus_attack_struct.window_tag ); angles = level.the_bus sys::gettagangles( self.bus_attack_struct.window_tag );
self show(); self sys::show();
self.shield = 0; self.shield = 0;
self animscripted( origin, angles, "zm_bus_attack", self.bus_attack_struct.substate ); self sys::animscripted( origin, angles, "zm_bus_attack", self.bus_attack_struct.substate );
self.bus_shock_time = 0; self.bus_shock_time = 0;
self.state = "stay_attached"; self.state = "stay_attached";
return; return;
@ -540,7 +540,7 @@ attach_update()
if ( self.bus_shock_time >= 2 ) if ( self.bus_shock_time >= 2 )
{ {
self.bus_shock_time = 0; self.bus_shock_time = 0;
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -561,11 +561,11 @@ attach_update()
detach_from_bus() detach_from_bus()
{ {
self unlink(); self sys::unlink();
/# /#
avogadro_print( "unlinking from bus window" ); avogadro_print( "unlinking from bus window" );
#/ #/
bus_forward = vectornormalize( anglestoforward( level.the_bus.angles ) ); bus_forward = sys::vectornormalize( anglestoforward( level.the_bus.angles ) );
unlink_pos = level.the_bus.origin + vectorscale( bus_forward, -144 ); unlink_pos = level.the_bus.origin + vectorscale( bus_forward, -144 );
unlink_pos = groundpos_ignore_water_new( unlink_pos + vectorscale( ( 0, 0, 1 ), 60.0 ) ); unlink_pos = groundpos_ignore_water_new( unlink_pos + vectorscale( ( 0, 0, 1 ), 60.0 ) );
self.shield = 1; self.shield = 1;
@ -579,28 +579,28 @@ bus_disable_show( time )
self endon( "death" ); self endon( "death" );
wait( time ); wait( time );
self.shield = 0; self.shield = 0;
self show(); self sys::show();
} }
bus_disable( bus_attack_struct ) bus_disable( bus_attack_struct )
{ {
self endon( "melee_pain" ); self endon( "melee_pain" );
self.bus_attack_struct = bus_attack_struct; self.bus_attack_struct = bus_attack_struct;
origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); origin = level.the_bus sys::gettagorigin( bus_attack_struct.window_tag );
angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); angles = level.the_bus sys::gettagangles( bus_attack_struct.window_tag );
self avogadro_teleport( origin, angles, 0.5, bus_attack_struct.window_tag ); self avogadro_teleport( origin, angles, 0.5, bus_attack_struct.window_tag );
self linkto( level.the_bus, bus_attack_struct.window_tag ); self sys::linkto( level.the_bus, bus_attack_struct.window_tag );
bus_disable_show( 0.1 ); bus_disable_show( 0.1 );
origin = level.the_bus gettagorigin( bus_attack_struct.window_tag ); origin = level.the_bus sys::gettagorigin( bus_attack_struct.window_tag );
angles = level.the_bus gettagangles( bus_attack_struct.window_tag ); angles = level.the_bus sys::gettagangles( bus_attack_struct.window_tag );
self animscripted( origin, angles, "zm_bus_attack", bus_attack_struct.substate ); self sys::animscripted( origin, angles, "zm_bus_attack", bus_attack_struct.substate );
/# /#
avogadro_print( "bus_disable " + bus_attack_struct.substate ); avogadro_print( "bus_disable " + bus_attack_struct.substate );
#/ #/
success = 0; success = 0;
self.mod_melee = 0; self.mod_melee = 0;
self.bus_shock_time = 0; self.bus_shock_time = 0;
func = getFunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" ); func = pluto_sys::getfunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
level thread [[ func ]]( "avogadro_onbus", 45 ); level thread [[ func ]]( "avogadro_onbus", 45 );
@ -614,7 +614,7 @@ bus_disable( bus_attack_struct )
if ( self.bus_attack_time >= 20 ) if ( self.bus_attack_time >= 20 )
{ {
self.bus_disabled = 1; self.bus_disabled = 1;
func = getFunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" ); func = pluto_sys::getfunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" );
level thread [[ func ]]( "avogadro_stopbus", 45 ); level thread [[ func ]]( "avogadro_stopbus", 45 );
break; break;
} }
@ -624,7 +624,7 @@ bus_disable( bus_attack_struct )
if ( self.bus_shock_time >= 2 ) if ( self.bus_shock_time >= 2 )
{ {
self.bus_shock_time = 0; self.bus_shock_time = 0;
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -651,13 +651,13 @@ avogadro_exit( from )
self.state = "exiting"; self.state = "exiting";
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.audio_loop_ent stoploopsound( 0.5 ); self.audio_loop_ent stoploopsound( 0.5 );
self notify( "stop_health" ); self notify( "stop_health" );
if ( isdefined( self.health_fx ) ) if ( isdefined( self.health_fx ) )
{ {
self.health_fx unlink(); self.health_fx sys::unlink();
self.health_fx delete(); self.health_fx delete();
} }
@ -667,23 +667,23 @@ avogadro_exit( from )
{ {
self playsound( "zmb_avogadro_death_short" ); self playsound( "zmb_avogadro_death_short" );
playfx( level._effect["avogadro_ascend_aerial"], self.origin ); playfx( level._effect["avogadro_ascend_aerial"], self.origin );
self animscripted( self.origin, self.angles, "zm_bus_win" ); self sys::animscripted( self.origin, self.angles, "zm_bus_win" );
maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" );
} }
else if ( from == "chamber" ) else if ( from == "chamber" )
{ {
self playsound( "zmb_avogadro_death_short" ); self playsound( "zmb_avogadro_death_short" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_chamber_out" ); self sys::animscripted( self.origin, self.angles, "zm_chamber_out" );
wait 0.4; wait 0.4;
self ghost(); self sys::ghost();
stop_exploder( 500 ); stop_exploder( 500 );
} }
else else
{ {
self playsound( "zmb_avogadro_death" ); self playsound( "zmb_avogadro_death" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_exit" ); self sys::animscripted( self.origin, self.angles, "zm_exit" );
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
} }
} }
@ -691,18 +691,18 @@ avogadro_exit( from )
{ {
self playsound( "zmb_avogadro_death" ); self playsound( "zmb_avogadro_death" );
playfx( level._effect["avogadro_ascend"], self.origin ); playfx( level._effect["avogadro_ascend"], self.origin );
self animscripted( self.origin, self.angles, "zm_exit" ); self sys::animscripted( self.origin, self.angles, "zm_exit" );
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
} }
if ( !isdefined( from ) || from != "chamber" ) if ( !isdefined( from ) || from != "chamber" )
level thread do_avogadro_flee_vo( self ); level thread do_avogadro_flee_vo( self );
self ghost(); self sys::ghost();
self.hit_by_melee = 0; self.hit_by_melee = 0;
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self sys::linkto( self.anchor );
if ( isdefined( from ) && from == "exit_idle" ) if ( isdefined( from ) && from == "exit_idle" )
self.return_round = level.round_number + 1; self.return_round = level.round_number + 1;
@ -729,15 +729,15 @@ cloud_update_fx()
if ( !isdefined( self.sndent ) ) if ( !isdefined( self.sndent ) )
{ {
self.sndent = spawn( "script_origin", ( 0, 0, 0 ) ); self.sndent = sys::spawn( "script_origin", ( 0, 0, 0 ) );
self.sndent playloopsound( "zmb_avogadro_thunder_overhead" ); self.sndent playloopsound( "zmb_avogadro_thunder_overhead" );
} }
cloud_time = gettime(); cloud_time = sys::gettime();
for ( vo_counter = 0; 1; vo_counter++ ) for ( vo_counter = 0; 1; vo_counter++ )
{ {
if ( gettime() >= cloud_time ) if ( sys::gettime() >= cloud_time )
{ {
if ( isdefined( self.current_region ) ) if ( isdefined( self.current_region ) )
{ {
@ -763,7 +763,7 @@ cloud_update_fx()
exploder_num = level.transit_region[region_str].exploder; exploder_num = level.transit_region[region_str].exploder;
exploder( exploder_num ); exploder( exploder_num );
self.sndent moveto( level.transit_region[region_str].sndorigin, 3 ); self.sndent moveto( level.transit_region[region_str].sndorigin, 3 );
cloud_time = gettime() + 30000; cloud_time = sys::gettime() + 30000;
} }
if ( vo_counter > 50 ) if ( vo_counter > 50 )
@ -824,17 +824,17 @@ cloud_update()
self thread avogadro_update_health(); self thread avogadro_update_health();
playsoundatposition( "zmb_avogadro_spawn_3d", new_origin ); playsoundatposition( "zmb_avogadro_spawn_3d", new_origin );
self.audio_loop_ent playloopsound( "zmb_avogadro_loop", 0.5 ); self.audio_loop_ent playloopsound( "zmb_avogadro_loop", 0.5 );
self unlink(); self sys::unlink();
ground_pos = groundpos_ignore_water_new( new_origin + vectorscale( ( 0, 0, 1 ), 60.0 ) ); ground_pos = groundpos_ignore_water_new( new_origin + vectorscale( ( 0, 0, 1 ), 60.0 ) );
playfx( level._effect["avogadro_descend"], ground_pos ); playfx( level._effect["avogadro_descend"], ground_pos );
self animscripted( ground_pos, self.anchor.angles, "zm_arrival" ); self sys::animscripted( ground_pos, self.anchor.angles, "zm_arrival" );
maps\mp\animscripts\zm_shared::donotetracks( "arrival_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "arrival_anim" );
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
time_to_leave = gettime() + 30000; time_to_leave = sys::gettime() + 30000;
while ( true ) while ( true )
{ {
if ( gettime() > time_to_leave ) if ( sys::gettime() > time_to_leave )
{ {
/# /#
avogadro_print( "enemy never showed - leaving" ); avogadro_print( "enemy never showed - leaving" );
@ -875,7 +875,7 @@ enemy_in_region()
get_player_in_region() get_player_in_region()
{ {
players = get_players(); players = sys::getplayers();
players = array_randomize( players ); players = array_randomize( players );
zones = level.transit_region[self.current_region].zones; zones = level.transit_region[self.current_region].zones;
@ -936,17 +936,17 @@ cloud_find_spawn()
avogadro_reveal( show_time ) avogadro_reveal( show_time )
{ {
self endon( "death" ); self endon( "death" );
self show(); self sys::show();
wait( show_time ); wait( show_time );
self ghost(); self sys::ghost();
} }
avogadro_teleport( dest_pos, dest_angles, lerp_time, tag_override ) avogadro_teleport( dest_pos, dest_angles, lerp_time, tag_override )
{ {
self.is_teleport = 1; self.is_teleport = 1;
self.phase_fx = spawn( "script_model", self.origin ); self.phase_fx = sys::spawn( "script_model", self.origin );
self.phase_fx setmodel( "tag_origin" ); self.phase_fx setmodel( "tag_origin" );
self.phase_fx linkto( self ); self.phase_fx sys::linkto( self );
wait 0.1; wait 0.1;
playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" ); playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" );
playfx( level._effect["avogadro_phasing"], self.origin ); playfx( level._effect["avogadro_phasing"], self.origin );
@ -954,18 +954,18 @@ avogadro_teleport( dest_pos, dest_angles, lerp_time, tag_override )
self playsound( "zmb_avogadro_warp_out" ); self playsound( "zmb_avogadro_warp_out" );
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self sys::linkto( self.anchor );
self.anchor moveto( dest_pos, lerp_time ); self.anchor moveto( dest_pos, lerp_time );
self.anchor waittill( "movedone" ); self.anchor waittill( "movedone" );
self.anchor.origin = dest_pos; self.anchor.origin = dest_pos;
self.anchor.angles = dest_angles; self.anchor.angles = dest_angles;
self unlink(); self sys::unlink();
wait 0.1; wait 0.1;
if ( isdefined( tag_override ) ) if ( isdefined( tag_override ) )
{ {
dest_pos = level.the_bus gettagorigin( tag_override ); dest_pos = level.the_bus sys::gettagorigin( tag_override );
dest_angles = level.the_bus gettagangles( tag_override ); dest_angles = level.the_bus sys::gettagangles( tag_override );
} }
self forceteleport( dest_pos, dest_angles ); self forceteleport( dest_pos, dest_angles );
@ -995,9 +995,9 @@ check_range_attack()
if ( dist_sq > 14400 && dist_sq < 360000 ) if ( dist_sq > 14400 && dist_sq < 360000 )
{ {
vec_facing = anglestoforward( self.angles ); vec_facing = anglestoforward( self.angles );
norm_facing = vectornormalize( vec_facing ); norm_facing = sys::vectornormalize( vec_facing );
norm_enemy = vectornormalize( vec_enemy ); norm_enemy = sys::vectornormalize( vec_enemy );
dot = vectordot( norm_facing, norm_enemy ); dot = sys::vectordot( norm_facing, norm_enemy );
if ( dot > 0.99 ) if ( dot > 0.99 )
{ {
@ -1022,16 +1022,16 @@ range_attack()
if ( isdefined( enemy ) ) if ( isdefined( enemy ) )
{ {
self thread shoot_bolt_wait( "ranged_attack", enemy ); self thread shoot_bolt_wait( "ranged_attack", enemy );
self show(); self sys::show();
self animscripted( self.origin, self.angles, "zm_ranged_attack_in" ); self sys::animscripted( self.origin, self.angles, "zm_ranged_attack_in" );
maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" );
self animscripted( self.origin, self.angles, "zm_ranged_attack_loop" ); self sys::animscripted( self.origin, self.angles, "zm_ranged_attack_loop" );
maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" );
self animscripted( self.origin, self.angles, "zm_ranged_attack_out" ); self sys::animscripted( self.origin, self.angles, "zm_ranged_attack_out" );
maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" ); maps\mp\animscripts\zm_shared::donotetracks( "ranged_attack" );
self.shield = 1; self.shield = 1;
self thread avogadro_update_health(); self thread avogadro_update_health();
self ghost(); self sys::ghost();
} }
} }
@ -1044,7 +1044,7 @@ shoot_bolt_wait( animname, enemy )
if ( isdefined( self.health_fx ) ) if ( isdefined( self.health_fx ) )
{ {
self.health_fx unlink(); self.health_fx sys::unlink();
self.health_fx delete(); self.health_fx delete();
} }
@ -1053,9 +1053,9 @@ shoot_bolt_wait( animname, enemy )
shoot_bolt( enemy ) shoot_bolt( enemy )
{ {
source_pos = self gettagorigin( "tag_weapon_right" ); source_pos = self sys::gettagorigin( "tag_weapon_right" );
target_pos = enemy geteye(); target_pos = enemy geteye();
bolt = spawn( "script_model", source_pos ); bolt = sys::spawn( "script_model", source_pos );
bolt setmodel( "tag_origin" ); bolt setmodel( "tag_origin" );
wait 0.1; wait 0.1;
self playsound( "zmb_avogadro_attack" ); self playsound( "zmb_avogadro_attack" );
@ -1072,7 +1072,7 @@ check_bolt_impact( enemy )
if ( is_player_valid( enemy ) ) if ( is_player_valid( enemy ) )
{ {
enemy_eye_pos = enemy geteye(); enemy_eye_pos = enemy geteye();
dist_sq = distancesquared( self.origin, enemy_eye_pos ); dist_sq = sys::distancesquared( self.origin, enemy_eye_pos );
if ( dist_sq < 4096 ) if ( dist_sq < 4096 )
{ {
@ -1092,39 +1092,39 @@ check_bolt_impact( enemy )
region_empty() region_empty()
{ {
if ( gettime() >= self.region_timer ) if ( sys::gettime() >= self.region_timer )
{ {
player = self get_player_in_region(); player = self get_player_in_region();
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
self.region_timer = gettime() + 500; self.region_timer = sys::gettime() + 500;
return false; return false;
} }
/# /#
debug_dist_sq = 0; debug_dist_sq = 0;
#/ #/
players = getplayers(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
continue; continue;
dist_sq = distancesquared( self.origin, player.origin ); dist_sq = sys::distancesquared( self.origin, player.origin );
/# /#
debug_dist_sq = distance( self.origin, player.origin ); debug_dist_sq = distance( self.origin, player.origin );
#/ #/
if ( dist_sq < 9000000 ) if ( dist_sq < 9000000 )
{ {
self.region_timer = gettime() + 500; self.region_timer = sys::gettime() + 500;
return false; return false;
} }
} }
self.region_timer = gettime() + 500; self.region_timer = sys::gettime() + 500;
/# /#
avogadro_print( "no one left to kill " + debug_dist_sq ); avogadro_print( "no one left to kill " + debug_dist_sq );
#/ #/
@ -1148,11 +1148,11 @@ check_phase()
return false; return false;
#/ #/
if ( gettime() > self.phase_time ) if ( sys::gettime() > self.phase_time )
{ {
if ( isdefined( self.is_traversing ) && self.is_traversing ) if ( isdefined( self.is_traversing ) && self.is_traversing )
{ {
self.phase_time = gettime() + 2000; self.phase_time = sys::gettime() + 2000;
return false; return false;
} }
@ -1173,13 +1173,13 @@ do_phase()
self.state = "phasing"; self.state = "phasing";
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.ignoreall = 1; self.ignoreall = 1;
self thread phase_failsafe(); self thread phase_failsafe();
self animcustom( ::play_phase_anim ); self sys::animcustom( ::play_phase_anim );
self waittill( "phase_anim_done" ); self waittill( "phase_anim_done" );
self.ignoreall = 0; self.ignoreall = 0;
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
self.state = "idle"; self.state = "idle";
} }
@ -1187,23 +1187,23 @@ play_phase_anim()
{ {
self endon( "death" ); self endon( "death" );
self endon( "phase_anim_done" ); self endon( "phase_anim_done" );
self.phase_fx = spawn( "script_model", self.origin ); self.phase_fx = sys::spawn( "script_model", self.origin );
self.phase_fx setmodel( "tag_origin" ); self.phase_fx setmodel( "tag_origin" );
self.phase_fx linkto( self ); self.phase_fx sys::linkto( self );
wait 0.05; wait 0.05;
playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" ); playfxontag( level._effect["avogadro_phase_trail"], self.phase_fx, "tag_origin" );
playfx( level._effect["avogadro_phasing"], self.origin ); playfx( level._effect["avogadro_phasing"], self.origin );
self avogadro_reveal( 0.1 ); self avogadro_reveal( 0.1 );
self playsound( "zmb_avogadro_warp_out" ); self playsound( "zmb_avogadro_warp_out" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self setanimstatefromasd( self.phase_state, self.phase_substate ); self sys::setanimstatefromasd( self.phase_state, self.phase_substate );
maps\mp\animscripts\zm_shared::donotetracks( "teleport_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "teleport_anim" );
self.phase_fx delete(); self.phase_fx delete();
playfx( level._effect["avogadro_phasing"], self.origin ); playfx( level._effect["avogadro_phasing"], self.origin );
self avogadro_reveal( 0.1 ); self avogadro_reveal( 0.1 );
self orientmode( "face default" ); self sys::orientmode( "face default" );
self playsound( "zmb_avogadro_warp_in" ); self playsound( "zmb_avogadro_warp_in" );
self.phase_time = gettime() + 2000; self.phase_time = sys::gettime() + 2000;
self notify( "phase_anim_done" ); self notify( "phase_anim_done" );
} }
@ -1223,9 +1223,9 @@ phase_failsafe()
playfx( level._effect["avogadro_phasing"], self.origin ); playfx( level._effect["avogadro_phasing"], self.origin );
self avogadro_reveal( 0.1 ); self avogadro_reveal( 0.1 );
self orientmode( "face default" ); self sys::orientmode( "face default" );
self playsound( "zmb_avogadro_warp_in" ); self playsound( "zmb_avogadro_warp_in" );
self.phase_time = gettime() + 2000; self.phase_time = sys::gettime() + 2000;
self notify( "phase_anim_done" ); self notify( "phase_anim_done" );
} }
} }
@ -1281,17 +1281,17 @@ avogadro_pain( einflictor )
else else
animstate = "zm_bus_pain"; animstate = "zm_bus_pain";
origin = level.the_bus gettagorigin( tag ); origin = level.the_bus sys::gettagorigin( tag );
angles = level.the_bus gettagangles( tag ); angles = level.the_bus sys::gettagangles( tag );
} }
if ( self.hit_by_melee < 4 ) if ( self.hit_by_melee < 4 )
{ {
self thread avogadro_update_health(); self thread avogadro_update_health();
self animscripted( origin, angles, animstate, substate ); self sys::animscripted( origin, angles, animstate, substate );
maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
self ghost(); self sys::ghost();
self.phase_time = gettime() - 1; self.phase_time = sys::gettime() - 1;
if ( self.state == "stay_attached" ) if ( self.state == "stay_attached" )
self attach_to_bus(); self attach_to_bus();
@ -1312,22 +1312,22 @@ avogadro_pain( einflictor )
/# /#
avogadro_print( "come back on power" ); avogadro_print( "come back on power" );
#/ #/
self show(); self sys::show();
self.in_pain = 0; self.in_pain = 0;
/# /#
avogadro_print( "pain cleared from zone_prr" ); avogadro_print( "pain cleared from zone_prr" );
#/ #/
self notify( "stop_pain_watcher" ); self notify( "stop_pain_watcher" );
self avogadro_teleport( self.core_model.origin, self.core_model.angles, 1 ); self avogadro_teleport( self.core_model.origin, self.core_model.angles, 1 );
core_mover = getent( "core_mover", "targetname" ); core_mover = sys::getent( "core_mover", "targetname" );
self linkto( core_mover, "tag_origin" ); self sys::linkto( core_mover, "tag_origin" );
while ( flag( "power_on" ) ) while ( flag( "power_on" ) )
wait 0.1; wait 0.1;
self show(); self sys::show();
self.state = "chamber"; self.state = "chamber";
self setanimstatefromasd( "zm_chamber_idle" ); self sys::setanimstatefromasd( "zm_chamber_idle" );
} }
else else
{ {
@ -1341,7 +1341,7 @@ avogadro_pain( einflictor )
if ( !self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) ) if ( !self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr" ) )
avogadro_print( "no zone" ); avogadro_print( "no zone" );
#/ #/
self show(); self sys::show();
self avogadro_exit(); self avogadro_exit();
} }
} }
@ -1372,12 +1372,12 @@ avogadro_update_health_fx()
if ( !isdefined( self.health_fx ) ) if ( !isdefined( self.health_fx ) )
{ {
tag_origin = self gettagorigin( "J_SpineUpper" ); tag_origin = self sys::gettagorigin( "J_SpineUpper" );
tag_angles = self gettagangles( "J_SpineUpper" ); tag_angles = self sys::gettagangles( "J_SpineUpper" );
self.health_fx = spawn( "script_model", tag_origin ); self.health_fx = sys::spawn( "script_model", tag_origin );
self.health_fx.angles = tag_angles; self.health_fx.angles = tag_angles;
self.health_fx setmodel( "tag_origin" ); self.health_fx setmodel( "tag_origin" );
self.health_fx linkto( self ); self.health_fx sys::linkto( self );
wait 0.1; wait 0.1;
} }
@ -1405,7 +1405,7 @@ avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
if ( self.shield ) if ( self.shield )
{ {
einflictor.avogadro_melee_time = gettime(); einflictor.avogadro_melee_time = sys::gettime();
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", einflictor, 0.25, 1 ); maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_ai_avogadro_electrified", einflictor, 0.25, 1 );
einflictor shellshock( "electrocution", 0.25 ); einflictor shellshock( "electrocution", 0.25 );
einflictor notify( "avogadro_damage_taken" ); einflictor notify( "avogadro_damage_taken" );
@ -1414,7 +1414,7 @@ avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
if ( sweapon == "riotshield_zm" ) if ( sweapon == "riotshield_zm" )
{ {
shield_damage = level.zombie_vars["riotshield_fling_damage_shield"]; shield_damage = level.zombie_vars["riotshield_fling_damage_shield"];
func = getFunction( "maps/mp/zombies/_zm_weap_riotshield", "player_damage_shield" ); func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_riotshield", "player_damage_shield" );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
einflictor [[ func ]]( shield_damage, 0 ); einflictor [[ func ]]( shield_damage, 0 );
@ -1528,7 +1528,7 @@ avogadro_debug_axis()
{ {
if ( !isdefined( self.debug_axis ) ) if ( !isdefined( self.debug_axis ) )
{ {
self.debug_axis = spawn( "script_model", self.origin ); self.debug_axis = sys::spawn( "script_model", self.origin );
self.debug_axis setmodel( "fx_axis_createfx" ); self.debug_axis setmodel( "fx_axis_createfx" );
} }
else else
@ -1567,11 +1567,11 @@ avogadro_print( str )
do_avogadro_flee_vo( avogadro ) do_avogadro_flee_vo( avogadro )
{ {
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( distancesquared( player.origin, avogadro.origin ) < 250000 ) if ( sys::distancesquared( player.origin, avogadro.origin ) < 250000 )
{ {
player thread do_player_general_vox( "general", "avogadro_flee", 30, 45 ); player thread do_player_general_vox( "general", "avogadro_flee", 30, 45 );
return; return;
@ -1585,7 +1585,7 @@ avogadro_storm_vox()
return; return;
level.checking_avogadro_storm_vox = 1; level.checking_avogadro_storm_vox = 1;
players = get_players(); players = sys::getplayers();
players = array_randomize( players ); players = array_randomize( players );
foreach ( player in players ) foreach ( player in players )

View File

@ -33,9 +33,9 @@ precache()
level._effect["brutus_lockdown_sm"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" ); level._effect["brutus_lockdown_sm"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" );
level._effect["brutus_lockdown_lg"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" ); level._effect["brutus_lockdown_lg"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" );
precachemodel( "c_zom_cellbreaker_helmet" ); precachemodel( "c_zom_cellbreaker_helmet" );
precacheshellshock( "mp_radiation_high" ); sys::precacheshellshock( "mp_radiation_high" );
precacheshellshock( "mp_radiation_med" ); sys::precacheshellshock( "mp_radiation_med" );
precacheshellshock( "mp_radiation_low" ); sys::precacheshellshock( "mp_radiation_low" );
precachestring( &"ZOMBIE_LOCKED_COST" ); precachestring( &"ZOMBIE_LOCKED_COST" );
precachestring( &"ZOMBIE_LOCKED_COST_2000" ); precachestring( &"ZOMBIE_LOCKED_COST_2000" );
precachestring( &"ZOMBIE_LOCKED_COST_4000" ); precachestring( &"ZOMBIE_LOCKED_COST_4000" );
@ -62,9 +62,9 @@ main()
level._effect["brutus_lockdown_sm"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" ); level._effect["brutus_lockdown_sm"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_perk_s_lock" );
level._effect["brutus_lockdown_lg"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" ); level._effect["brutus_lockdown_lg"] = sys::loadfx( "maps/zombie_alcatraz/fx_alcatraz_w_bench_lock" );
precachemodel( "c_zom_cellbreaker_helmet" ); precachemodel( "c_zom_cellbreaker_helmet" );
precacheshellshock( "mp_radiation_high" ); sys::precacheshellshock( "mp_radiation_high" );
precacheshellshock( "mp_radiation_med" ); sys::precacheshellshock( "mp_radiation_med" );
precacheshellshock( "mp_radiation_low" ); sys::precacheshellshock( "mp_radiation_low" );
precachestring( &"ZOMBIE_LOCKED_COST" ); precachestring( &"ZOMBIE_LOCKED_COST" );
precachestring( &"ZOMBIE_LOCKED_COST_2000" ); precachestring( &"ZOMBIE_LOCKED_COST_2000" );
precachestring( &"ZOMBIE_LOCKED_COST_4000" ); precachestring( &"ZOMBIE_LOCKED_COST_4000" );
@ -80,7 +80,7 @@ main()
[[ level.custom_brutus_barrier_fx ]](); [[ level.custom_brutus_barrier_fx ]]();
level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" ); level.brutus_spawners = sys::getentarray( "brutus_zombie_spawner", "script_noteworthy" );
if ( level.brutus_spawners.size == 0 ) if ( level.brutus_spawners.size == 0 )
return; return;
@ -156,7 +156,7 @@ main()
init() init()
{ {
level.brutus_spawners = getentarray( "brutus_zombie_spawner", "script_noteworthy" ); level.brutus_spawners = sys::getentarray( "brutus_zombie_spawner", "script_noteworthy" );
if ( level.brutus_spawners.size == 0 ) if ( level.brutus_spawners.size == 0 )
return; return;
@ -233,7 +233,7 @@ init()
setup_interaction_matrix() setup_interaction_matrix()
{ {
level.interaction_types = []; level.interaction_types = [];
level.interaction_types["magic_box"] = spawnstruct(); level.interaction_types["magic_box"] = sys::spawnstruct();
level.interaction_types["magic_box"].priority = 0; level.interaction_types["magic_box"].priority = 0;
level.interaction_types["magic_box"].animstate = "zm_lock_magicbox"; level.interaction_types["magic_box"].animstate = "zm_lock_magicbox";
level.interaction_types["magic_box"].notify_name = "box_lock_anim"; level.interaction_types["magic_box"].notify_name = "box_lock_anim";
@ -246,7 +246,7 @@ setup_interaction_matrix()
level.interaction_types["magic_box"].spawn_bias = 1000; level.interaction_types["magic_box"].spawn_bias = 1000;
level.interaction_types["magic_box"].num_times_to_scale = 1; level.interaction_types["magic_box"].num_times_to_scale = 1;
level.interaction_types["magic_box"].unlock_cost = 2000; level.interaction_types["magic_box"].unlock_cost = 2000;
level.interaction_types["perk_machine"] = spawnstruct(); level.interaction_types["perk_machine"] = sys::spawnstruct();
level.interaction_types["perk_machine"].priority = 1; level.interaction_types["perk_machine"].priority = 1;
level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine"; level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine";
level.interaction_types["perk_machine"].notify_name = "perk_lock_anim"; level.interaction_types["perk_machine"].notify_name = "perk_lock_anim";
@ -260,7 +260,7 @@ setup_interaction_matrix()
level.interaction_types["perk_machine"].unlock_cost = 2000; level.interaction_types["perk_machine"].unlock_cost = 2000;
if ( getDvar( "mapname" ) == "zm_prison" ) if ( getDvar( "mapname" ) == "zm_prison" )
{ {
level.interaction_types["craftable_table"] = spawnstruct(); level.interaction_types["craftable_table"] = sys::spawnstruct();
level.interaction_types["craftable_table"].priority = 2; level.interaction_types["craftable_table"].priority = 2;
level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table"; level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
level.interaction_types["craftable_table"].notify_name = "table_smash_anim"; level.interaction_types["craftable_table"].notify_name = "table_smash_anim";
@ -276,7 +276,7 @@ setup_interaction_matrix()
level.interaction_types["craftable_table"].interaction_yaw_offset = 270; level.interaction_types["craftable_table"].interaction_yaw_offset = 270;
level.interaction_types["craftable_table"].fx_z_offset = -44; level.interaction_types["craftable_table"].fx_z_offset = -44;
level.interaction_types["craftable_table"].fx_yaw_offset = 270; level.interaction_types["craftable_table"].fx_yaw_offset = 270;
level.interaction_types["trap"] = spawnstruct(); level.interaction_types["trap"] = sys::spawnstruct();
level.interaction_types["trap"].priority = 3; level.interaction_types["trap"].priority = 3;
level.interaction_types["trap"].animstate = "zm_smash_trap"; level.interaction_types["trap"].animstate = "zm_smash_trap";
level.interaction_types["trap"].notify_name = "trap_smash_anim"; level.interaction_types["trap"].notify_name = "trap_smash_anim";
@ -287,7 +287,7 @@ setup_interaction_matrix()
level.interaction_types["trap"].interact_func = ::trap_smash; level.interaction_types["trap"].interact_func = ::trap_smash;
level.interaction_types["trap"].spawn_bias = 400; level.interaction_types["trap"].spawn_bias = 400;
level.interaction_types["trap"].interaction_z_offset = -15; level.interaction_types["trap"].interaction_z_offset = -15;
level.interaction_types["plane_ramp"] = spawnstruct(); level.interaction_types["plane_ramp"] = sys::spawnstruct();
level.interaction_types["plane_ramp"].priority = 4; level.interaction_types["plane_ramp"].priority = 4;
level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp"; level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp";
level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim"; level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim";
@ -305,7 +305,7 @@ setup_interaction_matrix()
level.interaction_types["plane_ramp"].fx_x_offset = 70; level.interaction_types["plane_ramp"].fx_x_offset = 70;
level.interaction_types["plane_ramp"].fx_yaw_offset = 90; level.interaction_types["plane_ramp"].fx_yaw_offset = 90;
} }
level.interaction_types["blocker"] = spawnstruct(); level.interaction_types["blocker"] = sys::spawnstruct();
level.interaction_types["blocker"].priority = 5; level.interaction_types["blocker"].priority = 5;
level.interaction_types["blocker"].animstate = "zm_smash_blocker"; level.interaction_types["blocker"].animstate = "zm_smash_blocker";
level.interaction_types["blocker"].notify_name = "board_smash_anim"; level.interaction_types["blocker"].notify_name = "board_smash_anim";
@ -409,10 +409,10 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
self.zombie_init_done = 1; self.zombie_init_done = 1;
self notify( "zombie_init_done" ); self notify( "zombie_init_done" );
self.allowpain = 0; self.allowpain = 0;
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties();
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self );
self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); self thread maps\mp\zombies\_zm_spawner::enemy_death_detection();
@ -459,7 +459,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
self thread brutus_lockdown_client_effects( 0.5 ); self thread brutus_lockdown_client_effects( 0.5 );
playfx( level._effect["brutus_spawn"], self.origin ); playfx( level._effect["brutus_spawn"], self.origin );
playsoundatposition( "zmb_ai_brutus_spawn", self.origin ); playsoundatposition( "zmb_ai_brutus_spawn", self.origin );
self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); self sys::animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" );
self thread maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" ); self thread maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" );
self waittillmatch( "spawn_anim", "spawn_complete" ); self waittillmatch( "spawn_anim", "spawn_complete" );
self.not_interruptable = 0; self.not_interruptable = 0;
@ -473,9 +473,9 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
brutus_chest_flashlight() brutus_chest_flashlight()
{ {
wait 0.1; wait 0.1;
self.chest_flashlight = spawn( "script_model", self.origin ); self.chest_flashlight = sys::spawn( "script_model", self.origin );
self.chest_flashlight setmodel( "tag_origin" ); self.chest_flashlight setmodel( "tag_origin" );
self.chest_flashlight linkto( self, "J_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) ); self.chest_flashlight sys::linkto( self, "J_spineupper", ( 0, 0, 0 ), ( 0, 0, 0 ) );
playfxontag( level._effect["brutus_flashlight"], self.chest_flashlight, "tag_origin" ); playfxontag( level._effect["brutus_flashlight"], self.chest_flashlight, "tag_origin" );
self waittill( "death" ); self waittill( "death" );
@ -486,23 +486,23 @@ brutus_chest_flashlight()
brutus_temp_despawn( brutus, endon_notify, respawn_notify ) brutus_temp_despawn( brutus, endon_notify, respawn_notify )
{ {
level endon( endon_notify ); level endon( endon_notify );
align_struct = spawn( "script_model", brutus.origin ); align_struct = sys::spawn( "script_model", brutus.origin );
align_struct.angles = brutus.angles; align_struct.angles = brutus.angles;
align_struct setmodel( "tag_origin" ); align_struct setmodel( "tag_origin" );
if ( !level.brutus_in_grief && ( brutus istouching( level.e_gondola.t_ride ) || isdefined( brutus.force_gondola_teleport ) && brutus.force_gondola_teleport ) ) if ( !level.brutus_in_grief && ( brutus sys::istouching( level.e_gondola.t_ride ) || isdefined( brutus.force_gondola_teleport ) && brutus.force_gondola_teleport ) )
{ {
brutus.force_gondola_teleport = 0; brutus.force_gondola_teleport = 0;
align_struct linkto( level.e_gondola ); align_struct sys::linkto( level.e_gondola );
brutus linkto( align_struct ); brutus sys::linkto( align_struct );
} }
brutus.not_interruptable = 1; brutus.not_interruptable = 1;
playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" ); playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" );
brutus animscripted( brutus.origin, brutus.angles, "zm_taunt" ); brutus sys::animscripted( brutus.origin, brutus.angles, "zm_taunt" );
brutus maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" ); brutus maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" );
brutus.not_interruptable = 0; brutus.not_interruptable = 0;
brutus ghost(); brutus sys::ghost();
brutus notify( "brutus_cleanup" ); brutus notify( "brutus_cleanup" );
brutus notify( "brutus_teleporting" ); brutus notify( "brutus_teleporting" );
@ -564,9 +564,9 @@ snddelayedmusic()
if ( !isdefined( self.sndbrutusmusicent ) ) if ( !isdefined( self.sndbrutusmusicent ) )
{ {
sndentorigin = self gettagorigin( "J_spineupper" ); sndentorigin = self sys::gettagorigin( "J_spineupper" );
self.sndbrutusmusicent = spawn( "script_origin", sndentorigin ); self.sndbrutusmusicent = sys::spawn( "script_origin", sndentorigin );
self.sndbrutusmusicent linkto( self, "J_spineupper" ); self.sndbrutusmusicent sys::linkto( self, "J_spineupper" );
self.sndbrutusmusicent playloopsound( "mus_event_brutus_loop" ); self.sndbrutusmusicent playloopsound( "mus_event_brutus_loop" );
} }
@ -586,7 +586,7 @@ brutus_health_increases()
{ {
if ( level.round_number > level.brutus_last_spawn_round ) if ( level.round_number > level.brutus_last_spawn_round )
{ {
a_players = getplayers(); a_players = sys::getplayers();
n_player_modifier = 1; n_player_modifier = 1;
if ( a_players.size > 1 ) if ( a_players.size > 1 )
@ -804,14 +804,14 @@ brutus_death()
{ {
team_points = level.brutus_team_points_for_death; team_points = level.brutus_team_points_for_death;
player_points = level.brutus_player_points_for_death; player_points = level.brutus_player_points_for_death;
a_players = getplayers( self.team ); a_players = sys::getplayers( self.team );
} }
else else
{ {
multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self );
team_points = multiplier * round_up_score( level.brutus_team_points_for_death, 5 ); team_points = multiplier * round_up_score( level.brutus_team_points_for_death, 5 );
player_points = multiplier * round_up_score( level.brutus_player_points_for_death, 5 ); player_points = multiplier * round_up_score( level.brutus_player_points_for_death, 5 );
a_players = getplayers(); a_players = sys::getplayers();
} }
foreach ( player in a_players ) foreach ( player in a_players )
@ -880,7 +880,7 @@ brutus_round_tracker()
while ( true ) while ( true )
{ {
level waittill( "between_round_over" ); level waittill( "between_round_over" );
players = get_players(); players = sys::getplayers();
if ( level.round_number < 9 && ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) ) if ( level.round_number < 9 && ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game ) )
continue; continue;
@ -1061,7 +1061,7 @@ brutus_watch_for_gondola()
{ {
level waittill( "gondola_moving" ); level waittill( "gondola_moving" );
if ( !level.brutus_in_grief && self istouching( level.e_gondola.t_ride ) ) if ( !level.brutus_in_grief && self sys::istouching( level.e_gondola.t_ride ) )
self.force_gondola_teleport = 1; self.force_gondola_teleport = 1;
wait 0.05; wait 0.05;
@ -1070,7 +1070,7 @@ brutus_watch_for_gondola()
are_all_targets_invalid() are_all_targets_invalid()
{ {
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
@ -1103,7 +1103,7 @@ brutus_watch_for_non_afterlife_players()
while ( b_all_players_in_afterlife ) while ( b_all_players_in_afterlife )
{ {
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
@ -1120,23 +1120,23 @@ brutus_watch_for_non_afterlife_players()
brutus_stuck_teleport() brutus_stuck_teleport()
{ {
self endon( "death" ); self endon( "death" );
align_struct = spawn( "script_model", self.origin ); align_struct = sys::spawn( "script_model", self.origin );
align_struct.angles = self.angles; align_struct.angles = self.angles;
align_struct setmodel( "tag_origin" ); align_struct setmodel( "tag_origin" );
if ( !level.brutus_in_grief && ( self istouching( level.e_gondola.t_ride ) || isdefined( self.force_gondola_teleport ) && self.force_gondola_teleport ) ) if ( !level.brutus_in_grief && ( self sys::istouching( level.e_gondola.t_ride ) || isdefined( self.force_gondola_teleport ) && self.force_gondola_teleport ) )
{ {
self.force_gondola_teleport = 0; self.force_gondola_teleport = 0;
align_struct linkto( level.e_gondola ); align_struct sys::linkto( level.e_gondola );
self linkto( align_struct ); self sys::linkto( align_struct );
} }
self.not_interruptable = 1; self.not_interruptable = 1;
playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" ); playfxontag( level._effect["brutus_spawn"], align_struct, "tag_origin" );
self animscripted( self.origin, self.angles, "zm_taunt" ); self sys::animscripted( self.origin, self.angles, "zm_taunt" );
self maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "taunt_anim" );
self.not_interruptable = 0; self.not_interruptable = 0;
self ghost(); self sys::ghost();
self notify( "brutus_cleanup" ); self notify( "brutus_cleanup" );
self notify( "brutus_teleporting" ); self notify( "brutus_teleporting" );
@ -1180,7 +1180,7 @@ watch_for_valid_melee()
{ {
self waittillmatch( "melee_anim", "end" ); self waittillmatch( "melee_anim", "end" );
if ( isdefined( self.favorite_enemy ) && distancesquared( self.origin, self.favorite_enemy.origin ) < 16384 && !( isdefined( self.favorite_enemy.is_on_gondola ) && self.favorite_enemy.is_on_gondola ) ) if ( isdefined( self.favorite_enemy ) && sys::distancesquared( self.origin, self.favorite_enemy.origin ) < 16384 && !( isdefined( self.favorite_enemy.is_on_gondola ) && self.favorite_enemy.is_on_gondola ) )
self.fail_count = 0; self.fail_count = 0;
} }
} }
@ -1315,7 +1315,7 @@ brutus_find_flesh()
self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 ); self.priority_item = self get_priority_item_for_brutus( brutus_zone, 1 );
} }
if ( isdefined( player ) && distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isdefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) ) if ( isdefined( player ) && sys::distancesquared( self.origin, player.origin ) < level.brutus_aggro_dist_sq && isdefined( player_zone ) && should_brutus_aggro( player_zone, brutus_zone ) )
{ {
self.favorite_enemy = player; self.favorite_enemy = player;
self.goal_pos = player.origin; self.goal_pos = player.origin;
@ -1327,7 +1327,7 @@ brutus_find_flesh()
self.goalradius = 12; self.goalradius = 12;
self.custom_goalradius_override = 12; self.custom_goalradius_override = 12;
self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state ); self.goal_pos = self get_interact_offset( self.priority_item, self.ai_state );
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
} }
else if ( isdefined( player ) ) else if ( isdefined( player ) )
{ {
@ -1339,8 +1339,8 @@ brutus_find_flesh()
{ {
self.goal_pos = self.origin; self.goal_pos = self.origin;
self.ai_state = "idle"; self.ai_state = "idle";
self setanimstatefromasd( "zm_idle" ); self sys::setanimstatefromasd( "zm_idle" );
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
} }
wait 1; wait 1;
@ -1354,7 +1354,7 @@ trap_damage_callback( trap )
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) ) if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) )
{ {
self.not_interruptable = 1; self.not_interruptable = 1;
self animscripted( self.origin, self.angles, "zm_taunt" ); self sys::animscripted( self.origin, self.angles, "zm_taunt" );
self maps\mp\animscripts\shared::donotetracks( "taunt_anim" ); self maps\mp\animscripts\shared::donotetracks( "taunt_anim" );
if ( trap.targetname == "fan_trap" ) if ( trap.targetname == "fan_trap" )
@ -1458,7 +1458,7 @@ get_priority_item_for_brutus( zone_name, do_secondary_zone_checks )
get_dist_score( object ) get_dist_score( object )
{ {
return distancesquared( self.origin, object.origin ); return sys::distancesquared( self.origin, object.origin );
} }
get_trap_score( object ) get_trap_score( object )
@ -1466,7 +1466,7 @@ get_trap_score( object )
if ( sighttracepassed( self.origin + ( 0, 0, 1 ), object.origin, 0, self ) ) if ( sighttracepassed( self.origin + ( 0, 0, 1 ), object.origin, 0, self ) )
return 0; return 0;
return distancesquared( self.origin, object.origin ); return sys::distancesquared( self.origin, object.origin );
} }
get_magic_boxes( zone_name ) get_magic_boxes( zone_name )
@ -1486,11 +1486,11 @@ is_magic_box_valid()
get_perk_machine_trigger() get_perk_machine_trigger()
{ {
if ( self.targetname == "vendingelectric_cherry" ) if ( self.targetname == "vendingelectric_cherry" )
perk_machine = getent( "vending_electriccherry", "target" ); perk_machine = sys::getent( "vending_electriccherry", "target" );
else if ( self.targetname == "vending_deadshot_model" ) else if ( self.targetname == "vending_deadshot_model" )
perk_machine = getent( "vending_deadshot", "target" ); perk_machine = sys::getent( "vending_deadshot", "target" );
else else
perk_machine = getent( self.targetname, "target" ); perk_machine = sys::getent( self.targetname, "target" );
return perk_machine; return perk_machine;
} }
@ -1522,7 +1522,7 @@ get_trigger_for_craftable()
return level.a_uts_craftables[i]; return level.a_uts_craftables[i];
} }
trig_ent = getent( self.targetname, "target" ); trig_ent = sys::getent( self.targetname, "target" );
return trig_ent; return trig_ent;
} }
@ -1555,7 +1555,7 @@ get_closest_trap_for_brutus()
if ( !level.trap_triggers[i] [[ level.interaction_types["trap"].validity_func ]]() ) if ( !level.trap_triggers[i] [[ level.interaction_types["trap"].validity_func ]]() )
continue; continue;
dist = distancesquared( self.origin, level.trap_triggers[i].origin ); dist = sys::distancesquared( self.origin, level.trap_triggers[i].origin );
if ( dist < best_dist || best_dist < 0 ) if ( dist < best_dist || best_dist < 0 )
{ {
@ -1621,7 +1621,7 @@ is_blocker_valid()
brutus_get_closest_valid_player() brutus_get_closest_valid_player()
{ {
valid_player_found = 0; valid_player_found = 0;
players = get_players(); players = sys::getplayers();
if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun )
players = arraycombine( players, level._zombie_human_array, 0, 0 ); players = arraycombine( players, level._zombie_human_array, 0, 0 );
@ -1663,7 +1663,7 @@ watch_for_player_dist()
{ {
player = brutus_get_closest_valid_player(); player = brutus_get_closest_valid_player();
if ( !isdefined( player ) || distancesquared( player.origin, self.origin ) > level.brutus_reset_dist_sq ) if ( !isdefined( player ) || sys::distancesquared( player.origin, self.origin ) > level.brutus_reset_dist_sq )
{ {
self.ai_state = "idle"; self.ai_state = "idle";
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
@ -1699,7 +1699,7 @@ brutus_goal_watcher()
angles = angles + ( 0, interaction.interaction_yaw_offset, 0 ); angles = angles + ( 0, interaction.interaction_yaw_offset, 0 );
self.not_interruptable = 1; self.not_interruptable = 1;
self animscripted( origin, angles, interaction.animstate ); self sys::animscripted( origin, angles, interaction.animstate );
self thread maps\mp\animscripts\zm_shared::donotetracks( interaction.notify_name ); self thread maps\mp\animscripts\zm_shared::donotetracks( interaction.notify_name );
self thread snddointeractionvox( interaction.notify_name ); self thread snddointeractionvox( interaction.notify_name );
self waittillmatch( interaction.notify_name, interaction.action_notetrack ); self waittillmatch( interaction.notify_name, interaction.action_notetrack );
@ -1764,11 +1764,11 @@ brutus_fire_teargas_when_possible()
self.not_interruptable = 1; self.not_interruptable = 1;
self playsound( "vox_brutus_enraged" ); self playsound( "vox_brutus_enraged" );
self animscripted( self.origin, self.angles, "zm_teargas_attack" ); self sys::animscripted( self.origin, self.angles, "zm_teargas_attack" );
self thread maps\mp\animscripts\zm_shared::donotetracks( "teargas_anim" ); self thread maps\mp\animscripts\zm_shared::donotetracks( "teargas_anim" );
self waittillmatch( "teargas_anim", "grenade_drop" ); self waittillmatch( "teargas_anim", "grenade_drop" );
v_org_left = self gettagorigin( "TAG_WEAPON_LEFT" ); v_org_left = self sys::gettagorigin( "TAG_WEAPON_LEFT" );
v_org_right = self gettagorigin( "TAG_WEAPON_RIGHT" ); v_org_right = self sys::gettagorigin( "TAG_WEAPON_RIGHT" );
self thread sndplaydelayedsmokeaudio( v_org_left, v_org_right ); self thread sndplaydelayedsmokeaudio( v_org_left, v_org_right );
self magicgrenadetype( "willy_pete_zm", v_org_left, ( 0, 0, 0 ), 0.4 ); self magicgrenadetype( "willy_pete_zm", v_org_left, ( 0, 0, 0 ), 0.4 );
self magicgrenadetype( "willy_pete_zm", v_org_right, ( 0, 0, 0 ), 0.4 ); self magicgrenadetype( "willy_pete_zm", v_org_right, ( 0, 0, 0 ), 0.4 );
@ -1819,7 +1819,7 @@ brutus_remove_helmet( vdir )
self.not_interruptable = 1; self.not_interruptable = 1;
self playsound( "vox_brutus_exert" ); self playsound( "vox_brutus_exert" );
self animscripted( self.origin, self.angles, "zm_pain" ); self sys::animscripted( self.origin, self.angles, "zm_pain" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
self.not_interruptable = 0; self.not_interruptable = 0;
} }
@ -1912,7 +1912,7 @@ perk_machine_lock()
else else
lock_fx = level._effect["brutus_lockdown"]; lock_fx = level._effect["brutus_lockdown"];
perk_machine.lock_fx = spawn( "script_model", self.priority_item.origin ); perk_machine.lock_fx = sys::spawn( "script_model", self.priority_item.origin );
perk_machine.lock_fx.angles = self.priority_item.angles; perk_machine.lock_fx.angles = self.priority_item.angles;
perk_machine.lock_fx = offset_fx_struct( int_struct, perk_machine.lock_fx ); perk_machine.lock_fx = offset_fx_struct( int_struct, perk_machine.lock_fx );
perk_machine.lock_fx setmodel( "tag_origin" ); perk_machine.lock_fx setmodel( "tag_origin" );
@ -1936,7 +1936,7 @@ craftable_table_lock()
craftable_table = table_struct get_trigger_for_craftable(); craftable_table = table_struct get_trigger_for_craftable();
int_struct = level.interaction_types["craftable_table"]; int_struct = level.interaction_types["craftable_table"];
craftable_table.lock_fx = spawn( "script_model", table_struct.origin ); craftable_table.lock_fx = sys::spawn( "script_model", table_struct.origin );
craftable_table.lock_fx.angles = table_struct.angles; craftable_table.lock_fx.angles = table_struct.angles;
craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx ); craftable_table.lock_fx = offset_fx_struct( int_struct, craftable_table.lock_fx );
craftable_table.lock_fx setmodel( "tag_origin" ); craftable_table.lock_fx setmodel( "tag_origin" );
@ -1987,7 +1987,7 @@ plane_ramp_lock()
return; return;
int_struct = level.interaction_types["plane_ramp"]; int_struct = level.interaction_types["plane_ramp"];
plane_ramp.lock_fx = spawn( "script_model", plane_ramp.origin ); plane_ramp.lock_fx = sys::spawn( "script_model", plane_ramp.origin );
plane_ramp.lock_fx.angles = plane_ramp.angles; plane_ramp.lock_fx.angles = plane_ramp.angles;
plane_ramp.lock_fx = offset_fx_struct( int_struct, plane_ramp.lock_fx ); plane_ramp.lock_fx = offset_fx_struct( int_struct, plane_ramp.lock_fx );
plane_ramp.lock_fx setmodel( "tag_origin" ); plane_ramp.lock_fx setmodel( "tag_origin" );
@ -2040,7 +2040,7 @@ blocker_smash()
melee_anim_func() melee_anim_func()
{ {
self.next_leap_time = gettime() + 1500; self.next_leap_time = sys::gettime() + 1500;
} }
kill_teargas_after_duration( duration ) kill_teargas_after_duration( duration )
@ -2066,7 +2066,7 @@ teargas_player( player )
while ( true ) while ( true )
{ {
if ( !player istouching( self ) ) if ( !player sys::istouching( self ) )
clear_timer = clear_timer + 0.1; clear_timer = clear_timer + 0.1;
else else
clear_timer = 0; clear_timer = 0;
@ -2078,9 +2078,9 @@ teargas_player( player )
} }
else if ( teargas_timer % 5 == 0 ) else if ( teargas_timer % 5 == 0 )
{ {
if ( distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 2 / 3 * ( level.brutus_teargas_radius * 2 / 3 ) ) if ( sys::distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 2 / 3 * ( level.brutus_teargas_radius * 2 / 3 ) )
player shellshock( "mp_radiation_low", 1.5 ); player shellshock( "mp_radiation_low", 1.5 );
else if ( distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 1 / 3 * ( level.brutus_teargas_radius * 1 / 3 ) ) else if ( sys::distancesquared( player.origin, self.origin ) > level.brutus_teargas_radius * 1 / 3 * ( level.brutus_teargas_radius * 1 / 3 ) )
player shellshock( "mp_radiation_med", 1.5 ); player shellshock( "mp_radiation_med", 1.5 );
else else
player shellshock( "mp_radiation_high", 1.5 ); player shellshock( "mp_radiation_high", 1.5 );
@ -2096,7 +2096,7 @@ teargas_trigger_think()
{ {
self endon( "kill_teargas" ); self endon( "kill_teargas" );
self thread kill_teargas_after_duration( level.brutus_teargas_duration ); self thread kill_teargas_after_duration( level.brutus_teargas_duration );
players = get_players(); players = sys::getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
@ -2300,10 +2300,10 @@ custom_brutus_flame_death_fx()
{ {
if ( !self.isdog ) if ( !self.isdog )
{ {
v_origin = self gettagorigin( "J_SpineLower" ); v_origin = self sys::gettagorigin( "J_SpineLower" );
e_origin = spawn( "script_origin", v_origin ); e_origin = sys::spawn( "script_origin", v_origin );
e_origin setmodel( "tag_origin" ); e_origin setmodel( "tag_origin" );
e_origin linkto( self, "J_SpineLower" ); e_origin sys::linkto( self, "J_SpineLower" );
playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" ); playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" );
a_script_origins[a_script_origins.size] = e_origin; a_script_origins[a_script_origins.size] = e_origin;
} }
@ -2324,10 +2324,10 @@ custom_brutus_flame_death_fx()
tagarray[2] = "J_Knee_RI"; tagarray[2] = "J_Knee_RI";
tagarray[3] = "J_Knee_LE"; tagarray[3] = "J_Knee_LE";
tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray ); tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray );
v_origin = self gettagorigin( tagarray[0] ); v_origin = self sys::gettagorigin( tagarray[0] );
e_origin = spawn( "script_origin", v_origin ); e_origin = sys::spawn( "script_origin", v_origin );
e_origin setmodel( "tag_origin" ); e_origin setmodel( "tag_origin" );
e_origin linkto( self, tagarray[0] ); e_origin sys::linkto( self, tagarray[0] );
playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" ); playfxontag( level._effect["character_fire_death_torso"], e_origin, "tag_origin" );
a_script_origins[a_script_origins.size] = e_origin; a_script_origins[a_script_origins.size] = e_origin;
wait 1; wait 1;
@ -2341,14 +2341,14 @@ custom_brutus_flame_death_fx()
} }
tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray ); tagarray = maps\mp\animscripts\zm_death::randomize_array( tagarray );
v_origin_0 = self gettagorigin( tagarray[0] ); v_origin_0 = self sys::gettagorigin( tagarray[0] );
v_origin_1 = self gettagorigin( tagarray[1] ); v_origin_1 = self sys::gettagorigin( tagarray[1] );
e_origin_0 = spawn( "script_origin", v_origin_0 ); e_origin_0 = sys::spawn( "script_origin", v_origin_0 );
e_origin_1 = spawn( "script_origin", v_origin_1 ); e_origin_1 = sys::spawn( "script_origin", v_origin_1 );
e_origin_0 setmodel( "tag_origin" ); e_origin_0 setmodel( "tag_origin" );
e_origin_1 setmodel( "tag_origin" ); e_origin_1 setmodel( "tag_origin" );
e_origin_0 linkto( self, tagarray[0] ); e_origin_0 sys::linkto( self, tagarray[0] );
e_origin_1 linkto( self, tagarray[1] ); e_origin_1 sys::linkto( self, tagarray[1] );
playfxontag( level._effect["character_fire_death_torso"], e_origin_0, "tag_origin" ); playfxontag( level._effect["character_fire_death_torso"], e_origin_0, "tag_origin" );
playfxontag( level._effect["character_fire_death_torso"], e_origin_1, "tag_origin" ); playfxontag( level._effect["character_fire_death_torso"], e_origin_1, "tag_origin" );
a_script_origins[a_script_origins.size] = e_origin_0; a_script_origins[a_script_origins.size] = e_origin_0;
@ -2390,7 +2390,7 @@ brutus_debug()
{ {
if ( debug_level == 1 ) if ( debug_level == 1 )
{ {
brutus_array = getentarray( "brutus_zombie_ai" ); brutus_array = sys::getentarray( "brutus_zombie_ai" );
for ( i = 0; i < brutus_array.size; i++ ) for ( i = 0; i < brutus_array.size; i++ )
{ {
@ -2451,7 +2451,7 @@ brutus_watch_enemy()
get_favorite_enemy() get_favorite_enemy()
{ {
brutus_targets = getplayers(); brutus_targets = sys::getplayers();
least_hunted = brutus_targets[0]; least_hunted = brutus_targets[0];
for ( i = 0; i < brutus_targets.size; i++ ) for ( i = 0; i < brutus_targets.size; i++ )
@ -2517,14 +2517,14 @@ get_brutus_interest_points()
build_trap_array() build_trap_array()
{ {
fan_array = getentarray( "acid_trap_trigger", "targetname" ); fan_array = sys::getentarray( "acid_trap_trigger", "targetname" );
acid_array = getentarray( "fan_trap_use_trigger", "targetname" ); acid_array = sys::getentarray( "fan_trap_use_trigger", "targetname" );
level.trap_triggers = arraycombine( fan_array, acid_array, 0, 0 ); level.trap_triggers = arraycombine( fan_array, acid_array, 0, 0 );
} }
add_machines_in_zone( zone, zone_name, match_string ) add_machines_in_zone( zone, zone_name, match_string )
{ {
machine_array = getentarray( match_string, "targetname" ); machine_array = sys::getentarray( match_string, "targetname" );
for ( i = 0; i < machine_array.size; i++ ) for ( i = 0; i < machine_array.size; i++ )
{ {
@ -2579,7 +2579,7 @@ get_zone_craftable_tables( zone_name )
while ( level.a_uts_craftables.size == 0 ) while ( level.a_uts_craftables.size == 0 )
wait 1; wait 1;
scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); scr_org = sys::spawn( "script_origin", ( 0, 0, 0 ) );
craftable_tables = level.a_uts_craftables; craftable_tables = level.a_uts_craftables;
for ( i = 0; i < craftable_tables.size; i++ ) for ( i = 0; i < craftable_tables.size; i++ )
@ -2601,8 +2601,8 @@ get_zone_traps( zone_name )
{ {
zone = level.zones[zone_name]; zone = level.zones[zone_name];
zone.traps = []; zone.traps = [];
acid_traps = getentarray( "acid_trap_trigger", "targetname" ); acid_traps = sys::getentarray( "acid_trap_trigger", "targetname" );
scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); scr_org = sys::spawn( "script_origin", ( 0, 0, 0 ) );
for ( i = 0; i < acid_traps.size; i++ ) for ( i = 0; i < acid_traps.size; i++ )
{ {
@ -2618,7 +2618,7 @@ get_zone_traps( zone_name )
} }
} }
fan_traps = getentarray( "fan_trap_use_trigger", "targetname" ); fan_traps = sys::getentarray( "fan_trap_use_trigger", "targetname" );
for ( i = 0; i < fan_traps.size; i++ ) for ( i = 0; i < fan_traps.size; i++ )
{ {
@ -2634,7 +2634,7 @@ get_zone_traps( zone_name )
} }
} }
tower_traps = getentarray( "tower_trap_activate_trigger", "targetname" ); tower_traps = sys::getentarray( "tower_trap_activate_trigger", "targetname" );
for ( i = 0; i < tower_traps.size; i++ ) for ( i = 0; i < tower_traps.size; i++ )
{ {
@ -2658,13 +2658,13 @@ get_zone_plane_ramp( zone_name )
flag_wait( "initial_players_connected" ); flag_wait( "initial_players_connected" );
zone = level.zones[zone_name]; zone = level.zones[zone_name];
zone.plane_triggers = []; zone.plane_triggers = [];
scr_org = spawn( "script_origin", ( 0, 0, 0 ) ); scr_org = sys::spawn( "script_origin", ( 0, 0, 0 ) );
fly_trigger = getent( "plane_fly_trigger", "targetname" ); fly_trigger = sys::getent( "plane_fly_trigger", "targetname" );
scr_org.origin = fly_trigger.origin; scr_org.origin = fly_trigger.origin;
if ( scr_org entity_in_zone( zone_name, 1 ) ) if ( scr_org entity_in_zone( zone_name, 1 ) )
{ {
fly_trigger_target = spawn( "script_model", ( 0, 0, 0 ) ); fly_trigger_target = sys::spawn( "script_model", ( 0, 0, 0 ) );
fly_trigger_target.targetname = "fly_target"; fly_trigger_target.targetname = "fly_target";
fly_trigger.fly_trigger_target = fly_trigger_target; fly_trigger.fly_trigger_target = fly_trigger_target;
fly_trigger_target.fly_trigger = fly_trigger; fly_trigger_target.fly_trigger = fly_trigger;
@ -2777,7 +2777,7 @@ check_plane_valid( player )
plane_struct.is_locked = 0; plane_struct.is_locked = 0;
plane_struct.locked_cost = undefined; plane_struct.locked_cost = undefined;
plane_struct.lock_fx delete(); plane_struct.lock_fx delete();
func = getFunction( "maps/mp/zm_alcatraz_sq", "reset_plane_hint_string" ); func = pluto_sys::getfunction( "maps/mp/zm_alcatraz_sq", "reset_plane_hint_string" );
plane_struct [[ func ]]( player ); plane_struct [[ func ]]( player );
} }
@ -2879,7 +2879,7 @@ transfer_plane_trigger( from, to )
if ( from == "fly" ) if ( from == "fly" )
{ {
t_plane_fly = getent( "plane_fly_trigger", "targetname" ); t_plane_fly = sys::getent( "plane_fly_trigger", "targetname" );
t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" ); t_plane_fly sethintstring( &"ZM_PRISON_PLANE_BOARD" );
} }
} }

View File

@ -21,7 +21,7 @@ init()
level.enemy_dog_locations = []; level.enemy_dog_locations = [];
flag_init( "dog_clips" ); flag_init( "dog_clips" );
precacherumble( "explosion_generic" ); precacherumble( "explosion_generic" );
precacheshellshock( "dog_bite" ); sys::precacheshellshock( "dog_bite" );
if ( getdvar( #"zombie_dog_animset" ) == "" ) if ( getdvar( #"zombie_dog_animset" ) == "" )
setdvar( "zombie_dog_animset", "zombie" ); setdvar( "zombie_dog_animset", "zombie" );
@ -37,11 +37,11 @@ init()
level.melee_height_sav = getdvar( #"ai_meleeHeight" ); level.melee_height_sav = getdvar( #"ai_meleeHeight" );
setdvar( "dog_MeleeDamage", "100" ); setdvar( "dog_MeleeDamage", "100" );
set_zombie_var( "dog_fire_trail_percent", 50 ); set_zombie_var( "dog_fire_trail_percent", 50 );
level._effect["lightning_dog_spawn"] = loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" ); level._effect["lightning_dog_spawn"] = sys::loadfx( "maps/zombie/fx_zombie_dog_lightning_buildup" );
level._effect["dog_eye_glow"] = loadfx( "maps/zombie/fx_zombie_dog_eyes" ); level._effect["dog_eye_glow"] = sys::loadfx( "maps/zombie/fx_zombie_dog_eyes" );
level._effect["dog_gib"] = loadfx( "maps/zombie/fx_zombie_dog_explosion" ); level._effect["dog_gib"] = sys::loadfx( "maps/zombie/fx_zombie_dog_explosion" );
level._effect["dog_trail_fire"] = loadfx( "maps/zombie/fx_zombie_dog_fire_trail" ); level._effect["dog_trail_fire"] = sys::loadfx( "maps/zombie/fx_zombie_dog_fire_trail" );
level._effect["dog_trail_ash"] = loadfx( "maps/zombie/fx_zombie_dog_ash_trail" ); level._effect["dog_trail_ash"] = sys::loadfx( "maps/zombie/fx_zombie_dog_ash_trail" );
dog_spawner_init(); dog_spawner_init();
level thread dog_clip_monitor(); level thread dog_clip_monitor();
} }
@ -58,8 +58,8 @@ enable_dog_rounds()
dog_spawner_init() dog_spawner_init()
{ {
level.dog_spawners = getentarray( "zombie_dog_spawner", "script_noteworthy" ); level.dog_spawners = sys::getentarray( "zombie_dog_spawner", "script_noteworthy" );
later_dogs = getentarray( "later_round_dog_spawners", "script_noteworthy" ); later_dogs = sys::getentarray( "later_round_dog_spawners", "script_noteworthy" );
level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 ); level.dog_spawners = arraycombine( level.dog_spawners, later_dogs, 1, 0 );
if ( level.dog_spawners.size == 0 ) if ( level.dog_spawners.size == 0 )
@ -80,13 +80,13 @@ dog_spawner_init()
assert( level.dog_spawners.size > 0 ); assert( level.dog_spawners.size > 0 );
level.dog_health = 100; level.dog_health = 100;
array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init ); array_thread( level.dog_spawners, ::add_spawn_function, ::dog_init );
level.enemy_dog_spawns = getentarray( "zombie_spawner_dog_init", "targetname" ); level.enemy_dog_spawns = sys::getentarray( "zombie_spawner_dog_init", "targetname" );
} }
dog_round_spawning() dog_round_spawning()
{ {
level endon( "intermission" ); level endon( "intermission" );
level.dog_targets = getplayers(); level.dog_targets = sys::getplayers();
for ( i = 0; i < level.dog_targets.size; i++ ) for ( i = 0; i < level.dog_targets.size; i++ )
level.dog_targets[i].hunted_by = 0; level.dog_targets[i].hunted_by = 0;
@ -103,7 +103,7 @@ dog_round_spawning()
level.dog_intermission = 1; level.dog_intermission = 1;
level thread dog_round_aftermath(); level thread dog_round_aftermath();
players = get_players(); players = sys::getplayers();
array_thread( players, ::play_dog_round ); array_thread( players, ::play_dog_round );
wait 1; wait 1;
playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) );
@ -127,7 +127,7 @@ dog_round_spawning()
for ( num_player_valid = get_number_of_valid_players(); get_current_zombie_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() ) for ( num_player_valid = get_number_of_valid_players(); get_current_zombie_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() )
wait 2; wait 2;
players = get_players(); players = sys::getplayers();
favorite_enemy = get_favorite_enemy(); favorite_enemy = get_favorite_enemy();
if ( isdefined( level.dog_spawn_func ) ) if ( isdefined( level.dog_spawn_func ) )
@ -197,7 +197,7 @@ dog_round_aftermath()
dog_spawn_fx( ai, ent ) dog_spawn_fx( ai, ent )
{ {
ai endon( "death" ); ai endon( "death" );
ai setfreecameralockonallowed( 0 ); ai sys::setfreecameralockonallowed( 0 );
playfx( level._effect["lightning_dog_spawn"], ent.origin ); playfx( level._effect["lightning_dog_spawn"], ent.origin );
playsoundatposition( "zmb_hellhound_prespawn", ent.origin ); playsoundatposition( "zmb_hellhound_prespawn", ent.origin );
wait 1.5; wait 1.5;
@ -215,8 +215,8 @@ dog_spawn_fx( ai, ent )
ai zombie_setup_attack_properties_dog(); ai zombie_setup_attack_properties_dog();
ai stop_magic_bullet_shield(); ai stop_magic_bullet_shield();
wait 0.1; wait 0.1;
ai show(); ai sys::show();
ai setfreecameralockonallowed( 1 ); ai sys::setfreecameralockonallowed( 1 );
ai.ignoreme = 0; ai.ignoreme = 0;
ai notify( "visible" ); ai notify( "visible" );
} }
@ -231,9 +231,9 @@ dog_spawn_sumpf_logic( dog_array, favorite_enemy )
if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[i] ) if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_array[i] )
continue; continue;
if ( distancesquared( dog_array[i].origin, favorite_enemy.origin ) > 160000 && distancesquared( dog_array[i].origin, favorite_enemy.origin ) < 640000 ) if ( sys::distancesquared( dog_array[i].origin, favorite_enemy.origin ) > 160000 && sys::distancesquared( dog_array[i].origin, favorite_enemy.origin ) < 640000 )
{ {
if ( distancesquared( ( 0, 0, dog_array[i].origin[2] ), ( 0, 0, favorite_enemy.origin[2] ) ) > 10000 ) if ( sys::distancesquared( ( 0, 0, dog_array[i].origin[2] ), ( 0, 0, favorite_enemy.origin[2] ) ) > 10000 )
continue; continue;
else else
{ {
@ -255,7 +255,7 @@ dog_spawn_factory_logic( dog_array, favorite_enemy )
if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[i] ) if ( isdefined( level.old_dog_spawn ) && level.old_dog_spawn == dog_locs[i] )
continue; continue;
dist_squared = distancesquared( dog_locs[i].origin, favorite_enemy.origin ); dist_squared = sys::distancesquared( dog_locs[i].origin, favorite_enemy.origin );
if ( dist_squared > 160000 && dist_squared < 1000000 ) if ( dist_squared > 160000 && dist_squared < 1000000 )
{ {
@ -269,7 +269,7 @@ dog_spawn_factory_logic( dog_array, favorite_enemy )
get_favorite_enemy() get_favorite_enemy()
{ {
dog_targets = getplayers(); dog_targets = sys::getplayers();
least_hunted = dog_targets[0]; least_hunted = dog_targets[0];
for ( i = 0; i < dog_targets.size; i++ ) for ( i = 0; i < dog_targets.size; i++ )
@ -293,7 +293,7 @@ get_favorite_enemy()
dog_health_increase() dog_health_increase()
{ {
players = getplayers(); players = sys::getplayers();
if ( level.dog_round_count == 1 ) if ( level.dog_round_count == 1 )
level.dog_health = 400; level.dog_health = 400;
@ -332,7 +332,7 @@ dog_round_tracker()
level.round_spawn_func = ::dog_round_spawning; level.round_spawn_func = ::dog_round_spawning;
level.next_dog_round = level.round_number + randomintrange( 4, 6 ); level.next_dog_round = level.round_number + randomintrange( 4, 6 );
/# /#
get_players()[0] iprintln( "Next dog round: " + level.next_dog_round ); sys::getplayers()[0] iprintln( "Next dog round: " + level.next_dog_round );
#/ #/
} }
else if ( flag( "dog_round" ) ) else if ( flag( "dog_round" ) )
@ -386,7 +386,7 @@ play_dog_round()
self playlocalsound( "zmb_dog_round_start" ); self playlocalsound( "zmb_dog_round_start" );
variation_count = 5; variation_count = 5;
wait 4.5; wait 4.5;
players = getplayers(); players = sys::getplayers();
num = randomintrange( 0, players.size ); num = randomintrange( 0, players.size );
players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "dog_spawn" ); players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "dog_spawn" );
} }
@ -433,7 +433,7 @@ dog_init()
self thread dog_run_think(); self thread dog_run_think();
self thread dog_stalk_audio(); self thread dog_stalk_audio();
self thread maps\mp\zombies\_zm::round_spawn_failsafe(); self thread maps\mp\zombies\_zm::round_spawn_failsafe();
self ghost(); self sys::ghost();
self thread magic_bullet_shield(); self thread magic_bullet_shield();
self dog_fx_eye_glow(); self dog_fx_eye_glow();
self dog_fx_trail(); self dog_fx_trail();
@ -455,11 +455,11 @@ dog_init()
dog_fx_eye_glow() dog_fx_eye_glow()
{ {
self.fx_dog_eye = spawn( "script_model", self gettagorigin( "J_EyeBall_LE" ) ); self.fx_dog_eye = sys::spawn( "script_model", self sys::gettagorigin( "J_EyeBall_LE" ) );
assert( isdefined( self.fx_dog_eye ) ); assert( isdefined( self.fx_dog_eye ) );
self.fx_dog_eye.angles = self gettagangles( "J_EyeBall_LE" ); self.fx_dog_eye.angles = self sys::gettagangles( "J_EyeBall_LE" );
self.fx_dog_eye setmodel( "tag_origin" ); self.fx_dog_eye setmodel( "tag_origin" );
self.fx_dog_eye linkto( self, "J_EyeBall_LE" ); self.fx_dog_eye sys::linkto( self, "J_EyeBall_LE" );
} }
dog_fx_trail() dog_fx_trail()
@ -476,11 +476,11 @@ dog_fx_trail()
self.fx_dog_trail_sound = "zmb_hellhound_loop_fire"; self.fx_dog_trail_sound = "zmb_hellhound_loop_fire";
} }
self.fx_dog_trail = spawn( "script_model", self gettagorigin( "tag_origin" ) ); self.fx_dog_trail = sys::spawn( "script_model", self sys::gettagorigin( "tag_origin" ) );
assert( isdefined( self.fx_dog_trail ) ); assert( isdefined( self.fx_dog_trail ) );
self.fx_dog_trail.angles = self gettagangles( "tag_origin" ); self.fx_dog_trail.angles = self sys::gettagangles( "tag_origin" );
self.fx_dog_trail setmodel( "tag_origin" ); self.fx_dog_trail setmodel( "tag_origin" );
self.fx_dog_trail linkto( self, "tag_origin" ); self.fx_dog_trail sys::linkto( self, "tag_origin" );
} }
dog_death() dog_death()
@ -520,7 +520,7 @@ dog_death()
if ( isdefined( self.a.nodeath ) ) if ( isdefined( self.a.nodeath ) )
{ {
level thread dog_explode_fx( self.origin ); dog_explode_fx( self.origin );
self delete(); self delete();
} }
else else
@ -560,7 +560,7 @@ dog_behind_audio()
while ( true ) while ( true )
{ {
players = get_players(); players = sys::getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
@ -583,7 +583,7 @@ dog_behind_audio()
dog_clip_monitor() dog_clip_monitor()
{ {
clips_on = 0; clips_on = 0;
level.dog_clips = getentarray( "dog_clips", "targetname" ); level.dog_clips = sys::getentarray( "dog_clips", "targetname" );
while ( true ) while ( true )
{ {
@ -610,7 +610,7 @@ dog_clip_monitor()
while ( dog_is_alive || flag( "dog_round" ) ) while ( dog_is_alive || flag( "dog_round" ) )
{ {
dog_is_alive = 0; dog_is_alive = 0;
dogs = getentarray( "zombie_dog", "targetname" ); dogs = sys::getentarray( "zombie_dog", "targetname" );
for ( i = 0; i < dogs.size; i++ ) for ( i = 0; i < dogs.size; i++ )
{ {
@ -641,7 +641,7 @@ special_dog_spawn( spawners, num_to_spawn )
while ( count < num_to_spawn ) while ( count < num_to_spawn )
{ {
players = get_players(); players = sys::getplayers();
favorite_enemy = get_favorite_enemy(); favorite_enemy = get_favorite_enemy();
if ( isdefined( spawners ) ) if ( isdefined( spawners ) )

View File

@ -35,12 +35,12 @@ precache_fx()
if ( !isdefined( level.ghost_effects ) ) if ( !isdefined( level.ghost_effects ) )
{ {
level.ghost_effects = []; level.ghost_effects = [];
level.ghost_effects[1] = loadfx( "maps/zombie_buried/fx_buried_ghost_death" ); level.ghost_effects[1] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_death" );
level.ghost_effects[2] = loadfx( "maps/zombie_buried/fx_buried_ghost_drain" ); level.ghost_effects[2] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_drain" );
level.ghost_effects[3] = loadfx( "maps/zombie_buried/fx_buried_ghost_spawn" ); level.ghost_effects[3] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_spawn" );
level.ghost_effects[4] = loadfx( "maps/zombie_buried/fx_buried_ghost_trail" ); level.ghost_effects[4] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_trail" );
level.ghost_effects[5] = loadfx( "maps/zombie_buried/fx_buried_ghost_evaporation" ); level.ghost_effects[5] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_evaporation" );
level.ghost_impact_effects[1] = loadfx( "maps/zombie_buried/fx_buried_ghost_impact" ); level.ghost_impact_effects[1] = sys::loadfx( "maps/zombie_buried/fx_buried_ghost_impact" );
} }
} }
@ -54,14 +54,14 @@ main()
if ( !init_ghost_spawners() ) if ( !init_ghost_spawners() )
return; return;
level.slowgun_reset_anim_func = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "reset_anim" ); level.slowgun_reset_anim_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "reset_anim" );
level.slowgun_set_anim_rate_func = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "set_anim_rate" ); level.slowgun_set_anim_rate_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "set_anim_rate" );
level.slowgun_zombie_slow_for_time = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "zombie_slow_for_time" ); level.slowgun_zombie_slow_for_time = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "zombie_slow_for_time" );
level.time_bomb_get_time_bomb_saved_round_type = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "get_time_bomb_saved_round_type" ); level.time_bomb_get_time_bomb_saved_round_type = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "get_time_bomb_saved_round_type" );
level.time_bomb_time_bomb_add_custom_func_global_save = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_save" ); level.time_bomb_time_bomb_add_custom_func_global_save = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_save" );
level.time_bomb_time_bomb_add_custom_func_global_restore = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_restore" ); level.time_bomb_time_bomb_add_custom_func_global_restore = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_restore" );
level.time_bomb_register_time_bomb_enemy_save_filter = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy_save_filter" ); level.time_bomb_register_time_bomb_enemy_save_filter = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy_save_filter" );
level.time_bomb_register_time_bomb_enemy = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy" ); level.time_bomb_register_time_bomb_enemy = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy" );
init_ghost_zone(); init_ghost_zone();
init_ghost_sounds(); init_ghost_sounds();
@ -70,7 +70,7 @@ main()
level.zombie_ai_limit_ghost_per_player = 1; level.zombie_ai_limit_ghost_per_player = 1;
level.zombie_ghost_count = 0; level.zombie_ghost_count = 0;
level.ghost_health = 100; level.ghost_health = 100;
level.zombie_ghost_round_states = spawnstruct(); level.zombie_ghost_round_states = sys::spawnstruct();
level.zombie_ghost_round_states.any_player_in_ghost_zone = 0; level.zombie_ghost_round_states.any_player_in_ghost_zone = 0;
level.zombie_ghost_round_states.active_zombie_locations = []; level.zombie_ghost_round_states.active_zombie_locations = [];
level.is_ghost_round_started = ::is_ghost_round_started; level.is_ghost_round_started = ::is_ghost_round_started;
@ -117,14 +117,14 @@ init()
if ( !init_ghost_spawners() ) if ( !init_ghost_spawners() )
return; return;
level.slowgun_reset_anim_func = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "reset_anim" ); level.slowgun_reset_anim_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "reset_anim" );
level.slowgun_set_anim_rate_func = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "set_anim_rate" ); level.slowgun_set_anim_rate_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "set_anim_rate" );
level.slowgun_zombie_slow_for_time = getFunction( "maps/mp/zombies/_zm_weap_slowgun", "zombie_slow_for_time" ); level.slowgun_zombie_slow_for_time = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_slowgun", "zombie_slow_for_time" );
level.time_bomb_get_time_bomb_saved_round_type = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "get_time_bomb_saved_round_type" ); level.time_bomb_get_time_bomb_saved_round_type = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "get_time_bomb_saved_round_type" );
level.time_bomb_time_bomb_add_custom_func_global_save = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_save" ); level.time_bomb_time_bomb_add_custom_func_global_save = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_save" );
level.time_bomb_time_bomb_add_custom_func_global_restore = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_restore" ); level.time_bomb_time_bomb_add_custom_func_global_restore = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "time_bomb_add_custom_func_global_restore" );
level.time_bomb_register_time_bomb_enemy_save_filter = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy_save_filter" ); level.time_bomb_register_time_bomb_enemy_save_filter = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy_save_filter" );
level.time_bomb_register_time_bomb_enemy = getFunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy" ); level.time_bomb_register_time_bomb_enemy = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_time_bomb", "register_time_bomb_enemy" );
init_ghost_zone(); init_ghost_zone();
init_ghost_sounds(); init_ghost_sounds();
@ -133,7 +133,7 @@ init()
level.zombie_ai_limit_ghost_per_player = 1; level.zombie_ai_limit_ghost_per_player = 1;
level.zombie_ghost_count = 0; level.zombie_ghost_count = 0;
level.ghost_health = 100; level.ghost_health = 100;
level.zombie_ghost_round_states = spawnstruct(); level.zombie_ghost_round_states = sys::spawnstruct();
level.zombie_ghost_round_states.any_player_in_ghost_zone = 0; level.zombie_ghost_round_states.any_player_in_ghost_zone = 0;
level.zombie_ghost_round_states.active_zombie_locations = []; level.zombie_ghost_round_states.active_zombie_locations = [];
level.is_ghost_round_started = ::is_ghost_round_started; level.is_ghost_round_started = ::is_ghost_round_started;
@ -172,7 +172,7 @@ init()
init_ghost_spawners() init_ghost_spawners()
{ {
level.ghost_spawners = getentarray( "ghost_zombie_spawner", "script_noteworthy" ); level.ghost_spawners = sys::getentarray( "ghost_zombie_spawner", "script_noteworthy" );
if ( level.ghost_spawners.size == 0 ) if ( level.ghost_spawners.size == 0 )
return false; return false;
@ -223,8 +223,8 @@ init_ghost_sounds()
init_ghost_zone() init_ghost_zone()
{ {
level.ghost_start_area = getent( "ghost_start_area", "targetname" ); level.ghost_start_area = sys::getent( "ghost_start_area", "targetname" );
level.ghost_zone_door_clips = getentarray( "ghost_zone_door_clip", "targetname" ); level.ghost_zone_door_clips = sys::getentarray( "ghost_zone_door_clip", "targetname" );
enable_ghost_zone_door_ai_clips(); enable_ghost_zone_door_ai_clips();
level.ghost_zone_start_lower_locations = getstructarray( "ghost_zone_start_lower_location", "targetname" ); level.ghost_zone_start_lower_locations = getstructarray( "ghost_zone_start_lower_location", "targetname" );
level.ghost_drop_down_locations = getstructarray( "ghost_start_zone_spawners", "targetname" ); level.ghost_drop_down_locations = getstructarray( "ghost_start_zone_spawners", "targetname" );
@ -232,12 +232,12 @@ init_ghost_zone()
level.ghost_back_standing_locations = getstructarray( "ghost_back_standing_location", "targetname" ); level.ghost_back_standing_locations = getstructarray( "ghost_back_standing_location", "targetname" );
level.ghost_front_flying_out_path_starts = getstructarray( "ghost_front_flying_out_path_start", "targetname" ); level.ghost_front_flying_out_path_starts = getstructarray( "ghost_front_flying_out_path_start", "targetname" );
level.ghost_back_flying_out_path_starts = getstructarray( "ghost_back_flying_out_path_start", "targetname" ); level.ghost_back_flying_out_path_starts = getstructarray( "ghost_back_flying_out_path_start", "targetname" );
level.ghost_gazebo_pit_volume = getent( "sloth_pack_volume", "targetname" ); level.ghost_gazebo_pit_volume = sys::getent( "sloth_pack_volume", "targetname" );
level.ghost_gazebo_pit_perk_pos = getstruct( "ghost_gazebo_pit_perk_pos", "targetname" ); level.ghost_gazebo_pit_perk_pos = getstruct( "ghost_gazebo_pit_perk_pos", "targetname" );
level.ghost_entry_room_to_mansion = "ghost_to_maze_zone_1"; level.ghost_entry_room_to_mansion = "ghost_to_maze_zone_1";
level.ghost_entry_room_to_maze = "ghost_to_maze_zone_5"; level.ghost_entry_room_to_maze = "ghost_to_maze_zone_5";
level.ghost_rooms = []; level.ghost_rooms = [];
a_rooms = getentarray( "ghost_zone", "script_noteworthy" ); a_rooms = sys::getentarray( "ghost_zone", "script_noteworthy" );
foreach ( room in a_rooms ) foreach ( room in a_rooms )
{ {
@ -245,7 +245,7 @@ init_ghost_zone()
if ( !isdefined( level.ghost_rooms[str_targetname] ) ) if ( !isdefined( level.ghost_rooms[str_targetname] ) )
{ {
level.ghost_rooms[str_targetname] = spawnstruct(); level.ghost_rooms[str_targetname] = sys::spawnstruct();
level.ghost_rooms[str_targetname].ghost_spawn_locations = []; level.ghost_rooms[str_targetname].ghost_spawn_locations = [];
level.ghost_rooms[str_targetname].volumes = []; level.ghost_rooms[str_targetname].volumes = [];
level.ghost_rooms[str_targetname].name = str_targetname; level.ghost_rooms[str_targetname].name = str_targetname;
@ -320,7 +320,7 @@ ghost_zone_spawning_think()
while ( valid_player_count < 1 ) while ( valid_player_count < 1 )
{ {
players = getplayers(); players = sys::getplayers();
valid_player_count = 0; valid_player_count = 0;
foreach ( player in players ) foreach ( player in players )
@ -394,7 +394,7 @@ is_player_in_ghost_room( player, room )
{ {
foreach ( volume in room.volumes ) foreach ( volume in room.volumes )
{ {
if ( player istouching( volume ) ) if ( player sys::istouching( volume ) )
return true; return true;
} }
@ -434,7 +434,7 @@ player_in_ghost_zone_monitor()
{ {
if ( isdefined( level.zombie_ghost_round_states.any_player_in_ghost_zone ) && level.zombie_ghost_round_states.any_player_in_ghost_zone ) if ( isdefined( level.zombie_ghost_round_states.any_player_in_ghost_zone ) && level.zombie_ghost_round_states.any_player_in_ghost_zone )
{ {
players = getplayers(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -475,13 +475,13 @@ player_in_ghost_zone_monitor()
is_any_player_near_point( target, spawn_pos ) is_any_player_near_point( target, spawn_pos )
{ {
players = getplayers(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( target != player && is_player_valid( player ) ) if ( target != player && is_player_valid( player ) )
{ {
dist_squared = distancesquared( player.origin, spawn_pos ); dist_squared = sys::distancesquared( player.origin, spawn_pos );
if ( dist_squared < 84 * 84 ) if ( dist_squared < 84 * 84 )
return true; return true;
@ -493,7 +493,7 @@ is_any_player_near_point( target, spawn_pos )
is_in_start_area() is_in_start_area()
{ {
if ( isdefined( level.ghost_start_area ) && self istouching( level.ghost_start_area ) ) if ( isdefined( level.ghost_start_area ) && self sys::istouching( level.ghost_start_area ) )
return true; return true;
return false; return false;
@ -558,7 +558,7 @@ get_best_spawn_point( player )
check_players_in_ghost_zone() check_players_in_ghost_zone()
{ {
result = 0; result = 0;
players = getplayers(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -640,7 +640,7 @@ prespawn()
self.noplayermeleeblood = 1; self.noplayermeleeblood = 1;
self.paralyzer_hit_callback = ::paralyzer_callback; self.paralyzer_hit_callback = ::paralyzer_callback;
self.paralyzer_slowtime = 0; self.paralyzer_slowtime = 0;
self.paralyzer_score_time_ms = gettime(); self.paralyzer_score_time_ms = sys::gettime();
self.ignore_slowgun_anim_rates = undefined; self.ignore_slowgun_anim_rates = undefined;
self.reset_anim = ::ghost_reset_anim; self.reset_anim = ::ghost_reset_anim;
self.custom_springpad_fling = ::ghost_springpad_fling; self.custom_springpad_fling = ::ghost_springpad_fling;
@ -663,7 +663,7 @@ prespawn()
} }
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
self setanimstatefromasd( "zm_move_run" ); self sys::setanimstatefromasd( "zm_move_run" );
self.actor_damage_func = ::ghost_damage_func; self.actor_damage_func = ::ghost_damage_func;
self.deathfunction = ::ghost_death_func; self.deathfunction = ::ghost_death_func;
self.maxhealth = level.ghost_health; self.maxhealth = level.ghost_health;
@ -672,8 +672,8 @@ prespawn()
self notify( "zombie_init_done" ); self notify( "zombie_init_done" );
self.allowpain = 0; self.allowpain = 0;
self.ignore_nuke = 1; self.ignore_nuke = 1;
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self bloodimpact( "none" ); self bloodimpact( "none" );
self disableaimassist(); self disableaimassist();
self.forcemovementscriptstate = 0; self.forcemovementscriptstate = 0;
@ -683,7 +683,7 @@ prespawn()
self.pathenemyfightdist = 0; self.pathenemyfightdist = 0;
self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area();
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.startinglocation = self.origin; self.startinglocation = self.origin;
if ( isdefined( level.ghost_custom_think_logic ) ) if ( isdefined( level.ghost_custom_think_logic ) )
@ -781,7 +781,7 @@ ghost_reset_anim()
substate = self getanimsubstatefromasd(); substate = self getanimsubstatefromasd();
if ( animstate == "zm_death" ) if ( animstate == "zm_death" )
self setanimstatefromasd( "zm_death_no_restart", substate ); self sys::setanimstatefromasd( "zm_death_no_restart", substate );
else if ( isDefined( level.slowgun_reset_anim_func ) ) else if ( isDefined( level.slowgun_reset_anim_func ) )
self [[ level.slowgun_reset_anim_func ]](); self [[ level.slowgun_reset_anim_func ]]();
} }
@ -791,7 +791,7 @@ wait_ghost_ghost( time )
wait( time ); wait( time );
if ( isdefined( self ) ) if ( isdefined( self ) )
self ghost(); self sys::ghost();
} }
ghost_death_func() ghost_death_func()
@ -809,7 +809,7 @@ ghost_death_func()
self thread [[ self.extra_custom_death_logic ]](); self thread [[ self.extra_custom_death_logic ]]();
qrate = self getclientfield( "anim_rate" ); qrate = self getclientfield( "anim_rate" );
self setanimstatefromasd( "zm_death" ); self sys::setanimstatefromasd( "zm_death" );
self thread wait_ghost_ghost( self getanimlengthfromasd( "zm_death", 0 ) ); self thread wait_ghost_ghost( self getanimlengthfromasd( "zm_death", 0 ) );
maps\mp\animscripts\zm_shared::donotetracks( "death_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "death_anim" );
@ -930,7 +930,7 @@ ghost_think()
start_spawn() start_spawn()
{ {
self animscripted( self.origin, self.angles, "zm_spawn" ); self sys::animscripted( self.origin, self.angles, "zm_spawn" );
self maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" );
self start_chase(); self start_chase();
} }
@ -972,9 +972,9 @@ find_flesh()
else if ( isdefined( self.is_spawned_in_ghost_zone ) && self.is_spawned_in_ghost_zone ) else if ( isdefined( self.is_spawned_in_ghost_zone ) && self.is_spawned_in_ghost_zone )
self.find_target = 1; self.find_target = 1;
self.zombie_path_timer = gettime() + randomfloatrange( 1, 3 ) * 1000; self.zombie_path_timer = sys::gettime() + randomfloatrange( 1, 3 ) * 1000;
while ( gettime() < self.zombie_path_timer ) while ( sys::gettime() < self.zombie_path_timer )
wait 0.1; wait 0.1;
self notify( "path_timer_done" ); self notify( "path_timer_done" );
@ -987,7 +987,7 @@ find_flesh()
get_closest_valid_player( origin ) get_closest_valid_player( origin )
{ {
valid_player_found = 0; valid_player_found = 0;
players = get_players(); players = sys::getplayers();
while ( !valid_player_found ) while ( !valid_player_found )
{ {
@ -1055,7 +1055,7 @@ get_closest_player( origin, players )
does_fall_into_pap_hole() does_fall_into_pap_hole()
{ {
if ( isDefined( level.ghost_gazebo_pit_volume ) && self istouching( level.ghost_gazebo_pit_volume ) ) if ( isDefined( level.ghost_gazebo_pit_volume ) && self sys::istouching( level.ghost_gazebo_pit_volume ) )
{ {
self forceteleport( level.ghost_gazebo_pit_perk_pos.origin, ( 0, 0, 0 ) ); self forceteleport( level.ghost_gazebo_pit_perk_pos.origin, ( 0, 0, 0 ) );
wait 0.1; wait 0.1;
@ -1067,9 +1067,9 @@ does_fall_into_pap_hole()
start_script_move() start_script_move()
{ {
self.script_mover = spawn( "script_origin", self.origin ); self.script_mover = sys::spawn( "script_origin", self.origin );
self.script_mover.angles = self.angles; self.script_mover.angles = self.angles;
self linkto( self.script_mover ); self sys::linkto( self.script_mover );
self.state = "script_move_update"; self.state = "script_move_update";
self setclientfield( "ghost_fx", 4 ); self setclientfield( "ghost_fx", 4 );
player = self.favoriteenemy; player = self.favoriteenemy;
@ -1133,8 +1133,8 @@ script_move_update()
if ( is_player_valid( player ) && isdefined( self.script_move_target_node ) ) if ( is_player_valid( player ) && isdefined( self.script_move_target_node ) )
{ {
desired_angles = vectortoangles( vectornormalize( player.origin - self.origin ) ); desired_angles = vectortoangles( sys::vectornormalize( player.origin - self.origin ) );
distance_squared = distancesquared( self.origin, self.script_move_target_node.origin ); distance_squared = sys::distancesquared( self.origin, self.script_move_target_node.origin );
if ( distance_squared < 24 ) if ( distance_squared < 24 )
{ {
@ -1150,7 +1150,7 @@ script_move_update()
draw_debug_star( self.script_move_target_node.origin, ( 0, 0, 1 ), 1 ); draw_debug_star( self.script_move_target_node.origin, ( 0, 0, 1 ), 1 );
target_node_pos = self.script_move_target_node.origin + vectorscale( ( 0, 0, 1 ), 36.0 ); target_node_pos = self.script_move_target_node.origin + vectorscale( ( 0, 0, 1 ), 36.0 );
distance_squared_to_target_node_pos = distancesquared( self.origin, target_node_pos ); distance_squared_to_target_node_pos = sys::distancesquared( self.origin, target_node_pos );
moved_distance_during_interval = 80.0; moved_distance_during_interval = 80.0;
if ( distance_squared_to_target_node_pos <= moved_distance_during_interval * moved_distance_during_interval ) if ( distance_squared_to_target_node_pos <= moved_distance_during_interval * moved_distance_during_interval )
@ -1162,7 +1162,7 @@ script_move_update()
} }
else else
{ {
distance_squared_to_player = distancesquared( self.origin, player.origin ); distance_squared_to_player = sys::distancesquared( self.origin, player.origin );
if ( distance_squared_to_player < 540 && !( isdefined( self.script_mover.search_target_node_again ) && self.script_mover.search_target_node_again ) ) if ( distance_squared_to_player < 540 && !( isdefined( self.script_mover.search_target_node_again ) && self.script_mover.search_target_node_again ) )
{ {
@ -1174,7 +1174,7 @@ script_move_update()
self.script_move_sin_index = 0; self.script_move_sin_index = 0;
move_dir = target_node_pos - self.origin; move_dir = target_node_pos - self.origin;
move_dir = vectornormalize( move_dir ); move_dir = sys::vectornormalize( move_dir );
target_point = self.origin + move_dir * 800 * 0.1; target_point = self.origin + move_dir * 800 * 0.1;
x_offset = level.ghost_script_move_sin[self.script_move_sin_index] * 6; x_offset = level.ghost_script_move_sin[self.script_move_sin_index] * 6;
z_offset = level.ghost_script_move_sin[self.script_move_sin_index] * 12; z_offset = level.ghost_script_move_sin[self.script_move_sin_index] * 12;
@ -1197,7 +1197,7 @@ remove_script_mover()
if ( isdefined( self.script_mover ) ) if ( isdefined( self.script_mover ) )
{ {
self dontinterpolate(); self dontinterpolate();
self unlink(); self sys::unlink();
self.script_mover delete(); self.script_mover delete();
} }
} }
@ -1205,7 +1205,7 @@ remove_script_mover()
start_chase() start_chase()
{ {
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
self setanimstatefromasd( "zm_move_run" ); self sys::setanimstatefromasd( "zm_move_run" );
self.state = "chase_update"; self.state = "chase_update";
self setclientfield( "ghost_fx", 4 ); self setclientfield( "ghost_fx", 4 );
} }
@ -1247,7 +1247,7 @@ chase_update()
return; return;
} }
distsquared = distancesquared( self.origin, player.origin ); distsquared = sys::distancesquared( self.origin, player.origin );
if ( distsquared > 300 * 300 ) if ( distsquared > 300 * 300 )
{ {
@ -1281,7 +1281,7 @@ chase_update()
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
if ( self getanimstatefromasd() != "zm_move_run" ) if ( self getanimstatefromasd() != "zm_move_run" )
self setanimstatefromasd( "zm_move_run" ); self sys::setanimstatefromasd( "zm_move_run" );
self start_runaway(); self start_runaway();
} }
@ -1294,7 +1294,7 @@ need_wait()
start_wait() start_wait()
{ {
self setanimstatefromasd( "zm_idle" ); self sys::setanimstatefromasd( "zm_idle" );
self setclientfield( "ghost_fx", 4 ); self setclientfield( "ghost_fx", 4 );
self.state = "wait_update"; self.state = "wait_update";
} }
@ -1326,7 +1326,7 @@ wait_update()
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
if ( self getanimstatefromasd() != "zm_move_run" ) if ( self getanimstatefromasd() != "zm_move_run" )
self setanimstatefromasd( "zm_move_run" ); self sys::setanimstatefromasd( "zm_move_run" );
self setclientfield( "ghost_fx", 4 ); self setclientfield( "ghost_fx", 4 );
self start_runaway(); self start_runaway();
@ -1353,8 +1353,8 @@ start_evaporate( need_deletion )
else else
{ {
self.state = "evaporate_update"; self.state = "evaporate_update";
self ghost(); self sys::ghost();
self notsolid(); self sys::notsolid();
} }
} }
@ -1385,19 +1385,19 @@ evaporate_update()
} }
else if ( is_player_valid( player ) ) else if ( is_player_valid( player ) )
{ {
self solid(); self sys::solid();
self show(); self sys::show();
self start_chase(); self start_chase();
} }
} }
is_within_capsule( point, origin, angles, radius, range ) is_within_capsule( point, origin, angles, radius, range )
{ {
forward_dir = vectornormalize( anglestoforward( angles ) ); forward_dir = sys::vectornormalize( anglestoforward( angles ) );
start = origin + forward_dir * radius; start = origin + forward_dir * radius;
end = start + forward_dir * range; end = start + forward_dir * range;
point_intersect = pointonsegmentnearesttopoint( start, end, point ); point_intersect = pointonsegmentnearesttopoint( start, end, point );
distance_squared = distancesquared( point_intersect, point ); distance_squared = sys::distancesquared( point_intersect, point );
if ( distance_squared <= radius * radius ) if ( distance_squared <= radius * radius )
return true; return true;
@ -1419,18 +1419,18 @@ get_dot_production_2d( point, origin, angles )
{ {
forward_dir = anglestoforward( angles ); forward_dir = anglestoforward( angles );
forward_dir = ( forward_dir[0], forward_dir[1], 0 ); forward_dir = ( forward_dir[0], forward_dir[1], 0 );
forward_dir = vectornormalize( forward_dir ); forward_dir = sys::vectornormalize( forward_dir );
to_point_dir = point - origin; to_point_dir = point - origin;
to_point_dir = ( to_point_dir[0], to_point_dir[1], 0 ); to_point_dir = ( to_point_dir[0], to_point_dir[1], 0 );
to_point_dir = vectornormalize( to_point_dir ); to_point_dir = sys::vectornormalize( to_point_dir );
return vectordot( forward_dir, to_point_dir ); return sys::vectordot( forward_dir, to_point_dir );
} }
is_in_room( room ) is_in_room( room )
{ {
foreach ( volume in room.volumes ) foreach ( volume in room.volumes )
{ {
if ( self istouching( volume ) ) if ( self sys::istouching( volume ) )
return true; return true;
} }
@ -1492,7 +1492,7 @@ can_drain_points( self_pos, target_pos )
if ( isdefined( self.force_killable ) && self.force_killable ) if ( isdefined( self.force_killable ) && self.force_killable )
return false; return false;
dist = distancesquared( self_pos, target_pos ); dist = sys::distancesquared( self_pos, target_pos );
if ( dist < 60 * 60 ) if ( dist < 60 * 60 )
return true; return true;
@ -1507,13 +1507,13 @@ set_chase_status( move_speed )
if ( self.zombie_move_speed != move_speed ) if ( self.zombie_move_speed != move_speed )
{ {
self set_zombie_run_cycle( move_speed ); self set_zombie_run_cycle( move_speed );
self setanimstatefromasd( "zm_move_" + move_speed ); self sys::setanimstatefromasd( "zm_move_" + move_speed );
} }
} }
start_drain() start_drain()
{ {
self setanimstatefromasd( "zm_drain" ); self sys::setanimstatefromasd( "zm_drain" );
self setclientfield( "ghost_fx", 2 ); self setclientfield( "ghost_fx", 2 );
self.state = "drain_update"; self.state = "drain_update";
} }
@ -1530,9 +1530,9 @@ drain_update()
if ( can_drain_points( self.origin, player.origin ) ) if ( can_drain_points( self.origin, player.origin ) )
{ {
if ( self getanimstatefromasd() != "zm_drain" ) if ( self getanimstatefromasd() != "zm_drain" )
self setanimstatefromasd( "zm_drain" ); self sys::setanimstatefromasd( "zm_drain" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
if ( !( isdefined( self.is_draining ) && self.is_draining ) ) if ( !( isdefined( self.is_draining ) && self.is_draining ) )
self thread drain_player( player ); self thread drain_player( player );
@ -1545,7 +1545,7 @@ drain_update()
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
if ( self getanimstatefromasd() != "zm_move_run" ) if ( self getanimstatefromasd() != "zm_move_run" )
self setanimstatefromasd( "zm_move_run" ); self sys::setanimstatefromasd( "zm_move_run" );
self setclientfield( "ghost_fx", 4 ); self setclientfield( "ghost_fx", 4 );
self start_runaway(); self start_runaway();
@ -1611,14 +1611,14 @@ start_runaway()
{ {
wait 2; wait 2;
self.state = "runaway_update"; self.state = "runaway_update";
self setgoalpos( self.startinglocation ); self sys::setgoalpos( self.startinglocation );
self set_chase_status( "run" ); self set_chase_status( "run" );
} }
does_reach_runaway_goal() does_reach_runaway_goal()
{ {
result = 0; result = 0;
dist_squared = distancesquared( self.origin, self.startinglocation ); dist_squared = sys::distancesquared( self.origin, self.startinglocation );
if ( dist_squared < 60 * 60 ) if ( dist_squared < 60 * 60 )
result = 1; result = 1;
@ -1656,7 +1656,7 @@ runaway_update()
} }
else else
{ {
self setgoalpos( self.startinglocation ); self sys::setgoalpos( self.startinglocation );
/# /#
draw_debug_star( self.startinglocation, ( 0, 0, 1 ), 1 ); draw_debug_star( self.startinglocation, ( 0, 0, 1 ), 1 );
draw_debug_line( self.origin, self.startinglocation, ( 0, 1, 0 ), 1, 0 ); draw_debug_line( self.origin, self.startinglocation, ( 0, 1, 0 ), 1, 0 );
@ -1851,7 +1851,7 @@ enable_ghost_zone_door_ai_clips()
{ {
foreach ( door_clip in level.ghost_zone_door_clips ) foreach ( door_clip in level.ghost_zone_door_clips )
{ {
door_clip solid(); door_clip sys::solid();
door_clip disconnectpaths(); door_clip disconnectpaths();
} }
} }
@ -1863,7 +1863,7 @@ disable_ghost_zone_door_ai_clips()
{ {
foreach ( door_clip in level.ghost_zone_door_clips ) foreach ( door_clip in level.ghost_zone_door_clips )
{ {
door_clip notsolid(); door_clip sys::notsolid();
door_clip connectpaths(); door_clip connectpaths();
} }
} }
@ -1881,7 +1881,7 @@ clear_all_active_zombies()
{ {
if ( !( isdefined( zombie.is_ghost ) && zombie.is_ghost ) ) if ( !( isdefined( zombie.is_ghost ) && zombie.is_ghost ) )
{ {
spawn_point = spawnstruct(); spawn_point = sys::spawnstruct();
spawn_point.origin = zombie.origin; spawn_point.origin = zombie.origin;
spawn_point.angles = zombie.angles; spawn_point.angles = zombie.angles;
@ -2013,7 +2013,7 @@ should_last_ghost_drop_powerup()
sndghostroundmus() sndghostroundmus()
{ {
level endon( "ghost_round_end" ); level endon( "ghost_round_end" );
ent = spawn( "script_origin", ( 0, 0, 0 ) ); ent = sys::spawn( "script_origin", ( 0, 0, 0 ) );
level.sndroundwait = 1; level.sndroundwait = 1;
ent thread sndghostroundmus_end(); ent thread sndghostroundmus_end();
ent endon( "sndGhostRoundEnd" ); ent endon( "sndGhostRoundEnd" );
@ -2046,7 +2046,7 @@ sndghostroundready()
if ( level.zombie_ghost_round_states.next_ghost_round_number == level.round_number ) if ( level.zombie_ghost_round_states.next_ghost_round_number == level.round_number )
{ {
playsoundatposition( "zmb_ghost_round_srt", mansion ); playsoundatposition( "zmb_ghost_round_srt", mansion );
ent = spawn( "script_origin", mansion ); ent = sys::spawn( "script_origin", mansion );
ent playloopsound( "zmb_ghost_round_lp", 3 ); ent playloopsound( "zmb_ghost_round_lp", 3 );
ent thread sndghostroundready_stoplp(); ent thread sndghostroundready_stoplp();
break; break;
@ -2070,7 +2070,7 @@ check_sending_away_zombie_followers()
if ( flag_exists( "time_bomb_restore_active" ) && flag( "time_bomb_restore_active" ) ) if ( flag_exists( "time_bomb_restore_active" ) && flag( "time_bomb_restore_active" ) )
return; return;
players = getplayers(); players = sys::getplayers();
valid_player_in_ghost_zone_count = 0; valid_player_in_ghost_zone_count = 0;
valid_player_count = 0; valid_player_count = 0;
@ -2115,14 +2115,14 @@ send_away_zombie_follower( player )
dest = 0; dest = 0;
awaydir = self.origin - player.origin; awaydir = self.origin - player.origin;
awaydir = ( awaydir[0], awaydir[1], 0 ); awaydir = ( awaydir[0], awaydir[1], 0 );
awaydir = vectornormalize( awaydir ); awaydir = sys::vectornormalize( awaydir );
endpos = self.origin + vectorscale( awaydir, 600 ); endpos = self.origin + vectorscale( awaydir, 600 );
locs = array_randomize( level.enemy_dog_locations ); locs = array_randomize( level.enemy_dog_locations );
for ( i = 0; i < locs.size; i++ ) for ( i = 0; i < locs.size; i++ )
{ {
dist_zombie = distancesquared( locs[i].origin, endpos ); dist_zombie = sys::distancesquared( locs[i].origin, endpos );
dist_player = distancesquared( locs[i].origin, player.origin ); dist_player = sys::distancesquared( locs[i].origin, player.origin );
if ( dist_zombie < dist_player ) if ( dist_zombie < dist_player )
{ {
@ -2135,7 +2135,7 @@ send_away_zombie_follower( player )
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
if ( isdefined( locs[dest] ) ) if ( isdefined( locs[dest] ) )
self setgoalpos( locs[dest].origin ); self sys::setgoalpos( locs[dest].origin );
wait 5; wait 5;
self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
@ -2233,7 +2233,7 @@ player_moving_speed_scale_think()
while ( true ) while ( true )
{ {
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -2409,7 +2409,7 @@ get_next_spot_during_ghost_round_presentation()
spawn_ghost_round_presentation_ghost() spawn_ghost_round_presentation_ghost()
{ {
spawn_point = get_next_spot_during_ghost_round_presentation(); spawn_point = get_next_spot_during_ghost_round_presentation();
ghost = spawn( "script_model", spawn_point.origin ); ghost = sys::spawn( "script_model", spawn_point.origin );
ghost.angles = spawn_point.angles; ghost.angles = spawn_point.angles;
ghost setmodel( "c_zom_zombie_buried_ghost_woman_fb" ); ghost setmodel( "c_zom_zombie_buried_ghost_woman_fb" );
@ -2430,9 +2430,9 @@ spawn_ghost_round_presentation_ghost()
wait 0.5; wait 0.5;
ghost useanimtree( #animtree ); ghost useanimtree( #animtree );
ghost setanim( %ai_zombie_ghost_idle ); ghost setanim( %ai_zombie_ghost_idle );
ghost.script_mover = spawn( "script_origin", ghost.origin ); ghost.script_mover = sys::spawn( "script_origin", ghost.origin );
ghost.script_mover.angles = ghost.angles; ghost.script_mover.angles = ghost.angles;
ghost linkto( ghost.script_mover ); ghost sys::linkto( ghost.script_mover );
ghost setclientfield( "sndGhostAudio", 1 ); ghost setclientfield( "sndGhostAudio", 1 );
} }
@ -2444,7 +2444,7 @@ ghost_round_presentation_think()
return; return;
if ( !isdefined( level.sndmansionent ) ) if ( !isdefined( level.sndmansionent ) )
level.sndmansionent = spawn( "script_origin", ( 2830, 555, 436 ) ); level.sndmansionent = sys::spawn( "script_origin", ( 2830, 555, 436 ) );
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
@ -2492,14 +2492,14 @@ ghost_switch_windows()
next_spot = get_next_spot_during_ghost_round_presentation(); next_spot = get_next_spot_during_ghost_round_presentation();
self setclientfield( "ghost_fx", 5 ); self setclientfield( "ghost_fx", 5 );
self setclientfield( "sndGhostAudio", 0 ); self setclientfield( "sndGhostAudio", 0 );
self ghost(); self sys::ghost();
self.script_mover moveto( next_spot.origin, 1 ); self.script_mover moveto( next_spot.origin, 1 );
self.script_mover waittill( "movedone" ); self.script_mover waittill( "movedone" );
self.script_mover.origin = next_spot.origin; self.script_mover.origin = next_spot.origin;
self.script_mover.angles = next_spot.angles; self.script_mover.angles = next_spot.angles;
self setclientfield( "ghost_fx", 3 ); self setclientfield( "ghost_fx", 3 );
self setclientfield( "sndGhostAudio", 1 ); self setclientfield( "sndGhostAudio", 1 );
self show(); self sys::show();
wait 6; wait 6;
} }
} }
@ -2511,7 +2511,7 @@ ghost_round_presentation_sound()
while ( true ) while ( true )
{ {
players = getplayers(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
@ -2605,7 +2605,7 @@ init_time_bomb_ghost_rounds()
} }
} }
is_ghost() is_sys::ghost()
{ {
return !( isdefined( self.is_ghost ) && self.is_ghost ); return !( isdefined( self.is_ghost ) && self.is_ghost );
} }
@ -2685,7 +2685,7 @@ time_bomb_custom_get_enemy_func()
time_bomb_global_data_save_ghosts() time_bomb_global_data_save_ghosts()
{ {
s_temp = spawnstruct(); s_temp = sys::spawnstruct();
s_temp.ghost_count = level.zombie_ghost_count; s_temp.ghost_count = level.zombie_ghost_count;
s_temp.round_started = level.zombie_ghost_round_states.is_started; s_temp.round_started = level.zombie_ghost_round_states.is_started;
s_temp.round_first_done = level.zombie_ghost_round_states.is_first_ghost_round_finished; s_temp.round_first_done = level.zombie_ghost_round_states.is_first_ghost_round_finished;
@ -2702,7 +2702,7 @@ time_bomb_global_data_restore_ghosts()
level.zombie_ghost_round_states.next_ghost_round_number = self.ghost_data.round_next; level.zombie_ghost_round_states.next_ghost_round_number = self.ghost_data.round_next;
level.zombie_ghost_round_states.round_zombie_total = self.ghost_data.zombie_total; level.zombie_ghost_round_states.round_zombie_total = self.ghost_data.zombie_total;
foreach ( player in get_players() ) foreach ( player in sys::getplayers() )
player.ghost_count = 0; player.ghost_count = 0;
} }
@ -2779,7 +2779,7 @@ _restore_ghost_data( save_struct, n_index )
self.favoriteenemy = s_data.favoriteenemy; self.favoriteenemy = s_data.favoriteenemy;
self.ignore_timebomb_slowdown = 1; self.ignore_timebomb_slowdown = 1;
self setgoalpos( self.origin ); self sys::setgoalpos( self.origin );
} }
_respawn_ghost_failsafe() _respawn_ghost_failsafe()
@ -2812,7 +2812,7 @@ devgui_warp_to_mansion()
#/ #/
} }
devgui_toggle_no_ghost() devgui_toggle_no_sys::ghost()
{ {
/# /#
level.force_no_ghost = !level.force_no_ghost; level.force_no_ghost = !level.force_no_ghost;

View File

@ -45,7 +45,7 @@ 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 = sys::getentarray( "ghost_round_override", "script_noteworthy" );
is_player_in_override_trigger = 0; is_player_in_override_trigger = 0;
@ -53,7 +53,7 @@ is_player_in_ghost_zone( player )
{ {
foreach ( trigger in level.ghost_zone_overrides ) foreach ( trigger in level.ghost_zone_overrides )
{ {
if ( player istouching( trigger ) ) if ( player sys::istouching( trigger ) )
{ {
is_player_in_override_trigger = 1; is_player_in_override_trigger = 1;
break; break;
@ -72,44 +72,44 @@ is_player_in_ghost_zone( player )
ghost_bad_path_init() ghost_bad_path_init()
{ {
level.bad_zones = []; level.bad_zones = [];
level.bad_zones[0] = spawnstruct(); level.bad_zones[0] = sys::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 = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[0].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[1] = spawnstruct(); level.bad_zones[1] = sys::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 = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[1].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[2] = spawnstruct(); level.bad_zones[2] = sys::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 = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[2].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[3] = spawnstruct(); level.bad_zones[3] = sys::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 = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[3].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_tunnel_open" );
level.bad_zones[4] = spawnstruct(); level.bad_zones[4] = sys::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 = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[4].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_tunnel_open" );
level.bad_zones[5] = spawnstruct(); level.bad_zones[5] = sys::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 = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[5].ignore_func = pluto_sys::getfunction( "maps/mp/zm_buried", "is_tunnel_open" );
} }
ghost_bad_path_failsafe() ghost_bad_path_failsafe()
@ -219,7 +219,7 @@ disable_traversal_clip_around_mansion()
if ( 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 )
{ {
foreach ( door_clip in level.ghost_zone_door_clips ) foreach ( door_clip in level.ghost_zone_door_clips )
door_clip notsolid(); door_clip sys::notsolid();
} }
} }

View File

@ -27,11 +27,11 @@ precache()
precache_fx() precache_fx()
{ {
level._effect["leaper_death"] = loadfx( "maps/zombie/fx_zmb_leaper_death" ); level._effect["leaper_death"] = sys::loadfx( "maps/zombie/fx_zmb_leaper_death" );
level._effect["leaper_spawn"] = loadfx( "maps/zombie/fx_zmb_leaper_spawn" ); level._effect["leaper_spawn"] = sys::loadfx( "maps/zombie/fx_zmb_leaper_spawn" );
level._effect["leaper_trail"] = loadfx( "maps/zombie/fx_zmb_leaper_trail" ); level._effect["leaper_trail"] = sys::loadfx( "maps/zombie/fx_zmb_leaper_trail" );
level._effect["leaper_walk"] = loadfx( "maps/zombie/fx_zmb_leaper_walk" ); level._effect["leaper_walk"] = sys::loadfx( "maps/zombie/fx_zmb_leaper_walk" );
level._effect["leaper_wall_impact"] = loadfx( "maps/zombie/fx_zmb_leaper_wall_impact" ); level._effect["leaper_wall_impact"] = sys::loadfx( "maps/zombie/fx_zmb_leaper_wall_impact" );
} }
init() init()
@ -42,7 +42,7 @@ init()
if ( !isdefined( level.leapers_per_player ) ) if ( !isdefined( level.leapers_per_player ) )
level.leapers_per_player = 2; level.leapers_per_player = 2;
level.no_jump_triggers = getentarray( "leaper_no_jump_trigger", "targetname" ); level.no_jump_triggers = sys::getentarray( "leaper_no_jump_trigger", "targetname" );
} }
leaper_calc_anim_offsets() leaper_calc_anim_offsets()
@ -51,7 +51,7 @@ leaper_calc_anim_offsets()
if ( isdefined( leaper ) ) if ( isdefined( leaper ) )
{ {
level.leaper_anim = spawnstruct(); level.leaper_anim = sys::spawnstruct();
asd = "zm_wall_up"; asd = "zm_wall_up";
anim_id = leaper getanimfromasd( asd, 0 ); anim_id = leaper getanimfromasd( asd, 0 );
level.leaper_anim.up_mid = getmovedelta( anim_id, 0, 0.488 ) + vectorscale( ( 0, 0, 1 ), 6.0 ); level.leaper_anim.up_mid = getmovedelta( anim_id, 0, 0.488 ) + vectorscale( ( 0, 0, 1 ), 6.0 );
@ -82,7 +82,7 @@ leaper_calc_anim_offsets()
leaper_spawner_init() leaper_spawner_init()
{ {
level.leaper_spawners = getentarray( "leaper_zombie_spawner", "script_noteworthy" ); level.leaper_spawners = sys::getentarray( "leaper_zombie_spawner", "script_noteworthy" );
if ( level.leaper_spawners.size == 0 ) if ( level.leaper_spawners.size == 0 )
return; return;
@ -167,11 +167,11 @@ leaper_init()
self notify( "zombie_init_done" ); self notify( "zombie_init_done" );
self.allowpain = 0; self.allowpain = 0;
self thread play_ambient_leaper_vocals(); self thread play_ambient_leaper_vocals();
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties();
self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area();
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
if ( isdefined( self.spawn_point.script_parameters ) && ( self.spawn_point.script_parameters == "emerge_bottom" || self.spawn_point.script_parameters == "emerge_top" ) ) if ( isdefined( self.spawn_point.script_parameters ) && ( self.spawn_point.script_parameters == "emerge_bottom" || self.spawn_point.script_parameters == "emerge_top" ) )
self thread do_leaper_emerge( self.spawn_point ); self thread do_leaper_emerge( self.spawn_point );
@ -180,7 +180,7 @@ leaper_init()
self thread leaper_check_zone(); self thread leaper_check_zone();
self thread leaper_check_no_jump(); self thread leaper_check_no_jump();
self thread leaper_watch_enemy(); self thread leaper_watch_enemy();
self.combat_animmode = ::leaper_combat_animmode; self.combat_sys::animmode = ::leaper_combat_sys::animmode;
level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self );
self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); self thread maps\mp\zombies\_zm_spawner::enemy_death_detection();
self thread leaper_elevator_failsafe(); self thread leaper_elevator_failsafe();
@ -262,7 +262,7 @@ leaper_can_use_anim( local_mid, local_end, dir )
end = self localtoworldcoords( local_end ); end = self localtoworldcoords( local_end );
real_mid = mid; real_mid = mid;
forward_dist = length( end - start ) * 0.5; forward_dist = length( end - start ) * 0.5;
forward_vec = vectornormalize( end - start ); forward_vec = sys::vectornormalize( end - start );
temp_org = start + vectorscale( forward_vec, forward_dist ); temp_org = start + vectorscale( forward_vec, forward_dist );
forward_org = ( temp_org[0], temp_org[1], real_mid[2] ); forward_org = ( temp_org[0], temp_org[1], real_mid[2] );
end_top = end + vectorscale( ( 0, 0, 1 ), 24.0 ); end_top = end + vectorscale( ( 0, 0, 1 ), 24.0 );
@ -373,7 +373,7 @@ leaper_building_jump()
if ( isdefined( self.spawn_point.script_string ) && self.spawn_point.script_string != "find_flesh" ) if ( isdefined( self.spawn_point.script_string ) && self.spawn_point.script_string != "find_flesh" )
{ {
self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_building_leap", self.spawn_point.script_string ); self sys::animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_building_leap", self.spawn_point.script_string );
self maps\mp\animscripts\zm_shared::donotetracks( "building_leap_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "building_leap_anim" );
} }
@ -387,12 +387,12 @@ leaper_check_wall()
self endon( "death" ); self endon( "death" );
if ( !isdefined( self.next_leap_time ) ) if ( !isdefined( self.next_leap_time ) )
self.next_leap_time = gettime() + 500; self.next_leap_time = sys::gettime() + 500;
if ( is_true( self.sliding_on_goo ) || is_true( self.is_leaping ) ) if ( is_true( self.sliding_on_goo ) || is_true( self.is_leaping ) )
return; return;
if ( gettime() > self.next_leap_time && !is_true( self.no_jump ) ) if ( sys::gettime() > self.next_leap_time && !is_true( self.no_jump ) )
{ {
wall_anim = []; wall_anim = [];
@ -420,13 +420,13 @@ leaper_check_wall()
self.is_leaping = 1; self.is_leaping = 1;
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self animcustom( ::leaper_play_anim ); self sys::animcustom( ::leaper_play_anim );
self waittill( "leap_anim_done" ); self waittill( "leap_anim_done" );
self leaper_stop_trail_fx(); self leaper_stop_trail_fx();
self.ignoreall = 0; self.ignoreall = 0;
self.is_leaping = 0; self.is_leaping = 0;
self thread maps\mp\zombies\_zm_ai_basic::find_flesh(); self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
self.next_leap_time = gettime() + 500; self.next_leap_time = sys::gettime() + 500;
} }
} }
} }
@ -471,7 +471,7 @@ leaper_check_no_jump()
foreach ( trigger in level.no_jump_triggers ) foreach ( trigger in level.no_jump_triggers )
{ {
if ( self istouching( trigger ) ) if ( self sys::istouching( trigger ) )
{ {
self.no_jump = 1; self.no_jump = 1;
break; break;
@ -484,17 +484,17 @@ leaper_check_no_jump()
melee_anim_func() melee_anim_func()
{ {
self.next_leap_time = gettime() + 1500; self.next_leap_time = sys::gettime() + 1500;
self animmode( "gravity" ); self sys::animmode( "gravity" );
} }
leaper_start_trail_fx() leaper_start_trail_fx()
{ {
self endon( "death" ); self endon( "death" );
self leaper_stop_trail_fx(); self leaper_stop_trail_fx();
self.trail_fx = spawn( "script_model", self.origin ); self.trail_fx = sys::spawn( "script_model", self.origin );
self.trail_fx setmodel( "tag_origin" ); self.trail_fx setmodel( "tag_origin" );
self.trail_fx linkto( self ); self.trail_fx sys::linkto( self );
wait 0.1; wait 0.1;
playfxontag( level._effect["leaper_trail"], self.trail_fx, "tag_origin" ); playfxontag( level._effect["leaper_trail"], self.trail_fx, "tag_origin" );
} }
@ -508,11 +508,11 @@ leaper_stop_trail_fx()
leaper_play_anim() leaper_play_anim()
{ {
self endon( "death" ); self endon( "death" );
self animmode( "nogravity" ); self sys::animmode( "nogravity" );
self setanimstatefromasd( self.leap_anim ); self sys::setanimstatefromasd( self.leap_anim );
self thread leaper_handle_fx_notetracks( "wall_anim" ); self thread leaper_handle_fx_notetracks( "wall_anim" );
maps\mp\animscripts\zm_shared::donotetracks( "wall_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "wall_anim" );
self animmode( "normal" ); self sys::animmode( "normal" );
self notify( "leap_anim_done" ); self notify( "leap_anim_done" );
} }
@ -533,7 +533,7 @@ leaper_notetracks( animname )
self endon( "death" ); self endon( "death" );
self endon( "leap_anim_done" ); self endon( "leap_anim_done" );
self waittillmatch( animname, "gravity on" ); self waittillmatch( animname, "gravity on" );
self animmode( "normal" ); self sys::animmode( "normal" );
} }
enable_leaper_rounds() enable_leaper_rounds()
@ -579,7 +579,7 @@ leaper_round_spawning()
{ {
level endon( "intermission" ); level endon( "intermission" );
level endon( "leaper_round_ending" ); level endon( "leaper_round_ending" );
level.leaper_targets = getplayers(); level.leaper_targets = sys::getplayers();
for ( i = 0; i < level.leaper_targets.size; i++ ) for ( i = 0; i < level.leaper_targets.size; i++ )
level.leaper_targets[i].hunted_by = 0; level.leaper_targets[i].hunted_by = 0;
@ -597,7 +597,7 @@ leaper_round_spawning()
level.leaper_intermission = 1; level.leaper_intermission = 1;
level thread leaper_round_accuracy_tracking(); level thread leaper_round_accuracy_tracking();
level thread leaper_round_aftermath(); level thread leaper_round_aftermath();
players = get_players(); players = sys::getplayers();
wait 1; wait 1;
playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) );
wait 1; wait 1;
@ -648,7 +648,7 @@ leaper_round_spawning()
num_player_valid = get_number_of_valid_players(); num_player_valid = get_number_of_valid_players();
} }
players = get_players(); players = sys::getplayers();
favorite_enemy = get_favorite_enemy(); favorite_enemy = get_favorite_enemy();
spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy ); spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy );
ai = spawn_zombie( level.leaper_spawners[0] ); ai = spawn_zombie( level.leaper_spawners[0] );
@ -668,7 +668,7 @@ leaper_round_spawning()
leaper_round_accuracy_tracking() leaper_round_accuracy_tracking()
{ {
players = getplayers(); players = sys::getplayers();
level.leaper_round_accurate_players = 0; level.leaper_round_accurate_players = 0;
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
@ -678,7 +678,7 @@ leaper_round_accuracy_tracking()
} }
level waittill( "last_leaper_down" ); level waittill( "last_leaper_down" );
players = getplayers(); players = sys::getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
@ -723,7 +723,7 @@ leaper_round_wait()
leaper_health_increase() leaper_health_increase()
{ {
players = getplayers(); players = sys::getplayers();
if ( level.leaper_round_count == 1 ) if ( level.leaper_round_count == 1 )
level.leaper_health = 400; level.leaper_health = 400;
@ -740,7 +740,7 @@ leaper_health_increase()
get_favorite_enemy() get_favorite_enemy()
{ {
leaper_targets = getplayers(); leaper_targets = sys::getplayers();
least_hunted = leaper_targets[0]; least_hunted = leaper_targets[0];
for ( i = 0; i < leaper_targets.size; i++ ) for ( i = 0; i < leaper_targets.size; i++ )
@ -775,9 +775,9 @@ leaper_watch_enemy()
} }
} }
leaper_combat_animmode() leaper_combat_sys::animmode()
{ {
self animmode( "gravity", 0 ); self sys::animmode( "gravity", 0 );
} }
leaper_spawn_logic_old( leaper_array, favorite_enemy ) leaper_spawn_logic_old( leaper_array, favorite_enemy )
@ -793,7 +793,7 @@ leaper_spawn_logic_old( leaper_array, favorite_enemy )
continue; continue;
} }
dist_squared = distancesquared( leaper_locs[i].origin, favorite_enemy.origin ); dist_squared = sys::distancesquared( leaper_locs[i].origin, favorite_enemy.origin );
if ( dist_squared > 160000 && dist_squared < 1000000 ) if ( dist_squared > 160000 && dist_squared < 1000000 )
{ {
@ -849,14 +849,14 @@ leaper_spawn_logic( leaper_array, favorite_enemy )
/# /#
if ( getdvarint( #"scr_zombie_spawn_in_view" ) ) if ( getdvarint( #"scr_zombie_spawn_in_view" ) )
{ {
player = get_players()[0]; player = sys::getplayers()[0];
a_spawn_points_in_view = []; a_spawn_points_in_view = [];
for ( i = 0; i < a_leaper_spawn_points.size; i++ ) for ( i = 0; i < a_leaper_spawn_points.size; i++ )
{ {
player_vec = vectornormalize( anglestoforward( player.angles ) ); player_vec = sys::vectornormalize( anglestoforward( player.angles ) );
player_spawn = vectornormalize( a_leaper_spawn_points[i].origin - player.origin ); player_spawn = sys::vectornormalize( a_leaper_spawn_points[i].origin - player.origin );
dot = vectordot( player_vec, player_spawn ); dot = sys::vectordot( player_vec, player_spawn );
if ( dot > 0.707 ) if ( dot > 0.707 )
{ {
@ -931,15 +931,15 @@ get_valid_spawner_array( a_spawn_points )
leaper_spawn_fx( ai, ent ) leaper_spawn_fx( ai, ent )
{ {
ai setfreecameralockonallowed( 0 ); ai sys::setfreecameralockonallowed( 0 );
ai show(); ai sys::show();
ai setfreecameralockonallowed( 1 ); ai sys::setfreecameralockonallowed( 1 );
v_fx_origin = ai.spawn_point.origin; v_fx_origin = ai.spawn_point.origin;
if ( isdefined( ai.spawn_point.script_string ) && ai.spawn_point.script_string != "find_flesh" ) if ( isdefined( ai.spawn_point.script_string ) && ai.spawn_point.script_string != "find_flesh" )
{ {
wait 0.1; wait 0.1;
v_fx_origin = ai gettagorigin( "J_SpineLower" ); v_fx_origin = ai sys::gettagorigin( "J_SpineLower" );
} }
playfx( level._effect["leaper_spawn"], v_fx_origin ); playfx( level._effect["leaper_spawn"], v_fx_origin );
@ -1011,7 +1011,7 @@ leaper_traverse_watcher()
{ {
self.elevator_parent = undefined; self.elevator_parent = undefined;
object_is_on_elevator_func = getFunction( "maps\mp\zm_highrise_elevators", "object_is_on_elevator" ); object_is_on_elevator_func = pluto_sys::getfunction( "maps\mp\zm_highrise_elevators", "object_is_on_elevator" );
if ( isDefined( object_is_on_elevator_func ) && is_true( self [[ object_is_on_elevator_func ]]() ) ) if ( isDefined( object_is_on_elevator_func ) && is_true( self [[ object_is_on_elevator_func ]]() ) )
{ {
if ( isdefined( self.elevator_parent ) ) if ( isdefined( self.elevator_parent ) )
@ -1034,8 +1034,8 @@ leaper_traverse_watcher()
leaper_playable_area_failsafe() leaper_playable_area_failsafe()
{ {
self endon( "death" ); self endon( "death" );
self.leaper_failsafe_start_time = gettime(); self.leaper_failsafe_start_time = sys::gettime();
playable_area = getentarray( "player_volume", "script_noteworthy" ); playable_area = sys::getentarray( "player_volume", "script_noteworthy" );
b_outside_playable_space_this_frame = 0; b_outside_playable_space_this_frame = 0;
self.leaper_outside_playable_space_time = -2; self.leaper_outside_playable_space_time = -2;
@ -1043,7 +1043,7 @@ leaper_playable_area_failsafe()
{ {
b_outside_playable_last_check = b_outside_playable_space_this_frame; b_outside_playable_last_check = b_outside_playable_space_this_frame;
b_outside_playable_space_this_frame = is_leaper_outside_playable_space( playable_area ); b_outside_playable_space_this_frame = is_leaper_outside_playable_space( playable_area );
n_current_time = gettime(); n_current_time = sys::gettime();
if ( b_outside_playable_space_this_frame && !b_outside_playable_last_check ) if ( b_outside_playable_space_this_frame && !b_outside_playable_last_check )
self.leaper_outside_playable_space_time = n_current_time; self.leaper_outside_playable_space_time = n_current_time;
@ -1081,7 +1081,7 @@ is_leaper_outside_playable_space( playable_area )
foreach ( area in playable_area ) foreach ( area in playable_area )
{ {
if ( self istouching( area ) ) if ( self sys::istouching( area ) )
b_outside_play_space = 0; b_outside_play_space = 0;
} }
@ -1112,7 +1112,7 @@ leaper_spawn_failsafe()
dist_sq = dist_sq + 576; dist_sq = dist_sq + 576;
wait 1; wait 1;
dist_sq = dist_sq + distancesquared( self.origin, prevorigin ); dist_sq = dist_sq + sys::distancesquared( self.origin, prevorigin );
prevorigin = self.origin; prevorigin = self.origin;
} }
@ -1153,7 +1153,7 @@ do_leaper_emerge( spot )
spot.is_spawning = 1; spot.is_spawning = 1;
anim_org = spot.origin; anim_org = spot.origin;
anim_ang = spot.angles; anim_ang = spot.angles;
self ghost(); self sys::ghost();
self thread maps\mp\zombies\_zm_spawner::hide_pop(); self thread maps\mp\zombies\_zm_spawner::hide_pop();
self thread leaper_death_wait( "spawn_anim" ); self thread leaper_death_wait( "spawn_anim" );
@ -1185,9 +1185,9 @@ leaper_emerge()
self endon( "death" ); self endon( "death" );
if ( self.spawn_point.script_parameters == "emerge_bottom" ) if ( self.spawn_point.script_parameters == "emerge_bottom" )
self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_floor" ); self sys::animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_floor" );
else else
self animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_ceiling" ); self sys::animscripted( self.spawn_point.origin, self.spawn_point.angles, "zm_spawn_elevator_from_ceiling" );
self maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "spawn_anim" );
self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript; self.deathfunction = maps\mp\zombies\_zm_spawner::zombie_death_animscript;
@ -1197,7 +1197,7 @@ leaper_emerge()
leaper_round_start_audio() leaper_round_start_audio()
{ {
wait 2.5; wait 2.5;
players = get_players(); players = sys::getplayers();
num = randomintrange( 0, players.size ); num = randomintrange( 0, players.size );
players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "leaper_round" ); players[num] maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "leaper_round" );
array_thread( players, ::wait_for_player_to_see_leaper ); array_thread( players, ::wait_for_player_to_see_leaper );
@ -1215,9 +1215,9 @@ wait_for_player_to_see_leaper()
foreach ( leaper in leapers ) foreach ( leaper in leapers )
{ {
player_vec = vectornormalize( anglestoforward( self.angles ) ); player_vec = sys::vectornormalize( anglestoforward( self.angles ) );
player_leaper = vectornormalize( leaper.origin - self.origin ); player_leaper = sys::vectornormalize( leaper.origin - self.origin );
dot = vectordot( player_vec, player_leaper ); dot = sys::vectordot( player_vec, player_leaper );
if ( dot > 0.707 ) if ( dot > 0.707 )
{ {

View File

@ -30,21 +30,21 @@ precache()
precachemodel( "c_zom_mech_claw" ); precachemodel( "c_zom_mech_claw" );
precachemodel( "c_zom_mech_faceplate" ); precachemodel( "c_zom_mech_faceplate" );
precachemodel( "c_zom_mech_powersupply_cap" ); precachemodel( "c_zom_mech_powersupply_cap" );
level._effect["mech_dmg_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); level._effect["mech_dmg_sparks"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" );
level._effect["mech_dmg_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); level._effect["mech_dmg_steam"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" );
level._effect["mech_booster"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster" ); level._effect["mech_booster"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster" );
level._effect["mech_wpn_source"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); level._effect["mech_wpn_source"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" );
level._effect["mech_wpn_flamethrower"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_flamethrower" ); level._effect["mech_wpn_flamethrower"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_flamethrower" );
level._effect["mech_booster_landing"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" ); level._effect["mech_booster_landing"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" );
level._effect["mech_faceplate_dmg"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor_face" ); level._effect["mech_faceplate_dmg"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor_face" );
level._effect["mech_armor_dmg"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor" ); level._effect["mech_armor_dmg"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_armor" );
level._effect["mech_exhaust"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_exhaust_smoke" ); level._effect["mech_exhaust"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_exhaust_smoke" );
level._effect["mech_booster_feet"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster_sm" ); level._effect["mech_booster_feet"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_booster_sm" );
level._effect["mech_headlamp"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_head_light" ); level._effect["mech_headlamp"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_head_light" );
level._effect["mech_footstep_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_foot_step_steam" ); level._effect["mech_footstep_steam"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_foot_step_steam" );
setdvar( "zombie_double_wide_checks", 1 ); setdvar( "zombie_double_wide_checks", 1 );
precacherumble( "mechz_footsteps" ); precacherumble( "mechz_footsteps" );
precacheshellshock( "lava_small" ); sys::precacheshellshock( "lava_small" );
} }
register_clientfields() register_clientfields()
@ -74,12 +74,12 @@ register_burn_overlay()
main() main()
{ {
register_clientfields(); register_clientfields();
level._effect["mechz_death"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_death" ); level._effect["mechz_death"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_death" );
level._effect["mechz_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); level._effect["mechz_sparks"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" );
level._effect["mechz_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); level._effect["mechz_steam"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" );
level._effect["mechz_claw"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_claw" ); level._effect["mechz_claw"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_claw" );
level._effect["mechz_claw_arm"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); level._effect["mechz_claw_arm"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" );
level._effect["mech_booster_landing"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" ); level._effect["mech_booster_landing"] = sys::loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" );
precache(); precache();
level thread init_animtree(); level thread init_animtree();
scripts\zm\zm_ai_pack_mod_main::add_visionset_callback( ::register_burn_overlay ); scripts\zm\zm_ai_pack_mod_main::add_visionset_callback( ::register_burn_overlay );
@ -96,7 +96,7 @@ init_animtree()
init() init()
{ {
maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_init_start(); maps\mp\zombies\_zm_ai_mechz_ffotd::mechz_init_start();
level.mechz_spawners = getentarray( "mechz_spawner", "script_noteworthy" ); level.mechz_spawners = sys::getentarray( "mechz_spawner", "script_noteworthy" );
if ( level.mechz_spawners.size == 0 ) if ( level.mechz_spawners.size == 0 )
return; return;
@ -189,21 +189,21 @@ init()
mechz_setup_armor_pieces() mechz_setup_armor_pieces()
{ {
level.mechz_armor_info = []; level.mechz_armor_info = [];
level.mechz_armor_info[0] = spawnstruct(); level.mechz_armor_info[0] = sys::spawnstruct();
level.mechz_armor_info[0].model = "c_zom_mech_armor_knee_left"; level.mechz_armor_info[0].model = "c_zom_mech_armor_knee_left";
level.mechz_armor_info[0].tag = "J_Knee_Attach_LE"; level.mechz_armor_info[0].tag = "J_Knee_Attach_LE";
level.mechz_armor_info[1] = spawnstruct(); level.mechz_armor_info[1] = sys::spawnstruct();
level.mechz_armor_info[1].model = "c_zom_mech_armor_knee_right"; level.mechz_armor_info[1].model = "c_zom_mech_armor_knee_right";
level.mechz_armor_info[1].tag = "J_Knee_attach_RI"; level.mechz_armor_info[1].tag = "J_Knee_attach_RI";
level.mechz_armor_info[2] = spawnstruct(); level.mechz_armor_info[2] = sys::spawnstruct();
level.mechz_armor_info[2].model = "c_zom_mech_armor_shoulder_left"; level.mechz_armor_info[2].model = "c_zom_mech_armor_shoulder_left";
level.mechz_armor_info[2].tag = "J_ShoulderArmor_LE"; level.mechz_armor_info[2].tag = "J_ShoulderArmor_LE";
level.mechz_armor_info[3] = spawnstruct(); level.mechz_armor_info[3] = sys::spawnstruct();
level.mechz_armor_info[3].model = "c_zom_mech_armor_shoulder_right"; level.mechz_armor_info[3].model = "c_zom_mech_armor_shoulder_right";
level.mechz_armor_info[3].tag = "J_ShoulderArmor_RI"; level.mechz_armor_info[3].tag = "J_ShoulderArmor_RI";
level.mechz_armor_info[4] = spawnstruct(); level.mechz_armor_info[4] = sys::spawnstruct();
level.mechz_armor_info[4].tag = "J_Root_Attach_LE"; level.mechz_armor_info[4].tag = "J_Root_Attach_LE";
level.mechz_armor_info[5] = spawnstruct(); level.mechz_armor_info[5] = sys::spawnstruct();
level.mechz_armor_info[5].tag = "J_Root_Attach_RI"; level.mechz_armor_info[5].tag = "J_Root_Attach_RI";
for ( i = 0; i < level.mechz_armor_info.size; i++ ) for ( i = 0; i < level.mechz_armor_info.size; i++ )
@ -354,8 +354,8 @@ mechz_setup_snd()
if ( !isdefined( self.sndloopent ) ) if ( !isdefined( self.sndloopent ) )
{ {
self.sndloopent = spawn( "script_origin", self.origin ); self.sndloopent = sys::spawn( "script_origin", self.origin );
self.sndloopent linkto( self, "tag_origin" ); self.sndloopent sys::linkto( self, "tag_origin" );
self thread snddeleteentondeath( self.sndloopent ); self thread snddeleteentondeath( self.sndloopent );
} }
@ -528,7 +528,7 @@ mechz_attach_objects()
for ( i = 0; i < level.mechz_armor_info.size; i++ ) for ( i = 0; i < level.mechz_armor_info.size; i++ )
{ {
self.armor_state[i] = spawnstruct(); self.armor_state[i] = sys::spawnstruct();
self.armor_state[i].index = i; self.armor_state[i].index = i;
self.armor_state[i].tag = level.mechz_armor_info[i].tag; self.armor_state[i].tag = level.mechz_armor_info[i].tag;
@ -545,17 +545,17 @@ mechz_attach_objects()
self.m_claw = undefined; self.m_claw = undefined;
} }
org = self gettagorigin( "tag_claw" ); org = self sys::gettagorigin( "tag_claw" );
ang = self gettagangles( "tag_claw" ); ang = self sys::gettagangles( "tag_claw" );
self.m_claw = spawn( "script_model", org ); self.m_claw = sys::spawn( "script_model", org );
self.m_claw setmodel( "c_zom_mech_claw" ); self.m_claw setmodel( "c_zom_mech_claw" );
self.m_claw.angles = ang; self.m_claw.angles = ang;
self.m_claw linkto( self, "tag_claw" ); self.m_claw sys::linkto( self, "tag_claw" );
self.m_claw useanimtree( #animtree ); self.m_claw useanimtree( #animtree );
if ( isdefined( self.m_claw_damage_trigger ) ) if ( isdefined( self.m_claw_damage_trigger ) )
{ {
self.m_claw_damage_trigger unlink(); self.m_claw_damage_trigger sys::unlink();
self.m_claw_damage_trigger delete(); self.m_claw_damage_trigger delete();
self.m_claw_damage_trigger = undefined; self.m_claw_damage_trigger = undefined;
} }
@ -563,10 +563,10 @@ mechz_attach_objects()
trigger_spawnflags = 0; trigger_spawnflags = 0;
trigger_radius = 3; trigger_radius = 3;
trigger_height = 15; trigger_height = 15;
self.m_claw_damage_trigger = spawn( "trigger_damage", org, trigger_spawnflags, trigger_radius, trigger_height ); self.m_claw_damage_trigger = sys::spawn( "trigger_damage", org, trigger_spawnflags, trigger_radius, trigger_height );
self.m_claw_damage_trigger.angles = ang; self.m_claw_damage_trigger.angles = ang;
self.m_claw_damage_trigger enablelinkto(); self.m_claw_damage_trigger enablesys::linkto();
self.m_claw_damage_trigger linkto( self, "tag_claw" ); self.m_claw_damage_trigger sys::linkto( self, "tag_claw" );
self thread mechz_claw_damage_trigger_thread(); self thread mechz_claw_damage_trigger_thread();
self attach( "c_zom_mech_faceplate", "J_Helmet", 0 ); self attach( "c_zom_mech_faceplate", "J_Helmet", 0 );
self.has_helmet = 1; self.has_helmet = 1;
@ -643,14 +643,14 @@ mechz_spawn()
self.zombie_init_done = 1; self.zombie_init_done = 1;
self notify( "zombie_init_done" ); self notify( "zombie_init_done" );
self.allowpain = 0; self.allowpain = 0;
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties();
self.completed_emerging_into_playable_area = 1; self.completed_emerging_into_playable_area = 1;
self notify( "completed_emerging_into_playable_area" ); self notify( "completed_emerging_into_playable_area" );
self.no_powerups = 0; self.no_powerups = 0;
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self notsolid(); self sys::notsolid();
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self );
self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); self thread maps\mp\zombies\_zm_spawner::enemy_death_detection();
@ -684,10 +684,10 @@ mechz_spawn()
if ( !isdefined( spawn_pos.angles ) ) if ( !isdefined( spawn_pos.angles ) )
spawn_pos.angles = ( 0, 0, 0 ); spawn_pos.angles = ( 0, 0, 0 );
self animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" ); self sys::animscripted( spawn_pos.origin, spawn_pos.angles, "zm_spawn" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
self solid(); self sys::solid();
self set_zombie_run_cycle( "walk" ); self set_zombie_run_cycle( "walk" );
if ( isdefined( level.mechz_find_flesh_override_func ) ) if ( isdefined( level.mechz_find_flesh_override_func ) )
@ -705,11 +705,11 @@ get_closest_mechz_spawn_pos( org )
{ {
best_dist = -1; best_dist = -1;
best_pos = undefined; best_pos = undefined;
players = get_players(); players = sys::getplayers();
for ( i = 0; i < level.zombie_mechz_locations.size; i++ ) for ( i = 0; i < level.zombie_mechz_locations.size; i++ )
{ {
dist = distancesquared( org, level.zombie_mechz_locations[i].origin ); dist = sys::distancesquared( org, level.zombie_mechz_locations[i].origin );
if ( dist < best_dist || best_dist < 0 ) if ( dist < best_dist || best_dist < 0 )
{ {
@ -732,7 +732,7 @@ get_best_mechz_spawn_pos( ignore_used_positions )
best_dist = -1; best_dist = -1;
best_pos = undefined; best_pos = undefined;
players = get_players(); players = sys::getplayers();
for ( i = 0; i < level.zombie_mechz_locations.size; i++ ) for ( i = 0; i < level.zombie_mechz_locations.size; i++ )
{ {
@ -746,7 +746,7 @@ get_best_mechz_spawn_pos( ignore_used_positions )
{ {
if ( is_player_valid( players[j], 1, 1 ) ) if ( is_player_valid( players[j], 1, 1 ) )
{ {
dist = distancesquared( level.zombie_mechz_locations[i].origin, players[j].origin ); dist = sys::distancesquared( level.zombie_mechz_locations[i].origin, players[j].origin );
if ( dist < best_dist || best_dist < 0 ) if ( dist < best_dist || best_dist < 0 )
{ {
@ -785,7 +785,7 @@ mechz_health_increases()
{ {
if ( !isdefined( level.mechz_last_spawn_round ) || level.round_number > level.mechz_last_spawn_round ) if ( !isdefined( level.mechz_last_spawn_round ) || level.round_number > level.mechz_last_spawn_round )
{ {
a_players = getplayers(); a_players = sys::getplayers();
n_player_modifier = 1; n_player_modifier = 1;
if ( a_players.size > 1 ) if ( a_players.size > 1 )
@ -868,7 +868,7 @@ mechz_death()
mechz_explode( str_tag, death_origin ) mechz_explode( str_tag, death_origin )
{ {
wait 2.0; wait 2.0;
v_origin = self gettagorigin( str_tag ); v_origin = self sys::gettagorigin( str_tag );
level notify( "mechz_exploded", v_origin ); level notify( "mechz_exploded", v_origin );
playsoundatposition( "zmb_ai_mechz_death_explode", v_origin ); playsoundatposition( "zmb_ai_mechz_death_explode", v_origin );
playfx( level._effect["mechz_death"], v_origin ); playfx( level._effect["mechz_death"], v_origin );
@ -924,7 +924,7 @@ mechz_stun( time )
while ( curr_time < time ) while ( curr_time < time )
{ {
self animscripted( self.origin, self.angles, "zm_stun" ); self sys::animscripted( self.origin, self.angles, "zm_stun" );
self maps\mp\animscripts\zm_shared::donotetracks( "stun_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "stun_anim" );
self clearanim( %root, 0 ); self clearanim( %root, 0 );
curr_time = curr_time + anim_time; curr_time = curr_time + anim_time;
@ -956,18 +956,18 @@ mechz_tank_hit_callback()
v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self );
self.origin = v_trace["position"]; self.origin = v_trace["position"];
timer = 0; timer = 0;
self animscripted( self.origin, self.angles, "zm_tank_hit_in" ); self sys::animscripted( self.origin, self.angles, "zm_tank_hit_in" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
anim_length = self getanimlengthfromasd( "zm_tank_hit_loop", 0 ); anim_length = self getanimlengthfromasd( "zm_tank_hit_loop", 0 );
while ( timer < level.mechz_tank_knockdown_time ) while ( timer < level.mechz_tank_knockdown_time )
{ {
timer = timer + anim_length; timer = timer + anim_length;
self animscripted( self.origin, self.angles, "zm_tank_hit_loop" ); self sys::animscripted( self.origin, self.angles, "zm_tank_hit_loop" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
} }
self animscripted( self.origin, self.angles, "zm_tank_hit_out" ); self sys::animscripted( self.origin, self.angles, "zm_tank_hit_out" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -976,20 +976,20 @@ mechz_tank_hit_callback()
self.not_interruptable = 0; self.not_interruptable = 0;
self.mechz_hit_by_tank = 0; self.mechz_hit_by_tank = 0;
if ( !level.vh_tank ent_flag( "tank_moving" ) && self istouching( level.vh_tank ) ) if ( !level.vh_tank ent_flag( "tank_moving" ) && self sys::istouching( level.vh_tank ) )
{ {
self notsolid(); self sys::notsolid();
self ghost(); self sys::ghost();
self.mechz_hidden = 1; self.mechz_hidden = 1;
if ( isdefined( self.m_claw ) ) if ( isdefined( self.m_claw ) )
self.m_claw ghost(); self.m_claw sys::ghost();
self.fx_field_old = self.fx_field; self.fx_field_old = self.fx_field;
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
self fx_cleanup(); self fx_cleanup();
self mechz_do_jump(); self mechz_do_jump();
self solid(); self sys::solid();
self.mechz_hidden = 0; self.mechz_hidden = 0;
} }
} }
@ -1014,18 +1014,18 @@ mechz_robot_stomp_callback()
v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self ); v_trace = physicstrace( self.origin, v_trace_end, ( -15, -15, -5 ), ( 15, 15, 5 ), self );
self.origin = v_trace["position"]; self.origin = v_trace["position"];
timer = 0; timer = 0;
self animscripted( self.origin, self.angles, "zm_robot_hit_in" ); self sys::animscripted( self.origin, self.angles, "zm_robot_hit_in" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
anim_length = self getanimlengthfromasd( "zm_robot_hit_loop", 0 ); anim_length = self getanimlengthfromasd( "zm_robot_hit_loop", 0 );
while ( timer < level.mechz_robot_knockdown_time ) while ( timer < level.mechz_robot_knockdown_time )
{ {
timer = timer + anim_length; timer = timer + anim_length;
self animscripted( self.origin, self.angles, "zm_robot_hit_loop" ); self sys::animscripted( self.origin, self.angles, "zm_robot_hit_loop" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim" );
} }
self animscripted( self.origin, self.angles, "zm_robot_hit_out" ); self sys::animscripted( self.origin, self.angles, "zm_robot_hit_out" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -1043,7 +1043,7 @@ mechz_delayed_item_delete()
mechz_get_closest_valid_player() mechz_get_closest_valid_player()
{ {
players = get_players(); players = sys::getplayers();
if ( isdefined( self.ignore_player ) ) if ( isdefined( self.ignore_player ) )
{ {
@ -1083,7 +1083,7 @@ mechz_get_closest_valid_player()
get_favorite_enemy( origin, players ) get_favorite_enemy( origin, players )
{ {
mechz_targets = getplayers(); mechz_targets = sys::getplayers();
least_hunted = undefined; least_hunted = undefined;
best_hunted_val = -1; best_hunted_val = -1;
best_dist = -1; best_dist = -1;
@ -1107,7 +1107,7 @@ get_favorite_enemy( origin, players )
continue; continue;
} }
distances[i] = distancesquared( self.origin, mechz_targets[i].origin ); distances[i] = sys::distancesquared( self.origin, mechz_targets[i].origin );
} }
found_weapon_target = 0; found_weapon_target = 0;
@ -1138,14 +1138,14 @@ get_favorite_enemy( origin, players )
if ( isdefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) ) if ( isdefined( self.favoriteenemy ) && is_player_valid( self.favoriteenemy, 1, 1 ) )
{ {
if ( distancesquared( self.origin, self.favoriteenemy.origin ) <= level.mechz_sticky_dist_sq ) if ( sys::distancesquared( self.origin, self.favoriteenemy.origin ) <= level.mechz_sticky_dist_sq )
{ {
self.favoriteenemy.hunted_by++; self.favoriteenemy.hunted_by++;
return self.favoriteenemy; return self.favoriteenemy;
} }
} }
func = getFunction( "maps/mp/zm_tomb_chamber", "is_player_in_chamber" ); func = pluto_sys::getfunction( "maps/mp/zm_tomb_chamber", "is_player_in_chamber" );
for ( i = 0; i < mechz_targets.size; i++ ) for ( i = 0; i < mechz_targets.size; i++ )
{ {
if ( isdefined( mechz_targets[i].in_giant_robot_head ) ) if ( isdefined( mechz_targets[i].in_giant_robot_head ) )
@ -1191,9 +1191,9 @@ mechz_check_in_arc( right_offset )
enemy_vec = self.favoriteenemy.origin - origin; enemy_vec = self.favoriteenemy.origin - origin;
enemy_yaw_vec = ( enemy_vec[0], enemy_vec[1], 0 ); enemy_yaw_vec = ( enemy_vec[0], enemy_vec[1], 0 );
facing_yaw_vec = ( facing_vec[0], facing_vec[1], 0 ); facing_yaw_vec = ( facing_vec[0], facing_vec[1], 0 );
enemy_yaw_vec = vectornormalize( enemy_yaw_vec ); enemy_yaw_vec = sys::vectornormalize( enemy_yaw_vec );
facing_yaw_vec = vectornormalize( facing_yaw_vec ); facing_yaw_vec = sys::vectornormalize( facing_yaw_vec );
enemy_dot = vectordot( facing_yaw_vec, enemy_yaw_vec ); enemy_dot = sys::vectordot( facing_yaw_vec, enemy_yaw_vec );
if ( enemy_dot < cos( level.mechz_aim_max_yaw ) ) if ( enemy_dot < cos( level.mechz_aim_max_yaw ) )
return false; return false;
@ -1284,7 +1284,7 @@ watch_for_player_dist()
else else
reset_dist = level.mechz_reset_dist_sq; reset_dist = level.mechz_reset_dist_sq;
if ( !isdefined( player ) || distancesquared( player.origin, self.origin ) > reset_dist ) if ( !isdefined( player ) || sys::distancesquared( player.origin, self.origin ) > reset_dist )
self.disable_complex_behaviors = 0; self.disable_complex_behaviors = 0;
wait 0.5; wait 0.5;
@ -1352,14 +1352,14 @@ mechz_find_flesh()
println( "\\n\\tMZ: No Enemy, idling\\n" ); println( "\\n\\tMZ: No Enemy, idling\\n" );
#/ #/
self.goal_pos = self.origin; self.goal_pos = self.origin;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
self.ai_state = "idle"; self.ai_state = "idle";
self setanimstatefromasd( "zm_idle" ); self sys::setanimstatefromasd( "zm_idle" );
wait 0.5; wait 0.5;
continue; continue;
} }
entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" ); entity_on_tank_func = pluto_sys::getfunction( "maps/mp/zm_tomb_tank", "entity_on_tank" );
if ( isDefined( entity_on_tank_func ) && player [[ entity_on_tank_func ]]() ) if ( isDefined( entity_on_tank_func ) && player [[ entity_on_tank_func ]]() )
{ {
if ( level.vh_tank ent_flag( "tank_moving" ) ) if ( level.vh_tank ent_flag( "tank_moving" ) )
@ -1385,7 +1385,7 @@ mechz_find_flesh()
if ( isdefined( self.jump_pos ) ) if ( isdefined( self.jump_pos ) )
{ {
self.goal_pos = self.jump_pos.origin; self.goal_pos = self.jump_pos.origin;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
} }
wait 0.5; wait 0.5;
@ -1403,7 +1403,7 @@ mechz_find_flesh()
self.ai_state = "tracking_tank"; self.ai_state = "tracking_tank";
self.goalradius = level.mechz_custom_goalradius; self.goalradius = level.mechz_custom_goalradius;
self.custom_goalradius_override = level.mechz_custom_goalradius; self.custom_goalradius_override = level.mechz_custom_goalradius;
func = getFunction( "maps/mp/zm_tomb_tank", "get_closest_mechz_tag_on_tank" ); func = pluto_sys::getfunction( "maps/mp/zm_tomb_tank", "get_closest_mechz_tag_on_tank" );
closest_tank_tag = undefined; closest_tank_tag = undefined;
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
@ -1420,16 +1420,16 @@ mechz_find_flesh()
continue; continue;
} }
closest_tank_tag_pos = level.vh_tank gettagorigin( closest_tank_tag ); closest_tank_tag_pos = level.vh_tank sys::gettagorigin( closest_tank_tag );
if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) >= level.mechz_custom_goalradius || distance2dsquared( self.origin, closest_tank_tag_pos ) >= level.mechz_custom_goalradius_sq ) if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) >= level.mechz_custom_goalradius || sys::distance2dsquared( self.origin, closest_tank_tag_pos ) >= level.mechz_custom_goalradius_sq )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Enemy on tank, setting tank pos as goal\\n" ); println( "\\n\\tMZ: Enemy on tank, setting tank pos as goal\\n" );
#/ #/
self.goal_pos = closest_tank_tag_pos; self.goal_pos = closest_tank_tag_pos;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
self waittill_any_or_timeout( 0.5, "goal", "bad_path" ); self waittill_any_or_timeout( 0.5, "goal", "bad_path" );
if ( isDefined( entity_on_tank_func ) && !player [[ entity_on_tank_func ]]() ) if ( isDefined( entity_on_tank_func ) && !player [[ entity_on_tank_func ]]() )
@ -1442,7 +1442,7 @@ mechz_find_flesh()
} }
} }
if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) < level.mechz_custom_goalradius && distance2dsquared( self.origin, closest_tank_tag_pos ) < level.mechz_custom_goalradius_sq ) if ( abs( self.origin[2] - closest_tank_tag_pos[2] ) < level.mechz_custom_goalradius && sys::distance2dsquared( self.origin, closest_tank_tag_pos ) < level.mechz_custom_goalradius_sq )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -1467,7 +1467,7 @@ mechz_find_flesh()
println( "\\n\\tMZ: Jump Requested, going to jump pos\\n" ); println( "\\n\\tMZ: Jump Requested, going to jump pos\\n" );
#/ #/
self.goal_pos = self.jump_pos.origin; self.goal_pos = self.jump_pos.origin;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
wait 0.5; wait 0.5;
continue; continue;
} }
@ -1479,11 +1479,11 @@ mechz_find_flesh()
println( "\\n\\tMZ: Sprinting\\n" ); println( "\\n\\tMZ: Sprinting\\n" );
#/ #/
self.goal_pos = player.origin; self.goal_pos = player.origin;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
wait 0.5; wait 0.5;
continue; continue;
} }
else if ( distancesquared( self.origin, player.origin ) < level.mechz_aggro_dist_sq ) else if ( sys::distancesquared( self.origin, player.origin ) < level.mechz_aggro_dist_sq )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -1521,13 +1521,13 @@ mechz_find_flesh()
damage_prone_players() damage_prone_players()
{ {
self endon( "death" ); self endon( "death" );
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) if ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player )
{ {
n_dist = distance2dsquared( player.origin, self.origin ); n_dist = sys::distance2dsquared( player.origin, self.origin );
if ( n_dist < 2025 ) if ( n_dist < 2025 )
{ {
@ -1550,7 +1550,7 @@ damage_prone_players()
melee_anim_func() melee_anim_func()
{ {
self.next_leap_time = gettime() + 1500; self.next_leap_time = sys::gettime() + 1500;
} }
mechz_launch_armor_piece() mechz_launch_armor_piece()
@ -1719,7 +1719,7 @@ mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon,
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_pain_faceplate" ); self sys::animscripted( self.origin, self.angles, "zm_pain_faceplate" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_faceplate" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_faceplate" );
} }
@ -1730,8 +1730,8 @@ mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon,
{ {
self.powerplant_covered = 0; self.powerplant_covered = 0;
self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" ); self detach( "c_zom_mech_powersupply_cap", "tag_powersupply" );
cap_model = spawn( "script_model", self gettagorigin( "tag_powersupply" ) ); cap_model = sys::spawn( "script_model", self sys::gettagorigin( "tag_powersupply" ) );
cap_model.angles = self gettagangles( "tag_powersupply" ); cap_model.angles = self sys::gettagangles( "tag_powersupply" );
cap_model setmodel( "c_zom_mech_powersupply_cap" ); cap_model setmodel( "c_zom_mech_powersupply_cap" );
cap_model physicslaunch( cap_model.origin, anglestoforward( cap_model.angles ) ); cap_model physicslaunch( cap_model.origin, anglestoforward( cap_model.angles ) );
cap_model thread mechz_delayed_item_delete(); cap_model thread mechz_delayed_item_delete();
@ -1742,7 +1742,7 @@ mechz_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon,
if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) ) if ( !( isdefined( self.not_interruptable ) && self.not_interruptable ) && !( isdefined( self.is_traversing ) && self.is_traversing ) )
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_pain_powercore" ); self sys::animscripted( self.origin, self.angles, "zm_pain_powercore" );
self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_powercore" ); self maps\mp\animscripts\zm_shared::donotetracks( "pain_anim_powercore" );
} }
} }
@ -1793,7 +1793,7 @@ mechz_set_locomotion_speed()
self endon( "death" ); self endon( "death" );
self.prev_move_speed = self.zombie_move_speed; self.prev_move_speed = self.zombie_move_speed;
entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" ); entity_on_tank_func = pluto_sys::getfunction( "maps/mp/zm_tomb_tank", "entity_on_tank" );
if ( !isdefined( self.favoriteenemy ) ) if ( !isdefined( self.favoriteenemy ) )
self.zombie_move_speed = "walk"; self.zombie_move_speed = "walk";
else if ( isdefined( self.force_run ) && self.force_run ) else if ( isdefined( self.force_run ) && self.force_run )
@ -1802,7 +1802,7 @@ mechz_set_locomotion_speed()
self.zombie_move_speed = "sprint"; self.zombie_move_speed = "sprint";
else if ( isDefined( entity_on_tank_func ) && isdefined( self.favoriteenemy ) && self.favoriteenemy [[ entity_on_tank_func ]]() && isdefined( level.vh_tank ) && level.vh_tank ent_flag( "tank_activated" ) ) else if ( isDefined( entity_on_tank_func ) && isdefined( self.favoriteenemy ) && self.favoriteenemy [[ entity_on_tank_func ]]() && isdefined( level.vh_tank ) && level.vh_tank ent_flag( "tank_activated" ) )
self.zombie_move_speed = "run"; self.zombie_move_speed = "run";
else if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) > level.mechz_dist_for_sprint ) else if ( isdefined( self.favoriteenemy ) && sys::distancesquared( self.origin, self.favoriteenemy.origin ) > level.mechz_dist_for_sprint )
self.zombie_move_speed = "run"; self.zombie_move_speed = "run";
else if ( !( isdefined( self.has_powerplant ) && self.has_powerplant ) ) else if ( !( isdefined( self.has_powerplant ) && self.has_powerplant ) )
self.zombie_move_speed = "walk"; self.zombie_move_speed = "walk";
@ -1812,12 +1812,12 @@ mechz_set_locomotion_speed()
if ( self.zombie_move_speed == "sprint" && self.prev_move_speed != "sprint" ) if ( self.zombie_move_speed == "sprint" && self.prev_move_speed != "sprint" )
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_sprint_intro" ); self sys::animscripted( self.origin, self.angles, "zm_sprint_intro" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
} }
else if ( self.zombie_move_speed != "sprint" && self.prev_move_speed == "sprint" ) else if ( self.zombie_move_speed != "sprint" && self.prev_move_speed == "sprint" )
{ {
self animscripted( self.origin, self.angles, "zm_sprint_outro" ); self sys::animscripted( self.origin, self.angles, "zm_sprint_outro" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
} }
@ -1827,7 +1827,7 @@ mechz_set_locomotion_speed()
response_to_air_raid_siren_vo() response_to_air_raid_siren_vo()
{ {
wait 3.0; wait 3.0;
a_players = getplayers(); a_players = sys::getplayers();
if ( a_players.size == 0 ) if ( a_players.size == 0 )
return; return;
@ -1877,7 +1877,7 @@ start_see_mech_zombie_vo()
ai_mechz = zombie; ai_mechz = zombie;
} }
a_players = getplayers(); a_players = sys::getplayers();
if ( a_players.size == 0 ) if ( a_players.size == 0 )
return; return;
@ -1897,7 +1897,7 @@ player_looking_at_mechz_watcher( ai_mechz )
while ( true ) while ( true )
{ {
if ( distancesquared( self.origin, ai_mechz.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, ai_mechz.origin ) < 1000000 )
{ {
if ( self is_player_looking_at( ai_mechz.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) if ( self is_player_looking_at( ai_mechz.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) )
{ {
@ -1937,14 +1937,14 @@ play_shoot_arm_hint_vo()
if ( !isdefined( self.e_grabbed ) ) if ( !isdefined( self.e_grabbed ) )
return; return;
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( player == self.e_grabbed ) if ( player == self.e_grabbed )
continue; continue;
if ( distancesquared( self.origin, player.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, player.origin ) < 1000000 )
{ {
if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) )
{ {
@ -1980,14 +1980,14 @@ mechz_hint_vo()
continue; continue;
} }
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( isdefined( self.e_grabbed ) && self.e_grabbed == player ) if ( isdefined( self.e_grabbed ) && self.e_grabbed == player )
continue; continue;
if ( distancesquared( self.origin, player.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, player.origin ) < 1000000 )
{ {
if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) )
{ {
@ -2007,14 +2007,14 @@ mechz_hint_vo()
shoot_mechz_head_vo() shoot_mechz_head_vo()
{ {
self endon( "death" ); self endon( "death" );
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( isdefined( self.e_grabbed ) && self.e_grabbed == player ) if ( isdefined( self.e_grabbed ) && self.e_grabbed == player )
continue; continue;
if ( distancesquared( self.origin, player.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, player.origin ) < 1000000 )
{ {
if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) )
{ {
@ -2030,11 +2030,11 @@ shoot_mechz_head_vo()
mechz_jump_vo() mechz_jump_vo()
{ {
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( distancesquared( self.origin, player.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, player.origin ) < 1000000 )
{ {
if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.5 ) ) if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.5 ) )
{ {
@ -2052,11 +2052,11 @@ mechz_stomped_by_giant_robot_vo()
{ {
self endon( "death" ); self endon( "death" );
wait 5.0; wait 5.0;
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( distancesquared( self.origin, player.origin ) < 1000000 ) if ( sys::distancesquared( self.origin, player.origin ) < 1000000 )
{ {
if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) ) if ( player is_player_looking_at( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), 0.75 ) )
{ {

View File

@ -25,7 +25,7 @@ mechz_in_range_for_jump()
return false; return false;
} }
dist = distancesquared( self.origin, self.jump_pos.origin ); dist = sys::distancesquared( self.origin, self.jump_pos.origin );
if ( dist <= 100 ) if ( dist <= 100 )
return true; return true;
@ -39,7 +39,7 @@ mechz_jump_think( spawn_pos )
self endon( "stop_jump_think" ); self endon( "stop_jump_think" );
self.closest_jump_point = spawn_pos; self.closest_jump_point = spawn_pos;
self.goal_pos = self.origin; self.goal_pos = self.origin;
self setgoalpos( self.goal_pos ); self sys::setgoalpos( self.goal_pos );
self thread mechz_jump_stuck_watcher(); self thread mechz_jump_stuck_watcher();
while ( true ) while ( true )
@ -114,7 +114,7 @@ watch_for_valid_melee()
{ {
self waittillmatch( "melee_anim", "end" ); self waittillmatch( "melee_anim", "end" );
if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 ) if ( isdefined( self.favoriteenemy ) && sys::distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -202,7 +202,7 @@ mechz_should_jump()
return false; return false;
} }
dist = distancesquared( self.origin, self.favoriteenemy.origin ); dist = sys::distancesquared( self.origin, self.favoriteenemy.origin );
if ( dist >= level.mechz_jump_dist_threshold ) if ( dist >= level.mechz_jump_dist_threshold )
{ {
@ -238,28 +238,28 @@ mechz_do_jump( wait_for_stationary_tank )
println( "\\nMZ: Jump setting not interruptable\\n" ); println( "\\nMZ: Jump setting not interruptable\\n" );
#/ #/
self.not_interruptable = 1; self.not_interruptable = 1;
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self thread mechz_jump_vo(); self thread mechz_jump_vo();
self animscripted( self.origin, self.angles, "zm_fly_out" ); self sys::animscripted( self.origin, self.angles, "zm_fly_out" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
self ghost(); self sys::ghost();
self.mechz_hidden = 1; self.mechz_hidden = 1;
if ( isdefined( self.m_claw ) ) if ( isdefined( self.m_claw ) )
self.m_claw ghost(); self.m_claw sys::ghost();
if ( self.fx_field ) if ( self.fx_field )
self.fx_field_old = self.fx_field; self.fx_field_old = self.fx_field;
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
self fx_cleanup(); self fx_cleanup();
self animscripted( self.origin, self.angles, "zm_fly_hover" ); self sys::animscripted( self.origin, self.angles, "zm_fly_hover" );
wait( level.mechz_jump_delay ); wait( level.mechz_jump_delay );
if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank ) if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank )
level.vh_tank ent_flag_waitopen( "tank_moving" ); level.vh_tank ent_flag_waitopen( "tank_moving" );
self notsolid(); self sys::notsolid();
closest_jump_point = get_best_mechz_spawn_pos( 1 ); closest_jump_point = get_best_mechz_spawn_pos( 1 );
if ( isdefined( closest_jump_point ) ) if ( isdefined( closest_jump_point ) )
@ -268,10 +268,10 @@ mechz_do_jump( wait_for_stationary_tank )
if ( !isdefined( self.closest_jump_point.angles ) ) if ( !isdefined( self.closest_jump_point.angles ) )
self.closest_jump_point.angles = ( 0, 0, 0 ); self.closest_jump_point.angles = ( 0, 0, 0 );
self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" ); self sys::animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" );
self solid(); self sys::solid();
self.mechz_hidden = 0; self.mechz_hidden = 0;
self show(); self sys::show();
self.fx_field = self.fx_field_old; self.fx_field = self.fx_field_old;
self.fx_field_old = undefined; self.fx_field_old = undefined;
if ( level.script == "zm_tomb" ) if ( level.script == "zm_tomb" )
@ -285,11 +285,11 @@ mechz_do_jump( wait_for_stationary_tank )
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
if ( isdefined( self.m_claw ) ) if ( isdefined( self.m_claw ) )
self.m_claw show(); self.m_claw sys::show();
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
self.not_interruptable = 0; self.not_interruptable = 0;
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\nMZ: Jump clearing not interruptable\\n" ); println( "\\nMZ: Jump clearing not interruptable\\n" );

View File

@ -28,7 +28,7 @@ mechz_claw_detach()
if ( isdefined( self.m_claw.fx_ent ) ) if ( isdefined( self.m_claw.fx_ent ) )
self.m_claw.fx_ent delete(); self.m_claw.fx_ent delete();
self.m_claw unlink(); self.m_claw sys::unlink();
self.m_claw physicslaunch( self.m_claw.origin, ( 0, 0, -1 ) ); self.m_claw physicslaunch( self.m_claw.origin, ( 0, 0, -1 ) );
self.m_claw thread mechz_delayed_item_delete(); self.m_claw thread mechz_delayed_item_delete();
self.m_claw = undefined; self.m_claw = undefined;
@ -36,7 +36,7 @@ mechz_claw_detach()
if ( isdefined( self.m_claw_damage_trigger ) ) if ( isdefined( self.m_claw_damage_trigger ) )
{ {
self.m_claw_damage_trigger unlink(); self.m_claw_damage_trigger sys::unlink();
self.m_claw_damage_trigger delete(); self.m_claw_damage_trigger delete();
self.m_claw_damage_trigger = undefined; self.m_claw_damage_trigger = undefined;
} }
@ -67,7 +67,7 @@ mechz_claw_release( bopenclaw )
trace_start = self.e_grabbed.origin + vectorscale( ( 0, 0, 1 ), 70.0 ); trace_start = self.e_grabbed.origin + vectorscale( ( 0, 0, 1 ), 70.0 );
trace_end = self.e_grabbed.origin + vectorscale( ( 0, 0, -1 ), 500.0 ); trace_end = self.e_grabbed.origin + vectorscale( ( 0, 0, -1 ), 500.0 );
drop_trace = playerphysicstrace( trace_start, trace_end ) + vectorscale( ( 0, 0, 1 ), 24.0 ); drop_trace = playerphysicstrace( trace_start, trace_end ) + vectorscale( ( 0, 0, 1 ), 24.0 );
self.e_grabbed unlink(); self.e_grabbed sys::unlink();
self.e_grabbed setorigin( drop_trace ); self.e_grabbed setorigin( drop_trace );
} }
@ -81,7 +81,7 @@ mechz_claw_release( bopenclaw )
mechz_claw_shot_pain_reaction() mechz_claw_shot_pain_reaction()
{ {
self mechz_interrupt(); self mechz_interrupt();
self animscripted( self.origin, self.angles, "zm_head_pain" ); self sys::animscripted( self.origin, self.angles, "zm_head_pain" );
self maps\mp\animscripts\zm_shared::donotetracks( "head_pain_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "head_pain_anim" );
} }
@ -110,13 +110,13 @@ mechz_claw_aim( target_pos )
self endon( "kill_claw" ); self endon( "kill_claw" );
self endon( "claw_complete" ); self endon( "claw_complete" );
aim_anim = mechz_get_aim_anim( "zm_grapple", target_pos ); aim_anim = mechz_get_aim_anim( "zm_grapple", target_pos );
self animscripted( self.origin, self.angles, "zm_grapple_aim_start" ); self sys::animscripted( self.origin, self.angles, "zm_grapple_aim_start" );
self thread mechz_claw_notetracks(); self thread mechz_claw_notetracks();
self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" );
while ( flag( "mechz_launching_claw" ) ) while ( flag( "mechz_launching_claw" ) )
{ {
self animscripted( self.origin, self.angles, aim_anim ); self sys::animscripted( self.origin, self.angles, aim_anim );
self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "grapple_anim" );
self clearanim( %root, 0.0 ); self clearanim( %root, 0.0 );
} }
@ -169,7 +169,7 @@ claw_grapple()
if ( !isdefined( self.favoriteenemy ) ) if ( !isdefined( self.favoriteenemy ) )
return; return;
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = vectortoangles( self.origin - self.favoriteenemy.origin ); v_claw_angles = vectortoangles( self.origin - self.favoriteenemy.origin );
self.fx_field = self.fx_field | 256; self.fx_field = self.fx_field | 256;
if ( level.script == "zm_tomb" ) if ( level.script == "zm_tomb" )
@ -181,11 +181,11 @@ claw_grapple()
set_clientfield_alt_allplayers( "mechz_fx", self, self.fx_field ); set_clientfield_alt_allplayers( "mechz_fx", self, self.fx_field );
} }
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
self.m_claw unlink(); self.m_claw sys::unlink();
self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); self.m_claw.fx_ent = sys::spawn( "script_model", self.m_claw sys::gettagorigin( "tag_claw" ) );
self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); self.m_claw.fx_ent.angles = self.m_claw sys::gettagangles( "tag_claw" );
self.m_claw.fx_ent setmodel( "tag_origin" ); self.m_claw.fx_ent setmodel( "tag_origin" );
self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); self.m_claw.fx_ent sys::linkto( self.m_claw, "tag_claw" );
network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" ); network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" );
v_enemy_origin = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 ); v_enemy_origin = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 );
n_dist = distance( v_claw_origin, v_enemy_origin ); n_dist = distance( v_claw_origin, v_enemy_origin );
@ -198,21 +198,21 @@ claw_grapple()
do do
{ {
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() )
continue; continue;
n_dist_sq = distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin ); n_dist_sq = sys::distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin );
if ( n_dist_sq < 2304 ) if ( n_dist_sq < 2304 )
{ {
if ( isdefined( player.hasriotshield ) && player.hasriotshield && player getcurrentweapon() == level.riotshield_name ) if ( isdefined( player.hasriotshield ) && player.hasriotshield && player getcurrentweapon() == level.riotshield_name )
{ {
shield_dmg = level.zombie_vars["riotshield_hit_points"]; shield_dmg = level.zombie_vars["riotshield_hit_points"];
func = getFunction( "maps/mp/zombies/_zm_weap_riotshield_tomb", "player_damage_shield" ); func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_riotshield_tomb", "player_damage_shield" );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
player [[ func ]]( shield_dmg - 1, 1 ); player [[ func ]]( shield_dmg - 1, 1 );
@ -235,7 +235,7 @@ claw_grapple()
{ {
self.e_grabbed set_clientfield_alt_toplayer( "mechz_grab", self.e_grabbed, 1 ); self.e_grabbed set_clientfield_alt_toplayer( "mechz_grab", self.e_grabbed, 1 );
} }
self.e_grabbed playerlinktodelta( self.m_claw, "tag_attach_player" ); self.e_grabbed playersys::linktodelta( self.m_claw, "tag_attach_player" );
self.e_grabbed setplayerangles( vectortoangles( self.origin - self.e_grabbed.origin ) ); self.e_grabbed setplayerangles( vectortoangles( self.origin - self.e_grabbed.origin ) );
self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" ); self.e_grabbed playsound( "zmb_ai_mechz_claw_grab" );
self.e_grabbed setstance( "stand" ); self.e_grabbed setstance( "stand" );
@ -264,14 +264,14 @@ claw_grapple()
if ( !isalive( ai_zombie ) || isdefined( ai_zombie.is_giant_robot ) && ai_zombie.is_giant_robot || isdefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz ) if ( !isalive( ai_zombie ) || isdefined( ai_zombie.is_giant_robot ) && ai_zombie.is_giant_robot || isdefined( ai_zombie.is_mechz ) && ai_zombie.is_mechz )
continue; continue;
n_dist_sq = distancesquared( ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin ); n_dist_sq = sys::distancesquared( ai_zombie.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.m_claw.origin );
if ( n_dist_sq < 2304 ) if ( n_dist_sq < 2304 )
{ {
self.e_grabbed = ai_zombie; self.e_grabbed = ai_zombie;
self.e_grabbed linkto( self.m_claw, "tag_attach_player", ( 0, 0, 0 ) ); self.e_grabbed sys::linkto( self.m_claw, "tag_attach_player", ( 0, 0, 0 ) );
self.e_grabbed.mechz_grabbed_by = self; self.e_grabbed.mechz_grabbed_by = self;
self.e_grabbed animcustom( ::zombie_grabbed_by_mechz_claw ); self.e_grabbed sys::animcustom( ::zombie_grabbed_by_mechz_claw );
break; break;
} }
} }
@ -287,13 +287,13 @@ claw_grapple()
n_time = n_dist / 1000; n_time = n_dist / 1000;
self mechz_claw_explosive_watcher(); self mechz_claw_explosive_watcher();
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self sys::gettagangles( "tag_claw" );
self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) ); self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) );
self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 ); self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 );
self.m_claw waittill( "movedone" ); self.m_claw waittill( "movedone" );
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self sys::gettagangles( "tag_claw" );
self.m_claw playsound( "zmb_ai_mechz_claw_back" ); self.m_claw playsound( "zmb_ai_mechz_claw_back" );
self.m_claw stoploopsound( 1 ); self.m_claw stoploopsound( 1 );
@ -303,7 +303,7 @@ claw_grapple()
self.m_claw.origin = v_claw_origin; self.m_claw.origin = v_claw_origin;
self.m_claw.angles = v_claw_angles; self.m_claw.angles = v_claw_angles;
self.m_claw clearanim( %root, 0.2 ); self.m_claw clearanim( %root, 0.2 );
self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); self.m_claw sys::linkto( self, "tag_claw", ( 0, 0, 0 ) );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 );
self.m_claw.fx_ent delete(); self.m_claw.fx_ent delete();
self.m_claw.fx_ent = undefined; self.m_claw.fx_ent = undefined;
@ -329,7 +329,7 @@ claw_grapple()
self.e_grabbed thread mechz_zombie_flamethrower_gib( self ); self.e_grabbed thread mechz_zombie_flamethrower_gib( self );
self thread check_for_claw_damaged( self.e_grabbed ); self thread check_for_claw_damaged( self.e_grabbed );
self animscripted( self.origin, self.angles, "zm_flamethrower_claw_victim" ); self sys::animscripted( self.origin, self.angles, "zm_flamethrower_claw_victim" );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
@ -339,7 +339,7 @@ claw_grapple()
zombie_grabbed_by_mechz_claw() zombie_grabbed_by_mechz_claw()
{ {
self endon( "death" ); self endon( "death" );
self setanimstatefromasd( "zm_grabbed_by_mech" ); self sys::setanimstatefromasd( "zm_grabbed_by_mech" );
self.mechz_grabbed_by waittill_any( "death", "claw_complete", "kill_claw" ); self.mechz_grabbed_by waittill_any( "death", "claw_complete", "kill_claw" );
} }
@ -397,14 +397,14 @@ check_for_players_mid_grapple()
while ( true ) while ( true )
{ {
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() ) if ( !is_player_valid( player, 1, 1 ) || !player player_can_be_grabbed() )
continue; continue;
n_dist_sq = distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.origin ); n_dist_sq = sys::distancesquared( player.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.origin );
if ( n_dist_sq < 2304 ) if ( n_dist_sq < 2304 )
{ {
@ -436,7 +436,7 @@ zombie_gib_all()
a_gib_ref = []; a_gib_ref = [];
a_gib_ref[0] = level._zombie_gib_piece_index_all; a_gib_ref[0] = level._zombie_gib_piece_index_all;
self gib( "normal", a_gib_ref ); self gib( "normal", a_gib_ref );
self ghost(); self sys::ghost();
wait 0.4; wait 0.4;
if ( isdefined( self ) ) if ( isdefined( self ) )
@ -489,7 +489,7 @@ should_do_claw_attack()
return false; return false;
} }
if ( isdefined( self.last_claw_time ) && gettime() - self.last_claw_time < level.mechz_claw_cooldown_time ) if ( isdefined( self.last_claw_time ) && sys::gettime() - self.last_claw_time < level.mechz_claw_cooldown_time )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -507,7 +507,7 @@ should_do_claw_attack()
return false; return false;
} }
n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); n_dist_sq = sys::distancesquared( self.origin, self.favoriteenemy.origin );
if ( n_dist_sq < 90000 || n_dist_sq > 1000000 ) if ( n_dist_sq < 90000 || n_dist_sq > 1000000 )
{ {
@ -565,13 +565,13 @@ mechz_do_claw_grab()
#/ #/
assert( isdefined( self.favoriteenemy ) ); assert( isdefined( self.favoriteenemy ) );
self thread mechz_kill_claw_watcher(); self thread mechz_kill_claw_watcher();
self.last_claw_time = gettime(); self.last_claw_time = sys::gettime();
target_pos = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 30.0 ); target_pos = self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 30.0 );
self thread mechz_stop_basic_find_flesh(); self thread mechz_stop_basic_find_flesh();
self.ai_state = "grapple_attempt"; self.ai_state = "grapple_attempt";
flag_set( "mechz_launching_claw" ); flag_set( "mechz_launching_claw" );
self thread mechz_claw_aim( target_pos ); self thread mechz_claw_aim( target_pos );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self waittillmatch( "grapple_anim", "muzzleflash" ); self waittillmatch( "grapple_anim", "muzzleflash" );
self claw_grapple(); self claw_grapple();
self mechz_claw_cleanup(); self mechz_claw_cleanup();
@ -617,21 +617,21 @@ mechz_claw_cleanup()
{ {
if ( !self.m_claw islinkedto( self ) ) if ( !self.m_claw islinkedto( self ) )
{ {
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self sys::gettagangles( "tag_claw" );
n_dist = distance( self.m_claw.origin, v_claw_origin ); n_dist = distance( self.m_claw.origin, v_claw_origin );
n_time = n_dist / 1000; n_time = n_dist / 1000;
self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) ); self.m_claw moveto( v_claw_origin, max( 0.05, n_time ) );
self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 ); self.m_claw playloopsound( "zmb_ai_mechz_claw_loop_in", 0.1 );
self.m_claw waittill( "movedone" ); self.m_claw waittill( "movedone" );
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self sys::gettagangles( "tag_claw" );
self.m_claw playsound( "zmb_ai_mechz_claw_back" ); self.m_claw playsound( "zmb_ai_mechz_claw_back" );
self.m_claw stoploopsound( 1 ); self.m_claw stoploopsound( 1 );
self.m_claw.origin = v_claw_origin; self.m_claw.origin = v_claw_origin;
self.m_claw.angles = v_claw_angles; self.m_claw.angles = v_claw_angles;
self.m_claw clearanim( %root, 0.2 ); self.m_claw clearanim( %root, 0.2 );
self.m_claw linkto( self, "tag_claw", ( 0, 0, 0 ) ); self.m_claw sys::linkto( self, "tag_claw", ( 0, 0, 0 ) );
} }
self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 );

View File

@ -19,7 +19,7 @@ mechz_debug()
{ {
if ( debug_level == 1 ) if ( debug_level == 1 )
{ {
mechz_array = getentarray( "mechz_zombie_ai" ); mechz_array = sys::getentarray( "mechz_zombie_ai" );
for ( i = 0; i < mechz_array.size; i++ ) for ( i = 0; i < mechz_array.size; i++ )
{ {
@ -127,7 +127,7 @@ watch_devgui_mechz()
mechz mechz_stop_basic_find_flesh(); mechz mechz_stop_basic_find_flesh();
mechz.ai_state = "devgui"; mechz.ai_state = "devgui";
mechz.goal_pos = ( 446, -4318, 200 ); mechz.goal_pos = ( 446, -4318, 200 );
mechz setgoalpos( mechz.goal_pos ); mechz sys::setgoalpos( mechz.goal_pos );
} }
if ( getdvar( #"_id_6CF3EB40" ) == "on" ) if ( getdvar( #"_id_6CF3EB40" ) == "on" )
@ -149,7 +149,7 @@ watch_devgui_mechz()
mechz mechz_stop_basic_find_flesh(); mechz mechz_stop_basic_find_flesh();
mechz.ai_state = "devgui"; mechz.ai_state = "devgui";
mechz.goal_pos = ( 1657, -336, 92 ); mechz.goal_pos = ( 1657, -336, 92 );
mechz setgoalpos( mechz.goal_pos ); mechz sys::setgoalpos( mechz.goal_pos );
} }
if ( getdvar( #"_id_0DE1409A" ) == "on" ) if ( getdvar( #"_id_0DE1409A" ) == "on" )
@ -233,18 +233,18 @@ setup_force_behavior()
/# /#
if ( !isdefined( level.test_align_struct ) ) if ( !isdefined( level.test_align_struct ) )
{ {
player = get_players()[0]; player = sys::getplayers()[0];
pos = player.origin; pos = player.origin;
offset = anglestoforward( player.angles ); offset = anglestoforward( player.angles );
offset = vectornormalize( offset ); offset = sys::vectornormalize( offset );
level.test_align_struct = spawn( "script_model", pos + 300 * offset ); level.test_align_struct = sys::spawn( "script_model", pos + 300 * offset );
level.test_align_struct setmodel( "tag_origin" ); level.test_align_struct setmodel( "tag_origin" );
level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
level.test_align_struct thread align_test_struct(); level.test_align_struct thread align_test_struct();
level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
} }
self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); self sys::linkto( level.test_align_struct, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
self.fx_field = self.fx_field & ~64; self.fx_field = self.fx_field & ~64;
self.fx_field = self.fx_field & ~128; self.fx_field = self.fx_field & ~128;
self.fx_field = self.fx_field & ~256; self.fx_field = self.fx_field & ~256;
@ -258,7 +258,7 @@ align_test_struct()
{ {
pos = level.players[0].origin; pos = level.players[0].origin;
offset = anglestoforward( level.players[0].angles ); offset = anglestoforward( level.players[0].angles );
offset = vectornormalize( offset ); offset = sys::vectornormalize( offset );
dist = getdvarint( #"_id_6DCD047E" ); dist = getdvarint( #"_id_6DCD047E" );
level.test_align_struct.origin = pos + dist * offset; level.test_align_struct.origin = pos + dist * offset;
level.test_align_struct.angles = get_behavior_orient(); level.test_align_struct.angles = get_behavior_orient();
@ -270,7 +270,7 @@ align_test_struct()
scripted_behavior( anim_scripted_name, notify_name ) scripted_behavior( anim_scripted_name, notify_name )
{ {
/# /#
self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name ); self sys::animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name );
self maps\mp\animscripts\zm_shared::donotetracks( notify_name ); self maps\mp\animscripts\zm_shared::donotetracks( notify_name );
#/ #/
} }
@ -283,7 +283,7 @@ mechz_force_jump_in()
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self sys::animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_spawn", "jump_anim" ); self scripted_behavior( "zm_spawn", "jump_anim" );
} }
@ -298,13 +298,13 @@ mechz_force_jump_out()
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self sys::animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_fly_out", "jump_anim" ); self scripted_behavior( "zm_fly_out", "jump_anim" );
self ghost(); self sys::ghost();
self animscripted( self.origin, self.angles, "zm_fly_hover" ); self sys::animscripted( self.origin, self.angles, "zm_fly_hover" );
wait( level.mechz_jump_delay ); wait( level.mechz_jump_delay );
self show(); self sys::show();
self scripted_behavior( "zm_fly_in", "jump_anim" ); self scripted_behavior( "zm_fly_in", "jump_anim" );
} }
#/ #/
@ -319,7 +319,7 @@ mechz_force_flamethrower()
self setup_force_behavior(); self setup_force_behavior();
curr_aim_anim = 1; curr_aim_anim = 1;
curr_timer = 0; curr_timer = 0;
self animscripted( self.origin, self.angles, "zm_idle" ); self sys::animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" ); self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" );
@ -357,21 +357,21 @@ fake_launch_claw()
{ {
/# /#
self.launching_claw = 1; self.launching_claw = 1;
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = vectortoangles( self.origin - level.players[0].origin ); v_claw_angles = vectortoangles( self.origin - level.players[0].origin );
self.fx_field = self.fx_field | 256; self.fx_field = self.fx_field | 256;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
self.m_claw unlink(); self.m_claw sys::unlink();
self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); self.m_claw.fx_ent = sys::spawn( "script_model", self.m_claw sys::gettagorigin( "tag_claw" ) );
self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); self.m_claw.fx_ent.angles = self.m_claw sys::gettagangles( "tag_claw" );
self.m_claw.fx_ent setmodel( "tag_origin" ); self.m_claw.fx_ent setmodel( "tag_origin" );
self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); self.m_claw.fx_ent sys::linkto( self.m_claw, "tag_claw" );
network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" ); network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" );
self.m_claw clearanim( %root, 0.2 ); self.m_claw clearanim( %root, 0.2 );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 );
offset = anglestoforward( self.angles ); offset = anglestoforward( self.angles );
offset = vectornormalize( offset ); offset = sys::vectornormalize( offset );
target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 ); target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 );
n_time = 0.0833333; n_time = 0.0833333;
self.m_claw moveto( target_pos, n_time ); self.m_claw moveto( target_pos, n_time );
@ -384,11 +384,11 @@ fake_launch_claw()
self.m_claw.fx_ent delete(); self.m_claw.fx_ent delete();
self.fx_field = self.fx_field & ~256; self.fx_field = self.fx_field & ~256;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self sys::gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self sys::gettagangles( "tag_claw" );
self.m_claw.origin = v_claw_origin; self.m_claw.origin = v_claw_origin;
self.m_claw.angles = v_claw_angles; self.m_claw.angles = v_claw_angles;
self.m_claw linkto( self, "tag_claw" ); self.m_claw sys::linkto( self, "tag_claw" );
self.launching_claw = 0; self.launching_claw = 0;
#/ #/
} }
@ -401,7 +401,7 @@ mechz_force_claw_attack()
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self sys::animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" ); self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" );
self thread fake_launch_claw(); self thread fake_launch_claw();
@ -495,7 +495,7 @@ mechz_force_melee()
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self sys::animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_melee_stand", "melee_anim" ); self scripted_behavior( "zm_melee_stand", "melee_anim" );
} }

View File

@ -21,11 +21,11 @@ init_flamethrower_triggers()
return; return;
} }
flag_wait( "initial_players_connected" ); flag_wait( "initial_players_connected" );
level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" ); level.flamethrower_trigger_array = sys::getentarray( "flamethrower_trigger", "script_noteworthy" );
assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 ); assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 );
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ ) for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
level.flamethrower_trigger_array[i] enablelinkto(); level.flamethrower_trigger_array[i] enablesys::linkto();
} }
mechz_flamethrower_initial_setup() mechz_flamethrower_initial_setup()
@ -47,9 +47,9 @@ mechz_flamethrower_initial_setup()
if ( getDvar( "mapname" ) == "zm_tomb" ) if ( getDvar( "mapname" ) == "zm_tomb" )
{ {
self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); self.flamethrower_trigger.origin = self sys::gettagorigin( "tag_flamethrower_FX" );
self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); self.flamethrower_trigger.angles = self sys::gettagangles( "tag_flamethrower_FX" );
self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); self.flamethrower_trigger sys::linkto( self, "tag_flamethrower_FX" );
} }
self thread mechz_watch_for_flamethrower_damage(); self thread mechz_watch_for_flamethrower_damage();
@ -80,7 +80,7 @@ release_flamethrower_trigger()
return; return;
self.flamethrower_trigger.in_use = 0; self.flamethrower_trigger.in_use = 0;
self.flamethrower_trigger unlink(); self.flamethrower_trigger sys::unlink();
self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position; self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position;
self.flamethrower_linked = 0; self.flamethrower_linked = 0;
self.flamethrower_trigger = undefined; self.flamethrower_trigger = undefined;
@ -93,7 +93,7 @@ mechz_flamethrower_dist_watcher()
while ( true ) while ( true )
{ {
if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 ) if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || sys::distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 )
{ {
self notify( "stop_ft" ); self notify( "stop_ft" );
return; return;
@ -139,7 +139,7 @@ mechz_play_flamethrower_aim()
if ( isdefined( self.curr_aim_anim ) ) if ( isdefined( self.curr_aim_anim ) )
{ {
self stopanimscripted(); self stopanimscripted();
self animscripted( self.origin, self.angles, self.curr_aim_anim ); self sys::animscripted( self.origin, self.angles, self.curr_aim_anim );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
else else
@ -170,13 +170,13 @@ mechz_flamethrower_tank_sweep()
{ {
self stopanimscripted(); self stopanimscripted();
self.angles = vectortoangles( level.vh_tank.origin - self.origin ); self.angles = vectortoangles( level.vh_tank.origin - self.origin );
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" ); self sys::animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
if ( level.vh_tank ent_flag( "tank_moving" ) ) if ( level.vh_tank ent_flag( "tank_moving" ) )
break; break;
func = getFunction( "maps/mp/zm_tomb_tank", "get_players_on_tank" ); func = pluto_sys::getfunction( "maps/mp/zm_tomb_tank", "get_players_on_tank" );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
a_players_on_tank = [[ func ]]( 1 ); a_players_on_tank = [[ func ]]( 1 );
@ -207,9 +207,9 @@ hit_by_flamethrower( mechz )
{ {
dist = distance(self.origin, mechz.origin); dist = distance(self.origin, mechz.origin);
dirTo = self.origin - mechz.flamethrower_fx.origin; dirTo = self.origin - mechz.flamethrower_fx.origin;
dirTo = vectornormalize(dirTo); dirTo = sys::vectornormalize(dirTo);
mechDir = anglestoforward(mechz.flamethrower_fx.angles + (180,0,0)); mechDir = anglestoforward(mechz.flamethrower_fx.angles + (180,0,0));
dot = vectordot(dirTo, mechDir); dot = sys::vectordot(dirTo, mechDir);
if ( isDefined( self.is_zombie ) && self.is_zombie ) if ( isDefined( self.is_zombie ) && self.is_zombie )
{ {
@ -228,17 +228,17 @@ hit_by_flamethrower( mechz )
mech_flamethrower_fx() mech_flamethrower_fx()
{ {
self.flamethrower_fx = spawn("script_model", self GetTagOrigin("tag_flamethrower_FX")); self.flamethrower_fx = sys::spawn("script_model", self GetTagOrigin("tag_flamethrower_FX"));
self.flamethrower_fx setmodel("tag_origin"); self.flamethrower_fx setmodel("tag_origin");
self.flamethrower_fx.angles = self GetTagAngles("tag_flamethrower_FX"); self.flamethrower_fx.angles = self GetTagAngles("tag_flamethrower_FX");
self.flamethrower_fx linkto(self, "tag_flamethrower_FX"); self.flamethrower_fx sys::linkto(self, "tag_flamethrower_FX");
ft = self.flamethrower_fx; ft = self.flamethrower_fx;
self waittill( "death" ); self waittill( "death" );
if ( isDefined( ft ) ) if ( isDefined( ft ) )
{ {
ft unlink(); ft sys::unlink();
ft delete(); ft delete();
} }
} }
@ -252,7 +252,7 @@ mechz_watch_for_flamethrower_damage()
self thread mech_flamethrower_fx(); self thread mech_flamethrower_fx();
} }
entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" ); entity_on_tank_func = pluto_sys::getfunction( "maps/mp/zm_tomb_tank", "entity_on_tank" );
while ( true ) while ( true )
{ {
@ -263,14 +263,14 @@ mechz_watch_for_flamethrower_damage()
while ( isdefined( self.firing ) && self.firing ) while ( isdefined( self.firing ) && self.firing )
{ {
do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" ); do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" );
players = getplayers(); players = sys::getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) ) if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) )
{ {
if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && players[i] [[ entity_on_tank_func ]]() if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && players[i] [[ entity_on_tank_func ]]()
|| isDefined( self.flamethrower_trigger ) && players[i] istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && players[ i ] hit_by_flamethrower( self ) ) || isDefined( self.flamethrower_trigger ) && players[i] sys::istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && players[ i ] hit_by_flamethrower( self ) )
{ {
players[i] thread player_flame_damage(); players[i] thread player_flame_damage();
} }
@ -288,7 +288,7 @@ mechz_watch_for_flamethrower_damage()
continue; continue;
if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && zombies[i] [[ entity_on_tank_func ]]() if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && zombies[i] [[ entity_on_tank_func ]]()
|| isDefined( self.flamethrower_trigger ) && zombies[i] istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && zombies[ i ] hit_by_flamethrower( self ) ) || isDefined( self.flamethrower_trigger ) && zombies[i] sys::istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && zombies[ i ] hit_by_flamethrower( self ) )
{ {
zombies[i].on_fire = 1; zombies[i].on_fire = 1;
zombies[i] promote_to_explosive(); zombies[i] promote_to_explosive();
@ -398,7 +398,7 @@ zombie_burning_dmg()
while ( true ) while ( true )
{ {
eyeorigin = self geteye(); eyeorigin = self geteye();
players = get_players(); players = sys::getplayers();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
@ -406,7 +406,7 @@ zombie_burning_dmg()
{ {
playereye = players[i] geteye(); playereye = players[i] geteye();
if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius ) if ( sys::distancesquared( eyeorigin, playereye ) < damageradius * damageradius )
{ {
players[i] dodamage( damage, self.origin, self ); players[i] dodamage( damage, self.origin, self );
players[i] notify( "burned" ); players[i] notify( "burned" );
@ -444,13 +444,13 @@ explode_on_death()
if ( is_mature() ) if ( is_mature() )
{ {
if ( isdefined( level._effect["zomb_gib"] ) ) if ( isdefined( level._effect["zomb_gib"] ) )
playfx( level._effect["zomb_gib"], self gettagorigin( tag ) ); playfx( level._effect["zomb_gib"], self sys::gettagorigin( tag ) );
} }
else if ( isdefined( level._effect["spawn_cloud"] ) ) else if ( isdefined( level._effect["spawn_cloud"] ) )
playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) ); playfx( level._effect["spawn_cloud"], self sys::gettagorigin( tag ) );
self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" );
self ghost(); self sys::ghost();
if ( isdefined( self.isdog ) && self.isdog ) if ( isdefined( self.isdog ) && self.isdog )
self hide(); self hide();
@ -505,7 +505,7 @@ should_do_flamethrower_attack()
return false; return false;
} }
if ( isdefined( self.last_flamethrower_time ) && gettime() - self.last_flamethrower_time < level.mechz_flamethrower_cooldown_time ) if ( isdefined( self.last_flamethrower_time ) && sys::gettime() - self.last_flamethrower_time < level.mechz_flamethrower_cooldown_time )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
@ -514,7 +514,7 @@ should_do_flamethrower_attack()
return false; return false;
} }
n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); n_dist_sq = sys::distancesquared( self.origin, self.favoriteenemy.origin );
if ( n_dist_sq < 10000 || n_dist_sq > 50000 ) if ( n_dist_sq < 10000 || n_dist_sq > 50000 )
{ {
@ -551,20 +551,20 @@ mechz_do_flamethrower_attack( tank_sweep )
#/ #/
self thread mechz_stop_basic_find_flesh(); self thread mechz_stop_basic_find_flesh();
self.ai_state = "flamethrower_attack"; self.ai_state = "flamethrower_attack";
self setgoalpos( self.origin ); self sys::setgoalpos( self.origin );
self clearanim( %root, 0.2 ); self clearanim( %root, 0.2 );
self.last_flamethrower_time = gettime(); self.last_flamethrower_time = sys::gettime();
self thread mechz_kill_flamethrower_watcher(); self thread mechz_kill_flamethrower_watcher();
if ( !isdefined( self.flamethrower_trigger ) && !isDefined( self.flamethrower_fx ) ) if ( !isdefined( self.flamethrower_trigger ) && !isDefined( self.flamethrower_fx ) )
self mechz_flamethrower_initial_setup(); self mechz_flamethrower_initial_setup();
n_nearby_enemies = 0; n_nearby_enemies = 0;
a_players = getplayers(); a_players = sys::getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 ) if ( sys::distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 )
n_nearby_enemies++; n_nearby_enemies++;
} }
@ -576,17 +576,17 @@ mechz_do_flamethrower_attack( tank_sweep )
else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 ) else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 )
{ {
self.doing_ft_sweep = 1; self.doing_ft_sweep = 1;
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" ); self sys::animscripted( self.origin, self.angles, "zm_flamethrower_sweep" );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
else else
{ {
self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" ); self sys::animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" );
self thread mechz_flamethrower_aim(); self thread mechz_flamethrower_aim();
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
self orientmode( "face default" ); self sys::orientmode( "face default" );
if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep ) if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep )
self.doing_ft_sweep = 0; self.doing_ft_sweep = 0;

View File

@ -20,12 +20,12 @@ precache()
precachemodel( "fx_axis_createfx" ); precachemodel( "fx_axis_createfx" );
include_weapon( "screecher_arms_zm", 0 ); include_weapon( "screecher_arms_zm", 0 );
precachestring( &"ZOMBIE_SCREECHER_ATTACH_FIRST" ); precachestring( &"ZOMBIE_SCREECHER_ATTACH_FIRST" );
level._effect["screecher_spawn_a"] = loadfx( "maps/zombie/fx_zmb_screech_hand_dirt_burst" ); level._effect["screecher_spawn_a"] = sys::loadfx( "maps/zombie/fx_zmb_screech_hand_dirt_burst" );
level._effect["screecher_spawn_b"] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_billowing" ); level._effect["screecher_spawn_b"] = sys::loadfx( "maps/zombie/fx_zmb_screech_body_dirt_billowing" );
level._effect["screecher_spawn_c"] = loadfx( "maps/zombie/fx_zmb_screech_body_dirt_falling" ); level._effect["screecher_spawn_c"] = sys::loadfx( "maps/zombie/fx_zmb_screech_body_dirt_falling" );
level._effect["screecher_hole"] = loadfx( "maps/zombie/fx_zmb_screecher_hole" ); level._effect["screecher_hole"] = sys::loadfx( "maps/zombie/fx_zmb_screecher_hole" );
level._effect["screecher_vortex"] = loadfx( "maps/zombie/fx_zmb_screecher_vortex" ); level._effect["screecher_vortex"] = sys::loadfx( "maps/zombie/fx_zmb_screecher_vortex" );
level._effect["screecher_death"] = loadfx( "maps/zombie/fx_zmb_screech_death_ash" ); level._effect["screecher_death"] = sys::loadfx( "maps/zombie/fx_zmb_screech_death_ash" );
} }
register_clientfields() register_clientfields()
@ -42,7 +42,7 @@ main()
init() init()
{ {
level.screecher_spawners = getentarray( "screecher_zombie_spawner", "script_noteworthy" ); level.screecher_spawners = sys::getentarray( "screecher_zombie_spawner", "script_noteworthy" );
array_thread( level.screecher_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_screecher::screecher_prespawn ); array_thread( level.screecher_spawners, ::add_spawn_function, maps\mp\zombies\_zm_ai_screecher::screecher_prespawn );
level.zombie_ai_limit_screecher = 2; level.zombie_ai_limit_screecher = 2;
level.zombie_screecher_count = 0; level.zombie_screecher_count = 0;
@ -103,7 +103,7 @@ screecher_spawning_logic()
while ( valid_players_in_screecher_zone <= 0 ) while ( valid_players_in_screecher_zone <= 0 )
{ {
players = getplayers(); players = sys::getplayers();
valid_players_in_screecher_zone = 0; valid_players_in_screecher_zone = 0;
for ( p = 0; p < players.size; p++ ) for ( p = 0; p < players.size; p++ )
@ -148,14 +148,14 @@ screecher_spawning_logic()
if ( isdefined( spawn_point ) ) if ( isdefined( spawn_point ) )
playsoundatposition( "zmb_vocals_screecher_spawn", spawn_point.origin ); playsoundatposition( "zmb_vocals_screecher_spawn", spawn_point.origin );
delay_time = gettime() + 5000; delay_time = sys::gettime() + 5000;
now_zone = getent( "screecher_spawn_now", "targetname" ); now_zone = sys::getent( "screecher_spawn_now", "targetname" );
while ( gettime() < delay_time ) while ( sys::gettime() < delay_time )
{ {
in_zone = 0; in_zone = 0;
if ( valid_players[0] istouching( now_zone ) ) if ( valid_players[0] sys::istouching( now_zone ) )
{ {
/# /#
screecher_print( "in now zone" ); screecher_print( "in now zone" );
@ -258,7 +258,7 @@ player_in_screecher_zone( player )
screecher_should_runaway( player ) screecher_should_runaway( player )
{ {
players = get_players(); players = sys::getplayers();
if ( players.size == 1 ) if ( players.size == 1 )
{ {
@ -281,7 +281,7 @@ screecher_should_runaway( player )
screecher_get_closest_valid_player( origin, ignore_player ) screecher_get_closest_valid_player( origin, ignore_player )
{ {
valid_player_found = 0; valid_player_found = 0;
players = get_players(); players = sys::getplayers();
if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun ) if ( isdefined( level._zombie_using_humangun ) && level._zombie_using_humangun )
players = arraycombine( players, level._zombie_human_array, 0, 0 ); players = arraycombine( players, level._zombie_human_array, 0, 0 );
@ -325,12 +325,12 @@ zombie_pathing_home()
self endon( "death" ); self endon( "death" );
self endon( "zombie_acquire_enemy" ); self endon( "zombie_acquire_enemy" );
level endon( "intermission" ); level endon( "intermission" );
self setgoalpos( self.startinglocation ); self sys::setgoalpos( self.startinglocation );
self waittill( "goal" ); self waittill( "goal" );
playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) ); playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) );
self.no_powerups = 1; self.no_powerups = 1;
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self animscripted( self.origin, self.angles, "zm_burrow" ); self sys::animscripted( self.origin, self.angles, "zm_burrow" );
self playsound( "zmb_screecher_dig" ); self playsound( "zmb_screecher_dig" );
maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" );
self delete(); self delete();
@ -361,9 +361,9 @@ screecher_find_flesh()
else else
self thread screecher_runaway(); self thread screecher_runaway();
self.zombie_path_timer = gettime() + randomfloatrange( 1, 3 ) * 1000; self.zombie_path_timer = sys::gettime() + randomfloatrange( 1, 3 ) * 1000;
while ( gettime() < self.zombie_path_timer ) while ( sys::gettime() < self.zombie_path_timer )
wait 0.1; wait 0.1;
self notify( "path_timer_done" ); self notify( "path_timer_done" );
@ -408,12 +408,12 @@ screecher_prespawn()
self.zombie_init_done = 1; self.zombie_init_done = 1;
self notify( "zombie_init_done" ); self notify( "zombie_init_done" );
self.allowpain = 0; self.allowpain = 0;
self animmode( "normal" ); self sys::animmode( "normal" );
self orientmode( "face enemy" ); self sys::orientmode( "face enemy" );
self.forcemovementscriptstate = 0; self.forcemovementscriptstate = 0;
self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties(); self maps\mp\zombies\_zm_spawner::zombie_setup_attack_properties();
self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area();
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self.startinglocation = self.origin; self.startinglocation = self.origin;
self playsound( "zmb_vocals_screecher_spawn" ); self playsound( "zmb_vocals_screecher_spawn" );
self thread play_screecher_fx(); self thread play_screecher_fx();
@ -421,7 +421,7 @@ screecher_prespawn()
self thread screecher_rise(); self thread screecher_rise();
self thread screecher_cleanup(); self thread screecher_cleanup();
self thread screecher_distance_tracking(); self thread screecher_distance_tracking();
self.anchor = spawn( "script_origin", self.origin ); self.anchor = sys::spawn( "script_origin", self.origin );
self.attack_time = 0; self.attack_time = 0;
self.attack_delay = 1000; self.attack_delay = 1000;
self.attack_delay_base = 1000; self.attack_delay_base = 1000;
@ -469,8 +469,8 @@ play_screecher_breathing_audio()
if ( !isdefined( self.loopsoundent ) ) if ( !isdefined( self.loopsoundent ) )
{ {
self.loopsoundent = spawn( "script_origin", self.origin ); self.loopsoundent = sys::spawn( "script_origin", self.origin );
self.loopsoundent linkto( self, "tag_origin" ); self.loopsoundent sys::linkto( self, "tag_origin" );
} }
self.loopsoundent playloopsound( "zmb_vocals_screecher_breath" ); self.loopsoundent playloopsound( "zmb_vocals_screecher_breath" );
@ -479,10 +479,10 @@ play_screecher_breathing_audio()
screecher_rise() screecher_rise()
{ {
self endon( "death" ); self endon( "death" );
self animscripted( self.origin, self.angles, "zm_rise" ); self sys::animscripted( self.origin, self.angles, "zm_rise" );
maps\mp\animscripts\zm_shared::donotetracks( "rise_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "rise_anim" );
self notify( "risen" ); self notify( "risen" );
self setfreecameralockonallowed( 1 ); self sys::setfreecameralockonallowed( 1 );
self.startinglocation = self.origin; self.startinglocation = self.origin;
self thread screecher_zombie_think(); self thread screecher_zombie_think();
self thread play_screecher_breathing_audio(); self thread play_screecher_breathing_audio();
@ -499,7 +499,7 @@ screecher_zombie_think()
height_tolerance = 32; height_tolerance = 32;
self.state = "chase_init"; self.state = "chase_init";
self.isattacking = 0; self.isattacking = 0;
self.nextspecial = gettime(); self.nextspecial = sys::gettime();
for (;;) for (;;)
{ {
@ -532,7 +532,7 @@ screecher_chase_update()
if ( isdefined( player ) ) if ( isdefined( player ) )
{ {
dist = distance2dsquared( self.origin, player.origin ); dist = sys::distance2dsquared( self.origin, player.origin );
if ( dist < 57600 ) if ( dist < 57600 )
{ {
@ -560,7 +560,7 @@ screecher_attack()
self notify( "stop_find_flesh" ); self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" ); self notify( "zombie_acquire_enemy" );
self animmode( "nogravity" ); self sys::animmode( "nogravity" );
self playsound( "zmb_vocals_screecher_jump" ); self playsound( "zmb_vocals_screecher_jump" );
if ( isdefined( self.loopsoundent ) ) if ( isdefined( self.loopsoundent ) )
@ -569,19 +569,19 @@ screecher_attack()
self.loopsoundent = undefined; self.loopsoundent = undefined;
} }
self setanimstatefromasd( "zm_jump_up" ); self sys::setanimstatefromasd( "zm_jump_up" );
maps\mp\animscripts\zm_shared::donotetracks( "jump_up_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "jump_up_anim" );
asd_state = self screecher_fly_to_player( player ); asd_state = self screecher_fly_to_player( player );
self setplayercollision( 0 ); self setplayercollision( 0 );
self setclientfield( "render_third_person", 1 ); self setclientfield( "render_third_person", 1 );
self linkto( self.favoriteenemy, "tag_origin" ); self sys::linkto( self.favoriteenemy, "tag_origin" );
self animscripted( self.favoriteenemy.origin, self.favoriteenemy.angles, asd_state ); self sys::animscripted( self.favoriteenemy.origin, self.favoriteenemy.angles, asd_state );
maps\mp\animscripts\zm_shared::donotetracks( "jump_land_success_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "jump_land_success_anim" );
org = self.favoriteenemy gettagorigin( "j_head" ); org = self.favoriteenemy sys::gettagorigin( "j_head" );
angles = self.favoriteenemy gettagangles( "j_head" ); angles = self.favoriteenemy sys::gettagangles( "j_head" );
self forceteleport( org, angles ); self forceteleport( org, angles );
self linkto( self.favoriteenemy, "j_head" ); self sys::linkto( self.favoriteenemy, "j_head" );
self animscripted( self.origin, self.angles, "zm_headpull" ); self sys::animscripted( self.origin, self.angles, "zm_headpull" );
self.linked_ent = self.favoriteenemy; self.linked_ent = self.favoriteenemy;
self.linked_ent setmovespeedscale( 0.5 ); self.linked_ent setmovespeedscale( 0.5 );
self thread screecher_melee_button_watcher(); self thread screecher_melee_button_watcher();
@ -591,22 +591,22 @@ screecher_attack()
screecher_fly_to_player( player ) screecher_fly_to_player( player )
{ {
self endon( "death" ); self endon( "death" );
self setanimstatefromasd( "zm_jump_loop" ); self sys::setanimstatefromasd( "zm_jump_loop" );
self.anchor.origin = self.origin; self.anchor.origin = self.origin;
self.anchor.angles = self.angles; self.anchor.angles = self.angles;
self linkto( self.anchor ); self sys::linkto( self.anchor );
anim_id_back = self getanimfromasd( "zm_jump_land_success_fromback", 0 ); anim_id_back = self getanimfromasd( "zm_jump_land_success_fromback", 0 );
anim_id_front = self getanimfromasd( "zm_jump_land_success_fromfront", 0 ); anim_id_front = self getanimfromasd( "zm_jump_land_success_fromfront", 0 );
end_time = gettime() + 2500; end_time = sys::gettime() + 2500;
dist = undefined; dist = undefined;
dist_update = undefined; dist_update = undefined;
while ( end_time > gettime() ) while ( end_time > sys::gettime() )
{ {
goal_pos_back = getstartorigin( player.origin, player.angles, anim_id_back ); goal_pos_back = getstartorigin( player.origin, player.angles, anim_id_back );
goal_pos_front = getstartorigin( player.origin, player.angles, anim_id_front ); goal_pos_front = getstartorigin( player.origin, player.angles, anim_id_front );
dist_back = distancesquared( self.anchor.origin, goal_pos_back ); dist_back = sys::distancesquared( self.anchor.origin, goal_pos_back );
dist_front = distancesquared( self.anchor.origin, goal_pos_front ); dist_front = sys::distancesquared( self.anchor.origin, goal_pos_front );
goal_pos = goal_pos_back; goal_pos = goal_pos_back;
goal_ang = getstartangles( player.origin, player.angles, anim_id_back ); goal_ang = getstartangles( player.origin, player.angles, anim_id_back );
asd_state = "zm_jump_land_success_fromback"; asd_state = "zm_jump_land_success_fromback";
@ -637,7 +637,7 @@ screecher_fly_to_player( player )
} }
self.anchor.angles = facing_angles; self.anchor.angles = facing_angles;
unit_facing_vec = vectornormalize( facing_vec ); unit_facing_vec = sys::vectornormalize( facing_vec );
new_pos = self.anchor.origin + vectorscale( unit_facing_vec, dist_update ); new_pos = self.anchor.origin + vectorscale( unit_facing_vec, dist_update );
self.anchor moveto( new_pos, 0.1 ); self.anchor moveto( new_pos, 0.1 );
wait 0.1; wait 0.1;
@ -699,7 +699,7 @@ screecher_start_attack()
} }
self.state = "attacking"; self.state = "attacking";
self.attack_time = gettime(); self.attack_time = sys::gettime();
if ( !getdvarint( #"scr_screecher_poison" ) ) if ( !getdvarint( #"scr_screecher_poison" ) )
player startpoisoning(); player startpoisoning();
@ -761,22 +761,22 @@ screecher_attacking()
return; return;
} }
if ( self.attack_time < gettime() ) if ( self.attack_time < sys::gettime() )
{ {
scratch_score = 5; scratch_score = 5;
players = get_players(); players = sys::getplayers();
self.screecher_score = self.screecher_score + scratch_score; self.screecher_score = self.screecher_score + scratch_score;
killed_player = self screecher_check_score(); killed_player = self screecher_check_score();
if ( player.health > 0 && !( isdefined( killed_player ) && killed_player ) ) if ( player.health > 0 && !( isdefined( killed_player ) && killed_player ) )
{ {
self.attack_delay = self.attack_delay_base + randomint( self.attack_delay_offset ); self.attack_delay = self.attack_delay_base + randomint( self.attack_delay_offset );
self.attack_time = gettime() + self.attack_delay; self.attack_time = sys::gettime() + self.attack_delay;
self thread claw_fx( player, self.attack_delay * 0.001 ); self thread claw_fx( player, self.attack_delay * 0.001 );
self playsound( "zmb_vocals_screecher_attack" ); self playsound( "zmb_vocals_screecher_attack" );
player playsoundtoplayer( "zmb_screecher_scratch", player ); player playsoundtoplayer( "zmb_screecher_scratch", player );
player thread do_player_general_vox( "general", "screecher_attack" ); player thread do_player_general_vox( "general", "screecher_attack" );
players = get_players(); players = sys::getplayers();
if ( players.size == 1 ) if ( players.size == 1 )
{ {
@ -803,12 +803,12 @@ screecher_runaway()
self notify( "runaway" ); self notify( "runaway" );
self.state = "runaway"; self.state = "runaway";
self.ignoreall = 1; self.ignoreall = 1;
self setgoalpos( self.startinglocation ); self sys::setgoalpos( self.startinglocation );
self waittill( "goal" ); self waittill( "goal" );
playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) ); playfx( level._effect["screecher_spawn_b"], self.origin, ( 0, 0, 1 ) );
self.no_powerups = 1; self.no_powerups = 1;
self setfreecameralockonallowed( 0 ); self sys::setfreecameralockonallowed( 0 );
self animscripted( self.origin, self.angles, "zm_burrow" ); self sys::animscripted( self.origin, self.angles, "zm_burrow" );
self playsound( "zmb_screecher_dig" ); self playsound( "zmb_screecher_dig" );
maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "burrow_anim" );
self delete(); self delete();
@ -858,7 +858,7 @@ screecher_detach( player )
player.screecher_weapon = undefined; player.screecher_weapon = undefined;
} }
self unlink(); self sys::unlink();
self setclientfield( "render_third_person", 0 ); self setclientfield( "render_third_person", 0 );
if ( isdefined( self.linked_ent ) ) if ( isdefined( self.linked_ent ) )
@ -869,10 +869,10 @@ screecher_detach( player )
} }
self.green_light = player.green_light; self.green_light = player.green_light;
self animcustom( ::screecher_jump_down ); self sys::animcustom( ::screecher_jump_down );
self waittill( "jump_down_done" ); self waittill( "jump_down_done" );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player );
self animmode( "normal" ); self sys::animmode( "normal" );
self.ignoreall = 1; self.ignoreall = 1;
self setplayercollision( 1 ); self setplayercollision( 1 );
@ -893,7 +893,7 @@ screecher_detach( player )
screecher_jump_down() screecher_jump_down()
{ {
self endon( "death" ); self endon( "death" );
self setanimstatefromasd( "zm_headpull_success" ); self sys::setanimstatefromasd( "zm_headpull_success" );
wait 0.6; wait 0.6;
self notify( "jump_down_done" ); self notify( "jump_down_done" );
} }
@ -1009,14 +1009,14 @@ screecher_distance_tracking()
while ( true ) while ( true )
{ {
can_delete = 1; can_delete = 1;
players = get_players(); players = sys::getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( player.sessionstate == "spectator" ) if ( player.sessionstate == "spectator" )
continue; continue;
dist_sq = distancesquared( self.origin, player.origin ); dist_sq = sys::distancesquared( self.origin, player.origin );
if ( dist_sq >= 4000000 ) if ( dist_sq >= 4000000 )
continue; continue;
@ -1137,9 +1137,9 @@ screecher_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, s
screecher_death_func() screecher_death_func()
{ {
self unlink(); self sys::unlink();
self.noragdoll = 1; self.noragdoll = 1;
self setanimstatefromasd( "zm_death" ); self sys::setanimstatefromasd( "zm_death" );
maps\mp\animscripts\zm_shared::donotetracks( "death_anim" ); maps\mp\animscripts\zm_shared::donotetracks( "death_anim" );
playfx( level._effect["screecher_death"], self.origin ); playfx( level._effect["screecher_death"], self.origin );
@ -1209,7 +1209,7 @@ screecher_debug_axis()
if ( !isdefined( player.bone_fxaxis ) ) if ( !isdefined( player.bone_fxaxis ) )
{ {
player.bone_fxaxis = spawn( "script_model", org ); player.bone_fxaxis = sys::spawn( "script_model", org );
player.bone_fxaxis setmodel( "fx_axis_createfx" ); player.bone_fxaxis setmodel( "fx_axis_createfx" );
} }

297
zm_ai_pack/pluto_sys.gsc Normal file
View File

@ -0,0 +1,297 @@
// Plutonium T6 Exclusive Builtins
/@
[DESCRIPTION]: Returns a function pointer based on <path> and <func_name>;
Does not trigger compilation or resolving of the script, therefore if the script isn't referenced by an include or far call at least once it will fail
to find the function and return undefined.;
[CALL_TYPE]: function;
[USAGE]: func = getfunction( <path>, <func_name> );
[PARAMS]: ARG1:<string> ARG2:<string>;
[PARAMS_NOTES]: Path must use forward slashes to denote the path;
[RETURNS]: <function_pointer> or <undefined>;
@/
getfunction( path, func_name )
{
return getfunction( path, func_name );
}
/@
[DESCRIPTION]: Used inside a function with a hook applied to it by replacefunc. When called resumes execution of the original function starting at the top.
Unlike removedetour the hook is reenabled automatically when the function exits.;
[CALL_TYPE]: function;
[USAGE]: disabledetouronce();
[PARAMS]: NONE;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
[ERRORS]: 1. Must be called inside a function that had a hook applied to it by replacefunc.;
@/
disabledetouronce()
{
disabledetouronce();
}
/@
[DESCRIPTION]: Takes in <func> and returns the function pointer it was detoured to or returns undefined if <func> was not hooked
at the time of calling getdetour.;
[CALL_TYPE]: function;
[USAGE]: getdetour( <func> );
[PARAMS]: ARG1:<function_pointer>;
[PARAMS_NOTES]: NONE;
[RETURNS]: <function_pointer> or <undefined>;
@/
getdetour( func )
{
return getdetour( func );
}
/@
[DESCRIPTION]: Returns an array of pathnodes based on the caller node's path links. Returns an empty array if no links exist for caller node;
[CALL_TYPE]: method;
[USAGE]: self getlinkednodes();
[PARAMS]: ARG0:<node>;
[PARAMS_NOTES]: NONE;
[RETURNS]: <array>;
@/
getlinkednodes()
{
return self getlinkednodes();
}
/@
[DESCRIPTION]: Sends a personal chat message to caller player. Applies ^7 and sv_sayName dvar's value to start of message unless sv_sayName dvar's value is blank
in which case the message is not modified before being sent to the client.;
[CALL_TYPE]: method;
[USAGE]: self tell( <message> );
[PARAMS]: ARG0:<entity> ARG1:<string>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
tell( message )
{
self tell( message );
}
/@
[DESCRIPTION]: Sends a chat message to all players. Applies ^7 and sv_sayName dvar's value to start of message unless sv_sayName dvar's value is blank
in which case the message is not modified before being sent to the client.;
[CALL_TYPE]: method;
[USAGE]: self tell( <message> );
[PARAMS]: ARG1:<string>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
say( message )
{
say( message );
}
// The following are bot specifc builtins
/@
[BOT_BUTTON_TYPES]:
{
"attack",
"sprint",
"melee",
"activate",
"reload",
"usereload",
"gostand",
"frag",
"smoke",
"holdbreath",
"crouch",
"prone",
"leanleft",
"leanright",
"vehicleboost",
"stance",
"switchseat",
"throwback",
"throw",
"handbrake",
"reverse",
"jam",
"vehiclemovedown",
"vehiclemoveup",
"vehicleattacksecond",
"vehicleattack",
"ads",
"actionslot 1",
"actionslot 2",
"actionslot 3",
"actionslot 4"
};
[BOT_BUTTON_VALUES]:
{
"enable",
"disable"
};
@/
/@
[DESCRIPTION]: Allows bot to melee lunge at entity with <ent_num> and <dist> to control the lunge distance when bot activates melee.
<dist> is hard capped to values between 0 and 255.;
[CALL_TYPE]: method;
[USAGE]: self botmeleeparams( <ent_num>, <dist> );
[PARAMS]: ARG0:<entity> ARG1:<int> ARG2:<float>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botmeleeparams( ent_num, dist )
{
self botmeleeparams( ent_num, dist );
}
/@
[DESCRIPTION]: Toggles off melee lunging for bot and clears the current dist and ent_num set by botmeleeparams.;
[CALL_TYPE]: method;
[USAGE]: self botclearmeleeparams();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearmeleeparams()
{
self botclearmeleeparams();
}
/@
[DESCRIPTION]: Overrides caller bot's forward and right movement until botclearmoveoverride is called on caller bot. Values are between -127 for fully backwards and left, and fully 128 for forwards and right.
Bot effectively simulates analog movement where max absolute values mean maximum speed and 0 no movement in that direction at all.;
[CALL_TYPE]: method;
[USAGE]: self botmovementoverride( <forward>, <right> );
[PARAMS]: ARG0:<entity> ARG1:<int> ARG2:<int>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botmovementoverride( forward, right )
{
self botmovementoverride( forward, right );
}
/@
[DESCRIPTION]: Toggles off a movement override and resets forward and right values for caller bot.;
[CALL_TYPE]: method;
[USAGE]: self botclearmovementoverride();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearmovementoverride()
{
self botclearmovementoverride();
}
/@
[DESCRIPTION]: Causes caller bot to press and hold <button> if <toggle> is "enable",
otherwise if <toggle> is "disable" will not be able to use <button> automatically.;
[CALL_TYPE]: method;
[USAGE]: self botbuttonoverride( <button>, <toggle> );
[PARAMS]: ARG0:<entity> ARG1:<string> ARG2:<string>;
[PARAMS_NOTES]: <button> must be one of [BOT_BUTTON_TYPES] and toggle must be one of [BOT_BUTTON_VALUES];
[RETURNS]: NONE;
@/
botbuttonoverride( button, toggle )
{
self botbuttonoverride( button, toggle );
}
/@
[DESCRIPTION]: Toggles off a button override for caller bot.;
[CALL_TYPE]: method;
[USAGE]: self botclearbuttonoverride();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearbuttonoverride( button )
{
self botclearbuttonoverride( button );
}
/@
[DESCRIPTION]: If [toggle] is truthy all bot overrides set by the other Plutonium bot builtins will be cleared.
Otherwise if [toggle] is falsy or not specified all bot overrides will be enabled and all buttons disabled.;
[CALL_TYPE]: method;
[USAGE]: self botclearoverrides();
[PARAMS]: ARG0:<entity> ARG1:[int];
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearoverrides( toggle )
{
if ( !isDefined( toggle ) )
{
self botclearoverrides();
}
else
{
self botclearoverrides( toggle );
}
}
/@
[DESCRIPTION]: Forces caller bot to use <weapon> from their inventory until botclearweaponoverride is called on caller bot.;
[CALL_TYPE]: method;
[USAGE]: self botweaponoverride( <weapon> );
[PARAMS]: ARG0:<entity> ARG1:<string>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botweaponoverride( weapon )
{
self botweaponoverride( weapon );
}
/@
[DESCRIPTION]: Toggles off the weapon override applied by botweaponoverride;
[CALL_TYPE]: method;
[USAGE]: self botclearweaponoverride();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearweaponoverride()
{
self botclearweaponoverride();
}
/@
[DESCRIPTION]: Clears all button overrides applied to caller bot.;
[CALL_TYPE]: method;
[USAGE]: self botclearbuttonoverrides();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearbuttonoverrides()
{
self botclearbuttonoverrides();
}
/@
[DESCRIPTION]: Toggles off caller bot's ability to automatically aim until botclearaimoverride is called on caller bot.
This allows for setplayerangles to used on caller bot to control their aiming.;
[CALL_TYPE]: method;
[USAGE]: self botclearbuttonoverrides();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botaimoverride()
{
self botaimoverride();
}
/@
[DESCRIPTION]: Clears the aim override applied by botaimoverride for caller bot.;
[CALL_TYPE]: method;
[USAGE]: self botclearaimoverride();
[PARAMS]: ARG0:<entity>;
[PARAMS_NOTES]: NONE;
[RETURNS]: NONE;
@/
botclearaimoverride()
{
self botclearaimoverride();
}

View File

@ -125,17 +125,17 @@ init()
level.player_out_of_playable_area_monitor = false; level.player_out_of_playable_area_monitor = false;
flag_wait( "initial_blackscreen_passed" ); flag_wait( "initial_blackscreen_passed" );
//brutus_spawners = getEntArray( "brutus_zombie_spawner", "script_noteworthy" ); //brutus_spawners = sys::getentarray( "brutus_zombie_spawner", "script_noteworthy" );
//giant_robot0_spawners = getEntArray( "ai_giant_robot_0", "targetname" ); //giant_robot0_spawners = sys::getentarray( "ai_giant_robot_0", "targetname" );
//giant_robot1_spawners = getEntArray( "ai_giant_robot_1", "targetname" ); //giant_robot1_spawners = sys::getentarray( "ai_giant_robot_1", "targetname" );
//giant_robot2_spawners = getEntArray( "ai_giant_robot_2", "targetname" ); //giant_robot2_spawners = sys::getentarray( "ai_giant_robot_2", "targetname" );
//leaper_spawners = getEntArray( "leaper_zombie_spawner", "script_noteworthy" ); //leaper_spawners = sys::getentarray( "leaper_zombie_spawner", "script_noteworthy" );
//mechz_spawners = getEntArray( "mechz_spawner", "script_noteworthy" ); //mechz_spawners = sys::getentarray( "mechz_spawner", "script_noteworthy" );
//zombie_dog_spawners = getEntArray( "zombie_dog_spawner", "script_noteworthy" ); //zombie_dog_spawners = sys::getentarray( "zombie_dog_spawner", "script_noteworthy" );
//avogadro_spawners = getEntArray( "avogadro_zombie_spawner", "script_noteworthy" ); //avogadro_spawners = sys::getentarray( "avogadro_zombie_spawner", "script_noteworthy" );
//screecher_spawners = getEntArray( "screecher_zombie_spawner", "script_noteworthy" ); //screecher_spawners = sys::getentarray( "screecher_zombie_spawner", "script_noteworthy" );
//ghost_spawners = getEntArray( "ghost_zombie_spawner", "script_noteworthy" ); //ghost_spawners = sys::getentarray( "ghost_zombie_spawner", "script_noteworthy" );
//sloth_spawners = getEntArray( "sloth_zombie_spawner", "script_noteworthy" ); //sloth_spawners = sys::getentarray( "sloth_zombie_spawner", "script_noteworthy" );
origin = level.players[ 0 ].origin; origin = level.players[ 0 ].origin;

View File

@ -466,7 +466,7 @@ print_ent_field( message, field )
print_entities() print_entities()
{ {
ents = getEntArray(); ents = sys::getentarray();
print( "******SERVER ENTITIES******" ); print( "******SERVER ENTITIES******" );
print( "Listing " + ents.size + " entities" ); print( "Listing " + ents.size + " entities" );

View File

@ -25,31 +25,31 @@ main()
level.gametype = toLower( getDvar( "g_gametype" ) ); level.gametype = toLower( getDvar( "g_gametype" ) );
level.ai_data = []; level.ai_data = [];
// level.ai_data[ "avogadro" ] = spawnStruct(); // level.ai_data[ "avogadro" ] = sys::spawnstruct();
// level.ai_data[ "avogadro" ].main = maps\mp\zombies\_zm_ai_avogadro::main; // level.ai_data[ "avogadro" ].main = maps\mp\zombies\_zm_ai_avogadro::main;
// level.ai_data[ "avogadro" ].init = maps\mp\zombies\_zm_ai_avogadro::init; // level.ai_data[ "avogadro" ].init = maps\mp\zombies\_zm_ai_avogadro::init;
// level.ai_data[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); // level.ai_data[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" );
// level.ai_data[ "screecher" ] = spawnStruct(); // level.ai_data[ "screecher" ] = sys::spawnstruct();
// level.ai_data[ "screecher" ].main = maps\mp\zombies\_zm_ai_screecher::main; // level.ai_data[ "screecher" ].main = maps\mp\zombies\_zm_ai_screecher::main;
// level.ai_data[ "screecher" ].init = maps\mp\zombies\_zm_ai_screecher::init; // level.ai_data[ "screecher" ].init = maps\mp\zombies\_zm_ai_screecher::init;
// level.ai_data[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); // level.ai_data[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" );
// level.ai_data[ "ghost" ] = spawnStruct(); // level.ai_data[ "ghost" ] = sys::spawnstruct();
// level.ai_data[ "ghost" ].main = maps\mp\zombies\_zm_ai_ghost::main; // level.ai_data[ "ghost" ].main = maps\mp\zombies\_zm_ai_ghost::main;
// level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); // level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" );
// level.ai_data[ "leaper" ] = spawnStruct(); // level.ai_data[ "leaper" ] = sys::spawnstruct();
// level.ai_data[ "leaper" ].main = maps\mp\zombies\_zm_ai_leaper::main; // level.ai_data[ "leaper" ].main = maps\mp\zombies\_zm_ai_leaper::main;
// level.ai_data[ "leaper" ].should_execute = level.script != "zm_highrise"; // level.ai_data[ "leaper" ].should_execute = level.script != "zm_highrise";
level.ai_data[ "brutus" ] = spawnStruct(); level.ai_data[ "brutus" ] = sys::spawnstruct();
level.ai_data[ "brutus" ].main = maps\mp\zombies\_zm_ai_brutus::main; level.ai_data[ "brutus" ].main = maps\mp\zombies\_zm_ai_brutus::main;
level.ai_data[ "brutus" ].should_execute = level.script != "zm_prison"; level.ai_data[ "brutus" ].should_execute = level.script != "zm_prison";
level.ai_data[ "mechz" ] = spawnStruct(); level.ai_data[ "mechz" ] = sys::spawnstruct();
level.ai_data[ "mechz" ].main = maps\mp\zombies\_zm_ai_mechz::main; level.ai_data[ "mechz" ].main = maps\mp\zombies\_zm_ai_mechz::main;
level.ai_data[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init; level.ai_data[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init;
level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb"; level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb";
level.ai_data[ "zombie_dog" ] = spawnStruct(); //level.ai_data[ "zombie_dog" ] = sys::spawnstruct();
level.ai_data[ "zombie_dog" ].main = maps\mp\zombies\_zm_ai_dogs::init; //level.ai_data[ "zombie_dog" ].main = maps\mp\zombies\_zm_ai_dogs::init;
level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds; //level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds;
level.ai_data[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 ); //level.ai_data[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 );
keys = getArrayKeys( level.ai_data ); keys = getArrayKeys( level.ai_data );
for ( i = 0; i < keys.size; i++ ) for ( i = 0; i < keys.size; i++ )
@ -193,9 +193,9 @@ dotraverse_teleport( no_powerups )
self.is_traversing = true; self.is_traversing = true;
self stop_basic_find_flesh(); self stop_basic_find_flesh();
self.ai_state = "idle"; self.ai_state = "idle";
//self setanimstatefromasd( "zm_idle" ); //self sys::setanimstatefromasd( "zm_idle" );
self animmode( "noclip" ); self sys::animmode( "noclip" );
self orientmode( "face angle", startnode.angles[1] ); self sys::orientmode( "face angle", startnode.angles[1] );
self.origin = original_origin + ( forward * i ); self.origin = original_origin + ( forward * i );
self setGoalPos( self.origin ); self setGoalPos( self.origin );
wait 0.05; wait 0.05;
@ -207,8 +207,7 @@ dotraverse_teleport( no_powerups )
self.origin = endnode.origin; self.origin = endnode.origin;
print( "Ending custom traverse" ); self sys::animmode( "none" );
self animmode( "none" );
self.is_traversing = false; self.is_traversing = false;
} }
@ -234,13 +233,13 @@ dotraverse_override( traversestate, traversealias, no_powerups )
self notify( "zombie_start_traverse" ); self notify( "zombie_start_traverse" );
self.traversestartnode = self getnegotiationstartnode(); self.traversestartnode = self getnegotiationstartnode();
assert( isdefined( self.traversestartnode ) ); assert( isdefined( self.traversestartnode ) );
self orientmode( "face angle", self.traversestartnode.angles[1] ); self sys::orientmode( "face angle", self.traversestartnode.angles[1] );
self.traversestartz = self.origin[2]; self.traversestartz = self.origin[2];
if ( isdefined( self.pre_traverse ) ) if ( isdefined( self.pre_traverse ) )
self [[ self.pre_traverse ]](); self [[ self.pre_traverse ]]();
self setanimstatefromasd( traversestate, traversealias ); self sys::setanimstatefromasd( traversestate, traversealias );
self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "traverse_anim" );
self traversemode( "gravity" ); self traversemode( "gravity" );
self.a.nodeath = 0; self.a.nodeath = 0;
@ -314,7 +313,7 @@ get_idle_anim()
replace_single_function( path, func_name, func_override ) replace_single_function( path, func_name, func_override )
{ {
func = getFunction( path, func_name ); func = pluto_sys::getfunction( path, func_name );
if ( isDefined( func ) ) if ( isDefined( func ) )
{ {
@ -349,7 +348,7 @@ can_be_paralyzed_override( zombie )
watch_crash_trigger_override() watch_crash_trigger_override()
{ {
sloth_set_state_func = getFunction( "maps/mp/zombies/_zm_ai_sloth", "sloth_set_state" ); sloth_set_state_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_ai_sloth", "sloth_set_state" );
while ( true ) while ( true )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );

View File

@ -29,7 +29,7 @@ killzombiesinpowerstation_override()
continue; continue;
} }
if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq ) if ( sys::distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq )
continue; continue;
if ( isdefined( zombie ) && zombie maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || isdefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" ) if ( isdefined( zombie ) && zombie maps\mp\zombies\_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || isdefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" )

View File

@ -1,14 +1,440 @@
// T6 Script Builtins // T6 Script Builtins
/@ /@
Adds <fx_name> as a configstring to the fx configstring pool. [DESCRIPTION]: Adds <fx_name> as a configstring to the fx configstring pool.
Returns an index that can be used in many different functions and methods to play an fx. Returns an index that can be used in many different functions and methods to play an fx.
The fx configstring pool is limited to 195 entries before fx configstring overflow occurs. The fx configstring pool is limited to 195 entries before fx configstring overflow occurs.
On Plutonium addonfx pool was added to bypass this limit so functions add to this configstring pool On Plutonium addonfx pool was added to bypass this limit so functions that add to this configstring pool
have another 256 entries. have another 256 entries past the normal limit.;
USAGE: level._effect[ effect_alias ] = loadfx( <fx_name> ); [CALL_TYPE]: function;
PARAMS: <string> [USAGE]: level._effect[ <effect_alias> ] = loadfx( <fx_name> );
[PARAMS]: ARG1:<string>;
[RETURNS]: <undefined>;
[ERRORS]: 1. Will script error if called after the first frame of script execution.;
@/ @/
loadfx( fx_name ) loadfx( fx_name )
{ {
loadfx( fx_name ); loadfx( fx_name );
} }
/@
[DESCRIPTION]: Used on actor type entities.
Unknown, does nothing in engine.;
[CALL_TYPE]: method;
[RETURNS]: NONE;
@/
setengagementmindist( a, b )
{
self setengagementmindist( a, b );
}
/@
[DESCRIPTION]: Used on actor type entities.
Unknown, does nothing in engine.;
[CALL_TYPE]: method;
[RETURNS]: NONE;
@/
setengagementmaxdist( a, b )
{
self setengagementmaxdist( a, b );
}
/@
[DESCRIPTION]: Used on actor type entities.
Unknown, sets bits on the s.lerp.u.actor.aiType variable in the engine.
However, these bits are never accessed afterwards.;
[CALL_TYPE]: method;
[RETURNS]: NONE;
@/
setcharacterindex( index )
{
self setcharacterindex( index );
}
/@
[DESCRIPTION]: Used on actor spawner type entities.
Sets the team on the actor so it can be used by getspawnerteamarray().
This is its only purpose.;
[CALL_TYPE]: method;
[USAGE]: <actor_spawner> setspawnerteam( <team_str> );
[PARAMS]: ENT:<actor_spawner> ARG1:<string>;
[RETURNS]: NONE;
[ERRORS]: 1. Must be called on an actor spawner type entity.;
@/
setspawnerteam( team )
{
self setspawnerteam( team );
}
/@
[DESCRIPTION]: Adds an animstatedef file to be parsed by the engine at a later time.
Required for T6 actors to play anims properly.
Should only be called in an aitype script's precache() function.;
[CALL_TYPE]: function;
[USAGE]: precacheanimstatedef( <ai_index>, <animtree>, <anim_state_def_name> );
[PARAMS]: ARG1:<int> ARG2:<animtree> ARG3:<string>;
[RETURNS]: NONE;
@/
precacheanimstatedef( ai_index, animtree, anim_state_def_name )
{
precacheanimstatedef( ai_index, animtree, anim_state_def_name );
}
/@
[DESCRIPTION]: Adds <shellshock_name> as a configstring to the shellshock configstring pool.
Must be called before playing a shellshock on a player entity.
The shellshock configstring pool is limited to 16 entries.;
[CALL_TYPE]: function;
[USAGE]: precacheshellshock( <shellshock_name> );
[PARAMS]: ARG1:<string>;
[RETURNS]: NONE;
[ERRORS]: 1. Will script error if called after the first frame of script execution.
2. Will com error if called on a shellshock that does not exist and the default shellshock is missing.;
@/
precacheshellshock( shellshock_name )
{
precacheshellshock( shellshock_name );
}
/@
[DESCRIPTION]: Returns an array of entities on the map which could include temp entities, script spawned entities and permanent entities spawned by the engine.
If no args are specified returns an array of every entity on the map.
If <name> and <type> is specified then returns an array of entities whose fields match those args.
Possible values for <type> are limited to the following:
classname, target, targetname, script_noteworthy.;
[CALL_TYPE]: function;
[USAGE]: ents = getentarray( <name>, <type> );
[PARAMS]: ARG1:[string] ARG2:[string];
[PARAMS_NOTES]: If at least one arg is specified execution will expect at most and least one more arg.;
[RETURNS]: <number_indexed_array>;
@/
getentarray( name, type )
{
if ( isDefined( name ) )
{
if ( isDefined( type ) )
{
return getentarray( name, type );
}
else
{
assertMsg( "Scr_GetEntArray expects either no args to get all entities or two args to get entities with <name> and <type>" );
return [];
}
}
return getentarray();
}
/@
[DESCRIPTION]: Creates a script struct and returns which can then be used like an entity for things like fields and function calls.
Allocates to the parent variables which is limited to 32768 maximum structs/arrays/threads.
[CALL_TYPE]: function;
[USAGE]: struct = spawnstruct();
[PARAMS]: NONE;
[RETURNS]: <struct>;
@/
spawnstruct()
{
return spawnstruct();
}
/@
@/
animmode( mode, clear_path )
{
if ( !isDefined( clear_path ) )
{
self animmode( mode );
}
else
{
self animmode( mode, clear_path );
}
}
/@
@/
orientmode( mode, special )
{
if ( !isDefined( special ) )
{
self orientmode( mode );
}
else
{
self orientmode( mode, special );
}
}
/@
@/
setfreecameralockonallowed( enabled )
{
self setfreecameralockonallowed( enabled );
}
/@
@/
spawn( classname, origin, spawnflags, spawnvar1, spawnvar2, spawnvar3 )
{
if ( !isDefined( spawnflags ) )
{
return spawn( classname, origin );
}
else if ( !isDefined( spawnvar1 ) )
{
return spawn( classname, origin, spawnflags );
}
else if ( !isDefined( spawnvar2 ) )
{
return spawn( classname, origin, spawnflags, spawnvar1 );
}
else if ( !isDefined( spawnvar3 ) )
{
return spawn( classname, origin, spawnflags, spawnvar1, spawnvar2 );
}
else
{
return spawn( classname, origin, spawnflags, spawnvar1, spawnvar2, spawnvar3 );
}
}
/@
@/
linkto( parent, tag_name, origin_offset, angles_offset )
{
if ( !isDefined( tag_name ) )
{
self linkto( parent );
}
else if ( !isDefined( origin_offset ) )
{
self linkto( parent, tag_name );
}
else if ( !isDefined( angles_offset ) )
{
self linkto( parent, tag_name, origin_offset );
}
else
{
self linkto( parent, tag_name, origin_offset, angles_offset );
}
}
/@
@/
gettime()
{
return gettime();
}
/@
@/
getent( name, type )
{
return getent( name, type );
}
/@
@/
setanimstatefromasd( animstate, substate_value )
{
if ( !isDefined( substate_value ) )
{
self setanimstatefromasd( animstate );
}
else
{
self setanimstatefromasd( animstate, substate_value );
}
}
/@
@/
istouching( other, extra_boundary )
{
if ( !isDefined( extra_boundary ) )
{
return self istouching( other );
}
else
{
return self istouching( other, extra_boundary );
}
}
/@
@/
getnode( name, type )
{
return getnode( name, type );
}
/@
@/
ghost()
{
self ghost();
}
/@
@/
notsolid()
{
self notsolid();
}
/@
@/
show()
{
self show();
}
/@
@/
solid()
{
self solid();
}
/@
@/
unlink()
{
self unlink();
}
/@
@/
getplayers( team )
{
if ( !isDefined( team ) )
{
return getplayers();
}
else
{
return getplayers( team );
}
}
/@
@/
vectornormalize( vector )
{
return vectornormalize( vector );
}
/@
@/
vectordot( a, b )
{
return vectordot( a, b );
}
/@
@/
distancesquared( a, b )
{
return distancesquared( a, b );
}
/@
@/
distance2dsquared( a, b )
{
return distance2dsquared( a, b );
}
/@
@/
gettagorigin( tag_name )
{
return self gettagorigin( tag_name );
}
/@
@/
gettagangles( tag_name )
{
return self gettagangles( tag_name );
}
/@
@/
setgoalpos( origin, angles )
{
if ( !isDefined( angles ) )
{
self setgoalpos( origin );
}
else
{
self setgoalpos( origin, angles );
}
}
/@
@/
getspeedmph()
{
return self getspeedmph();
}
/@
@/
animcustom( func, end_func )
{
if ( !isDefined( end_func ) )
{
return self animcustom( func );
}
else
{
return self animcustom( func, end_func );
}
}
/@
@/
animscripted( origin, angles, statename, substate_value, mode )
{
if ( !isDefined( substate_value ) )
{
self animscripted( origin, angles, statename );
}
else if ( !isDefined( mode ) )
{
self animscripted( origin, angles, statename, substate_value );
}
else
{
self animscripted( origin, angles, statename, substate_value, mode );
}
}

View File

@ -7,3 +7,7 @@ crossbow and paped variant
spas shotgun from SP spas shotgun from SP
every wonder weapon on every map every wonder weapon on every map
faster sprint anims for zombies (supersprint and chase_bus) faster sprint anims for zombies (supersprint and chase_bus)
all the good ai types from BO2 and possibly BO1/BO3
elemental variants of certain special enemies at higher rounds(electric panzer, flaming dogs, acid warden, aura)
aats
chicky-chicky comes in random variants 1. random projectiles in 360 radius, airstrike where bullet lands, turret shooter, friendly ai shooter