Fix clientfield alt system. Add mechz to Buried.

Add _zm_ai_dogs.gsc. Make multiple ai immune to paralyzer. Fix zm_all_basic.asd.
This commit is contained in:
JezuzLizard
2024-02-18 21:02:52 -08:00
parent 4aa52d595c
commit 10915889b5
13 changed files with 980 additions and 40 deletions

View File

@ -1,20 +1,8 @@
execute_clientfield_alt_callback_internal( data, last_data, field_type, field_name )
{
entnum = data.entnum;
last_entnum = last_data.entnum;
ent = undefined;
field_data = level.clientfield_alts[ field_type ][ field_name ];
switch ( field_type )
{
case "actor":
assert( entnum >= 22 && entnum < 54, "Entnum " + entnum + " out of range for actor" );
ent = getEntByNum( 0, entnum );
break;
// case "toplayer":
// default:
// assertMsg( "Unhandled field type " + field_type );
// break;
}
ent = getEntByNum( 0, entnum );
assert( isDefined( ent ) );
@ -74,7 +62,7 @@ register_clientfield_alt( field_type, field_name, field_value_type, field_callba
struct.callback = field_callback;
level.clientfield_alts[ field_type ][ field_name ] = struct;
dvar_name = field_type + "." + field_name;
dvar_name = field_name;
setDvar( dvar_name, "" );
level thread handle_clientfield_alt_callbacks( dvar_name, field_type, field_name );

View File

@ -1,15 +1,15 @@
set_clientfield_alt_toplayer( field_type, field_name, ent, value )
set_clientfield_alt_toplayer( field_name, ent, value )
{
entnum = ent getEntityNumber();
self setClientDvar( field_type + "." + field_name, entnum + " " + value );
self setClientDvar( field_name, entnum + " " + value );
}
set_clientfield_alt_allplayers( field_type, field_name, ent, value )
set_clientfield_alt_allplayers(field_name, ent, value )
{
foreach ( player in level.players )
{
entnum = ent getEntityNumber();
player setClientDvar( field_type + "." + field_name, entnum + " " + value );
player setClientDvar( field_name, entnum + " " + value );
}
}

View File

@ -164,7 +164,7 @@ location_hud()
for ( i = 0; i < 3; i++ )
{
loc_hud[ i ] = self new_debug_hud( x, y );
x += 45;
x += 55;
}
loc_hud[ 0 ].label = &"x:";
@ -240,6 +240,10 @@ draw_zombie_spawn_locations()
{
zone = level.zones[ zkeys[ z ] ];
if ( getDvarInt( "zm_ai_pack_debug_show_only_active_spawns" ) && ( !zone.is_enabled || !zone.is_active || !zone.is_spawning_allowed ) )
{
continue;
}
draw_specific_zombie_spawn_locations( zone.spawn_locations, zkeys[ z ], ( 0.8, 0.8, 0.8 ), "zombie" );
draw_specific_zombie_spawn_locations( zone.inert_locations, zkeys[ z ], ( 0.8, 0, 0.8 ), "inert" );

View File

@ -13,12 +13,10 @@ main()
{
replaceFunc( maps\mp\_visionset_mgr::init, ::visionset_mgr_init_override );
replaceFunc( maps\mp\animscripts\traverse\zm_shared::dotraverse, ::dotraverse_override );
perk_machine_knockdown_zombie_func = getFunction( "maps/mp/zm_nuked_perks", "perk_machine_knockdown_zombie" );
if ( isDefined( perk_machine_knockdown_zombie_func ) )
{
replaceFunc( perk_machine_knockdown_zombie_func, ::perk_machine_knockdown_zombie_override );
}
replace_single_function( "maps/mp/zm_nuked_perks", "perk_machine_knockdown_zombie", ::perk_machine_knockdown_zombie_override );
replace_single_function( "maps/mp/zombies/_zm_weap_slowgun", "can_be_paralyzed", ::can_be_paralyzed_override );
replace_single_function( "maps/mp/zombies/_zm_ai_sloth", "watch_crash_trigger", ::watch_crash_trigger_override );
level.script = toLower( getDvar( "mapname" ) );
level.gametype = toLower( getDvar( "g_gametype" ) );
@ -263,4 +261,53 @@ get_idle_anim()
}
return idle_anim;
}
replace_single_function( path, func_name, func_override )
{
func = getFunction( path, func_name );
if ( isDefined( func ) )
{
replaceFunc( func, func_override );
}
}
can_be_paralyzed_override( zombie )
{
if ( is_true( zombie.immune_to_slowgun ) )
{
return false;
}
if ( is_true( zombie.is_ghost ) )
{
return false;
}
if ( is_true( zombie.guts_explosion ) )
{
return false;
}
if ( isdefined( zombie ) && zombie.health > 0 )
{
return true;
}
return false;
}
watch_crash_trigger_override()
{
while ( true )
{
self waittill( "trigger", who );
if ( isDefined( who ) && isDefined( level.sloth ) && who == level.sloth && who.state == "berserk" )
{
who setclientfield( "sloth_berserk", 0 );
who sloth_set_state( "crash", 0 );
}
}
}