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

Bouncing Betty: replace Claymore on Origins

Claymore: increase explosion radius
Move certain vars to not exceed canonical string table limit
This commit is contained in:
Jbleezy
2024-02-09 18:39:06 -08:00
parent 04252e9420
commit 4c7b0f53c7
17 changed files with 784 additions and 69 deletions

View File

@ -27,8 +27,8 @@ screecher_spawning_logic()
while (!isdefined(level.zombie_screecher_locations) || level.zombie_screecher_locations.size <= 0)
wait 0.1;
// while ( getdvarint( _hash_B0C0D38F ) )
// wait 0.1;
while (getdvarint("scr_screecher_ignore_player"))
wait 0.1;
if (!flag("spawn_zombies"))
flag_wait("spawn_zombies");
@ -115,6 +115,43 @@ screecher_spawning_logic()
}
}
screecher_attacking()
{
player = self.favoriteenemy;
if (!isdefined(player))
{
self thread screecher_detach(player);
return;
}
if (screecher_should_runaway(player))
{
self thread screecher_detach(player);
player thread do_player_general_vox("general", "screecher_jumpoff");
return;
}
if (self.attack_time < gettime())
{
scratch_score = 5;
players = get_players();
self.screecher_score = self.screecher_score + scratch_score;
killed_player = self screecher_check_score();
if (player.health > 0 && !(isdefined(killed_player) && killed_player))
{
self.attack_delay = self.attack_delay_base + randomint(self.attack_delay_offset);
self.attack_time = gettime() + self.attack_delay;
self thread claw_fx(player, self.attack_delay * 0.001);
self playsound("zmb_vocals_screecher_attack");
player playsoundtoplayer("zmb_screecher_scratch", player);
player thread do_player_general_vox("general", "screecher_attack");
players = get_players();
}
}
}
screecher_melee_damage(player)
{
melee_score = 0;

View File

@ -0,0 +1,26 @@
#include maps\mp\zombies\_zm_ffotd;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_stats;
ffotd_melee_miss_func()
{
if (isdefined(self.enemy))
{
if (isplayer(self.enemy) && is_placeable_mine(self.enemy getcurrentweapon()))
{
dist_sq = distancesquared(self.enemy.origin, self.origin);
melee_dist_sq = self.meleeattackdist * self.meleeattackdist;
if (dist_sq < melee_dist_sq)
{
self.enemy dodamage(self.meleedamage, self.origin, self, self, "none", "MOD_MELEE");
return;
}
}
}
if (isdefined(level.original_melee_miss_func))
self [[level.original_melee_miss_func]]();
}

View File

@ -233,16 +233,4 @@ claymore_detonation()
return;
}
}
}
claymore_setup()
{
if (!isdefined(self.claymores))
self.claymores = [];
self thread claymore_watch();
self giveweapon("claymore_zm");
self set_player_placeable_mine("claymore_zm");
self setactionslot(4, "weapon", "claymore_zm");
self setweaponammostock("claymore_zm", 2);
}

View File

