1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-11 15:48:05 -05:00

Zombie Blood changes

This commit is contained in:
Jbleezy
2023-03-25 18:51:31 -07:00
parent 0b525ad59e
commit b98feb61a4
5 changed files with 252 additions and 5 deletions

View File

@ -318,6 +318,10 @@
### Carpenter
* Removed
### Zombie Blood
* No longer makes zombies ignore the player
* Makes the player invulnerable to zombie melee swipes
### Meat
* All zombies go after player holding the meat
* 60% move speed while holding the meat

View File

@ -4,6 +4,7 @@
#include maps\mp\gametypes_zm\_hud_util;
#include scripts\zm\replaced\utility;
#include scripts\zm\replaced\zm_melee;
#include scripts\zm\replaced\_zm;
#include scripts\zm\replaced\_zm_playerhealth;
#include scripts\zm\replaced\_zm_utility;
@ -27,6 +28,7 @@
main()
{
replaceFunc(common_scripts\utility::struct_class_init, scripts\zm\replaced\utility::struct_class_init);
replaceFunc(maps\mp\animscripts\zm_melee::meleecombat, scripts\zm\replaced\zm_melee::meleecombat);
replaceFunc(maps\mp\zombies\_zm::check_quickrevive_for_hotjoin, scripts\zm\replaced\_zm::check_quickrevive_for_hotjoin);
replaceFunc(maps\mp\zombies\_zm::ai_calculate_health, scripts\zm\replaced\_zm::ai_calculate_health);
replaceFunc(maps\mp\zombies\_zm::onallplayersready, scripts\zm\replaced\_zm::onallplayersready);

View File

@ -0,0 +1,121 @@
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\_visionset_mgr;
#include maps\mp\zombies\_zm_powerup_zombie_blood;
zombie_blood_powerup( m_powerup, e_player )
{
e_player notify( "zombie_blood" );
e_player endon( "zombie_blood" );
e_player endon( "disconnect" );
e_player thread powerup_vo( "zombie_blood" );
e_player._show_solo_hud = 1;
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30;
e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 1;
level notify( "player_zombie_blood", e_player );
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_powerup_zombie_blood_visionset", e_player );
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_powerup_zombie_blood_overlay", e_player );
e_player setclientfield( "player_zombie_blood_fx", 1 );
__new = [];
foreach ( __key, __value in level.a_zombie_blood_entities )
{
if ( isdefined( __value ) )
{
if ( isstring( __key ) )
{
__new[__key] = __value;
continue;
}
__new[__new.size] = __value;
}
}
level.a_zombie_blood_entities = __new;
foreach ( e_zombie_blood in level.a_zombie_blood_entities )
{
if ( isdefined( e_zombie_blood.e_unique_player ) )
{
if ( e_zombie_blood.e_unique_player == e_player )
e_zombie_blood setvisibletoplayer( e_player );
continue;
}
e_zombie_blood setvisibletoplayer( e_player );
}
if ( !isdefined( e_player.m_fx ) )
{
v_origin = e_player gettagorigin( "J_Eyeball_LE" );
v_angles = e_player gettagangles( "J_Eyeball_LE" );
m_fx = spawn( "script_model", v_origin );
m_fx setmodel( "tag_origin" );
m_fx.angles = v_angles;
m_fx linkto( e_player, "J_Eyeball_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) );
m_fx thread fx_disconnect_watch( e_player );
playfxontag( level._effect["zombie_blood"], m_fx, "tag_origin" );
e_player.m_fx = m_fx;
e_player.m_fx playloopsound( "zmb_zombieblood_3rd_loop", 1 );
if ( isdefined( level.str_zombie_blood_model ) )
{
e_player.hero_model = e_player.model;
e_player setmodel( level.str_zombie_blood_model );
}
}
e_player thread watch_zombie_blood_early_exit();
while ( e_player.zombie_vars["zombie_powerup_zombie_blood_time"] >= 0 )
{
wait 0.05;
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] -= 0.05;
}
e_player notify( "zombie_blood_over" );
if ( isdefined( e_player.characterindex ) )
e_player playsound( "vox_plr_" + e_player.characterindex + "_exert_grunt_" + randomintrange( 0, 3 ) );
e_player.m_fx delete();
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_powerup_zombie_blood_visionset", e_player );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_powerup_zombie_blood_overlay", e_player );
e_player.zombie_vars["zombie_powerup_zombie_blood_on"] = 0;
e_player.zombie_vars["zombie_powerup_zombie_blood_time"] = 30;
e_player._show_solo_hud = 0;
e_player setclientfield( "player_zombie_blood_fx", 0 );
e_player.early_exit = undefined;
__new = [];
foreach ( __key, __value in level.a_zombie_blood_entities )
{
if ( isdefined( __value ) )
{
if ( isstring( __key ) )
{
__new[__key] = __value;
continue;
}
__new[__new.size] = __value;
}
}
level.a_zombie_blood_entities = __new;
foreach ( e_zombie_blood in level.a_zombie_blood_entities )
e_zombie_blood setinvisibletoplayer( e_player );
if ( isdefined( e_player.hero_model ) )
{
e_player setmodel( e_player.hero_model );
e_player.hero_model = undefined;
}
}

