[MIRROR] replaces all instances of ammo_casing/BB to loaded_projectile again without crashing this time (#3478)

* replaces all instances of ammo_casing/BB to loaded_projectile again without crashing this time

* a

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
This commit is contained in:
SkyratBot
2021-02-18 21:00:40 +00:00
committed by GitHub
co-authored by Kylerace Gandalf2k15
parent 9e07263fdf
commit d2c0090c83
30 changed files with 173 additions and 139 deletions
@@ -267,7 +267,7 @@
to_chat(user, "<span class='warning'>The [name] is not ready yet.</span>")
/obj/item/gun/magic/tentacle/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
var/obj/projectile/tentacle/tentacle_shot = chambered.BB //Gets the actual projectile we will fire
var/obj/projectile/tentacle/tentacle_shot = chambered.loaded_projectile //Gets the actual projectile we will fire
tentacle_shot.fire_modifiers = params2list(params)
. = ..()
if(charges == 0)
@@ -252,9 +252,9 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
..()
else if(Pewgun)
if(Pewgun.chambered)
if(Pewgun.chambered.BB)
qdel(Pewgun.chambered.BB)
Pewgun.chambered.BB = null //because qdel takes too long, ensures icon update
if(Pewgun.chambered.loaded_projectile)
qdel(Pewgun.chambered.loaded_projectile)
Pewgun.chambered.loaded_projectile = null //because qdel takes too long, ensures icon update
Pewgun.chambered.update_icon()
..()
else
@@ -16,7 +16,7 @@
///The bullet type to create when New() is called
var/projectile_type = null
///the loaded projectile in this ammo casing
var/obj/projectile/BB = null
var/obj/projectile/loaded_projectile = null
///Pellets for spreadshot
var/pellets = 1
///Variance for inaccuracy fundamental to the casing
@@ -35,12 +35,12 @@
/obj/item/ammo_casing/spent
name = "spent bullet casing"
BB = null
loaded_projectile = null
/obj/item/ammo_casing/Initialize()
. = ..()
if(projectile_type)
BB = new projectile_type(src)
loaded_projectile = new projectile_type(src)
pixel_x = base_pixel_x + rand(-10, 10)
pixel_y = base_pixel_y + rand(-10, 10)
setDir(pick(GLOB.alldirs))
@@ -50,21 +50,21 @@
. = ..()
var/turf/T = get_turf(src)
if(T && !BB && is_station_level(T.z))
if(T && !loaded_projectile && is_station_level(T.z))
SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
QDEL_NULL(BB)
QDEL_NULL(loaded_projectile)
/obj/item/ammo_casing/update_icon()
. = ..()
icon_state = "[initial(icon_state)][BB ? "-live" : ""]"
desc = "[initial(desc)][BB ? "" : " This one is spent."]"
icon_state = "[initial(icon_state)][loaded_projectile ? "-live" : ""]"
desc = "[initial(desc)][loaded_projectile ? "" : " This one is spent."]"
/*
* On accidental consumption, 'spend' the ammo, and add in some gunpowder
*/
/obj/item/ammo_casing/on_accidental_consumption(mob/living/carbon/victim, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE)
if(BB)
BB = null
if(loaded_projectile)
loaded_projectile = null
update_icon()
victim.reagents?.add_reagent(/datum/reagent/gunpowder, 3)
source_item?.reagents?.add_reagent(/datum/reagent/gunpowder, source_item.reagents.total_volume*(2/3))
@@ -73,8 +73,8 @@
//proc to magically refill a casing with a new projectile
/obj/item/ammo_casing/proc/newshot() //For energy weapons, syringe gun, shotgun shells and wands (!).
if(!BB)
BB = new projectile_type(src, src)
if(!loaded_projectile)
loaded_projectile = new projectile_type(src, src)
/obj/item/ammo_casing/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/ammo_box))
@@ -84,7 +84,7 @@
for(var/obj/item/ammo_casing/bullet in loc)
if (box.stored_ammo.len >= box.max_ammo)
break
if (bullet.BB)
if (bullet.loaded_projectile)
if (box.give_round(bullet, 0))
boolets++
else
+18 -18
View File
@@ -11,7 +11,7 @@
if(!throw_proj(target, targloc, user, params, spread))
return FALSE
else
if(isnull(BB))
if(isnull(loaded_projectile))
return FALSE
AddComponent(/datum/component/pellet_cloud, projectile_type, pellets)
SEND_SIGNAL(src, COMSIG_PELLET_CLOUD_INIT, target, user, fired_from, randomspread, spread, zone_override, params, distro)
@@ -28,34 +28,34 @@
return TRUE
/obj/item/ammo_casing/proc/ready_proj(atom/target, mob/living/user, quiet, zone_override = "", atom/fired_from)
if (!BB)
if (!loaded_projectile)
return
BB.original = target
BB.firer = user
BB.fired_from = fired_from
loaded_projectile.original = target
loaded_projectile.firer = user
loaded_projectile.fired_from = fired_from
if (zone_override)
BB.def_zone = zone_override
loaded_projectile.def_zone = zone_override
else
BB.def_zone = user.zone_selected
BB.suppressed = quiet
loaded_projectile.def_zone = user.zone_selected
loaded_projectile.suppressed = quiet
if(isgun(fired_from))
var/obj/item/gun/G = fired_from
BB.damage *= G.projectile_damage_multiplier
loaded_projectile.damage *= G.projectile_damage_multiplier
if(reagents && BB.reagents)
reagents.trans_to(BB, reagents.total_volume, transfered_by = user) //For chemical darts/bullets
if(reagents && loaded_projectile.reagents)
reagents.trans_to(loaded_projectile, reagents.total_volume, transfered_by = user) //For chemical darts/bullets
qdel(reagents)
/obj/item/ammo_casing/proc/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread)
var/turf/curloc = get_turf(user)
if (!istype(targloc) || !istype(curloc) || !BB)
if (!istype(targloc) || !istype(curloc) || !loaded_projectile)
return FALSE
var/firing_dir
if(BB.firer)
firing_dir = BB.firer.dir
if(!BB.suppressed && firing_effect_type)
if(loaded_projectile.firer)
firing_dir = loaded_projectile.firer.dir
if(!loaded_projectile.suppressed && firing_effect_type)
new firing_effect_type(get_turf(src), firing_dir)
var/direct_target
@@ -63,9 +63,9 @@
if(target) //if the target is right on our location we'll skip the travelling code in the proj's fire()
direct_target = target
if(!direct_target)
BB.preparePixelProjectile(target, user, params, spread)
BB.fire(null, direct_target)
BB = null
loaded_projectile.preparePixelProjectile(target, user, params, spread)
loaded_projectile.fire(null, direct_target)
loaded_projectile = null
return TRUE
/obj/item/ammo_casing/proc/spread(turf/target, turf/current, distro)
@@ -14,17 +14,17 @@
if (modified)
icon_state = "foamdart_empty"
desc = "It's Donk or Don't! ... Although, this one doesn't look too safe."
if(BB)
BB.icon_state = "foamdart_empty"
if(loaded_projectile)
loaded_projectile.icon_state = "foamdart_empty"
else
icon_state = initial(icon_state)
desc = "It's Donk or Don't! Ages 8 and up."
if(BB)
BB.icon_state = initial(BB.icon_state)
if(loaded_projectile)
loaded_projectile.icon_state = initial(loaded_projectile.icon_state)
/obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params)
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
var/obj/projectile/bullet/reusable/foam_dart/FD = loaded_projectile
if (A.tool_behaviour == TOOL_SCREWDRIVER && !modified)
modified = TRUE
FD.modified = TRUE
@@ -49,7 +49,7 @@
return ..()
/obj/item/ammo_casing/caseless/foam_dart/attack_self(mob/living/user)
var/obj/projectile/bullet/reusable/foam_dart/FD = BB
var/obj/projectile/bullet/reusable/foam_dart/FD = loaded_projectile
if(FD.pen)
FD.damage = initial(FD.damage)
FD.nodamage = initial(FD.nodamage)
@@ -16,6 +16,6 @@
/obj/item/ammo_casing/energy/wormhole/throw_proj()
. = ..()
if(istype(BB, /obj/projectile/beam/wormhole))
var/obj/projectile/beam/wormhole/WH = BB
if(istype(loaded_projectile, /obj/projectile/beam/wormhole))
var/obj/projectile/beam/wormhole/WH = loaded_projectile
WH.gun = gun
@@ -6,7 +6,7 @@
firing_effect_type = null
/obj/item/ammo_casing/syringegun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
if(!BB)
if(!loaded_projectile)
return
if(istype(loc, /obj/item/gun/syringe))
var/obj/item/gun/syringe/SG = loc
@@ -15,16 +15,16 @@
var/obj/item/reagent_containers/syringe/S = SG.syringes[1]
S.reagents.trans_to(BB, S.reagents.total_volume, transfered_by = user)
BB.name = S.name
var/obj/projectile/bullet/dart/D = BB
S.reagents.trans_to(loaded_projectile, S.reagents.total_volume, transfered_by = user)
loaded_projectile.name = S.name
var/obj/projectile/bullet/dart/D = loaded_projectile
D.piercing = S.proj_piercing
SG.syringes.Remove(S)
qdel(S)
else if(istype(loc, /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun))
var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/syringe_gun = loc
var/obj/item/reagent_containers/syringe/loaded_syringe = syringe_gun.syringes[1]
var/obj/projectile/bullet/dart/shot_dart = BB
var/obj/projectile/bullet/dart/shot_dart = loaded_projectile
syringe_gun.reagents.trans_to(shot_dart, min(loaded_syringe.volume, syringe_gun.reagents.total_volume), transfered_by = user)
shot_dart.name = loaded_syringe.name
shot_dart.piercing = loaded_syringe.proj_piercing
@@ -39,14 +39,14 @@
firing_effect_type = null
/obj/item/ammo_casing/chemgun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
if(!BB)
if(!loaded_projectile)
return
if(istype(loc, /obj/item/gun/chem))
var/obj/item/gun/chem/CG = loc
if(CG.syringes_left <= 0)
return
CG.reagents.trans_to(BB, 15, transfered_by = user)
BB.name = "piercing chemical dart"
CG.reagents.trans_to(loaded_projectile, 15, transfered_by = user)
loaded_projectile.name = "piercing chemical dart"
CG.syringes_left--
return ..()
@@ -57,7 +57,7 @@
firing_effect_type = null
/obj/item/ammo_casing/dnainjector/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
if(!BB)
if(!loaded_projectile)
return
if(istype(loc, /obj/item/gun/syringe/dna))
var/obj/item/gun/syringe/dna/SG = loc
@@ -65,7 +65,7 @@
return
var/obj/item/dnainjector/S = popleft(SG.syringes)
var/obj/projectile/bullet/dnainjector/D = BB
var/obj/projectile/bullet/dnainjector/D = loaded_projectile
S.forceMove(D)
D.injector = S
return ..()
@@ -87,7 +87,7 @@
//for accessibles magazines (e.g internal ones) when full, start replacing spent ammo
else if(replace_spent)
for(var/obj/item/ammo_casing/AC in stored_ammo)
if(!AC.BB)//found a spent ammo
if(!AC.loaded_projectile)//found a spent ammo
stored_ammo -= AC
AC.forceMove(get_turf(src.loc))
@@ -161,7 +161,7 @@
/obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE)
var/boolets = 0
for(var/obj/item/ammo_casing/bullet in stored_ammo)
if(bullet && (bullet.BB || countempties))
if(bullet && (bullet.loaded_projectile || countempties))
boolets++
return boolets
@@ -38,7 +38,7 @@
for(var/i in 1 to stored_ammo.len)
var/obj/item/ammo_casing/bullet = stored_ammo[i]
if(!bullet || !bullet.BB) // found a spent ammo
if(!bullet || !bullet.loaded_projectile) // found a spent ammo
stored_ammo[i] = R
R.forceMove(src)
+9 -9
View File
@@ -299,7 +299,7 @@
if(iteration > 1 && !(user.is_holding(src))) //for burst firing
firing_burst = FALSE
return FALSE
if(chambered?.BB)
if(chambered?.loaded_projectile)
if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
if(chambered.harmful) // Is the bullet chambered harmful?
to_chat(user, "<span class='warning'>[src] is lethally chambered! You don't want to risk harming anyone...</span>")
@@ -643,16 +643,16 @@
target.visible_message("<span class='warning'>[user] pulls the trigger!</span>", "<span class='userdanger'>[(user == target) ? "You pull" : "[user] pulls"] the trigger!</span>")
if(chambered?.BB)
chambered.BB.damage *= 5
if(chambered.BB.wound_bonus != CANT_WOUND)
chambered.BB.wound_bonus += 5 // much more dramatic on multiple pellet'd projectiles really
if(chambered?.loaded_projectile)
chambered.loaded_projectile.damage *= 5
if(chambered.loaded_projectile.wound_bonus != CANT_WOUND)
chambered.loaded_projectile.wound_bonus += 5 // much more dramatic on multiple pellet'd projectiles really
var/fired = process_fire(target, user, TRUE, params, BODY_ZONE_HEAD)
if(!fired && chambered?.BB)
chambered.BB.damage /= 5
if(chambered.BB.wound_bonus != CANT_WOUND)
chambered.BB.wound_bonus -= 5
if(!fired && chambered?.loaded_projectile)
chambered.loaded_projectile.damage /= 5
if(chambered.loaded_projectile.wound_bonus != CANT_WOUND)
chambered.loaded_projectile.wound_bonus -= 5
/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins
if(pin)
+17 -17
View File
@@ -91,7 +91,7 @@
var/suppressor_y_offset ///pixel offset for the suppressor overlay on the y axis.
///Gun internal magazine modification and misfiring
///Can we modify our ammo type in this gun's internal magazine?
var/can_modify_ammo = FALSE
///our initial ammo type. Should match initial caliber, but a bit of redundency doesn't hurt.
@@ -106,7 +106,7 @@
var/alternative_ammo_misfires = FALSE
/// Whether our ammo misfires now or when it's set by the wrench_act. TRUE means it misfires.
var/can_misfire = FALSE
///How likely is our gun to misfire?
///How likely is our gun to misfire?
var/misfire_probability = 0
///How much does shooting the gun increment the misfire probability?
var/misfire_percentage_increment = 0
@@ -153,7 +153,7 @@
. += MA
if(!chambered && empty_indicator) //this is duplicated in c20's update_overlayss due to a layering issue with the select fire icon.
. += "[icon_state]_empty"
if(gun_flags & TOY_FIREARM_OVERLAY)
. += "[icon_state]_toy"
@@ -296,7 +296,7 @@
return
if (istype(A, /obj/item/ammo_casing) || istype(A, /obj/item/ammo_box))
if (bolt_type == BOLT_TYPE_NO_BOLT || internal_magazine)
if (chambered && !chambered.BB)
if (chambered && !chambered.loaded_projectile)
chambered.forceMove(drop_location())
chambered = null
var/num_loaded = magazine?.attackby(A, user, params, TRUE)
@@ -326,16 +326,16 @@
if (can_be_sawn_off)
if (sawoff(user, A))
return
if(can_misfire && istype(A, /obj/item/stack/sheet/cloth))
if(guncleaning(user, A))
return
return FALSE
/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
if(magazine && chambered.BB && can_misfire && misfire_probability > 0)
if(magazine && chambered.loaded_projectile && can_misfire && misfire_probability > 0)
if(prob(misfire_probability))
if(blow_up(user))
to_chat(user, "<span class='userdanger'>[src] misfires!</span>")
@@ -347,7 +347,7 @@
/obj/item/gun/ballistic/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
if(can_misfire)
misfire_probability += misfire_percentage_increment
. = ..()
///Installs a new suppressor, assumes that the suppressor is already in the contents of src
@@ -490,7 +490,7 @@
#define BRAINS_BLOWN_THROW_SPEED 1
/obj/item/gun/ballistic/suicide_act(mob/user)
var/obj/item/organ/brain/B = user.getorganslot(ORGAN_SLOT_BRAIN)
if (B && chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage)
if (B && chambered && chambered.loaded_projectile && can_trigger_gun(user) && !chambered.loaded_projectile.nodamage)
user.visible_message("<span class='suicide'>[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!</span>")
sleep(25)
if(user.is_holding(src))
@@ -557,10 +557,10 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
if(misfire_probability == 0)
to_chat(user, "<span class='notice'>\The [src] seems to be already clean of fouling.</span>")
return
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='notice'>[user] begins to cleaning \the [src].</span>", "<span class='notice'>You begin to clean the internals of \the [src].</span>")
if(do_after(user, 100, target = src))
var/original_misfire_value = initial(misfire_probability)
if(misfire_probability > original_misfire_value)
@@ -572,15 +572,15 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
if(!user.is_holding(src))
to_chat(user, "<span class='notice'>You need to hold [src] to modify it.</span>")
return TRUE
if(!can_modify_ammo)
return
if(bolt_type == BOLT_TYPE_STANDARD)
if(get_ammo())
if(get_ammo())
to_chat(user, "<span class='notice'>You can't get at the internals while the gun has a bullet in it!</span>")
return
else if(!bolt_locked)
to_chat(user, "<span class='notice'>You can't get at the internals while the bolt is down!</span>")
return
@@ -589,7 +589,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
I.play_tool_sound(src)
if(!I.use_tool(src, user, 3 SECONDS))
return TRUE
if(blow_up(user))
user.visible_message("<span class='danger'>\The [src] goes off!</span>", "<span class='danger'>\The [src] goes off in your face!</span>")
return
@@ -612,7 +612,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
/obj/item/gun/ballistic/proc/blow_up(mob/user)
. = FALSE
for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
if(AC.BB)
if(AC.loaded_projectile)
process_fire(user, user, FALSE)
. = TRUE
@@ -105,7 +105,7 @@
var/skip_357_missfire_check = FALSE
/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
if(magazine && magazine.caliber != initial(magazine.caliber) && chambered.BB && !skip_357_missfire_check)
if(magazine && magazine.caliber != initial(magazine.caliber) && chambered.loaded_projectile && !skip_357_missfire_check)
if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60
to_chat(user, "<span class='userdanger'>[src] misfires!</span>")
if(user.get_item_for_held_index(1) == src)
@@ -126,7 +126,7 @@
return TRUE
if(magazine.ammo_count()) //If it has any ammo inside....
user.visible_message("<span class='danger'>[src]'s hammer drops while you're handling it!</span>") //...you learn an important lesson about firearms safety.
var/drop_the_gun_it_actually_fired = chambered.BB ? TRUE : FALSE //Is a live round chambered?
var/drop_the_gun_it_actually_fired = chambered.loaded_projectile ? TRUE : FALSE //Is a live round chambered?
skip_357_missfire_check = TRUE //We set this true, then back to false after process_fire, to reduce redundacy of a round "misfiring" when it's already misfiring from wrench_act
process_fire(user, user, FALSE)
skip_357_missfire_check = FALSE
@@ -72,9 +72,43 @@
can_bayonet = FALSE
update_icon()
/* - SKYRAT EDIT REMOVAL
/obj/item/gun/ballistic/rifle/boltaction/attack_self(mob/user)
if(can_jam)
if(jammed)
if(prob(unjam_chance))
jammed = FALSE
unjam_chance = 10
else
unjam_chance += 10
to_chat(user, "<span class='warning'>[src] is jammed!</span>")
playsound(user,'sound/weapons/jammed.ogg', 75, TRUE)
return FALSE
..()
/obj/item/gun/ballistic/rifle/boltaction/process_fire(mob/user)
if(can_jam)
if(chambered.loaded_projectile)
if(prob(jamming_chance))
jammed = TRUE
jamming_chance += jamming_increment
jamming_chance = clamp (jamming_chance, 0, 100)
return ..()
/obj/item/gun/ballistic/rifle/boltaction/attackby(obj/item/item, mob/user, params)
. = ..()
if(can_jam)
if(bolt_locked)
if(istype(item, /obj/item/gun_maintenance_supplies))
if(do_after(user, 10 SECONDS, target = src))
user.visible_message("<span class='notice'>[user] finishes maintenance of [src].</span>")
jamming_chance = 10
qdel(item)
*/ //SKYRAT EDIT END
/obj/item/gun/ballistic/rifle/boltaction/blow_up(mob/user)
. = FALSE
if(chambered?.BB)
if(chambered?.loaded_projectile)
process_fire(user, user, FALSE)
. = TRUE
@@ -30,7 +30,7 @@
/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
. = 0
if(chambered?.BB)
if(chambered?.loaded_projectile)
process_fire(user, user, FALSE)
. = 1
@@ -48,7 +48,7 @@
/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0)
..()
if(chambered && !chambered.BB)
if(chambered && !chambered.loaded_projectile)
qdel(chambered)
/obj/item/gun/ballistic/shotgun/toy/unrestricted
+9 -9
View File
@@ -106,11 +106,11 @@
var/obj/item/ammo_casing/energy/AC = ammo_type[select]
if(cell.charge >= AC.e_cost) //if there's enough power in the cell cell...
chambered = AC //...prepare a new shot based on the current ammo type selected
if(!chambered.BB)
if(!chambered.loaded_projectile)
chambered.newshot()
/obj/item/gun/energy/process_chamber()
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
if(chambered && !chambered.loaded_projectile) //if loaded_projectile is null, i.e the shot has been fired...
var/obj/item/ammo_casing/energy/shot = chambered
cell.use(shot.e_cost)//... drain the cell cell
chambered = null //either way, released the prepared shot
@@ -223,25 +223,25 @@
. = ""
else
var/obj/item/ammo_casing/energy/E = ammo_type[select]
var/obj/projectile/energy/BB = E.BB
if(!BB)
var/obj/projectile/energy/loaded_projectile = E.loaded_projectile
if(!loaded_projectile)
. = ""
else if(BB.nodamage || !BB.damage || BB.damage_type == STAMINA)
else if(loaded_projectile.nodamage || !loaded_projectile.damage || loaded_projectile.damage_type == STAMINA)
user.visible_message("<span class='danger'>[user] tries to light [A.loc == user ? "[user.p_their()] [A.name]" : A] with [src], but it doesn't do anything. Dumbass.</span>")
playsound(user, E.fire_sound, 50, TRUE)
playsound(user, BB.hitsound, 50, TRUE)
playsound(user, loaded_projectile.hitsound, 50, TRUE)
cell.use(E.e_cost)
. = ""
else if(BB.damage_type != BURN)
else if(loaded_projectile.damage_type != BURN)
user.visible_message("<span class='danger'>[user] tries to light [A.loc == user ? "[user.p_their()] [A.name]" : A] with [src], but only succeeds in utterly destroying it. Dumbass.</span>")
playsound(user, E.fire_sound, 50, TRUE)
playsound(user, BB.hitsound, 50, TRUE)
playsound(user, loaded_projectile.hitsound, 50, TRUE)
cell.use(E.e_cost)
qdel(A)
. = ""
else
playsound(user, E.fire_sound, 50, TRUE)
playsound(user, BB.hitsound, 50, TRUE)
playsound(user, loaded_projectile.hitsound, 50, TRUE)
cell.use(E.e_cost)
. = "<span class='danger'>[user] casually lights [A.loc == user ? "[user.p_their()] [A.name]" : A] with [src]. Damn.</span>"
@@ -248,7 +248,7 @@
/obj/item/ammo_casing/energy/duel/ready_proj(atom/target, mob/living/user, quiet, zone_override)
. = ..()
var/obj/projectile/energy/duel/D = BB
var/obj/projectile/energy/duel/D = loaded_projectile
D.setting = setting
D.update_icon()
@@ -166,7 +166,7 @@
..()
if(loc && istype(loc, /obj/item/gun/energy/kinetic_accelerator))
var/obj/item/gun/energy/kinetic_accelerator/KA = loc
KA.modify_projectile(BB)
KA.modify_projectile(loaded_projectile)
//Projectiles
/obj/projectile/kinetic
@@ -232,7 +232,7 @@
var/obj/item/ammo_casing/energy/wormhole/W = ammo_type[i]
if(istype(W))
W.gun = src
var/obj/projectile/beam/wormhole/WH = W.BB
var/obj/projectile/beam/wormhole/WH = W.loaded_projectile
if(istype(WH))
WH.gun = src
+2 -2
View File
@@ -40,11 +40,11 @@
return charges
/obj/item/gun/magic/recharge_newshot()
if (charges && chambered && !chambered.BB)
if (charges && chambered && !chambered.loaded_projectile)
chambered.newshot()
/obj/item/gun/magic/process_chamber()
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
if(chambered && !chambered.loaded_projectile) //if BB is null, i.e the shot has been fired...
charges--//... drain a charge
recharge_newshot()
@@ -361,7 +361,7 @@
/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
. = ..()
var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = BB
var/obj/projectile/beam/beam_rifle/hitscan/HS_BB = loaded_projectile
if(!istype(HS_BB))
return
HS_BB.impact_direct_damage = projectile_damage
@@ -382,7 +382,7 @@
/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread)
var/turf/curloc = get_turf(user)
if(!istype(curloc) || !BB)
if(!istype(curloc) || !loaded_projectile)
return FALSE
var/obj/item/gun/energy/beam_rifle/gun = loc
if(!targloc && gun)
@@ -390,13 +390,13 @@
else if(!targloc)
return FALSE
var/firing_dir
if(BB.firer)
firing_dir = BB.firer.dir
if(!BB.suppressed && firing_effect_type)
if(loaded_projectile.firer)
firing_dir = loaded_projectile.firer.dir
if(!loaded_projectile.suppressed && firing_effect_type)
new firing_effect_type(get_turf(src), firing_dir)
BB.preparePixelProjectile(target, user, params, spread)
BB.fire(gun? gun.lastangle : null, null)
BB = null
loaded_projectile.preparePixelProjectile(target, user, params, spread)
loaded_projectile.fire(gun? gun.lastangle : null, null)
loaded_projectile = null
return TRUE
/obj/item/ammo_casing/energy/beam_rifle/hitscan
@@ -31,7 +31,7 @@
return syringes_left
/obj/item/gun/chem/process_chamber()
if(chambered && !chambered.BB && syringes_left)
if(chambered && !chambered.loaded_projectile && syringes_left)
chambered.newshot()
/obj/item/gun/chem/process()
@@ -41,6 +41,6 @@
return
to_chat(loc, "<span class='warning'>You hear a click as [src] synthesizes a new dart.</span>")
syringes_left++
if(chambered && !chambered.BB)
if(chambered && !chambered.loaded_projectile)
chambered.newshot()
last_synth = world.time
@@ -34,7 +34,7 @@
return syringes.len
/obj/item/gun/syringe/process_chamber()
if(chambered && !chambered.BB) //we just fired
if(chambered && !chambered.loaded_projectile) //we just fired
recharge_newshot()
update_icon()
@@ -18,7 +18,7 @@
dropped = 1
var/obj/item/ammo_casing/caseless/foam_dart/newcasing = new ammo_type(T)
newcasing.modified = modified
var/obj/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB
var/obj/projectile/bullet/reusable/foam_dart/newdart = newcasing.loaded_projectile
newdart.modified = modified
if(modified)
newdart.damage = 5