1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -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

@ -82,6 +82,7 @@
* [Equipment](#equipment) * [Equipment](#equipment)
* [Combat Knife](#combat-knife) * [Combat Knife](#combat-knife)
* [Claymore](#claymore) * [Claymore](#claymore)
* [Bouncing Betty](#bouncing-betty)
* [Time Bomb](#time-bomb) * [Time Bomb](#time-bomb)
* [One Inch Punch](#one-inch-punch) * [One Inch Punch](#one-inch-punch)
* [Wallbuys](#wallbuys) * [Wallbuys](#wallbuys)
@ -564,10 +565,14 @@
#### Claymore #### Claymore
* Can be repurchased * Can be repurchased
* Can be placed while in the air * Can be placed while in the air
* Increased explosion radius by 28% (same as Black Ops 2 Multiplayer Claymore)
* Increased max amount that can be placed from 12 to 20 * Increased max amount that can be placed from 12 to 20
* Added weapon name on HUD * Added weapon name on HUD
* Removed initial weapon raise anim * Removed initial weapon raise anim
#### Bouncing Betty
* Replaces Claymore on Origins
#### Time Bomb #### Time Bomb
* No longer sends players back in time * No longer sends players back in time
* Kills all zombies * Kills all zombies

View File

@ -1092,6 +1092,12 @@ LANG_ENGLISH "Hold ^3[{+activate}]^7 for SWAT-556 [Cost: &&1]"
REFERENCE ZOMBIE_WEAPON_STICKY_GRENADE REFERENCE ZOMBIE_WEAPON_STICKY_GRENADE
LANG_ENGLISH "Hold ^3[{+activate}]^7 for Semtex Grenades [Cost: &&1]" LANG_ENGLISH "Hold ^3[{+activate}]^7 for Semtex Grenades [Cost: &&1]"
REFERENCE ZOMBIE_WEAPON_BOUNCINGBETTY
LANG_ENGLISH "Hold ^3[{+activate}]^7 for Bouncing Betty [Cost: &&1]"
REFERENCE ZOMBIE_BOUNCINGBETTY_PICKUP
LANG_ENGLISH "Hold ^3&&1^7 to Pick Up Bouncing Betty"
REFERENCE ZOMBIE_PERK_QUICKREVIVE REFERENCE ZOMBIE_PERK_QUICKREVIVE
LANG_ENGLISH "Hold ^3[{+activate}]^7 for Quick Revive [Cost: &&1]" LANG_ENGLISH "Hold ^3[{+activate}]^7 for Quick Revive [Cost: &&1]"

View File

@ -5039,16 +5039,16 @@
{ {
"targetname" "pf2204_auto37" "targetname" "pf2204_auto37"
"classname" "script_struct" "classname" "script_struct"
"model" "t6_wpn_claymore_world" "model" "t6_wpn_bouncing_betty_world"
"angles" "0 270 0" "angles" "90 270 0"
"origin" "1204 4364.75 -296" "origin" "1204 4362.75 -292"
"script_vector" "0 -90 0" "script_vector" "0 -90 0"
"guid" "A44E7A85" "guid" "A44E7A85"
} }
{ {
"target" "pf2204_auto37" "target" "pf2204_auto37"
"targetname" "claymore_purchase" "targetname" "claymore_purchase"
"zombie_weapon_upgrade" "claymore_zm" "zombie_weapon_upgrade" "bouncingbetty_zm"
"classname" "script_struct" "classname" "script_struct"
"origin" "1197 4364.75 -289" "origin" "1197 4364.75 -289"
"angles" "0 180 0" "angles" "0 180 0"
@ -5126,16 +5126,16 @@
{ {
"targetname" "pf2209_auto37" "targetname" "pf2209_auto37"
"classname" "script_struct" "classname" "script_struct"
"model" "t6_wpn_claymore_world" "model" "t6_wpn_bouncing_betty_world"
"angles" "0 90 0" "angles" "90 90 0"
"origin" "-2848 -69.75 300" "origin" "-2848 -67.75 304"
"script_vector" "0 -90 0" "script_vector" "0 -90 0"
"guid" "A44E7A85" "guid" "A44E7A85"
} }
{ {
"target" "pf2209_auto37" "target" "pf2209_auto37"
"targetname" "claymore_purchase" "targetname" "claymore_purchase"
"zombie_weapon_upgrade" "claymore_zm" "zombie_weapon_upgrade" "bouncingbetty_zm"
"classname" "script_struct" "classname" "script_struct"
"origin" "-2841 -69.75 307" "origin" "-2841 -69.75 307"
"angles" "0 1.00179e-005 0" "angles" "0 1.00179e-005 0"
@ -5348,16 +5348,16 @@
{ {
"targetname" "pf2222_auto37" "targetname" "pf2222_auto37"
"classname" "script_struct" "classname" "script_struct"
"model" "t6_wpn_claymore_world" "model" "t6_wpn_bouncing_betty_world"
"angles" "0 270 0" "angles" "90 270 0"
"origin" "2360 473 165" "origin" "2360 471 169"
"script_vector" "0 -90 0" "script_vector" "0 -90 0"
"guid" "A44E7A85" "guid" "A44E7A85"
} }
{ {
"target" "pf2222_auto37" "target" "pf2222_auto37"
"targetname" "claymore_purchase" "targetname" "claymore_purchase"
"zombie_weapon_upgrade" "claymore_zm" "zombie_weapon_upgrade" "bouncingbetty_zm"
"classname" "script_struct" "classname" "script_struct"
"origin" "2353 473 172" "origin" "2353 473 172"
"angles" "0 180 0" "angles" "0 180 0"

View File

@ -45,6 +45,7 @@ main()
replaceFunc(maps\mp\zombies\_zm_utility::is_temporary_zombie_weapon, scripts\zm\replaced\_zm_utility::is_temporary_zombie_weapon); replaceFunc(maps\mp\zombies\_zm_utility::is_temporary_zombie_weapon, scripts\zm\replaced\_zm_utility::is_temporary_zombie_weapon);
replaceFunc(maps\mp\zombies\_zm_utility::wait_network_frame, scripts\zm\replaced\_zm_utility::wait_network_frame); replaceFunc(maps\mp\zombies\_zm_utility::wait_network_frame, scripts\zm\replaced\_zm_utility::wait_network_frame);
replaceFunc(maps\mp\zombies\_zm_utility::track_players_intersection_tracker, scripts\zm\replaced\_zm_utility::track_players_intersection_tracker); replaceFunc(maps\mp\zombies\_zm_utility::track_players_intersection_tracker, scripts\zm\replaced\_zm_utility::track_players_intersection_tracker);
replaceFunc(maps\mp\zombies\_zm_ffotd::ffotd_melee_miss_func, scripts\zm\replaced\_zm_ffotd::ffotd_melee_miss_func);
replaceFunc(maps\mp\zombies\_zm_score::add_to_player_score, scripts\zm\replaced\_zm_score::add_to_player_score); replaceFunc(maps\mp\zombies\_zm_score::add_to_player_score, scripts\zm\replaced\_zm_score::add_to_player_score);
replaceFunc(maps\mp\zombies\_zm_score::minus_to_player_score, scripts\zm\replaced\_zm_score::minus_to_player_score); replaceFunc(maps\mp\zombies\_zm_score::minus_to_player_score, scripts\zm\replaced\_zm_score::minus_to_player_score);
replaceFunc(maps\mp\zombies\_zm_score::player_add_points_kill_bonus, scripts\zm\replaced\_zm_score::player_add_points_kill_bonus); replaceFunc(maps\mp\zombies\_zm_score::player_add_points_kill_bonus, scripts\zm\replaced\_zm_score::player_add_points_kill_bonus);
@ -62,6 +63,8 @@ main()
replaceFunc(maps\mp\zombies\_zm_weapons::ammo_give, scripts\zm\replaced\_zm_weapons::ammo_give); replaceFunc(maps\mp\zombies\_zm_weapons::ammo_give, scripts\zm\replaced\_zm_weapons::ammo_give);
replaceFunc(maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost, scripts\zm\replaced\_zm_weapons::get_upgraded_ammo_cost); replaceFunc(maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost, scripts\zm\replaced\_zm_weapons::get_upgraded_ammo_cost);
replaceFunc(maps\mp\zombies\_zm_weapons::makegrenadedudanddestroy, scripts\zm\replaced\_zm_weapons::makegrenadedudanddestroy); replaceFunc(maps\mp\zombies\_zm_weapons::makegrenadedudanddestroy, scripts\zm\replaced\_zm_weapons::makegrenadedudanddestroy);
replaceFunc(maps\mp\zombies\_zm_weapons::weaponobjects_on_player_connect_override_internal, scripts\zm\replaced\_zm_weapons::weaponobjects_on_player_connect_override_internal);
replaceFunc(maps\mp\zombies\_zm_weapons::setupretrievablehintstrings, scripts\zm\replaced\_zm_weapons::setupretrievablehintstrings);
replaceFunc(maps\mp\zombies\_zm_weapons::createballisticknifewatcher_zm, scripts\zm\replaced\_zm_weapons::createballisticknifewatcher_zm); replaceFunc(maps\mp\zombies\_zm_weapons::createballisticknifewatcher_zm, scripts\zm\replaced\_zm_weapons::createballisticknifewatcher_zm);
replaceFunc(maps\mp\zombies\_zm_weapons::weapon_spawn_think, scripts\zm\replaced\_zm_weapons::weapon_spawn_think); replaceFunc(maps\mp\zombies\_zm_weapons::weapon_spawn_think, scripts\zm\replaced\_zm_weapons::weapon_spawn_think);
replaceFunc(maps\mp\zombies\_zm_weapons::weapon_set_first_time_hint, scripts\zm\replaced\_zm_weapons::weapon_set_first_time_hint); replaceFunc(maps\mp\zombies\_zm_weapons::weapon_set_first_time_hint, scripts\zm\replaced\_zm_weapons::weapon_set_first_time_hint);
@ -118,7 +121,6 @@ main()
replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::watch_use_trigger, scripts\zm\replaced\_zm_weap_ballistic_knife::watch_use_trigger); replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::watch_use_trigger, scripts\zm\replaced\_zm_weap_ballistic_knife::watch_use_trigger);
replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::pick_up, scripts\zm\replaced\_zm_weap_ballistic_knife::pick_up); replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::pick_up, scripts\zm\replaced\_zm_weap_ballistic_knife::pick_up);
replaceFunc(maps\mp\zombies\_zm_weap_claymore::claymore_detonation, scripts\zm\replaced\_zm_weap_claymore::claymore_detonation); replaceFunc(maps\mp\zombies\_zm_weap_claymore::claymore_detonation, scripts\zm\replaced\_zm_weap_claymore::claymore_detonation);
replaceFunc(maps\mp\zombies\_zm_weap_claymore::claymore_setup, scripts\zm\replaced\_zm_weap_claymore::claymore_setup);
replaceFunc(maps\mp\zombies\_zm_weap_cymbal_monkey::init, scripts\zm\replaced\_zm_weap_cymbal_monkey::init); replaceFunc(maps\mp\zombies\_zm_weap_cymbal_monkey::init, scripts\zm\replaced\_zm_weap_cymbal_monkey::init);
replaceFunc(maps\mp\zombies\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey, scripts\zm\replaced\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey); replaceFunc(maps\mp\zombies\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey, scripts\zm\replaced\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey);
} }
@ -230,7 +232,6 @@ on_player_spawned()
self.solo_lives_given = 0; self.solo_lives_given = 0;
self.stored_weapon_data = undefined; self.stored_weapon_data = undefined;
self.screecher_seen_hint = 1;
self thread health_bar_hud(); self thread health_bar_hud();
self thread zone_name_hud(); self thread zone_name_hud();
@ -340,7 +341,6 @@ post_all_players_spawned()
wait 0.05; wait 0.05;
level.near_miss = 2; // makes screecher not run away first time on solo
level.ta_vaultfee = 0; level.ta_vaultfee = 0;
level.ta_tellerfee = 0; level.ta_tellerfee = 0;
level.weapon_locker_online = 0; level.weapon_locker_online = 0;
@ -367,10 +367,6 @@ post_all_players_spawned()
level.zombie_vars["slipgun_reslip_rate"] = 0; level.zombie_vars["slipgun_reslip_rate"] = 0;
level.zombie_vars["zombie_perk_divetonuke_min_damage"] = 1000; level.zombie_vars["zombie_perk_divetonuke_min_damage"] = 1000;
level.zombie_vars["zombie_perk_divetonuke_max_damage"] = 5000; level.zombie_vars["zombie_perk_divetonuke_max_damage"] = 5000;
level.explode_overheated_jetgun = 0;
level.unbuild_overheated_jetgun = 0;
level.take_overheated_jetgun = 1;
level.dont_allow_meat_interaction = 1;
level.players_can_damage_riotshields = 1; level.players_can_damage_riotshields = 1;
level.speed_change_round = undefined; level.speed_change_round = undefined;
level.playersuicideallowed = undefined; level.playersuicideallowed = undefined;
@ -487,9 +483,10 @@ health_bar_hud()
flag_wait("hud_visible"); flag_wait("hud_visible");
prev_health = 0; vars = [];
prev_maxhealth = 0; vars["prev_health"] = 0;
prev_shield_health = 0; vars["prev_maxhealth"] = 0;
vars["prev_shield_health"] = 0;
while (1) while (1)
{ {
@ -501,14 +498,14 @@ health_bar_hud()
shield_health = int((shield_health / level.zombie_vars["riotshield_hit_points"]) * 100); shield_health = int((shield_health / level.zombie_vars["riotshield_hit_points"]) * 100);
} }
if (self.health != prev_health || self.maxhealth != prev_maxhealth || shield_health != prev_shield_health) if (self.health != vars["prev_health"] || self.maxhealth != vars["prev_maxhealth"] || shield_health != vars["prev_shield_health"])
{ {
self luinotifyevent(&"hud_update_health", 3, self.health, self.maxhealth, shield_health); self luinotifyevent(&"hud_update_health", 3, self.health, self.maxhealth, shield_health);
} }
prev_health = self.health; vars["prev_health"] = self.health;
prev_maxhealth = self.maxhealth; vars["prev_maxhealth"] = self.maxhealth;
prev_shield_health = shield_health; vars["prev_shield_health"] = shield_health;
wait 0.05; wait 0.05;
} }
@ -543,26 +540,28 @@ enemy_counter_hud()
hud.alpha = 1; hud.alpha = 1;
vars = [];
while (1) while (1)
{ {
enemies = get_round_enemy_array().size + level.zombie_total; vars["enemies"] = get_round_enemy_array().size + level.zombie_total;
if (level flag_exists("spawn_ghosts") && flag("spawn_ghosts")) if (level flag_exists("spawn_ghosts") && flag("spawn_ghosts"))
{ {
enemies = get_current_ghost_count(); vars["enemies"] = get_current_ghost_count();
} }
else if (level flag_exists("sq_tpo_special_round_active") && flag("sq_tpo_special_round_active")) else if (level flag_exists("sq_tpo_special_round_active") && flag("sq_tpo_special_round_active"))
{ {
enemies = 0; vars["enemies"] = 0;
} }
if (enemies == 0) if (vars["enemies"] == 0)
{ {
hud setText(""); hud setText("");
} }
else else
{ {
hud setValue(enemies); hud setValue(vars["enemies"]);
} }
wait 0.05; wait 0.05;
@ -571,16 +570,19 @@ enemy_counter_hud()
get_current_ghost_count() get_current_ghost_count()
{ {
ghost_count = 0; vars = [];
ais = getaiarray(level.zombie_team); vars["ghost_count"] = 0;
vars["ais"] = getaiarray(level.zombie_team);
foreach (ai in ais) for (i = 0; i < vars["ais"].size; i++)
{ {
if (isdefined(ai.is_ghost) && ai.is_ghost) vars["ai"] = vars["ais"][i];
ghost_count++;
if (isdefined(vars["ai"].is_ghost) && vars["ai"].is_ghost)
vars["ghost_count"]++;
} }
return ghost_count; return vars["ghost_count"];
} }
timer_hud() timer_hud()
@ -1365,8 +1367,8 @@ fall_velocity_check()
while (!self isOnGround()) while (!self isOnGround())
{ {
vars["was_on_ground"] = 0; vars["was_on_ground"] = 0;
vel = self getVelocity(); vars["vel"] = self getVelocity();
self.fall_velocity = vel[2]; self.fall_velocity = vars["vel"][2];
wait 0.05; wait 0.05;
} }
@ -1393,14 +1395,16 @@ fall_velocity_check()
disable_bank_teller() disable_bank_teller()
{ {
level notify("stop_bank_teller"); vars = [];
bank_teller_dmg_trig = getent("bank_teller_tazer_trig", "targetname");
if (IsDefined(bank_teller_dmg_trig)) level notify("stop_bank_teller");
vars["bank_teller_dmg_trig"] = getent("bank_teller_tazer_trig", "targetname");
if (IsDefined(vars["bank_teller_dmg_trig"]))
{ {
bank_teller_transfer_trig = getent(bank_teller_dmg_trig.target, "targetname"); vars["bank_teller_transfer_trig"] = getent(vars["bank_teller_dmg_trig"].target, "targetname");
bank_teller_dmg_trig delete(); vars["bank_teller_transfer_trig"] delete();
bank_teller_transfer_trig delete(); vars["bank_teller_dmg_trig"] delete();
} }
} }
@ -1470,6 +1474,10 @@ weapon_changes()
include_weapon("held_one_inch_punch_lightning_zm", 0); include_weapon("held_one_inch_punch_lightning_zm", 0);
register_melee_weapon_for_level("held_one_inch_punch_lightning_zm"); register_melee_weapon_for_level("held_one_inch_punch_lightning_zm");
include_weapon("bouncingbetty_zm", 0);
add_zombie_weapon("bouncingbetty_zm", undefined, &"ZOMBIE_WEAPON_BOUNCINGBETTY", 1000, "wpck_explo", "", undefined, 1);
register_placeable_mine_for_level("bouncingbetty_zm");
} }
if (isdefined(level.zombie_weapons["saritch_zm"])) if (isdefined(level.zombie_weapons["saritch_zm"]))

View File

@ -0,0 +1,516 @@
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_equipment;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\gametypes_zm\_weaponobjects;
init()
{
if (!isdefined(level.betties_max_per_player))
level.betties_max_per_player = 20;
trigs = getentarray("betty_purchase", "targetname");
for (i = 0; i < trigs.size; i++)
{
model = getent(trigs[i].target, "targetname");
if (isdefined(model))
model hide();
}
array_thread(trigs, ::buy_betties);
level thread give_betties_after_rounds();
level.betties_on_damage = ::satchel_damage;
level.pickup_betties = ::pickup_betties;
level.pickup_betties_trigger_listener = ::pickup_betties_trigger_listener;
level._effect["betty_light"] = loadfx("weapon/bouncing_betty/fx_betty_light_green");
level._effect["betty_launch"] = loadfx("weapon/bouncing_betty/fx_betty_launch_dust");
level._effect["betty_explosion"] = loadfx("weapon/bouncing_betty/fx_betty_explosion");
}
buy_betties()
{
self.zombie_cost = 1000;
self sethintstring(&"ZOMBIE_WEAPON_BOUNCINGBETTY", self.zombie_cost);
self setcursorhint("HINT_WEAPON", "bouncingbetty_zm");
self endon("kill_trigger");
if (!isdefined(self.stub))
return;
if (isdefined(self.stub) && !isdefined(self.stub.betties_triggered))
self.stub.betties_triggered = 0;
self.betties_triggered = self.stub.betties_triggered;
while (true)
{
self waittill("trigger", who);
if (who in_revive_trigger())
continue;
if (who has_powerup_weapon())
{
wait 0.1;
continue;
}
if (is_player_valid(who))
{
if (who.score >= self.zombie_cost)
{
if (!who is_player_placeable_mine("bouncingbetty_zm") || who getWeaponAmmoStock("bouncingbetty_zm") < 2)
{
play_sound_at_pos("purchase", self.origin);
who maps\mp\zombies\_zm_score::minus_to_player_score(self.zombie_cost);
if (!who is_player_placeable_mine("bouncingbetty_zm"))
{
who thread show_betty_hint("betty_purchased");
}
who thread betty_setup();
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog("weapon_pickup", "grenade");
if (isdefined(self.stub))
self.betties_triggered = self.stub.betties_triggered;
if (self.betties_triggered == 0)
{
model = getent(self.target, "targetname");
if (isdefined(model))
model thread maps\mp\zombies\_zm_weapons::weapon_show(who);
else if (isdefined(self.clientfieldname))
level setclientfield(self.clientfieldname, 1);
self.betties_triggered = 1;
if (isdefined(self.stub))
self.stub.betties_triggered = 1;
}
trigs = getentarray("betty_purchase", "targetname");
for (i = 0; i < trigs.size; i++)
trigs[i] setinvisibletoplayer(who);
}
}
else
{
who play_sound_on_ent("no_purchase");
who maps\mp\zombies\_zm_audio::create_and_play_dialog("general", "no_money_weapon");
}
}
}
}
betty_unitrigger_update_prompt(player)
{
self sethintstring(&"ZOMBIE_WEAPON_BOUNCINGBETTY", self.zombie_cost);
self setcursorhint("HINT_WEAPON", "bouncingbetty_zm");
return true;
}
betty_safe_to_plant()
{
if (self.owner.betties.size >= level.betties_max_per_player)
return 0;
if (isdefined(level.betty_safe_to_plant))
return self [[level.betty_safe_to_plant]]();
return 1;
}
betty_wait_and_detonate()
{
wait 0.1;
self detonate(self.owner);
}
betty_watch()
{
self endon("death");
self notify("betty_watch");
self endon("betty_watch");
while (true)
{
self waittill("grenade_fire", betty, weapname);
if (weapname == "bouncingbetty_zm")
{
betty.owner = self;
betty.team = self.team;
self notify("zmb_enable_betty_prompt");
if (betty betty_safe_to_plant())
{
if (isdefined(level.betty_planted))
self thread [[level.betty_planted]](betty);
betty thread betty_detonation();
betty thread play_betty_effects();
self maps\mp\zombies\_zm_stats::increment_client_stat("betties_planted");
self maps\mp\zombies\_zm_stats::increment_player_stat("betties_planted");
}
else
betty thread betty_wait_and_detonate();
self thread betty_last_shot_switch(weapname);
}
}
}
// empty drop anim doesn't work for weapons that use `offhandSlot\Equipment\` attribute
betty_last_shot_switch(weapname)
{
self endon("disconnect");
fire_time = 0.85;
if (self hasperk("specialty_rof"))
{
fire_time -= 0.2;
}
wait fire_time;
if (!self hasweapon(weapname))
{
return;
}
if (self getcurrentweapon() != weapname)
{
return;
}
if (self getammocount(weapname) != 0)
{
return;
}
self takeweapon(weapname);
self giveweapon(weapname);
self setweaponammoclip(weapname, 0);
}
betty_setup()
{
if (!isdefined(self.betties))
self.betties = [];
self thread betty_watch();
self giveweapon("bouncingbetty_zm");
self set_player_placeable_mine("bouncingbetty_zm");
self setactionslot(4, "weapon", "bouncingbetty_zm");
self setweaponammostock("bouncingbetty_zm", 2);
}
adjust_trigger_origin(origin)
{
origin = origin + vectorscale((0, 0, 1), 20.0);
return origin;
}
on_spawn_retrieve_trigger(watcher, player)
{
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject(watcher, player);
if (isdefined(self.pickuptrigger))
self.pickuptrigger sethintlowpriority(0);
}
pickup_betties()
{
player = self.owner;
if (!player hasweapon("bouncingbetty_zm"))
{
player thread betty_watch();
player giveweapon("bouncingbetty_zm");
player set_player_placeable_mine("bouncingbetty_zm");
player setactionslot(4, "weapon", "bouncingbetty_zm");
player setweaponammoclip("bouncingbetty_zm", 0);
player notify("zmb_enable_betty_prompt");
}
else
{
clip_ammo = player getweaponammoclip(self.name);
clip_max_ammo = weaponclipsize(self.name);
if (clip_ammo >= clip_max_ammo)
{
self destroy_ent();
player notify("zmb_disable_betty_prompt");
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip(self.name);
clip_max_ammo = weaponclipsize(self.name);
if (clip_ammo >= clip_max_ammo)
player notify("zmb_disable_betty_prompt");
player maps\mp\zombies\_zm_stats::increment_client_stat("betties_pickedup");
player maps\mp\zombies\_zm_stats::increment_player_stat("betties_pickedup");
}
pickup_betties_trigger_listener(trigger, player)
{
self thread pickup_betties_trigger_listener_enable(trigger, player);
self thread pickup_betties_trigger_listener_disable(trigger, player);
}
pickup_betties_trigger_listener_enable(trigger, player)
{
self endon("delete");
self endon("death");
while (true)
{
player waittill_any("zmb_enable_betty_prompt", "spawned_player");
if (!isdefined(trigger))
return;
trigger trigger_on();
trigger linkto(self);
}
}
pickup_betties_trigger_listener_disable(trigger, player)
{
self endon("delete");
self endon("death");
while (true)
{
player waittill("zmb_disable_betty_prompt");
if (!isdefined(trigger))
return;
trigger unlink();
trigger trigger_off();
}
}
betty_detonation()
{
self endon("death");
self waittill_not_moving();
wait 0.1;
detonateradius = 96;
damagearea = spawn("trigger_radius", self.origin + (0, 0, 0 - detonateradius), 4, detonateradius, detonateradius * 2);
damagearea setexcludeteamfortrigger(self.team);
damagearea enablelinkto();
damagearea linkto(self);
if (is_true(self.isonbus))
damagearea setmovingplatformenabled(1);
self.damagearea = damagearea;
self thread delete_betties_on_death(self.owner, damagearea);
self.owner.betties[self.owner.betties.size] = self;
while (true)
{
damagearea waittill("trigger", ent);
if (isdefined(self.owner) && ent == self.owner)
continue;
if (isdefined(ent.pers) && isdefined(ent.pers["team"]) && ent.pers["team"] == self.team)
continue;
if (isDefined(ent.pers) && isDefined(ent.pers["team"]) && ent.pers["team"] == getOtherTeam(self.team))
continue;
if (isdefined(ent.ignore_betty) && ent.ignore_betty)
continue;
if (ent damageconetrace(self.origin, self) > 0)
{
self spawnminemover();
self.minemover thread bouncingbettyjumpandexplode();
self delete();
return;
}
}
}
spawnminemover()
{
minemover = spawn("script_model", self.origin);
minemover.angles = self.angles;
minemover setmodel(self.model);
minemover.owner = self.owner;
self.minemover = minemover;
}
bouncingbettyjumpandexplode()
{
vars = [];
vars["bettyjumpheight"] = 65;
vars["bettyjumptime"] = 0.65;
vars["bettyrotatevelocity"] = (0, 750, 32);
vars["explodepos"] = self.origin + (0, 0, vars["bettyjumpheight"]);
self moveto(vars["explodepos"], vars["bettyjumptime"], vars["bettyjumptime"], 0);
playfx(level._effect["betty_launch"], self.origin);
self rotatevelocity(vars["bettyrotatevelocity"], vars["bettyjumptime"], 0, vars["bettyjumptime"]);
self playsound("fly_betty_jump");
wait(vars["bettyjumptime"]);
self thread mineexplode();
}
mineexplode()
{
vars = [];
vars["bettydamageradius"] = 256;
vars["bettydamagemax"] = 200;
vars["bettydamagemin"] = 50;
if (!isdefined(self) || !isdefined(self.owner))
return;
self playsound("fly_betty_explo");
wait 0.05;
if (!isdefined(self) || !isdefined(self.owner))
return;
self hide();
self radiusdamage(self.origin, vars["bettydamageradius"], vars["bettydamagemax"], vars["bettydamagemin"], self.owner, "MOD_EXPLOSIVE", "bouncingbetty_zm");
playfx(level._effect["betty_explosion"], self.origin);
wait 0.2;
if (!isdefined(self) || !isdefined(self.owner))
return;
if (isdefined(self.trigger))
self.trigger delete();
self delete();
}
delete_betties_on_death(player, ent)
{
self waittill("death");
if (isdefined(player))
arrayremovevalue(player.betties, self);
wait 0.05;
if (isdefined(ent))
ent delete();
}
satchel_damage()
{
self endon("death");
self setcandamage(1);
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while (true)
{
self waittill("damage", amount, attacker);
if (!isdefined(self))
return;
self.health = self.maxhealth;
if (!isplayer(attacker))
continue;
if (isdefined(self.owner) && attacker == self.owner)
continue;
if (isdefined(attacker.pers) && isdefined(attacker.pers["team"]) && attacker.pers["team"] != level.zombie_team)
continue;
break;
}
if (level.satchelexplodethisframe)
wait(0.1 + randomfloat(0.4));
else
wait 0.05;
if (!isdefined(self))
return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate(attacker);
}
reset_satchel_explode_this_frame()
{
wait 0.05;
level.satchelexplodethisframe = 0;
}
play_betty_effects()
{
self endon("death");
self waittill_not_moving();
playfxontag(level._effect["betty_light"], self, "tag_origin");
}
give_betties_after_rounds()
{
while (true)
{
level waittill("between_round_over");
if (!level flag_exists("teleporter_used") || !flag("teleporter_used"))
{
players = get_players();
for (i = 0; i < players.size; i++)
{
if (players[i] is_player_placeable_mine("bouncingbetty_zm"))
{
players[i] giveweapon("bouncingbetty_zm");
players[i] set_player_placeable_mine("bouncingbetty_zm");
players[i] setactionslot(4, "weapon", "bouncingbetty_zm");
players[i] setweaponammoclip("bouncingbetty_zm", 2);
}
}
}
}
}
show_betty_hint(string)
{
self endon("death");
self endon("disconnect");
if (string == "betty_purchased")
text = &"ZOMBIE_BETTY_HOWTO";
else
text = &"ZOMBIE_BETTY_ALREADY_PURCHASED";
show_equipment_hint_text(text);
}

View File

@ -27,8 +27,8 @@ screecher_spawning_logic()
while (!isdefined(level.zombie_screecher_locations) || level.zombie_screecher_locations.size <= 0) while (!isdefined(level.zombie_screecher_locations) || level.zombie_screecher_locations.size <= 0)
wait 0.1; wait 0.1;
// while ( getdvarint( _hash_B0C0D38F ) ) while (getdvarint("scr_screecher_ignore_player"))
// wait 0.1; wait 0.1;
if (!flag("spawn_zombies")) if (!flag("spawn_zombies"))
flag_wait("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) screecher_melee_damage(player)
{ {
melee_score = 0; 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; 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; 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); 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 else
{ {
if (is_lethal_grenade(unitrigger_stub.zombie_weapon_upgrade)) 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 (!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); unitrigger_stub.hint_string = get_weapon_hint(weapon);
else else
unitrigger_stub.hint_string = get_weapon_hint_ammo(); 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; 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); 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 else
{ {
if (is_lethal_grenade(unitrigger_stub.zombie_weapon_upgrade)) 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); self play_weapon_vo(weapon, magic_box);
return; 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])) 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) createballisticknifewatcher_zm(name, weapon)
{ {
watcher = self maps\mp\gametypes_zm\_weaponobjects::createuseweaponobjectwatcher(name, weapon, self.team); 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"); a_rare_weapons = array("dsr50_zm", "srm1216_zm");
if (digger.dig_vars["has_upgraded_shovel"]) 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; str_weapon = undefined;
@ -189,9 +189,9 @@ dig_up_weapon(digger)
v_spawnang = (0, 0, 0); v_spawnang = (0, 0, 0);
str_spec_model = undefined; 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); 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; 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); 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); v_spawnang += vectorscale((0, 0, 1), 90.0);
} }
@ -246,12 +246,12 @@ swap_weapon(str_weapon, e_player)
{ {
str_current_weapon = e_player getcurrentweapon(); str_current_weapon = e_player getcurrentweapon();
if (str_weapon == "claymore_zm") if (str_weapon == "bouncingbetty_zm")
{ {
if (!e_player hasweapon(str_weapon)) if (!e_player hasweapon(str_weapon))
{ {
e_player thread maps\mp\zombies\_zm_weap_claymore::show_claymore_hint("claymore_purchased"); e_player thread scripts\zm\reimagined\_zm_weap_bouncingbetty::show_betty_hint("betty_purchased");
e_player thread maps\mp\zombies\_zm_weap_claymore::claymore_setup(); 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"); e_player thread maps\mp\zombies\_zm_audio::create_and_play_dialog("weapon_pickup", "grenade");
} }
else else

View File

@ -83,6 +83,7 @@ init()
meat_init(); meat_init();
} }
level.dont_allow_meat_interaction = 1;
level.can_revive_game_module = ::can_revive; level.can_revive_game_module = ::can_revive;
level._powerup_grab_check = ::powerup_can_player_grab; level._powerup_grab_check = ::powerup_can_player_grab;
level.meat_bounce_override = scripts\zm\replaced\zgrief::meat_bounce_override; level.meat_bounce_override = scripts\zm\replaced\zgrief::meat_bounce_override;

View File

@ -64,6 +64,8 @@ main()
replaceFunc(maps\mp\zombies\_zm_weap_staff_fire::flame_damage_fx, scripts\zm\replaced\_zm_weap_staff_fire::flame_damage_fx); replaceFunc(maps\mp\zombies\_zm_weap_staff_fire::flame_damage_fx, scripts\zm\replaced\_zm_weap_staff_fire::flame_damage_fx);
replaceFunc(maps\mp\zombies\_zm_weap_staff_fire::get_impact_damage, scripts\zm\replaced\_zm_weap_staff_fire::get_impact_damage); replaceFunc(maps\mp\zombies\_zm_weap_staff_fire::get_impact_damage, scripts\zm\replaced\_zm_weap_staff_fire::get_impact_damage);
replaceFunc(maps\mp\zombies\_zm_weap_staff_lightning::staff_lightning_ball_kill_zombies, scripts\zm\replaced\_zm_weap_staff_lightning::staff_lightning_ball_kill_zombies); replaceFunc(maps\mp\zombies\_zm_weap_staff_lightning::staff_lightning_ball_kill_zombies, scripts\zm\replaced\_zm_weap_staff_lightning::staff_lightning_ball_kill_zombies);
scripts\zm\reimagined\_zm_weap_bouncingbetty::init();
} }
init() init()

View File

@ -28,6 +28,7 @@ main()
replaceFunc(maps\mp\zombies\_zm_ai_avogadro::avogadro_exit, scripts\zm\replaced\_zm_ai_avogadro::avogadro_exit); replaceFunc(maps\mp\zombies\_zm_ai_avogadro::avogadro_exit, scripts\zm\replaced\_zm_ai_avogadro::avogadro_exit);
replaceFunc(maps\mp\zombies\_zm_ai_avogadro::avogadro_damage_func, scripts\zm\replaced\_zm_ai_avogadro::avogadro_damage_func); replaceFunc(maps\mp\zombies\_zm_ai_avogadro::avogadro_damage_func, scripts\zm\replaced\_zm_ai_avogadro::avogadro_damage_func);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_spawning_logic, scripts\zm\replaced\_zm_ai_screecher::screecher_spawning_logic); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_spawning_logic, scripts\zm\replaced\_zm_ai_screecher::screecher_spawning_logic);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_attacking, scripts\zm\replaced\_zm_ai_screecher::screecher_attacking);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_melee_damage, scripts\zm\replaced\_zm_ai_screecher::screecher_melee_damage); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_melee_damage, scripts\zm\replaced\_zm_ai_screecher::screecher_melee_damage);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_detach, scripts\zm\replaced\_zm_ai_screecher::screecher_detach); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_detach, scripts\zm\replaced\_zm_ai_screecher::screecher_detach);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_cleanup, scripts\zm\replaced\_zm_ai_screecher::screecher_cleanup); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_cleanup, scripts\zm\replaced\_zm_ai_screecher::screecher_cleanup);
@ -62,6 +63,9 @@ main()
init() init()
{ {
level.explode_overheated_jetgun = 0;
level.unbuild_overheated_jetgun = 0;
level.take_overheated_jetgun = 1;
level.zombie_init_done = ::zombie_init_done; level.zombie_init_done = ::zombie_init_done;
level.special_weapon_magicbox_check = ::transit_special_weapon_magicbox_check; level.special_weapon_magicbox_check = ::transit_special_weapon_magicbox_check;
level.can_revive = ::can_revive; level.can_revive = ::can_revive;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,8 @@
>type,fastfile >type,fastfile
>name,common_mp >name,common_mp
>level.ipak_read,mp
include,includes/knife_zm include,includes/knife_zm
include,includes/knife_ballistic_zm include,includes/knife_ballistic_zm
@ -10,6 +12,7 @@ include,includes/insas_zm
include,includes/vector_zm include,includes/vector_zm
include,includes/sig556_zm include,includes/sig556_zm
include,includes/sa58_zm include,includes/sa58_zm
include,includes/bouncing_betty_zm
include,includes/attachment include,includes/attachment
include,includes/materials include,includes/materials

View File

@ -0,0 +1,35 @@
image,~~-gmtl_t6_wpn_bouncing_betty~906cc183
image,mtl_t6_wpn_bouncing_betty_nml
image,~-gmtl_t6_wpn_bouncing_betty_col
material,mc/mtl_t6_wpn_bouncing_betty
xmodel,t6_wpn_bouncing_betty_view
xmodel,t6_wpn_bouncing_betty_world
xanim,viewmodel_bouncing_betty_idle
xanim,viewmodel_bouncing_betty_fire
xanim,viewmodel_bouncing_betty_ads_up
xanim,viewmodel_bouncing_betty_ads_down
material,hud_bounce_betty_256
image,hud_bounce_betty_32
material,hud_bounce_betty
image,mtl_t6_wpn_bouncing_betty_col
material,mc/mtl_t6_wpn_bouncing_betty_detect
xmodel,t6_wpn_bouncing_betty_world_detect
image,fxt_exp_ember_omni
material,gfx_fxt_exp_ember_omni_add
material,gfx_fxt_light_flare_phosphorous_z120
fx,weapon/bouncing_betty/fx_betty_explosion
fx,weapon/bouncing_betty/fx_betty_destroyed
material,gfx_fxt_smk_light_old_z20
image,fxt_debris_gib_rock
material,gfx_fxt_debris_gib_rock
image,fxt_debris_plume_dirt
material,gfx_fxt_debris_plume_dirt_z5
material,gfx_fxt_smk_gen_ds255_z10
material,gfx_fxt_debris_plume_dirt
fx,weapon/bouncing_betty/fx_betty_launch_dirt
material,gfx_fxt_debris_wind_ash
material,gfx_fxt_smk_light_old_z5
fx,weapon/bouncing_betty/fx_betty_launch_dust
material,gfx_fxt_light_flare_halogen_eo4_z2
fx,weapon/bouncing_betty/fx_betty_light_green
fx,weapon/bouncing_betty/fx_betty_light_red