View File

@ -0,0 +1,117 @@
#include common_scripts\utility;
#include maps\mp\animscripts\shared;
#include maps\mp\animscripts\utility;
#include maps\mp\animscripts\zm_utility;
#include maps\mp\animscripts\zm_combat;
#include maps\mp\animscripts\zm_melee;
meleecombat()
{
self endon( "end_melee" );
self endon( "killanimscript" );
assert( canmeleeanyrange() );
self orientmode( "face enemy" );
if ( is_true( self.sliding_on_goo ) )
self animmode( "slide" );
else
self animmode( "zonly_physics" );
for (;;)
{
if ( isdefined( self.marked_for_death ) )
return;
if ( isdefined( self.enemy ) )
{
angles = vectortoangles( self.enemy.origin - self.origin );
self orientmode( "face angle", angles[1] );
}
if ( isdefined( self.zmb_vocals_attack ) )
self playsound( self.zmb_vocals_attack );
if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee )
self.safetochangescript = 0;
if ( isdefined( self.is_inert ) && self.is_inert )
return;
set_zombie_melee_anim_state( self );
if ( isdefined( self.melee_anim_func ) )
self thread [[ self.melee_anim_func ]]();
while ( true )
{
self waittill( "melee_anim", note );
if ( note == "end" )
break;
else if ( note == "fire" )
{
if ( !isdefined( self.enemy ) )
break;
if ( isdefined( self.dont_die_on_me ) && self.dont_die_on_me )
break;
if ( is_true( self.enemy.zombie_vars["zombie_powerup_zombie_blood_on"] ) )
break;
self.enemy notify( "melee_swipe", self );
oldhealth = self.enemy.health;
self melee();
if ( !isdefined( self.enemy ) )
break;
if ( self.enemy.health >= oldhealth )
{
if ( isdefined( self.melee_miss_func ) )
self [[ self.melee_miss_func ]]();
else if ( isdefined( level.melee_miss_func ) )
self [[ level.melee_miss_func ]]();
}
}
else if ( note == "stop" )
{
if ( !cancontinuetomelee() )
break;
}
}
if ( is_true( self.sliding_on_goo ) )
self orientmode( "face enemy" );
else
self orientmode( "face default" );
if ( isdefined( self.nochangeduringmelee ) && self.nochangeduringmelee || is_true( self.sliding_on_goo ) )
{
if ( isdefined( self.enemy ) )
{
dist_sq = distancesquared( self.origin, self.enemy.origin );
if ( dist_sq > self.meleeattackdist * self.meleeattackdist )
{
self.safetochangescript = 1;
wait 0.1;
break;
}
}
else
{
self.safetochangescript = 1;
wait 0.1;
break;
}
}
}
if ( is_true( self.sliding_on_goo ) )
self animmode( "slide" );
else
self animmode( "none" );
self thread maps\mp\animscripts\zm_combat::main();
}

View File

