mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
Updates /code/game/objects/item/grenades/* to follow the style guide (#63030)
Co-authored-by: SuperNovaa41 <supernovaa41@protonmail.com>
This commit is contained in:
co-authored by
SuperNovaa41
parent
eb6c491914
commit
324117d637
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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]!"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user