@ -149,6 +149,11 @@ init_spawnable_weapon_upgrade()
unitrigger_stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_weap_claymore::claymore_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, scripts\zm\replaced\_zm_weap_claymore::buy_claymores);
}
else if (unitrigger_stub.zombie_weapon_upgrade == "bouncingbetty_zm")
{
unitrigger_stub.prompt_and_visibility_func = scripts\zm\reimagined\_zm_weap_bouncingbetty::betty_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, scripts\zm\reimagined\_zm_weap_bouncingbetty::buy_betties);
}
else
{
if (is_lethal_grenade(unitrigger_stub.zombie_weapon_upgrade))
@ -220,7 +225,7 @@ add_dynamic_wallbuy(weapon, wallbuy, pristine)
if (!is_melee_weapon(weapon))
{
if (pristine || weapon == "claymore_zm")
if (pristine || weapon == "claymore_zm" || weapon == "bouncingbetty_zm")
unitrigger_stub.hint_string = get_weapon_hint(weapon);
else
unitrigger_stub.hint_string = get_weapon_hint_ammo();
@ -249,6 +254,11 @@ add_dynamic_wallbuy(weapon, wallbuy, pristine)
unitrigger_stub.prompt_and_visibility_func = maps\mp\zombies\_zm_weap_claymore::claymore_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, maps\mp\zombies\_zm_weap_claymore::buy_claymores);
}
else if (weapon == "bouncingbetty_zm")
{
unitrigger_stub.prompt_and_visibility_func = scripts\zm\reimagined\_zm_weap_bouncingbetty::betty_unitrigger_update_prompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger(unitrigger_stub, scripts\zm\reimagined\_zm_weap_bouncingbetty::buy_betties);
}
else
{
if (is_lethal_grenade(unitrigger_stub.zombie_weapon_upgrade))
@ -444,6 +454,12 @@ weapon_give(weapon, is_upgrade, magic_box, nosound)
self play_weapon_vo(weapon, magic_box);
return;
}
else if (weapon == "bouncingbetty_zm")
{
self thread scripts\zm\reimagined\_zm_weap_bouncingbetty::betty_setup();
self play_weapon_vo(weapon, magic_box);
return;
}
if (isDefined(level.zombie_weapons_callbacks) && isDefined(level.zombie_weapons_callbacks[weapon]))
{
@ -851,6 +867,73 @@ makegrenadedudanddestroy()
}
}
weaponobjects_on_player_connect_override_internal()
{
self maps\mp\gametypes_zm\_weaponobjects::createbasewatchers();
self createclaymorewatcher_zm();
self createbettywatcher_zm();
for (i = 0; i < level.retrievable_knife_init_names.size; i++)
self createballisticknifewatcher_zm(level.retrievable_knife_init_names[i], level.retrievable_knife_init_names[i] + "_zm");
self maps\mp\gametypes_zm\_weaponobjects::setupretrievablewatcher();
if (!isdefined(self.weaponobjectwatcherarray))
self.weaponobjectwatcherarray = [];
self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponobjectspawn();
self thread maps\mp\gametypes_zm\_weaponobjects::watchweaponprojectileobjectspawn();
self thread maps\mp\gametypes_zm\_weaponobjects::deleteweaponobjectson();
self.concussionendtime = 0;
self.hasdonecombat = 0;
self.lastfiretime = 0;
self thread watchweaponusagezm();
self thread maps\mp\gametypes_zm\_weapons::watchgrenadeusage();
self thread maps\mp\gametypes_zm\_weapons::watchmissileusage();
self thread watchweaponchangezm();
self thread maps\mp\gametypes_zm\_weapons::watchturretuse();
self thread trackweaponzm();
self notify("weapon_watchers_created");
}
createbettywatcher_zm()
{
watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher("bouncingbetty", "bouncingbetty_zm", self.team);
watcher.onspawnretrievetriggers = scripts\zm\reimagined\_zm_weap_bouncingbetty::on_spawn_retrieve_trigger;
watcher.adjusttriggerorigin = scripts\zm\reimagined\_zm_weap_bouncingbetty::adjust_trigger_origin;
watcher.pickup = level.pickup_betties;
watcher.pickup_trigger_listener = level.pickup_betties_trigger_listener;
watcher.skip_weapon_object_damage = 1;
watcher.headicon = 0;
watcher.watchforfire = 1;
watcher.detonate = ::bettydetonate;
watcher.ondamage = level.betties_on_damage;
}
bettydetonate(attacker, weaponname)
{
from_emp = isempweapon(weaponname);
if (from_emp)
{
self delete();
return;
}
if (isdefined(attacker))
self detonate(attacker);
else if (isdefined(self.owner) && isplayer(self.owner))
self detonate(self.owner);
else
self detonate();
}
setupretrievablehintstrings()
{
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint("claymore", &"ZOMBIE_CLAYMORE_PICKUP");
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint("bouncingbetty", &"ZOMBIE_BOUNCINGBETTY_PICKUP");
}
createballisticknifewatcher_zm(name, weapon)
{
watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher(name, weapon, self.team);

View File

@ -176,7 +176,7 @@ dig_up_weapon(digger)
a_rare_weapons = array("dsr50_zm", "srm1216_zm");
if (digger.dig_vars["has_upgraded_shovel"])
a_rare_weapons = combinearrays(a_rare_weapons, array("claymore_zm", "vector_zm", "ksg_zm", "mp40_zm", "mp44_zm"));
a_rare_weapons = combinearrays(a_rare_weapons, array("bouncingbetty_zm", "vector_zm", "ksg_zm", "mp40_zm", "mp44_zm"));
str_weapon = undefined;
@ -189,9 +189,9 @@ dig_up_weapon(digger)
v_spawnang = (0, 0, 0);
str_spec_model = undefined;
if (str_weapon == "claymore_zm")
if (str_weapon == "bouncingbetty_zm")
{
str_spec_model = "t6_wpn_claymore_world";
str_spec_model = "t6_wpn_bouncing_betty_world";
v_spawnang += vectorscale((0, 1, 0), 90.0);
}
@ -199,9 +199,9 @@ dig_up_weapon(digger)
v_angles = (0, v_angles[1], 0) + vectorscale((0, 1, 0), 90.0) + v_spawnang;
m_weapon = spawn_weapon_model(str_weapon, str_spec_model, v_spawnpt, v_angles);
if (str_weapon == "claymore_zm")
if (str_weapon == "bouncingbetty_zm")
{
m_weapon setmodel("t6_wpn_claymore_world");
m_weapon setmodel("t6_wpn_bouncing_betty_world");
v_spawnang += vectorscale((0, 0, 1), 90.0);
}
@ -246,12 +246,12 @@ swap_weapon(str_weapon, e_player)
{
str_current_weapon = e_player getcurrentweapon();
if (str_weapon == "claymore_zm")
if (str_weapon == "bouncingbetty_zm")
{
if (!e_player hasweapon(str_weapon))
{
e_player thread maps\mp\zombies\_zm_weap_claymore::show_claymore_hint("claymore_purchased");
e_player thread maps\mp\zombies\_zm_weap_claymore::claymore_setup();
e_player thread scripts\zm\reimagined\_zm_weap_bouncingbetty::show_betty_hint("betty_purchased");
e_player thread scripts\zm\reimagined\_zm_weap_bouncingbetty::betty_setup();
e_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog("weapon_pickup", "grenade");
}
else