@ -3,18 +3,20 @@
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_craftables;
#include scripts\zm\replaced\_zm_craftables;
#include scripts\zm\replaced\_zm_riotshield_tomb;
#include scripts\zm\replaced\_zm_weap_riotshield_tomb;
#include scripts\zm\replaced\zm_tomb_main_quest;
#include scripts\zm\replaced\zm_tomb_quest_air;
#include scripts\zm\replaced\zm_tomb_quest_elec;
#include scripts\zm\replaced\zm_tomb_quest_fire;
#include scripts\zm\replaced\zm_tomb_quest_ice;
#include scripts\zm\replaced\_zm_ai_mechz;
#include scripts\zm\replaced\zm_tomb_challenges;
#include scripts\zm\replaced\zm_tomb_craftables;
#include scripts\zm\replaced\zm_tomb_dig;
#include scripts\zm\replaced\zm_tomb_tank;
#include scripts\zm\replaced\_zm_ai_mechz;
#include scripts\zm\replaced\_zm_craftables;
#include scripts\zm\replaced\_zm_powerup_zombie_blood;
#include scripts\zm\replaced\_zm_riotshield_tomb;
#include scripts\zm\replaced\_zm_weap_riotshield_tomb;
main()
{
@ -29,14 +31,15 @@ main()
replaceFunc(maps\mp\zm_tomb_ee_main_step_2::create_robot_head_trigger, scripts\zm\replaced\zm_tomb_ee_main_step_2::create_robot_head_trigger);
replaceFunc(maps\mp\zm_tomb_ee_main_step_2::remove_plinth, scripts\zm\replaced\zm_tomb_ee_main_step_2::remove_plinth);
replaceFunc(maps\mp\zm_tomb_ee_main_step_3::fire_link_cooldown, scripts\zm\replaced\zm_tomb_ee_main_step_3::fire_link_cooldown);
replaceFunc(maps\mp\zm_tomb_challenges::challenges_init, scripts\zm\replaced\zm_tomb_challenges::challenges_init);
replaceFunc(maps\mp\zm_tomb_craftables::quadrotor_control_thread, scripts\zm\replaced\zm_tomb_craftables::quadrotor_control_thread);
replaceFunc(maps\mp\zm_tomb_craftables::quadrotor_set_unavailable, scripts\zm\replaced\zm_tomb_craftables::quadrotor_set_unavailable);
replaceFunc(maps\mp\zm_tomb_challenges::challenges_init, scripts\zm\replaced\zm_tomb_challenges::challenges_init);
replaceFunc(maps\mp\zm_tomb_dig::increment_player_perk_purchase_limit, scripts\zm\replaced\zm_tomb_dig::increment_player_perk_purchase_limit);
replaceFunc(maps\mp\zm_tomb_dig::dig_disconnect_watch, scripts\zm\replaced\zm_tomb_dig::dig_disconnect_watch);
replaceFunc(maps\mp\zm_tomb_tank::players_on_tank_update, scripts\zm\replaced\zm_tomb_tank::players_on_tank_update);
replaceFunc(maps\mp\zombies\_zm_ai_mechz::mechz_set_starting_health, scripts\zm\replaced\_zm_ai_mechz::mechz_set_starting_health);
replaceFunc(maps\mp\zombies\_zm_craftables::choose_open_craftable, scripts\zm\replaced\_zm_craftables::choose_open_craftable);
replaceFunc(maps\mp\zombies\_zm_powerup_zombie_blood::zombie_blood_powerup, scripts\zm\replaced\_zm_powerup_zombie_blood::zombie_blood_powerup);
replaceFunc(maps\mp\zombies\_zm_riotshield_tomb::doriotshielddeploy, scripts\zm\replaced\_zm_riotshield_tomb::doriotshielddeploy);
replaceFunc(maps\mp\zombies\_zm_riotshield_tomb::trackriotshield, scripts\zm\replaced\_zm_riotshield_tomb::trackriotshield);
replaceFunc(maps\mp\zombies\_zm_weap_riotshield_tomb::init, scripts\zm\replaced\_zm_weap_riotshield_tomb::init);