1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00

Vulture-Aid: add ability to see zombies through walls

This commit is contained in:
Jbleezy 2024-04-24 02:03:24 -07:00
parent ac01592344
commit 1e28ce4bf3
7 changed files with 340 additions and 1 deletions

View File

@ -775,8 +775,9 @@
* Downing kills all zombies around the player
### Vulture-Aid
* Stink areas no longer activate while the player is moving
* Added ability to see zombies through walls
* Removed ability to see perks, wallbuys, and Mystery Box through walls
* Stink areas no longer activate while the player is moving
## Pack-a-Punch
* Changed default weapon camo to dragon camo from Black Ops 2 Multiplayer (modified to be darker on primary camo and not animated on secondary camo)

View File

@ -0,0 +1,90 @@
{
"_type": "material",
"_version": 1,
"cameraRegion": "none",
"constants": [
{
"literal": [
0.0,
0.0,
0.0,
1.0
],
"name": "BlurAmount"
}
],
"contents": 1,
"gameFlags": [],
"hashIndex": 0,
"layeredSurfaceTypes": 536870912,
"probeMipBits": 0,
"sortKey": 4,
"stateBits": [
{
"alphaTest": "disabled",
"blendOpAlpha": "add",
"blendOpRgb": "add",
"colorWriteAlpha": true,
"colorWriteRgb": true,
"cullFace": "none",
"depthTest": "disabled",
"depthWrite": false,
"dstBlendAlpha": "one",
"dstBlendRgb": "invsrcalpha",
"polygonOffset": "offset0",
"polymodeLine": false,
"srcBlendAlpha": "invdestalpha",
"srcBlendRgb": "one",
"stencilBack": null,
"stencilFront": null
}
],
"stateBitsEntry": [
-1,
-1,
0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1
],
"stateFlags": 0,
"surfaceFlags": 0,
"surfaceTypeBits": 0,
"techniqueSet": "sw4_2d_zm_turned_6w16136w",
"textureAtlas": {
"columns": 1,
"rows": 1
},
"textures": [],
"thermalMaterial": null
}

View File

