Updates /code/game/objects/item/grenades/* to follow the style guide (#63030)

Co-authored-by: SuperNovaa41 <supernovaa41@protonmail.com>
This commit is contained in:
Seth Scherer
2021-11-26 12:10:01 -08:00
committed by GitHub
co-authored by SuperNovaa41
parent eb6c491914
commit 324117d637
12 changed files with 310 additions and 299 deletions
@@ -11,8 +11,8 @@
. = ..()
update_mob()
for(var/turf/T in view(range,src))
T.AddElement(/datum/element/forced_gravity, forced_value)
addtimer(CALLBACK(T, /datum/.proc/_RemoveElement, list(/datum/element/forced_gravity,forced_value)), duration)
for(var/turf/lanced_turf in view(range, src))
lanced_turf.AddElement(/datum/element/forced_gravity, forced_value)
addtimer(CALLBACK(lanced_turf, /datum/.proc/_RemoveElement, list(/datum/element/forced_gravity, forced_value)), duration)
qdel(src)
@@ -14,7 +14,7 @@
to_chat(user, span_warning("You crush the [src]! [capitalize(DisplayTimeText(det_time))]!"))
if(shrapnel_type && shrapnel_radius)
shrapnel_initialized = TRUE
AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius)
AddComponent(/datum/component/pellet_cloud, projectile_type = shrapnel_type, magnitude = shrapnel_radius)
active = TRUE
icon_state = initial(icon_state) + "_active"
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', volume, TRUE)
+187 -183
View File
@@ -32,9 +32,9 @@
if(user.can_see_reagents())
if(beakers.len)
. += span_notice("You scan the grenade and detect the following reagents:")
for(var/obj/item/reagent_containers/glass/G in beakers)
for(var/datum/reagent/R in G.reagents.reagent_list)
. += span_notice("[R.volume] units of [R.name] in the [G.name].")
for(var/obj/item/reagent_containers/glass/glass_beaker in beakers)
for(var/datum/reagent/reagent in glass_beaker.reagents.reagent_list)
. += span_notice("[reagent.volume] units of [reagent.name] in the [glass_beaker.name].")
if(beakers.len == 1)
. += span_notice("You detect no second beaker in the grenade.")
else
@@ -43,8 +43,8 @@
if(beakers.len == 2 && beakers[1].name == beakers[2].name)
. += span_notice("You see two [beakers[1].name]s inside the grenade.")
else
for(var/obj/item/reagent_containers/glass/G in beakers)
. += span_notice("You see a [G.name] inside the grenade.")
for(var/obj/item/reagent_containers/glass/glass_beaker in beakers)
. += span_notice("You see a [glass_beaker.name] inside the grenade.")
/obj/item/grenade/chem_grenade/attack_self(mob/user)
if(stage == GRENADE_READY && !active)
@@ -52,15 +52,15 @@
if(stage == GRENADE_WIRED)
wires.interact(user)
/obj/item/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/assembly) && stage == GRENADE_WIRED)
/obj/item/grenade/chem_grenade/attackby(obj/item/item, mob/user, params)
if(istype(item, /obj/item/assembly) && stage == GRENADE_WIRED)
wires.interact(user)
if(I.tool_behaviour == TOOL_SCREWDRIVER)
if(item.tool_behaviour == TOOL_SCREWDRIVER)
if(stage == GRENADE_WIRED)
if(beakers.len)
stage_change(GRENADE_READY)
to_chat(user, span_notice("You lock the [initial(name)] assembly."))
I.play_tool_sound(src, 25)
item.play_tool_sound(src, 25)
else
to_chat(user, span_warning("You need to add at least one beaker before locking the [initial(name)] assembly!"))
else if(stage == GRENADE_READY)
@@ -72,28 +72,28 @@
else
to_chat(user, span_warning("You need to add a wire!"))
return
else if(stage == GRENADE_WIRED && is_type_in_list(I, allowed_containers))
else if(stage == GRENADE_WIRED && is_type_in_list(item, allowed_containers))
. = TRUE //no afterattack
if(is_type_in_list(I, banned_containers))
to_chat(user, span_warning("[src] is too small to fit [I]!")) // this one hits home huh anon?
if(is_type_in_list(item, banned_containers))
to_chat(user, span_warning("[src] is too small to fit [item]!")) // this one hits home huh anon?
return
if(beakers.len == 2)
to_chat(user, span_warning("[src] can not hold more containers!"))
return
else
if(I.reagents.total_volume)
if(!user.transferItemToLoc(I, src))
if(item.reagents.total_volume)
if(!user.transferItemToLoc(item, src))
return
to_chat(user, span_notice("You add [I] to the [initial(name)] assembly."))
beakers += I
var/reagent_list = pretty_string_from_reagent_list(I.reagents)
user.log_message("inserted [I] ([reagent_list]) into [src]",LOG_GAME)
to_chat(user, span_notice("You add [item] to the [initial(name)] assembly."))
beakers += item
var/reagent_list = pretty_string_from_reagent_list(item.reagents)
user.log_message("inserted [item] ([reagent_list]) into [src]", LOG_GAME)
else
to_chat(user, span_warning("[I] is empty!"))
to_chat(user, span_warning("[item] is empty!"))
else if(stage == GRENADE_EMPTY && istype(I, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = I
if (C.use(1))
else if(stage == GRENADE_EMPTY && istype(item, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/coil = item
if (coil.use(1))
det_time = 50 // In case the cable_coil was removed and readded.
stage_change(GRENADE_WIRED)
to_chat(user, span_notice("You rig the [initial(name)] assembly."))
@@ -101,23 +101,23 @@
to_chat(user, span_warning("You need one length of coil to wire the assembly!"))
return
else if(stage == GRENADE_READY && I.tool_behaviour == TOOL_WIRECUTTER && !active)
else if(stage == GRENADE_READY && item.tool_behaviour == TOOL_WIRECUTTER && !active)
stage_change(GRENADE_WIRED)
to_chat(user, span_notice("You unlock the [initial(name)] assembly."))
else if(stage == GRENADE_WIRED && I.tool_behaviour == TOOL_WRENCH)
else if(stage == GRENADE_WIRED && item.tool_behaviour == TOOL_WRENCH)
if(beakers.len)
for(var/obj/O in beakers)
O.forceMove(drop_location())
if(!O.reagents)
for(var/obj/beaker in beakers)
beaker.forceMove(drop_location())
if(!beaker.reagents)
continue
var/reagent_list = pretty_string_from_reagent_list(O.reagents)
user.log_message("removed [O] ([reagent_list]) from [src]", LOG_GAME)
var/reagent_list = pretty_string_from_reagent_list(beaker.reagents)
user.log_message("removed [beaker] ([reagent_list]) from [src]", LOG_GAME)
beakers = list()
to_chat(user, span_notice("You open the [initial(name)] assembly and remove the payload."))
return
wires.detach_assembly(wires.get_wire(1))
new /obj/item/stack/cable_coil(get_turf(src),1)
new /obj/item/stack/cable_coil(get_turf(src), 1)
stage_change(GRENADE_EMPTY)
to_chat(user, span_notice("You remove the activation mechanism from the [initial(name)] assembly."))
else
@@ -140,9 +140,8 @@
icon_state = "[initial(icon_state)]_locked"
/obj/item/grenade/chem_grenade/on_found(mob/finder)
var/obj/item/assembly/A = wires.get_attached(wires.get_wire(1))
if(A)
A.on_found(finder)
var/obj/item/assembly/assembly = wires.get_attached(wires.get_wire(1))
assembly?.on_found(finder)
/obj/item/grenade/chem_grenade/log_grenade(mob/user)
var/reagent_string = ""
@@ -179,16 +178,16 @@
. = ..()
var/list/datum/reagents/reactants = list()
for(var/obj/item/reagent_containers/glass/G in beakers)
reactants += G.reagents
for(var/obj/item/reagent_containers/glass/glass_beaker in beakers)
reactants += glass_beaker.reagents
var/turf/detonation_turf = get_turf(src)
if(!chem_splash(detonation_turf, affected_area, reactants, ignition_temp, threatscale) && !no_splash)
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
if(beakers.len)
for(var/obj/O in beakers)
O.forceMove(drop_location())
for(var/obj/beaker as anything in beakers)
beaker.forceMove(drop_location())
beakers = list()
stage_change(GRENADE_EMPTY)
active = FALSE
@@ -216,36 +215,40 @@
if(stage != GRENADE_READY)
return
for(var/obj/item/slime_extract/S in beakers)
if(S.Uses)
for(var/obj/item/reagent_containers/glass/G in beakers)
G.reagents.trans_to(S, G.reagents.total_volume)
for(var/obj/item/slime_extract/slime_extract in beakers)
if (!slime_extract.Uses)
continue
//If there is still a core (sometimes it's used up)
//and there are reagents left, behave normally,
//otherwise drop it on the ground for timed reactions like gold.
for(var/obj/item/reagent_containers/glass/glass_beaker in beakers)
glass_beaker.reagents.trans_to(slime_extract, glass_beaker.reagents.total_volume)
if(S)
if(S.reagents && S.reagents.total_volume)
for(var/obj/item/reagent_containers/glass/G in beakers)
S.reagents.trans_to(G, S.reagents.total_volume)
else
S.forceMove(get_turf(src))
no_splash = TRUE
//If there is still a core (sometimes it's used up)
//and there are reagents left, behave normally,
//otherwise drop it on the ground for timed reactions like gold.
if(!slime_extract)
continue
if(slime_extract.reagents && slime_extract.reagents.total_volume)
for(var/obj/item/reagent_containers/glass/glass_beaker in beakers)
slime_extract.reagents.trans_to(glass_beaker, slime_extract.reagents.total_volume)
else
slime_extract.forceMove(get_turf(src))
no_splash = TRUE
..()
//I tried to just put it in the allowed_containers list but
//if you do that it must have reagents. If you're going to
//make a special case you might as well do it explicitly. -Sayu
/obj/item/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/slime_extract) && stage == GRENADE_WIRED)
if(!user.transferItemToLoc(I, src))
return
to_chat(user, span_notice("You add [I] to the [initial(name)] assembly."))
beakers += I
else
/obj/item/grenade/chem_grenade/large/attackby(obj/item/item, mob/user, params)
if(!istype(item, /obj/item/slime_extract) || stage != GRENADE_WIRED)
return ..()
if(!user.transferItemToLoc(item, src))
return
to_chat(user, span_notice("You add [item] to the [initial(name)] assembly."))
beakers += item
/obj/item/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation.
name = "cryo grenade"
desc = "A custom made cryogenic grenade. Rapidly cools contents upon ignition."
@@ -268,15 +271,16 @@
icon_state = "timeg"
var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool.
/obj/item/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_MULTITOOL && !active)
var/newspread = text2num(stripped_input(user, "Please enter a new spread amount", name))
if (newspread != null && user.canUseTopic(src, BE_CLOSE))
newspread = round(newspread)
unit_spread = clamp(newspread, 5, 100)
to_chat(user, span_notice("You set the time release to [unit_spread] units per detonation."))
if (newspread != unit_spread)
to_chat(user, span_notice("The new value is out of bounds. Minimum spread is 5 units, maximum is 100 units."))
/obj/item/grenade/chem_grenade/adv_release/multitool_act(mob/living/user, obj/item/tool)
if (active)
return
var/newspread = text2num(stripped_input(user, "Please enter a new spread amount", name))
if (newspread != null && user.canUseTopic(src, BE_CLOSE))
newspread = round(newspread)
unit_spread = clamp(newspread, 5, 100)
to_chat(user, span_notice("You set the time release to [unit_spread] units per detonation."))
if (newspread != unit_spread)
to_chat(user, span_notice("The new value is out of bounds. Minimum spread is 5 units, maximum is 100 units."))
..()
/obj/item/grenade/chem_grenade/adv_release/detonate(mob/living/lanced_by)
@@ -284,21 +288,21 @@
return
var/total_volume = 0
for(var/obj/item/reagent_containers/RC in beakers)
total_volume += RC.reagents.total_volume
for(var/obj/item/reagent_containers/reagent_container in beakers)
total_volume += reagent_container.reagents.total_volume
if(!total_volume)
qdel(src)
return
var/fraction = unit_spread/total_volume
var/datum/reagents/reactants = new(unit_spread)
reactants.my_atom = src
for(var/obj/item/reagent_containers/RC in beakers)
RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, threatscale, 1, 1)
for(var/obj/item/reagent_containers/reagent_container in beakers)
reagent_container.reagents.trans_to(reactants, reagent_container.reagents.total_volume*fraction, threatscale, 1, 1)
chem_splash(get_turf(src), affected_area, list(reactants), ignition_temp, threatscale)
var/turf/DT = get_turf(src)
var/turf/detonated_turf = get_turf(src)
addtimer(CALLBACK(src, .proc/detonate), det_time)
log_game("A grenade detonated at [AREACOORD(DT)]")
log_game("A grenade detonated at [AREACOORD(detonated_turf)]")
@@ -314,15 +318,15 @@
/obj/item/grenade/chem_grenade/metalfoam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/aluminium, 30)
B2.reagents.add_reagent(/datum/reagent/foaming_agent, 10)
B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 10)
beaker_one.reagents.add_reagent(/datum/reagent/aluminium, 30)
beaker_two.reagents.add_reagent(/datum/reagent/foaming_agent, 10)
beaker_two.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 10)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/smart_metal_foam
@@ -332,15 +336,15 @@
/obj/item/grenade/chem_grenade/smart_metal_foam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/aluminium, 75)
B2.reagents.add_reagent(/datum/reagent/smart_foaming_agent, 25)
B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 25)
beaker_one.reagents.add_reagent(/datum/reagent/aluminium, 75)
beaker_two.reagents.add_reagent(/datum/reagent/smart_foaming_agent, 25)
beaker_two.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 25)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/incendiary
@@ -350,15 +354,15 @@
/obj/item/grenade/chem_grenade/incendiary/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/phosphorus, 25)
B2.reagents.add_reagent(/datum/reagent/stable_plasma, 25)
B2.reagents.add_reagent(/datum/reagent/toxin/acid, 25)
beaker_one.reagents.add_reagent(/datum/reagent/phosphorus, 25)
beaker_two.reagents.add_reagent(/datum/reagent/stable_plasma, 25)
beaker_two.reagents.add_reagent(/datum/reagent/toxin/acid, 25)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/antiweed
@@ -368,16 +372,16 @@
/obj/item/grenade/chem_grenade/antiweed/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/toxin/plantbgone, 25)
B1.reagents.add_reagent(/datum/reagent/potassium, 25)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 25)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beaker_one.reagents.add_reagent(/datum/reagent/toxin/plantbgone, 25)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 25)
beaker_two.reagents.add_reagent(/datum/reagent/phosphorus, 25)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/cleaner
@@ -387,15 +391,15 @@
/obj/item/grenade/chem_grenade/cleaner/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40)
B2.reagents.add_reagent(/datum/reagent/water, 40)
B2.reagents.add_reagent(/datum/reagent/space_cleaner, 10)
beaker_one.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40)
beaker_two.reagents.add_reagent(/datum/reagent/water, 40)
beaker_two.reagents.add_reagent(/datum/reagent/space_cleaner, 10)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/ez_clean
@@ -405,15 +409,15 @@
/obj/item/grenade/chem_grenade/ez_clean/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/large/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40)
B2.reagents.add_reagent(/datum/reagent/water, 40)
B2.reagents.add_reagent(/datum/reagent/space_cleaner/ez_clean, 60) //ensures a t h i c c distribution
beaker_one.reagents.add_reagent(/datum/reagent/fluorosurfactant, 40)
beaker_two.reagents.add_reagent(/datum/reagent/water, 40)
beaker_two.reagents.add_reagent(/datum/reagent/space_cleaner/ez_clean, 60) //ensures a t h i c c distribution
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
@@ -424,16 +428,16 @@
/obj/item/grenade/chem_grenade/teargas/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/large/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 60)
B1.reagents.add_reagent(/datum/reagent/potassium, 40)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 40)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 40)
beaker_one.reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 60)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 40)
beaker_two.reagents.add_reagent(/datum/reagent/phosphorus, 40)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 40)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/facid
@@ -443,17 +447,17 @@
/obj/item/grenade/chem_grenade/facid/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 290)
B1.reagents.add_reagent(/datum/reagent/potassium, 10)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 10)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 10)
B2.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 280)
beaker_one.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 290)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 10)
beaker_two.reagents.add_reagent(/datum/reagent/phosphorus, 10)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 10)
beaker_two.reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 280)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/colorful
@@ -463,16 +467,16 @@
/obj/item/grenade/chem_grenade/colorful/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/colorful_reagent, 25)
B1.reagents.add_reagent(/datum/reagent/potassium, 25)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 25)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beaker_one.reagents.add_reagent(/datum/reagent/colorful_reagent, 25)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 25)
beaker_two.reagents.add_reagent(/datum/reagent/phosphorus, 25)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/glitter
name = "generic glitter grenade"
@@ -482,16 +486,16 @@
/obj/item/grenade/chem_grenade/glitter/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/beaker_two = new(src)
B1.reagents.add_reagent(glitter_type, 25)
B1.reagents.add_reagent(/datum/reagent/potassium, 25)
B2.reagents.add_reagent(/datum/reagent/phosphorus, 25)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beaker_one.reagents.add_reagent(glitter_type, 25)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 25)
beaker_two.reagents.add_reagent(/datum/reagent/phosphorus, 25)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 25)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/glitter/pink
name = "pink glitter bomb"
@@ -515,16 +519,16 @@
/obj/item/grenade/chem_grenade/clf3/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/fluorosurfactant, 250)
B1.reagents.add_reagent(/datum/reagent/clf3, 50)
B2.reagents.add_reagent(/datum/reagent/water, 250)
B2.reagents.add_reagent(/datum/reagent/clf3, 50)
beaker_one.reagents.add_reagent(/datum/reagent/fluorosurfactant, 250)
beaker_one.reagents.add_reagent(/datum/reagent/clf3, 50)
beaker_two.reagents.add_reagent(/datum/reagent/water, 250)
beaker_two.reagents.add_reagent(/datum/reagent/clf3, 50)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/bioterrorfoam
name = "Bio terror foam grenade"
@@ -533,18 +537,18 @@
/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/cryptobiolin, 75)
B1.reagents.add_reagent(/datum/reagent/water, 50)
B1.reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 50)
B1.reagents.add_reagent(/datum/reagent/toxin/spore, 75)
B1.reagents.add_reagent(/datum/reagent/toxin/itching_powder, 50)
B2.reagents.add_reagent(/datum/reagent/fluorosurfactant, 150)
B2.reagents.add_reagent(/datum/reagent/toxin/mutagen, 150)
beakers += B1
beakers += B2
beaker_one.reagents.add_reagent(/datum/reagent/cryptobiolin, 75)
beaker_one.reagents.add_reagent(/datum/reagent/water, 50)
beaker_one.reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 50)
beaker_one.reagents.add_reagent(/datum/reagent/toxin/spore, 75)
beaker_one.reagents.add_reagent(/datum/reagent/toxin/itching_powder, 50)
beaker_two.reagents.add_reagent(/datum/reagent/fluorosurfactant, 150)
beaker_two.reagents.add_reagent(/datum/reagent/toxin/mutagen, 150)
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/tuberculosis
name = "Fungal tuberculosis grenade"
@@ -553,17 +557,17 @@
/obj/item/grenade/chem_grenade/tuberculosis/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/potassium, 50)
B1.reagents.add_reagent(/datum/reagent/phosphorus, 50)
B1.reagents.add_reagent(/datum/reagent/fungalspores, 200)
B2.reagents.add_reagent(/datum/reagent/blood, 250)
B2.reagents.add_reagent(/datum/reagent/consumable/sugar, 50)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 50)
beaker_one.reagents.add_reagent(/datum/reagent/phosphorus, 50)
beaker_one.reagents.add_reagent(/datum/reagent/fungalspores, 200)
beaker_two.reagents.add_reagent(/datum/reagent/blood, 250)
beaker_two.reagents.add_reagent(/datum/reagent/consumable/sugar, 50)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/holy
name = "holy hand grenade"
@@ -573,11 +577,11 @@
/obj/item/grenade/chem_grenade/holy/Initialize(mapload)
. = ..()
var/obj/item/reagent_containers/glass/beaker/meta/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/meta/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/meta/beaker_one = new(src)
var/obj/item/reagent_containers/glass/beaker/meta/beaker_two = new(src)
B1.reagents.add_reagent(/datum/reagent/potassium, 150)
B2.reagents.add_reagent(/datum/reagent/water/holywater, 150)
beaker_one.reagents.add_reagent(/datum/reagent/potassium, 150)
beaker_two.reagents.add_reagent(/datum/reagent/water/holywater, 150)
beakers += B1
beakers += B2
beakers += beaker_one
beakers += beaker_two
@@ -1,6 +1,10 @@
////////////////////
//Clusterbang
////////////////////
#define RANDOM_DETONATE_MIN_TIME 1.5 SECONDS
#define RANDOM_DETONATE_MAX_TIME 6 SECONDS
/obj/item/grenade/clusterbuster
desc = "Use of this weapon may constitute a war crime in your area, consult your local captain."
name = "clusterbang"
@@ -17,10 +21,10 @@
/obj/item/grenade/clusterbuster/detonate(mob/living/lanced_by)
. = ..()
update_mob()
var/numspawned = rand(min_spawned,max_spawned)
var/numspawned = rand(min_spawned, max_spawned)
var/again = 0
for(var/more = numspawned,more > 0,more--)
for(var/_ in 1 to numspawned)
if(prob(segment_chance))
again++
numspawned--
@@ -55,13 +59,13 @@
max_spawned = base.max_spawned
icon_state = "[base_state]_active"
active = TRUE
var/steps = rand(1,4)
for(var/i in 1 to steps)
step_away(src,loc)
addtimer(CALLBACK(src, .proc/detonate), rand(15,60))
var/steps = rand(1, 4)
for(var/step in 1 to steps)
step_away(src, loc)
addtimer(CALLBACK(src, .proc/detonate), rand(RANDOM_DETONATE_MIN_TIME, RANDOM_DETONATE_MAX_TIME))
/obj/item/grenade/clusterbuster/segment/detonate(mob/living/lanced_by)
new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned))
new payload_spawner(drop_location(), payload, rand(min_spawned, max_spawned))
playsound(src, prime_sound, 75, TRUE, -3)
qdel(src)
@@ -75,14 +79,14 @@
return INITIALIZE_HINT_QDEL
/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned)
for(var/loop in 1 to numspawned)
var/obj/item/grenade/P = new type(loc)
if(istype(P))
P.active = TRUE
addtimer(CALLBACK(P, /obj/item/grenade/proc/detonate), rand(15,60))
var/steps = rand(1,4)
for(var/i in 1 to steps)
step_away(src,loc)
for(var/_ in 1 to numspawned)
var/obj/item/grenade/grenade = new type(loc)
if(istype(grenade))
grenade.active = TRUE
addtimer(CALLBACK(grenade, /obj/item/grenade/proc/detonate), rand(RANDOM_DETONATE_MIN_TIME, RANDOM_DETONATE_MAX_TIME))
var/steps = rand(1, 4)
for(var/step in 1 to steps)
step_away(src, loc)
/obj/effect/payload_spawner/random_slime
var/volatile = FALSE
@@ -101,17 +105,20 @@
if(chem == "holy water and uranium")
chem = /datum/reagent/uranium
reagents.add_reagent(/datum/reagent/water/holywater)
reagents.add_reagent(chem,amount)
reagents.add_reagent(chem, amount)
/obj/effect/payload_spawner/random_slime/spawn_payload(type, numspawned)
for(var/loop = numspawned ,loop > 0, loop--)
for(var/_ in 1 to numspawned)
var/chosen = pick(subtypesof(/obj/item/slime_extract))
var/obj/item/slime_extract/P = new chosen(loc)
var/obj/item/slime_extract/slime_extract = new chosen(loc)
if(volatile)
addtimer(CALLBACK(P, /obj/item/slime_extract/proc/activate_slime), rand(15,60))
var/steps = rand(1,4)
for(var/i in 1 to steps)
step_away(src,loc)
addtimer(CALLBACK(slime_extract, /obj/item/slime_extract/proc/activate_slime), rand(RANDOM_DETONATE_MIN_TIME, RANDOM_DETONATE_MAX_TIME))
var/steps = rand(1, 4)
for(var/step in 1 to steps)
step_away(src, loc)
#undef RANDOM_DETONATE_MIN_TIME
#undef RANDOM_DETONATE_MAX_TIME
//////////////////////////////////
//Custom payload clusterbusters
+8 -8
View File
@@ -14,8 +14,8 @@
/obj/item/sparkler/fire_act(exposed_temperature, exposed_volume)
light()
/obj/item/sparkler/attackby(obj/item/W, mob/user, params)
var/ignition_msg = W.ignition_effect(src, user)
/obj/item/sparkler/attackby(obj/item/item, mob/user, params)
var/ignition_msg = item.ignition_effect(src, user)
if(ignition_msg)
light(user, ignition_msg)
else
@@ -51,8 +51,8 @@
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/sparkler/ignition_effect(atom/A, mob/user)
. = span_notice("[user] gracefully lights [A] with [src].")
/obj/item/sparkler/ignition_effect(atom/atom, mob/user)
. = span_notice("[user] gracefully lights [atom] with [src].")
/obj/item/sparkler/get_temperature()
return lit * heat
@@ -75,8 +75,8 @@
/obj/item/grenade/firecracker/attack_self(mob/user) // You need to light it manually.
return
/obj/item/grenade/firecracker/attackby(obj/item/W, mob/user, params)
var/ignition_msg = W.ignition_effect(src, user)
/obj/item/grenade/firecracker/attackby(obj/item/item, mob/user, params)
var/ignition_msg = item.ignition_effect(src, user)
if(ignition_msg && !active)
visible_message(ignition_msg)
arm_grenade(user)
@@ -86,12 +86,12 @@
/obj/item/grenade/firecracker/fire_act(exposed_temperature, exposed_volume)
detonate()
/obj/item/grenade/firecracker/wirecutter_act(mob/living/user, obj/item/I)
/obj/item/grenade/firecracker/wirecutter_act(mob/living/user, obj/item/item)
if(active)
return
if(det_time)
det_time -= 10
to_chat(user, span_notice("You shorten the fuse of [src] with [I]."))
to_chat(user, span_notice("You shorten the fuse of [src] with [item]."))
playsound(src, 'sound/items/wirecutter.ogg', 20, TRUE)
icon_state = initial(icon_state) + "_[det_time]"
update_appearance()
+37 -37
View File
@@ -15,31 +15,31 @@
do_sparks(rand(5, 9), FALSE, src)
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9)
new /obj/effect/dummy/lighting_obj (flashbang_turf, flashbang_range + 2, 4, COLOR_WHITE, 2)
for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
bang(get_turf(M), M)
for(var/mob/living/living_mob in get_hearers_in_view(flashbang_range, flashbang_turf))
bang(get_turf(living_mob), living_mob)
qdel(src)
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
if(M.stat == DEAD) //They're dead!
/obj/item/grenade/flashbang/proc/bang(turf/turf, mob/living/living_mob)
if(living_mob.stat == DEAD) //They're dead!
return
M.show_message(span_warning("BANG"), MSG_AUDIBLE)
var/distance = max(0,get_dist(get_turf(src),T))
living_mob.show_message(span_warning("BANG"), MSG_AUDIBLE)
var/distance = max(0, get_dist(get_turf(src), turf))
//Flash
if(M.flash_act(affect_silicon = 1))
M.Paralyze(max(20/max(1,distance), 5))
M.Knockdown(max(200/max(1,distance), 60))
if(living_mob.flash_act(affect_silicon = 1))
living_mob.Paralyze(max(20/max(1, distance), 5))
living_mob.Knockdown(max(200/max(1, distance), 60))
//Bang
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
M.Paralyze(20)
M.Knockdown(200)
M.soundbang_act(1, 200, 10, 15)
if(!distance || loc == living_mob || loc == living_mob.loc) //Stop allahu akbarring rooms with this.
living_mob.Paralyze(20)
living_mob.Knockdown(200)
living_mob.soundbang_act(1, 200, 10, 15)
else
if(distance <= 1) // Adds more stun as to not prime n' pull (#45381)
M.Paralyze(5)
M.Knockdown(30)
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
living_mob.Paralyze(5)
living_mob.Knockdown(30)
living_mob.soundbang_act(1, max(200 / max(1, distance), 60), rand(0, 5))
/obj/item/grenade/stingbang
name = "stingbang"
@@ -59,12 +59,12 @@
/obj/item/grenade/stingbang/detonate(mob/living/lanced_by)
if(iscarbon(loc))
var/mob/living/carbon/C = loc
var/obj/item/bodypart/B = C.get_holding_bodypart_of_item(src)
if(B)
forceMove(get_turf(C))
C.visible_message("<b>[span_danger("[src] goes off in [C]'s hand, blowing [C.p_their()] [B.name] to bloody shreds!")]</b>", span_userdanger("[src] goes off in your hand, blowing your [B.name] to bloody shreds!"))
B.dismember()
var/mob/living/carbon/user = loc
var/obj/item/bodypart/bodypart = user.get_holding_bodypart_of_item(src)
if(bodypart)
forceMove(get_turf(user))
user.visible_message("<b>[span_danger("[src] goes off in [user]'s hand, blowing [user.p_their()] [bodypart.name] to bloody shreds!")]</b>", span_userdanger("[src] goes off in your hand, blowing your [bodypart.name] to bloody shreds!"))
bodypart.dismember()
. = ..()
@@ -75,27 +75,27 @@
do_sparks(rand(5, 9), FALSE, src)
playsound(flashbang_turf, 'sound/weapons/flashbang.ogg', 50, TRUE, 8, 0.9)
new /obj/effect/dummy/lighting_obj (flashbang_turf, flashbang_range + 2, 2, COLOR_WHITE, 1)
for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
pop(get_turf(M), M)
for(var/mob/living/living_mob in get_hearers_in_view(flashbang_range, flashbang_turf))
pop(get_turf(living_mob), living_mob)
qdel(src)
/obj/item/grenade/stingbang/proc/pop(turf/T , mob/living/M)
if(M.stat == DEAD) //They're dead!
/obj/item/grenade/stingbang/proc/pop(turf/turf, mob/living/living_mob)
if(living_mob.stat == DEAD) //They're dead!
return
M.show_message(span_warning("POP"), MSG_AUDIBLE)
var/distance = max(0,get_dist(get_turf(src),T))
living_mob.show_message(span_warning("POP"), MSG_AUDIBLE)
var/distance = max(0, get_dist(get_turf(src), turf))
//Flash
if(M.flash_act(affect_silicon = 1))
M.Paralyze(max(10/max(1,distance), 5))
M.Knockdown(max(100/max(1,distance), 60))
if(living_mob.flash_act(affect_silicon = 1))
living_mob.Paralyze(max(10/max(1, distance), 5))
living_mob.Knockdown(max(100/max(1, distance), 60))
//Bang
if(!distance || loc == M || loc == M.loc)
M.Paralyze(20)
M.Knockdown(200)
M.soundbang_act(1, 200, 10, 15)
if(M.apply_damages(10, 10))
to_chat(M, span_userdanger("The blast from \the [src] bruises and burns you!"))
if(!distance || loc == living_mob || loc == living_mob.loc)
living_mob.Paralyze(20)
living_mob.Knockdown(200)
living_mob.soundbang_act(1, 200, 10, 15)
if(living_mob.apply_damages(10, 10))
to_chat(living_mob, span_userdanger("The blast from \the [src] bruises and burns you!"))
// only checking if they're on top of the tile, cause being one tile over will be its own punishment
@@ -24,13 +24,13 @@
. = ..()
add_overlay("improvised_grenade_filled")
add_overlay("improvised_grenade_wired")
times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
times = list("5" = 10, "-1" = 20, "[rand(30, 80)]" = 50, "[rand(65, 180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
det_time = text2num(pick_weight(times))
if(det_time < 0) //checking for 'duds'
range = 1
det_time = rand(30,80)
det_time = rand(30, 80)
else
range = pick(2,2,2,3,3,3,4)
range = pick(2, 2, 2, 3, 3, 3, 4)
if(check_parts) //since construction code calls this itself, no need to always call it. This does have the downside that adminspawned ones can potentially not have cans if they don't use the /spawned subtype.
CheckParts()
@@ -56,7 +56,7 @@
underlays += can_underlay
/obj/item/grenade/iedcasing/attack_self(mob/user) //
/obj/item/grenade/iedcasing/attack_self(mob/user)
if(!active)
if(!botch_check(user))
to_chat(user, span_warning("You light the [name]!"))
+3 -3
View File
@@ -91,7 +91,7 @@
/obj/item/grenade/attack_self(mob/user)
if(HAS_TRAIT(src, TRAIT_NODROP))
to_chat(user, span_notice("You try prying [src] off your hand..."))
if(do_after(user, 7 SECONDS, target=src))
if(do_after(user, 7 SECONDS, target = src))
to_chat(user, span_notice("You manage to remove [src] from your hand."))
REMOVE_TRAIT(src, TRAIT_NODROP, STICKY_NODROP)
return
@@ -115,7 +115,7 @@
to_chat(user, span_warning("You prime [src]! [capitalize(DisplayTimeText(det_time))]!"))
if(shrapnel_type && shrapnel_radius)
shrapnel_initialized = TRUE
AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius)
AddComponent(/datum/component/pellet_cloud, projectile_type = shrapnel_type, magnitude = shrapnel_radius)
playsound(src, 'sound/weapons/armbomb.ogg', volume, TRUE)
if(istype(user))
user.mind?.add_memory(MEMORY_BOMB_PRIMED, list(DETAIL_BOMB_TYPE = src), story_value = STORY_VALUE_OKAY)
@@ -133,7 +133,7 @@
/obj/item/grenade/proc/detonate(mob/living/lanced_by)
if(shrapnel_type && shrapnel_radius && !shrapnel_initialized) // add a second check for adding the component in case whatever triggered the grenade went straight to prime (badminnery for example)
shrapnel_initialized = TRUE
AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_radius)
AddComponent(/datum/component/pellet_cloud, projectile_type = shrapnel_type, magnitude = shrapnel_radius)
SEND_SIGNAL(src, COMSIG_GRENADE_DETONATE, lanced_by)
if(ex_dev || ex_heavy || ex_light || ex_flame)
+29 -29
View File
@@ -16,52 +16,52 @@
do_sparks(rand(5, 9), FALSE, src)
playsound(flashbang_turf, 'sound/effects/screech.ogg', 100, TRUE, 8, 0.9)
new /obj/effect/dummy/lighting_obj (flashbang_turf, flashbang_range + 2, 4, LIGHT_COLOR_PURPLE, 2)
for(var/mob/living/M in get_hearers_in_view(flashbang_range, flashbang_turf))
bang(get_turf(M), M)
for(var/mob/living/living_mob in get_hearers_in_view(flashbang_range, flashbang_turf))
bang(get_turf(living_mob), living_mob)
qdel(src)
/obj/item/grenade/hypnotic/proc/bang(turf/T, mob/living/M)
if(M.stat == DEAD) //They're dead!
/obj/item/grenade/hypnotic/proc/bang(turf/turf, mob/living/living_mob)
if(living_mob.stat == DEAD) //They're dead!
return
var/distance = max(0,get_dist(get_turf(src),T))
var/distance = max(0, get_dist(get_turf(src), turf))
//Bang
var/hypno_sound = FALSE
//Hearing protection check
if(iscarbon(M))
var/mob/living/carbon/C = M
if(iscarbon(living_mob))
var/mob/living/carbon/target = living_mob
var/list/reflist = list(1)
SEND_SIGNAL(C, COMSIG_CARBON_SOUNDBANG, reflist)
SEND_SIGNAL(target, COMSIG_CARBON_SOUNDBANG, reflist)
var/intensity = reflist[1]
var/ear_safety = C.get_ear_protection()
var/ear_safety = target.get_ear_protection()
var/effect_amount = intensity - ear_safety
if(effect_amount > 0)
hypno_sound = TRUE
if(!distance || loc == M || loc == M.loc)
M.Paralyze(10)
M.Knockdown(100)
to_chat(M, span_hypnophrase("The sound echoes in your brain..."))
M.hallucination += 50
if(!distance || loc == living_mob || loc == living_mob.loc)
living_mob.Paralyze(10)
living_mob.Knockdown(100)
to_chat(living_mob, span_hypnophrase("The sound echoes in your brain..."))
living_mob.hallucination += 50
else
if(distance <= 1)
M.Paralyze(5)
M.Knockdown(30)
living_mob.Paralyze(5)
living_mob.Knockdown(30)
if(hypno_sound)
to_chat(M, span_hypnophrase("The sound echoes in your brain..."))
M.hallucination += 50
to_chat(living_mob, span_hypnophrase("The sound echoes in your brain..."))
living_mob.hallucination += 50
//Flash
if(M.flash_act(affect_silicon = 1))
M.Paralyze(max(10/max(1,distance), 5))
M.Knockdown(max(100/max(1,distance), 40))
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.hypnosis_vulnerable()) //The sound causes the necessary conditions unless the target has mindshield or hearing protection
C.apply_status_effect(/datum/status_effect/trance, 100, TRUE)
if(living_mob.flash_act(affect_silicon = 1))
living_mob.Paralyze(max(10/max(1, distance), 5))
living_mob.Knockdown(max(100/max(1, distance), 40))
if(iscarbon(living_mob))
var/mob/living/carbon/target = living_mob
if(target.hypnosis_vulnerable()) //The sound causes the necessary conditions unless the target has mindshield or hearing protection
target.apply_status_effect(/datum/status_effect/trance, 100, TRUE)
else
to_chat(C, span_hypnophrase("The light is so pretty..."))
C.add_confusion(min(C.get_confusion() + 10, 20))
C.dizziness += min(C.dizziness + 10, 20)
C.adjust_drowsyness(min(C.drowsyness + 10, 20))
to_chat(target, span_hypnophrase("The light is so pretty..."))
target.add_confusion(min(target.get_confusion() + 10, 20))
target.dizziness += min(target.dizziness + 10, 20)
target.adjust_drowsyness(min(target.drowsyness + 10, 20))
+1 -1
View File
@@ -81,7 +81,7 @@
/obj/item/grenade/c4/afterattack(atom/movable/bomb_target, mob/user, flag)
. = ..()
aim_dir = get_dir(user,bomb_target)
aim_dir = get_dir(user, bomb_target)
if(!flag)
return
if(bomb_target != user && HAS_TRAIT(user, TRAIT_PACIFISM) && isliving(bomb_target))
@@ -27,7 +27,7 @@
smoke.set_up(4, src)
smoke.start()
qdel(smoke) //And deleted again. Sad really.
for(var/obj/structure/blob/B in view(8,src))
var/damage = round(30/(get_dist(B,src)+1))
B.take_damage(damage, BURN, MELEE, 0)
for(var/obj/structure/blob/blob in view(8, src))
var/damage = round(30/(get_dist(blob, src) + 1))
blob.take_damage(damage, BURN, MELEE, 0)
qdel(src)
@@ -12,13 +12,13 @@
update_mob()
if(spawner_type && deliveryamt)
// Make a quick flash
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/phasein.ogg', 100, TRUE)
for(var/mob/living/carbon/C in viewers(T, null))
C.flash_act()
var/turf/target_turf = get_turf(src)
playsound(target_turf, 'sound/effects/phasein.ogg', 100, TRUE)
for(var/mob/living/carbon/target_carbon in viewers(target_turf, null))
target_carbon.flash_act()
// Spawn some hostile syndicate critters and spread them out
var/list/spawned = spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE))
var/list/spawned = spawn_and_random_walk(spawner_type, target_turf, deliveryamt, walk_chance = 50, admin_spawn = ((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE))
afterspawn(spawned)
qdel(src)