@ -6,6 +6,95 @@
#include clientscripts\mp\_visionset_mgr;
#include clientscripts\mp\_filter;
init_vulture()
{
registerclientfield("toplayer", "vulture_perk_toplayer", 12000, 1, "int", ::vulture_callback_toplayer, 0, 1);
registerclientfield("actor", "vulture_perk_actor", 12000, 2, "int", ::vulture_callback_actor, 0, 0);
registerclientfield("scriptmover", "vulture_perk_scriptmover", 12000, 4, "int", ::vulture_callback_scriptmover, 0, 0);
registerclientfield("zbarrier", "vulture_perk_zbarrier", 12000, 1, "int", ::vulture_vision_mystery_box, 0, 0);
registerclientfield("toplayer", "sndVultureStink", 12000, 1, "int", ::sndvulturestink);
registerclientfield("world", "vulture_perk_disable_solo_quick_revive_glow", 12000, 1, "int", ::vulture_disable_solo_quick_revive_glow, 0, 0);
registerclientfield("toplayer", "vulture_perk_disease_meter", 12000, 5, "float", ::vulture_callback_stink_active, 0, 1);
registerclientfield("toplayer", "vulture_perk_ir", 3000, 1, "int", ::vulture_perk_ir, 0, 1);
setupclientfieldcodecallbacks("toplayer", 1, "vulture_perk_disease_meter");
clientscripts\mp\_visionset_mgr::vsmgr_register_overlay_info_style_filter("vulture_stink_overlay", 12000, 31, 0, 0, "generic_filter_zombie_perk_vulture", 0);
level._effect["vulture_perk_zombie_stink"] = loadfx("maps/zombie/fx_zm_vulture_perk_stink");
level._effect["vulture_perk_zombie_stink_trail"] = loadfx("maps/zombie/fx_zm_vulture_perk_stink_trail");
level._effect["vulture_perk_bonus_drop"] = loadfx("misc/fx_zombie_powerup_vulture");
level._effect["vulture_drop_picked_up"] = loadfx("misc/fx_zombie_powerup_grab");
level._effect["vulture_perk_wallbuy_static"] = loadfx("maps/zombie/fx_zm_vulture_wallbuy_rifle");
level._effect["vulture_perk_wallbuy_dynamic"] = loadfx("maps/zombie/fx_zm_vulture_glow_question");
level._effect["vulture_perk_machine_glow_doubletap"] = loadfx("maps/zombie/fx_zm_vulture_glow_dbltap");
level._effect["vulture_perk_machine_glow_juggernog"] = loadfx("maps/zombie/fx_zm_vulture_glow_jugg");
level._effect["vulture_perk_machine_glow_revive"] = loadfx("maps/zombie/fx_zm_vulture_glow_revive");
level._effect["vulture_perk_machine_glow_speed"] = loadfx("maps/zombie/fx_zm_vulture_glow_speed");
level._effect["vulture_perk_machine_glow_marathon"] = loadfx("maps/zombie/fx_zm_vulture_glow_marathon");
level._effect["vulture_perk_machine_glow_mule_kick"] = loadfx("maps/zombie/fx_zm_vulture_glow_mule");
level._effect["vulture_perk_machine_glow_pack_a_punch"] = loadfx("maps/zombie/fx_zm_vulture_glow_pap");
level._effect["vulture_perk_machine_glow_vulture"] = loadfx("maps/zombie/fx_zm_vulture_glow_vulture");
level._effect["vulture_perk_mystery_box_glow"] = loadfx("maps/zombie/fx_zm_vulture_glow_mystery_box");
level._effect["vulture_perk_powerup_drop"] = loadfx("maps/zombie/fx_zm_vulture_glow_powerup");
level._effect["vulture_perk_zombie_eye_glow"] = loadfx("misc/fx_zombie_eye_vulture");
level.perk_vulture = spawnstruct();
level.perk_vulture.array_stink_zombies = [];
level.perk_vulture.array_stink_drop_locations = [];
level.perk_vulture.players_with_vulture_perk = [];
level.perk_vulture.vulture_vision_fx_list = [];
level.perk_vulture.clientfields = spawnstruct();
level.perk_vulture.clientfields.scriptmovers = [];
level.perk_vulture.clientfields.scriptmovers[0] = ::vulture_stink_fx;
level.perk_vulture.clientfields.scriptmovers[1] = ::vulture_drop_fx;
level.perk_vulture.clientfields.scriptmovers[2] = ::vulture_drop_pickup;
level.perk_vulture.clientfields.scriptmovers[3] = ::vulture_powerup_drop;
level.perk_vulture.clientfields.actors = [];
level.perk_vulture.clientfields.actors[1] = ::vulture_eye_glow;
level.perk_vulture.clientfields.actors[0] = ::vulture_stink_trail_fx;
level.perk_vulture.clientfields.toplayer = [];
level.perk_vulture.clientfields.toplayer[0] = ::vulture_toggle;
level.perk_vulture.disable_solo_quick_revive_glow = 0;
if (!isdefined(level.perk_vulture.custom_funcs_enable))
level.perk_vulture.custom_funcs_enable = [];
if (!isdefined(level.perk_vulture.custom_funcs_disable))
level.perk_vulture.custom_funcs_disable = [];
level.zombie_eyes_clientfield_cb_additional = ::vulture_eye_glow_callback_from_system;
}
vulture_perk_ir(localclientnum, oldval, newval, bnewent, binitialsnap, fieldname, bwasdemojump)
{
if (!self islocalplayer())
return;
if (!isdefined(self getlocalclientnumber()))
return;
if (self getlocalclientnumber() != localclientnum)
return;
if (isdemoplaying() && isspectating(localclientnum))
newval = 0;
vulture_perk_set_ir(localclientnum, newval);
}
vulture_perk_set_ir(lcn, newval)
{
if (newval)
{
setlutscriptindex(lcn, 2);
enable_filter_zm_turned(self, 0, 0);
self setsonarattachmentenabled(1);
}
else
{
setlutscriptindex(lcn, 0);
disable_filter_zm_turned(self, 0, 0);
self setsonarattachmentenabled(0);
}
}
vulture_vision_enable(localclientnumber)
{
if (isdefined(level.perk_vulture.vulture_vision_fx_list[localclientnumber]))

View File

@ -12,6 +12,160 @@
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_ai_basic;
init_vulture()
{
setdvarint("zombies_perk_vulture_pickup_time", 12);
setdvarint("zombies_perk_vulture_pickup_time_stink", 16);
setdvarint("zombies_perk_vulture_drop_chance", 65);
setdvarint("zombies_perk_vulture_ammo_chance", 33);
setdvarint("zombies_perk_vulture_points_chance", 33);
setdvarint("zombies_perk_vulture_stink_chance", 33);
setdvarint("zombies_perk_vulture_drops_max", 20);
setdvarint("zombies_perk_vulture_network_drops_max", 5);
setdvarint("zombies_perk_vulture_network_time_frame", 250);
setdvarint("zombies_perk_vulture_spawn_stink_zombie_cooldown", 12);
setdvarint("zombies_perk_vulture_max_stink_zombies", 4);
level.perk_vulture = spawnstruct();
level.perk_vulture.zombie_stink_array = [];
level.perk_vulture.drop_time_last = 0;
level.perk_vulture.drop_slots_for_network = 0;
level.perk_vulture.last_stink_zombie_spawned = 0;
level.perk_vulture.use_exit_behavior = 0;
level.perk_vulture.clientfields = spawnstruct();
level.perk_vulture.clientfields.scriptmovers = [];
level.perk_vulture.clientfields.scriptmovers["vulture_stink_fx"] = 0;
level.perk_vulture.clientfields.scriptmovers["vulture_drop_fx"] = 1;
level.perk_vulture.clientfields.scriptmovers["vulture_drop_pickup"] = 2;
level.perk_vulture.clientfields.scriptmovers["vulture_powerup_drop"] = 3;
level.perk_vulture.clientfields.actors = [];
level.perk_vulture.clientfields.actors["vulture_stink_trail_fx"] = 0;
level.perk_vulture.clientfields.actors["vulture_eye_glow"] = 1;
level.perk_vulture.clientfields.toplayer = [];
level.perk_vulture.clientfields.toplayer["vulture_perk_active"] = 0;
registerclientfield("toplayer", "vulture_perk_toplayer", 12000, 1, "int");
registerclientfield("actor", "vulture_perk_actor", 12000, 2, "int");
registerclientfield("scriptmover", "vulture_perk_scriptmover", 12000, 4, "int");
registerclientfield("zbarrier", "vulture_perk_zbarrier", 12000, 1, "int");
registerclientfield("toplayer", "sndVultureStink", 12000, 1, "int");
registerclientfield("world", "vulture_perk_disable_solo_quick_revive_glow", 12000, 1, "int");
registerclientfield("toplayer", "vulture_perk_disease_meter", 12000, 5, "float");
registerclientfield("toplayer", "vulture_perk_ir", 3000, 1, "int");
maps\mp\_visionset_mgr::vsmgr_register_info("overlay", "vulture_stink_overlay", 12000, 120, 31, 1);
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic(::vulture_zombie_spawn_func);
register_zombie_death_event_callback(::zombies_drop_stink_on_death);
level thread vulture_perk_watch_mystery_box();
level thread vulture_perk_watch_fire_sale();
level thread vulture_perk_watch_powerup_drops();
level thread vulture_handle_solo_quick_revive();
assert(!isdefined(level.exit_level_func), "vulture perk is attempting to use level.exit_level_func, but one already exists for this level!");
level.exit_level_func = ::vulture_zombies_find_exit_point;
level.perk_vulture.invalid_bonus_ammo_weapons = array("time_bomb_zm", "time_bomb_detonator_zm");
if (!isdefined(level.perk_vulture.func_zombies_find_valid_exit_locations))
level.perk_vulture.func_zombies_find_valid_exit_locations = ::get_valid_exit_points_for_zombie;
setup_splitscreen_optimizations();
initialize_bonus_entity_pool();
initialize_stink_entity_pool();
}
give_vulture_perk()
{
vulture_debug_text("player " + self getentitynumber() + " has vulture perk!");
if (!isdefined(self.perk_vulture))
self.perk_vulture = spawnstruct();
self.perk_vulture.active = 1;
self vulture_vision_toggle(1);
self vulture_clientfield_toplayer_set("vulture_perk_active");
self thread vulture_perk_ir_think();
self thread _vulture_perk_think();
}
take_vulture_perk()
{
if (isdefined(self.perk_vulture) && (isdefined(self.perk_vulture.active) && self.perk_vulture.active))
{
vulture_debug_text("player " + self getentitynumber() + " has lost vulture perk!");
self.perk_vulture.active = 0;
if (!self maps\mp\zombies\_zm_laststand::player_is_in_laststand())
self.ignoreme = 0;
self vulture_vision_toggle(0);
self vulture_clientfield_toplayer_clear("vulture_perk_active");
self set_vulture_overlay(0);
self.vulture_stink_value = 0;
self setclientfieldtoplayer("vulture_perk_disease_meter", 0);
self setclientfieldtoplayer("vulture_perk_ir", 0);
self notify("vulture_perk_lost");
}
}
vulture_perk_ir_think()
{
self endon("disconnect");
self endon("vulture_perk_lost");
self setclientdvar("cg_sonarAttachmentSpeedDelay", 0.1);
prev_val = 0;
while (1)
{
if (prev_val == 0)
{
if (self vulture_perk_ir_is_valid())
{
self setclientfieldtoplayer("vulture_perk_ir", 1);
prev_val = 1;
}
}
else
{
if (!self vulture_perk_ir_is_valid())
{
self setclientfieldtoplayer("vulture_perk_ir", 0);
prev_val = 0;
}
}
wait 0.1;
}
}
vulture_perk_ir_is_valid()
{
// activating vulture stink filter deactivates vulture ir filter
if (isdefined(self.vulture_stink_value) && self.vulture_stink_value > 0)
{
return 0;
}
zombies = getaispeciesarray(level.zombie_team, "all");
if (isdefined(level.sloth))
{
zombies = add_to_array(zombies, level.sloth, 0);
}
foreach (zombie in zombies)
{
if (zombie damageconetrace(self getplayercamerapos(), self))
{
normal = vectornormalize(zombie getcentroid() - self getplayercamerapos());
dot = vectordot(anglestoforward(self.angles), normal);
if (dot >= 0.5)
{
return 0;
}
}
}
return 1;
}
_is_player_in_zombie_stink(a_points)
{
velocity = self getVelocity() * (1, 1, 0);

View File

@ -5,6 +5,7 @@ main()
{
replaceFunc(clientscripts\mp\zm_buried::init_gamemodes, scripts\zm\replaced\zm_buried::init_gamemodes);
replaceFunc(clientscripts\mp\zm_buried::start_zombie_stuff, scripts\zm\replaced\zm_buried::start_zombie_stuff);
replaceFunc(clientscripts\mp\zombies\_zm_perk_vulture::init_vulture, scripts\zm\replaced\_zm_perk_vulture::init_vulture);
replaceFunc(clientscripts\mp\zombies\_zm_perk_vulture::vulture_vision_enable, scripts\zm\replaced\_zm_perk_vulture::vulture_vision_enable);
replaceFunc(clientscripts\mp\zombies\_zm_perk_vulture::vulture_vision_update_wallbuy_list, scripts\zm\replaced\_zm_perk_vulture::vulture_vision_update_wallbuy_list);
replaceFunc(clientscripts\mp\zombies\_zm_perk_vulture::vulture_vision_mystery_box, scripts\zm\replaced\_zm_perk_vulture::vulture_vision_mystery_box);

View File

@ -46,6 +46,9 @@ main()
replaceFunc(maps\mp\zombies\_zm_equip_headchopper::init_anim_slice_times, scripts\zm\replaced\_zm_equip_headchopper::init_anim_slice_times);
replaceFunc(maps\mp\zombies\_zm_equip_headchopper::headchopperthink, scripts\zm\replaced\_zm_equip_headchopper::headchopperthink);
replaceFunc(maps\mp\zombies\_zm_equip_headchopper::setupwatchers, scripts\zm\replaced\_zm_equip_headchopper::setupwatchers);
replaceFunc(maps\mp\zombies\_zm_perk_vulture::init_vulture, scripts\zm\replaced\_zm_perk_vulture::init_vulture);
replaceFunc(maps\mp\zombies\_zm_perk_vulture::give_vulture_perk, scripts\zm\replaced\_zm_perk_vulture::give_vulture_perk);
replaceFunc(maps\mp\zombies\_zm_perk_vulture::take_vulture_perk, scripts\zm\replaced\_zm_perk_vulture::take_vulture_perk);
replaceFunc(maps\mp\zombies\_zm_perk_vulture::_is_player_in_zombie_stink, scripts\zm\replaced\_zm_perk_vulture::_is_player_in_zombie_stink);
replaceFunc(maps\mp\zombies\_zm_weap_slowgun::init, scripts\zm\replaced\_zm_weap_slowgun::init);
replaceFunc(maps\mp\zombies\_zm_weap_slowgun::zombie_paralyzed, scripts\zm\replaced\_zm_weap_slowgun::zombie_paralyzed);

View File

@ -11,6 +11,7 @@ material,menu_zm_nuked_zsurvival_nuked
material,menu_zm_prison_zencounter_cellblock
material,menu_zm_buried_zencounter_street
material,menu_zm_map_transit_blit_power
material,generic_filter_zm_turned
image,menu_zm_transit_zclassic_transit
image,menu_zm_highrise_zclassic_rooftop
image,menu_zm_prison_select_mob