diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 47096a1c66..14c47e4e59 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -93,6 +93,8 @@ GLOBAL_LIST_EMPTY(PDAs)
var/underline_flag = TRUE //flag for underline
+ var/list/blocked_pdas
+
/obj/item/pda/suicide_act(mob/living/carbon/user)
var/deathMessage = msg_input(user)
if (!deathMessage)
@@ -387,7 +389,10 @@ GLOBAL_LIST_EMPTY(PDAs)
for (var/obj/item/pda/P in sortNames(get_viewable_pdas()))
if (P == src)
continue
- dat += "
[P]"
+ if(P.owner in blocked_pdas)
+ dat += "(BLOCKED - CLICK TO UNBLOCK) [P]"
+ else
+ dat += "[P]"
if(cartridge)
dat += cartridge.message_special(P)
dat += ""
@@ -646,6 +651,15 @@ GLOBAL_LIST_EMPTY(PDAs)
if("MessageAll")
send_to_all(U)
+ if("toggle_block")
+ toggle_blocking(usr, href_list["target"])
+
+ if("block_pda")
+ block_pda(usr, href_list["target"])
+
+ if("unblock_pda")
+ unblock_pda(usr, href_list["target"])
+
if("cart")
if(cartridge)
cartridge.special(U, href_list)
@@ -744,9 +758,16 @@ GLOBAL_LIST_EMPTY(PDAs)
message += "\nSent from my PDA"
// Send the signal
var/list/string_targets = list()
- for (var/obj/item/pda/P in targets)
- if (P.owner && P.ownjob) // != src is checked by the UI
+ var/list/string_blocked
+ for(var/obj/item/pda/P in targets)
+ if(owner in P.blocked_pdas)
+ LAZYADD(string_blocked, P.owner)
+ continue
+ if(P.owner && P.ownjob) // != src is checked by the UI
string_targets += "[P.owner] ([P.ownjob])"
+ if(string_blocked)
+ string_blocked = english_list(string_blocked)
+ to_chat(user, "[icon2html(src, user)] The following recipients have blocked your message: [string_blocked].")
for (var/obj/machinery/computer/message_monitor/M in targets)
// In case of "Reply" to a message from a console, this will make the
// message be logged successfully. If the console is impersonating
@@ -779,12 +800,13 @@ GLOBAL_LIST_EMPTY(PDAs)
tnote += "→ To [target_text]:
[signal.format_message()]
"
// Show it to ghosts
var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message(TRUE)]"
- for(var/mob/M in GLOB.player_list)
- if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
+ for(var/i in GLOB.dead_mob_list)
+ var/mob/M = i
+ if(M?.client.prefs.chat_toggles & CHAT_GHOSTPDA)
to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
- // Log in the talk log
- user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
to_chat(user, "Message sent to [target_text]: \"[emoji_message]\"")
+ // Log in the talk log
+ user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text] (BLOCKED:[string_blocked])")
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
// Reset the photo
@@ -794,8 +816,7 @@ GLOBAL_LIST_EMPTY(PDAs)
last_everyone = world.time
/obj/item/pda/proc/receive_message(datum/signal/subspace/pda/signal)
- tnote += "← From [signal.data["name"]] ([signal.data["job"]]):
[signal.format_message()]
"
-
+ tnote += "← From [signal.data["name"]] ([signal.data["job"]]): (BLOCK/UNBLOCK)
[signal.format_message()]
"
if (!silent)
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
audible_message("[icon2html(src, hearers(src))] *[ttone]*", null, 3)
@@ -814,7 +835,7 @@ GLOBAL_LIST_EMPTY(PDAs)
hrefstart = ""
hrefend = ""
- to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply)")
+ to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message(TRUE)] (Reply) (BLOCK/UNBLOCK)")
update_icon(TRUE)
@@ -827,6 +848,20 @@ GLOBAL_LIST_EMPTY(PDAs)
/obj/item/pda/proc/create_message(mob/living/U, obj/item/pda/P)
send_message(U,list(P))
+/obj/item/pda/proc/toggle_blocking(mob/user, target)
+ if(target in blocked_pdas)
+ unblock_pda(user, target)
+ else
+ block_pda(user, target)
+
+/obj/item/pda/proc/block_pda(mob/user, target)
+ to_chat(user, "[icon2html(src, user)] [target] blocked from messages. Use the messenger PDA list to unblock.")
+ LAZYOR(blocked_pdas, target)
+
+/obj/item/pda/proc/unblock_pda(mob/user, target)
+ to_chat(user, "[icon2html(src, user)] [target] unblocked from messages.")
+ LAZYREMOVE(blocked_pdas, target)
+
/obj/item/pda/AltClick(mob/user)
. = ..()
if(id)
@@ -1172,4 +1207,4 @@ GLOBAL_LIST_EMPTY(PDAs)
#undef PDA_OVERLAY_ID
#undef PDA_OVERLAY_ITEM
#undef PDA_OVERLAY_LIGHT
-#undef PDA_OVERLAY_PAI
\ No newline at end of file
+#undef PDA_OVERLAY_PAI
diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm
index df17a51c1b..905428ae1f 100644
--- a/code/game/objects/items/devices/forcefieldprojector.dm
+++ b/code/game/objects/items/devices/forcefieldprojector.dm
@@ -1,6 +1,6 @@
/obj/item/forcefield_projector
name = "forcefield projector"
- desc = "An experimental device that can create several forcefields at a distance."
+ desc = "An experimental device that can create several forcefields at a short distance."
icon = 'icons/obj/device.dmi'
icon_state = "signmaker_forcefield"
slot_flags = ITEM_SLOT_BELT
@@ -14,7 +14,7 @@
var/shield_integrity = 250
var/max_fields = 3
var/list/current_fields
- var/field_distance_limit = 7
+ var/field_distance_limit = 2
/obj/item/forcefield_projector/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm
index 033ea9e791..16a5e6d1d3 100644
--- a/code/game/objects/items/grenades/grenade.dm
+++ b/code/game/objects/items/grenades/grenade.dm
@@ -93,9 +93,8 @@
var/obj/item/I = loc
I.grenade_prime_react(src)
-
-/obj/item/grenade/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/screwdriver))
+/obj/item/grenade/tool_act(mob/living/user, obj/item/I, tool_behaviour)
+ if(tool_behaviour == TOOL_SCREWDRIVER)
switch(det_time)
if ("1")
det_time = 10
diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm
index 81078a47ed..8db523e771 100644
--- a/code/game/objects/items/implants/implant_hijack.dm
+++ b/code/game/objects/items/implants/implant_hijack.dm
@@ -8,8 +8,6 @@
var/toggled = FALSE
icon_state = "hijack"
var/eye_color
- //var/stealthmode = FALSE
- //var/stealthcooldown = 0
/obj/item/implant/hijack/activate()
. = ..()
@@ -18,13 +16,13 @@
imp_in.click_intercept = src
imp_in.siliconaccesstoggle = TRUE
to_chat(imp_in,"You turn on [src]'s silicon interactions.")
- if (ishuman(imp_in)/* && !stealthmode*/)
+ if (ishuman(imp_in))
toggle_eyes(TRUE)
else
imp_in.click_intercept = null
imp_in.siliconaccesstoggle = FALSE
to_chat(imp_in,"You turn off [src]'s silicon interactions.")
- if (ishuman(imp_in)/* && !stealthmode*/)
+ if (ishuman(imp_in))
toggle_eyes(FALSE)
/obj/item/implant/hijack/proc/toggle_eyes(on)
@@ -58,8 +56,6 @@
/obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object)
if (user.get_active_held_item() || isitem(object) || !toggled || user.incapacitated())
return
- //if (stealthmode == FALSE && istype(object,/obj/machinery/power/apc))
- // hijack_remotely()
var/area/a = get_area(object)
if (!hasSiliconAccessInArea(imp_in,a))
return
@@ -78,18 +74,4 @@
object.AIAltClick(imp_in)
return TRUE
object.attack_ai(imp_in)
- return TRUE
-
-/* for later
-/obj/item/implant/hijack/proc/hijack_remotely(/obj/machinery/power/apc/apc)
- if (apc.hijacker)
- return //can't remotely hijack an already hijacked APC
- if (do_after(imp_in,25 SECONDS,target=apc))
- apc.hijacker = imp_in
- imp_in.toggleSiliconAccessArea(apc.area)
- apc.update_icon()
- cooldown = world.time + 2 MINUTES
- toggle_eyes(TRUE)
- stealthmode = FALSE
-
-*/
\ No newline at end of file
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm
index 10581e7bbb..b5233606cf 100644
--- a/code/modules/antagonists/abductor/machinery/experiment.dm
+++ b/code/modules/antagonists/abductor/machinery/experiment.dm
@@ -174,7 +174,7 @@
if(!GlandTest)
say("Experimental dissection not detected!")
return "No glands detected!"
- if(H.mind != null && H.ckey != null)
+ if(H.mind != null && (H.voluntary_ghosted || (H.ckey != null)))
LAZYINITLIST(abductee_minds)
LAZYADD(history, H)
LAZYADD(abductee_minds, H.mind)
diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm
index ea90255bce..8b958158e9 100644
--- a/code/modules/cargo/packs/engineering.dm
+++ b/code/modules/cargo/packs/engineering.dm
@@ -20,15 +20,9 @@
/datum/supply_pack/engineering/conveyor
name = "Conveyor Assembly Crate"
- desc = "Keep production moving along with six conveyor belts. Conveyor switch included. If you have any questions, check out the enclosed instruction book."
+ desc = "Keep production moving along with fifteen conveyor belts. Conveyor switch included. If you have any questions, check out the enclosed instruction book."
cost = 750
- contains = list(/obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_construct,
- /obj/item/conveyor_switch_construct,
+ contains = list(/obj/item/stack/conveyor/fifteen,
/obj/item/paper/guides/conveyor)
crate_name = "conveyor assembly crate"
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index 130640ee8a..fd332a38df 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -15,9 +15,9 @@
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
mob_react = FALSE
-/datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/tofu(location)
return
@@ -26,9 +26,9 @@
id = "chocolate_bar"
required_reagents = list(/datum/reagent/consumable/soymilk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2)
-/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/chocolate_bar/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/chocolatebar(location)
return
@@ -39,9 +39,9 @@
required_reagents = list(/datum/reagent/consumable/milk/chocolate_milk = 4, /datum/reagent/consumable/sugar = 2)
mob_react = FALSE
-/datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/chocolatebar(location)
return
@@ -90,9 +90,9 @@
required_reagents = list(/datum/reagent/consumable/milk = 40)
required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
-/datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cheesewheel/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/store/cheesewheel(location)
/datum/chemical_reaction/synthmeat
@@ -101,9 +101,9 @@
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/cryoxadone = 1)
mob_react = FALSE
-/datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat(location)
/datum/chemical_reaction/hot_ramen
@@ -137,9 +137,9 @@
required_reagents = list(/datum/reagent/water = 10, /datum/reagent/consumable/flour = 15)
mix_message = "The ingredients form a dough."
-/datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/dough/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/dough(location)
/datum/chemical_reaction/cakebatter
@@ -148,9 +148,9 @@
required_reagents = list(/datum/reagent/consumable/eggyolk = 15, /datum/reagent/consumable/flour = 15, /datum/reagent/consumable/sugar = 5)
mix_message = "The ingredients form a cake batter."
-/datum/chemical_reaction/cakebatter/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cakebatter/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/cakebatter(location)
/datum/chemical_reaction/cakebatter/vegan
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 3d07649e2f..97007ebd11 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -260,8 +260,9 @@ Transfer_mind is there to check if mob is being deleted/not going to have a body
Works together with spawning an observer, noted above.
*/
-/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE)
+/mob/proc/ghostize(can_reenter_corpse = TRUE, special = FALSE, penalize = FALSE, voluntary = FALSE)
penalize = suiciding || penalize // suicide squad.
+ voluntary_ghosted = voluntary
if(!key || cmptext(copytext(key,1,2),"@") || (SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, can_reenter_corpse, special, penalize) & COMPONENT_BLOCK_GHOSTING))
return //mob has no key, is an aghost or some component hijacked.
stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now
@@ -285,9 +286,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
- if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE) & COMPONENT_BLOCK_GHOSTING)
- return
-
var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
if(world.time < roundstart_quit_limit)
@@ -295,6 +293,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
penalty = CANT_REENTER_ROUND
+ if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE, (stat == DEAD)? penalty : 0, (stat == DEAD)? TRUE : FALSE) & COMPONENT_BLOCK_GHOSTING)
+ return
+
if(stat != DEAD)
succumb()
if(stat == DEAD)
@@ -307,7 +308,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/obj/machinery/cryopod/C = loc
C.despawn_occupant()
else
- ghostize(0, penalize = TRUE) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
+ ghostize(0, penalize = TRUE, voluntary = TRUE) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
suicide_log(TRUE)
/mob/camera/verb/ghost()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 67a990fef9..26bcba2218 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -120,5 +120,8 @@
var/registered_z
var/mob/audiovisual_redirect //Mob to redirect messages, speech, and sounds to
+
var/siliconaccessareas = list()
- var/siliconaccesstoggle = FALSE
\ No newline at end of file
+ var/siliconaccesstoggle = FALSE
+
+ var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm
index a915087428..98d66a2b1b 100644
--- a/code/modules/reagents/chemistry/recipes.dm
+++ b/code/modules/reagents/chemistry/recipes.dm
@@ -36,7 +36,7 @@
var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this.
-/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, created_volume, specialreact)
+/datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact)
return
//I recommend you set the result amount to the total volume of all components.
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 26b39fb3b0..b463b5758b 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -53,9 +53,9 @@
required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 20)
mob_react = FALSE
-/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/stack/sheet/mineral/plasma(location)
/datum/chemical_reaction/goldsolidification
@@ -64,9 +64,9 @@
required_reagents = list(/datum/reagent/consumable/frostoil = 5, /datum/reagent/gold = 20, /datum/reagent/iron = 1)
mob_react = FALSE
-/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/stack/sheet/mineral/gold(location)
/datum/chemical_reaction/capsaicincondensation
@@ -88,9 +88,9 @@
results = list(/datum/reagent/consumable/mustard = 5)
required_reagents = list(/datum/reagent/mustardgrind = 1, /datum/reagent/water = 10, /datum/reagent/consumable/enzyme= 1)
-/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/soap/homemade(location)
/datum/chemical_reaction/candlefication
@@ -100,9 +100,9 @@
required_temp = 374
mob_react = FALSE
-/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/candle(location)
/datum/chemical_reaction/meatification
@@ -111,9 +111,9 @@
required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/consumable/nutriment = 10, /datum/reagent/carbon = 10)
mob_react = FALSE
-/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
+ for(var/i = 1, i <= multiplier, i++)
new /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct(location)
return
@@ -146,9 +146,9 @@
mob_react = FALSE
required_temp = 300
-/datum/chemical_reaction/fermis_plush/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/fermis_plush/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i+=10)
+ for(var/i = 1, i <= multiplier, i+=10)
new /obj/item/toy/plush/catgirl/fermis(location)
////////////////////////////////// VIROLOGY //////////////////////////////////////////
@@ -227,13 +227,13 @@
var/level_min = 1
var/level_max = 2
-/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Evolve(level_min, level_max)
/datum/chemical_reaction/mix_virus/mix_virus_2
@@ -330,12 +330,12 @@
required_reagents = list(/datum/reagent/medicine/synaptizine = 1)
required_catalysts = list(/datum/reagent/blood = 1)
-/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Devolve()
/datum/chemical_reaction/mix_virus/neuter_virus
@@ -344,12 +344,12 @@
required_reagents = list(/datum/reagent/toxin/formaldehyde = 1)
required_catalysts = list(/datum/reagent/blood = 1)
-/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, multiplier)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
- for(var/i in 1 to min(created_volume, 5))
+ for(var/i in 1 to min(multiplier, 5))
D.Neuter()
////////////////////////////////// foam and foam precursor ///////////////////////////////////////////////////
@@ -367,12 +367,12 @@
required_reagents = list(/datum/reagent/fluorosurfactant = 1, /datum/reagent/water = 1)
mob_react = FALSE
-/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out foam!")
var/datum/effect_system/foam_spread/s = new()
- s.set_up(created_volume*2, location, holder)
+ s.set_up(multiplier*2, location, holder)
s.start()
holder.clear_reagents()
return
@@ -384,14 +384,14 @@
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
-/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out a metallic foam!")
var/datum/effect_system/foam_spread/metal/s = new()
- s.set_up(created_volume*5, location, holder, 1)
+ s.set_up(multiplier*5, location, holder, 1)
s.start()
holder.clear_reagents()
@@ -401,11 +401,11 @@
required_reagents = list(/datum/reagent/aluminium = 3, /datum/reagent/smart_foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = TRUE
-/datum/chemical_reaction/smart_foam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smart_foam/on_reaction(datum/reagents/holder, multiplier)
var/turf/location = get_turf(holder.my_atom)
location.visible_message("The solution spews out metallic foam!")
var/datum/effect_system/foam_spread/metal/smart/s = new()
- s.set_up(created_volume * 5, location, holder, TRUE)
+ s.set_up(multiplier * 5, location, holder, TRUE)
s.start()
holder.clear_reagents()
@@ -415,12 +415,12 @@
required_reagents = list(/datum/reagent/iron = 3, /datum/reagent/foaming_agent = 1, /datum/reagent/toxin/acid/fluacid = 1)
mob_react = FALSE
-/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
to_chat(M, "The solution spews out a metallic foam!")
var/datum/effect_system/foam_spread/metal/s = new()
- s.set_up(created_volume*5, location, holder, 2)
+ s.set_up(multiplier*5, location, holder, 2)
s.start()
holder.clear_reagents()
@@ -521,8 +521,8 @@
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/blood = 1)
required_temp = 374
-/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume)
- chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life") // Lol.
+/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, multiplier)
+ chemical_mob_spawn(holder, rand(1, round(multiplier, 1)), "Life") // Lol.
//This is missing, I'm adding it back (see tgwiki). Not sure why we don't have it.
/datum/chemical_reaction/life_friendly
@@ -531,8 +531,8 @@
required_reagents = list(/datum/reagent/medicine/strange_reagent = 1, /datum/reagent/medicine/synthflesh = 1, /datum/reagent/consumable/sugar = 1)
required_temp = 374
-/datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, created_volume)
- chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN) //Pray for cute cats
+/datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, multiplier)
+ chemical_mob_spawn(holder, rand(1, round(multiplier, 1)), "Life (friendly)", FRIENDLY_SPAWN) //Pray for cute cats
/datum/chemical_reaction/corgium
name = "corgium"
@@ -540,9 +540,9 @@
required_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/blood = 1)
required_temp = 374
-/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i = rand(1, created_volume), i <= created_volume, i++) // More lulz.
+ for(var/i = rand(1, multiplier), i <= multiplier, i++) // More lulz.
new /mob/living/simple_animal/pet/dog/corgi(location)
..()
@@ -600,9 +600,9 @@
required_reagents = list(/datum/reagent/oil = 5, /datum/reagent/toxin/acid = 2, /datum/reagent/ash = 3)
required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat.
-/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- for(var/i in 1 to created_volume)
+ for(var/i in 1 to multiplier)
new /obj/item/stack/sheet/plastic(location)
/datum/chemical_reaction/pax
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index cb9636bf02..3930988380 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -5,7 +5,7 @@
var/modifier = 0
var/noexplosion = FALSE
-/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, created_volume, turf/override)
+/datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, multiplier, turf/override)
if(!noexplosion)
var/turf/T = override || get_turf(holder.my_atom)
var/inside_msg
@@ -20,7 +20,7 @@
message_admins("Reagent explosion reaction occurred at [ADMIN_VERBOSEJMP(T)][inside_msg]. Last Fingerprint: [touch_msg].")
log_game("Reagent explosion reaction occurred at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"]." )
var/datum/effect_system/reagents_explosion/e = new()
- e.set_up(modifier + round(created_volume/strengthdiv, 1), T, 0, 0)
+ e.set_up(modifier + round(multiplier/strengthdiv, 1), T, 0, 0)
e.start()
holder.clear_reagents()
@@ -32,10 +32,10 @@
required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/fluacid = 1, /datum/reagent/toxin/acid = 1)
strengthdiv = 2
-/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/nitroglycerin, created_volume*2)
+ holder.remove_reagent(/datum/reagent/nitroglycerin, multiplier*2)
..()
/datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion
@@ -57,10 +57,10 @@
id = "holyboom"
required_reagents = list(/datum/reagent/water/holywater = 1, /datum/reagent/potassium = 1)
-/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- if(created_volume >= 150)
- playsound(get_turf(holder.my_atom), 'sound/effects/pray.ogg', 80, 0, round(created_volume/48))
+ if(multiplier >= 150)
+ playsound(get_turf(holder.my_atom), 'sound/effects/pray.ogg', 80, 0, round(multiplier/48))
strengthdiv = 8
for(var/mob/living/simple_animal/revenant/R in get_hearers_in_view(7,get_turf(holder.my_atom)))
var/deity
@@ -73,13 +73,13 @@
R.reveal(100)
R.adjustHealth(50)
sleep(20)
- for(var/mob/living/carbon/C in get_hearers_in_view(round(created_volume/48,1),get_turf(holder.my_atom)))
+ for(var/mob/living/carbon/C in get_hearers_in_view(round(multiplier/48,1),get_turf(holder.my_atom)))
if(iscultist(C))
to_chat(C, "The divine explosion sears you!")
C.Knockdown(40)
C.adjust_fire_stacks(5)
C.IgniteMob()
- ..(holder, created_volume, T)
+ ..(holder, multiplier, T)
/datum/chemical_reaction/blackpowder
@@ -97,9 +97,9 @@
modifier = 1
mix_message = "Sparks start flying around the black powder!"
-/datum/chemical_reaction/reagent_explosion/blackpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/blackpowder_explosion/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- ..(holder, created_volume, T)
+ ..(holder, multiplier, T)
/datum/chemical_reaction/thermite
name = "Thermite"
@@ -112,11 +112,11 @@
id = "emp_pulse"
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
-/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
- // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
- empulse(location, round(created_volume / 12), round(created_volume / 7), 1)
+ // 100 multiplier = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
+ // 200 multiplier = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
+ empulse(location, round(multiplier / 12), round(multiplier / 7), 1)
holder.clear_reagents()
@@ -125,9 +125,9 @@
id = "beesplosion"
required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/radium = 1)
-/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, multiplier)
var/location = holder.my_atom.drop_location()
- if(created_volume < 5)
+ if(multiplier < 5)
playsound(location,'sound/effects/sparks1.ogg', 100, TRUE)
else
playsound(location,'sound/creatures/bee.ogg', 100, TRUE)
@@ -137,7 +137,7 @@
if(required_reagents[R.type])
continue
beeagents += R
- var/bee_amount = round(created_volume * 0.2)
+ var/bee_amount = round(multiplier * 0.2)
for(var/i in 1 to bee_amount)
var/mob/living/simple_animal/hostile/poison/bees/short/new_bee = new(location)
if(LAZYLEN(beeagents))
@@ -157,7 +157,7 @@
required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 3)
required_temp = 424
-/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
@@ -172,7 +172,7 @@
modifier = 1
mob_react = FALSE
-/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/effect/hotspot(turf)
@@ -190,12 +190,12 @@
results = list(/datum/reagent/sorium = 4)
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1, /datum/reagent/carbon = 1)
-/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/sorium, created_volume*4)
+ holder.remove_reagent(/datum/reagent/sorium, multiplier*4)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume*4), 1, 6)
+ var/range = CLAMP(sqrt(multiplier*4), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/sorium_vortex
@@ -204,9 +204,9 @@
required_reagents = list(/datum/reagent/sorium = 1)
required_temp = 474
-/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume), 1, 6)
+ var/range = CLAMP(sqrt(multiplier), 1, 6)
goonchem_vortex(T, 1, range)
/datum/chemical_reaction/liquid_dark_matter
@@ -215,12 +215,12 @@
results = list(/datum/reagent/liquid_dark_matter = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/radium = 1, /datum/reagent/carbon = 1)
-/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3)
+ holder.remove_reagent(/datum/reagent/liquid_dark_matter, multiplier*3)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume*3), 1, 6)
+ var/range = CLAMP(sqrt(multiplier*3), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/ldm_vortex
@@ -229,9 +229,9 @@
required_reagents = list(/datum/reagent/liquid_dark_matter = 1)
required_temp = 474
-/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, multiplier)
var/turf/T = get_turf(holder.my_atom)
- var/range = CLAMP(sqrt(created_volume/2), 1, 6)
+ var/range = CLAMP(sqrt(multiplier/2), 1, 6)
goonchem_vortex(T, 0, range)
/datum/chemical_reaction/flash_powder
@@ -240,12 +240,12 @@
results = list(/datum/reagent/flash_powder = 3)
required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/potassium = 1, /datum/reagent/sulfur = 1 )
-/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
var/location = get_turf(holder.my_atom)
do_sparks(2, TRUE, location)
- var/range = created_volume/3
+ var/range = multiplier/3
if(isatom(holder.my_atom))
var/atom/A = holder.my_atom
A.flash_lighting_fx(_range = (range + 2), _reset_lighting = FALSE)
@@ -255,7 +255,7 @@
C.Knockdown(60)
else
C.Stun(100)
- holder.remove_reagent(/datum/reagent/flash_powder, created_volume*3)
+ holder.remove_reagent(/datum/reagent/flash_powder, multiplier*3)
/datum/chemical_reaction/flash_powder_flash
name = "Flash powder activation"
@@ -263,10 +263,10 @@
required_reagents = list(/datum/reagent/flash_powder = 1)
required_temp = 374
-/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
do_sparks(2, TRUE, location)
- var/range = created_volume/10
+ var/range = multiplier/10
if(isatom(holder.my_atom))
var/atom/A = holder.my_atom
A.flash_lighting_fx(_range = (range + 2), _reset_lighting = FALSE)
@@ -283,11 +283,11 @@
results = list(/datum/reagent/smoke_powder = 3)
required_reagents = list(/datum/reagent/potassium = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3)
- var/smoke_radius = round(sqrt(created_volume * 1.5), 1)
+ holder.remove_reagent(/datum/reagent/smoke_powder, multiplier*3)
+ var/smoke_radius = round(sqrt(multiplier * 1.5), 1)
var/location = get_turf(holder.my_atom)
var/datum/effect_system/smoke_spread/chem/S = new
S.attach(location)
@@ -305,9 +305,9 @@
required_temp = 374
mob_react = FALSE
-/datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
- var/smoke_radius = round(sqrt(created_volume / 2), 1)
+ var/smoke_radius = round(sqrt(multiplier / 2), 1)
var/datum/effect_system/smoke_spread/chem/S = new
S.attach(location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -323,13 +323,13 @@
results = list(/datum/reagent/sonic_powder = 3)
required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/consumable/space_cola = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
- holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3)
+ holder.remove_reagent(/datum/reagent/sonic_powder, multiplier*3)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
+ for(var/mob/living/carbon/C in get_hearers_in_view(multiplier/3, location))
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/sonic_powder_deafen
@@ -338,10 +338,10 @@
required_reagents = list(/datum/reagent/sonic_powder = 1)
required_temp = 374
-/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, multiplier)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
- for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
+ for(var/mob/living/carbon/C in get_hearers_in_view(multiplier/10, location))
C.soundbang_act(1, 100, rand(0, 5))
/datum/chemical_reaction/phlogiston
@@ -350,12 +350,12 @@
results = list(/datum/reagent/phlogiston = 3)
required_reagents = list(/datum/reagent/phosphorus = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/stable_plasma = 1)
-/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, multiplier)
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return
var/turf/open/T = get_turf(holder.my_atom)
if(istype(T))
- T.atmos_spawn_air("plasma=[created_volume];TEMP=1000")
+ T.atmos_spawn_air("plasma=[multiplier];TEMP=1000")
holder.clear_reagents()
return
@@ -371,7 +371,7 @@
results = list(/datum/reagent/cryostylane = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/nitrogen = 1)
-/datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, multiplier)
holder.chem_temp = 20 // cools the fuck down
return
@@ -382,8 +382,8 @@
required_reagents = list(/datum/reagent/cryostylane = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
-/datum/chemical_reaction/cryostylane_oxygen/on_reaction(datum/reagents/holder, created_volume)
- holder.chem_temp = max(holder.chem_temp - 10*created_volume,0)
+/datum/chemical_reaction/cryostylane_oxygen/on_reaction(datum/reagents/holder, multiplier)
+ holder.chem_temp = max(holder.chem_temp - 10*multiplier,0)
/datum/chemical_reaction/pyrosium_oxygen
name = "ephemeral pyrosium reaction"
@@ -392,8 +392,8 @@
required_reagents = list(/datum/reagent/pyrosium = 1, /datum/reagent/oxygen = 1)
mob_react = FALSE
-/datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, created_volume)
- holder.chem_temp += 10*created_volume
+/datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, multiplier)
+ holder.chem_temp += 10*multiplier
/datum/chemical_reaction/pyrosium
name = "pyrosium"
@@ -401,7 +401,7 @@
results = list(/datum/reagent/pyrosium = 3)
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/radium = 1, /datum/reagent/phosphorus = 1)
-/datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, multiplier)
holder.chem_temp = 20 // also cools the fuck down
return
@@ -431,20 +431,20 @@
mix_sound = 'sound/machines/defib_zap.ogg'
var/tesla_flags = TESLA_MOB_DAMAGE | TESLA_OBJ_DAMAGE | TESLA_MOB_STUN
-/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, created_volume)
- var/T1 = created_volume * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison.
- var/T2 = created_volume * 50
- var/T3 = created_volume * 120
+/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, multiplier)
+ var/T1 = multiplier * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison.
+ var/T2 = multiplier * 50
+ var/T3 = multiplier * 120
sleep(5)
- if(created_volume >= 75)
+ if(multiplier >= 75)
tesla_zap(holder.my_atom, 7, T1, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
sleep(15)
- if(created_volume >= 40)
+ if(multiplier >= 40)
tesla_zap(holder.my_atom, 7, T2, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
sleep(15)
- if(created_volume >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast.
+ if(multiplier >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast.
tesla_zap(holder.my_atom, 7, T3, tesla_flags)
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
..()
@@ -490,7 +490,7 @@
else
return FALSE
-/datum/chemical_reaction/reagent_explosion/lingblood/on_reaction(datum/reagents/holder, created_volume, specialreact)
+/datum/chemical_reaction/reagent_explosion/lingblood/on_reaction(datum/reagents/holder, multiplier, specialreact)
if(specialreact >= 10)
return ..()
else
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 5228d4a281..2890d02d09 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -290,7 +290,7 @@
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
-/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, multiplier)
empulse(get_turf(holder.my_atom), 3, 7)
..()
@@ -301,7 +301,7 @@
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
-/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom))
..()
@@ -505,7 +505,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25)
..()
@@ -517,7 +517,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom))
BC.visible_message("The [BC.name] appears out of thin air!")
..()
@@ -529,7 +529,7 @@
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
-/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom))
..()
@@ -626,8 +626,8 @@
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
-/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, created_volume)
- if(created_volume >= 5)
+/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, multiplier)
+ if(multiplier >= 5)
var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom))
S.visible_message("Infused with plasma, the core begins to expand uncontrollably!")
S.icon_state = "[S.base_state]_active"
@@ -646,7 +646,7 @@
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
-/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, created_volume)
+/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/grenade/clusterbuster/slime/volatile/S = new (holder.my_atom.loc)
S.visible_message("Infused with slime jelly, the core begins to expand uncontrollably!")
S.icon_state = "[S.base_state]_active"
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index 46ddb1e2ed..11c80b14ee 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -149,8 +149,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
"You struggle to pry up \the [src] with \the [I].")
if(I.use_tool(src, user, 40, volume=40))
if(!(stat & BROKEN))
- var/obj/item/conveyor_construct/C = new/obj/item/conveyor_construct(src.loc)
- C.id = id
+ var/obj/item/stack/conveyor/C = new /obj/item/stack/conveyor(loc, 1, TRUE, id)
transfer_fingerprints_to(C)
to_chat(user, "You remove the conveyor belt.")
qdel(src)
@@ -326,37 +325,6 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
if((dir == NORTH) || (dir == WEST))
invert_icon = TRUE
-//
-// CONVEYOR CONSTRUCTION STARTS HERE
-//
-
-/obj/item/conveyor_construct
- icon = 'icons/obj/recycling.dmi'
- icon_state = "conveyor_construct"
- name = "conveyor belt assembly"
- desc = "A conveyor belt assembly."
- w_class = WEIGHT_CLASS_BULKY
- var/id = "" //inherited by the belt
-
-/obj/item/conveyor_construct/attackby(obj/item/I, mob/user, params)
- ..()
- if(istype(I, /obj/item/conveyor_switch_construct))
- to_chat(user, "You link the switch to the conveyor belt assembly.")
- var/obj/item/conveyor_switch_construct/C = I
- id = C.id
-
-/obj/item/conveyor_construct/afterattack(atom/A, mob/user, proximity)
- . = ..()
- if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
- return
- var/cdir = get_dir(A, user)
- if(A == user.loc)
- to_chat(user, "You cannot place a conveyor belt under yourself.")
- return
- var/obj/machinery/conveyor/C = new/obj/machinery/conveyor(A, cdir, id)
- transfer_fingerprints_to(C)
- qdel(src)
-
/obj/item/conveyor_switch_construct
name = "conveyor switch assembly"
desc = "A conveyor control switch assembly."
@@ -369,6 +337,11 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
. = ..()
id = "[rand()]" //this couldn't possibly go wrong
+/obj/item/conveyor_switch_construct/attack_self(mob/user)
+ for(var/obj/item/stack/conveyor/C in view())
+ C.id = id
+ to_chat(user, "You have linked all nearby conveyor belt assemblies to this switch.")
+
/obj/item/conveyor_switch_construct/afterattack(atom/A, mob/user, proximity)
. = ..()
if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
@@ -385,6 +358,49 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
transfer_fingerprints_to(NC)
qdel(src)
+/obj/item/stack/conveyor
+ name = "conveyor belt assembly"
+ desc = "A conveyor belt assembly."
+ icon = 'icons/obj/recycling.dmi'
+ icon_state = "conveyor_construct"
+ max_amount = 30
+ singular_name = "conveyor belt"
+ w_class = WEIGHT_CLASS_BULKY
+ ///id for linking
+ var/id = ""
+
+/obj/item/stack/conveyor/Initialize(mapload, new_amount, merge = TRUE, _id)
+ . = ..()
+ id = _id
+
+/obj/item/stack/conveyor/afterattack(atom/A, mob/user, proximity)
+ . = ..()
+ if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle))
+ return
+ var/cdir = get_dir(A, user)
+ if(A == user.loc)
+ to_chat(user, "You cannot place a conveyor belt under yourself!")
+ return
+ var/obj/machinery/conveyor/C = new/obj/machinery/conveyor(A, cdir, id)
+ transfer_fingerprints_to(C)
+ use(1)
+
+/obj/item/stack/conveyor/attackby(obj/item/I, mob/user, params)
+ ..()
+ if(istype(I, /obj/item/conveyor_switch_construct))
+ to_chat(user, "You link the switch to the conveyor belt assembly.")
+ var/obj/item/conveyor_switch_construct/C = I
+ id = C.id
+
+/obj/item/stack/conveyor/update_weight()
+ return FALSE
+
+/obj/item/stack/conveyor/thirty
+ amount = 30
+
+/obj/item/stack/conveyor/fifteen
+ amount = 15
+
/obj/item/paper/guides/conveyor
name = "paper- 'Nano-it-up U-build series, #9: Build your very own conveyor belt, in SPACE'"
info = "Congratulations!
You are now the proud owner of the best conveyor set available for space mail order! We at Nano-it-up know you love to prepare your own structures without wasting time, so we have devised a special streamlined assembly procedure that puts all other mail-order products to shame!
Firstly, you need to link the conveyor switch assembly to each of the conveyor belt assemblies. After doing so, you simply need to install the belt assemblies onto the floor, et voila, belt built. Our special Nano-it-up smart switch will detected any linked assemblies as far as the eye can see! This convenience, you can only have it when you Nano-it-up. Stay nano!
"
diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
index 1ae1d3813b..a4abd6e183 100644
--- a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
+++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm
@@ -87,9 +87,10 @@
name = "Conveyor Belt"
id = "conveyor_belt"
build_type = AUTOLATHE
- materials = list(MAT_METAL = 5000)
- build_path = /obj/item/conveyor_construct
+ materials = list(MAT_METAL = 3000)
+ build_path = /obj/item/stack/conveyor
category = list("initial", "Construction")
+ maxstack = 30
/datum/design/conveyor_switch
name = "Conveyor Belt Switch"
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 74f07e4ce3..2fa5901ec9 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -80,7 +80,7 @@
display_name = "Advanced Biotechnology"
description = "Advanced Biotechnology"
prereq_ids = list("biotech")
- design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "meta_beaker", "healthanalyzer_advanced", "harvester", "holobarrier_med", "detective_scanner", "defibrillator_compact", "smartdartgun", "medicinalsmartdart", "pHmeter")
+ design_ids = list("piercesyringe", "crewpinpointer", "smoke_machine", "plasmarefiller", "limbgrower", "meta_beaker", "healthanalyzer_advanced", "harvester", "holobarrier_med", "defibrillator_compact", "smartdartgun", "medicinalsmartdart", "pHmeter")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -1117,7 +1117,7 @@
id = "advanced_illegal_ballistics"
display_name = "Advanced Non-Standard Ballistics"
description = "Ballistic ammunition for non-standard firearms. Usually the ones you don't have nor want to be involved with."
- design_ids = list("10mm","10mmap","10mminc","10mmhp","sl357","pistolm9mm","m45","bolt_clip")
+ design_ids = list("10mm","10mmap","10mminc","10mmhp","sl357","sl357ap","pistolm9mm","m45","bolt_clip")
prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns from traitors, space, or anything in between.
export_price = 7000
diff --git a/html/changelogs/AutoChangeLog-pr-10468.yml b/html/changelogs/AutoChangeLog-pr-10468.yml
new file mode 100644
index 0000000000..055411d0f2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10468.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "Ghosting no longer stops abductors from using you."
diff --git a/html/changelogs/AutoChangeLog-pr-10588.yml b/html/changelogs/AutoChangeLog-pr-10588.yml
new file mode 100644
index 0000000000..d3771298b2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10588.yml
@@ -0,0 +1,4 @@
+author: "PersianXerxes"
+delete-after: True
+changes:
+ - tweak: "Reduces the range of the forcefield projector from 7 tiles to 2 tiles."
diff --git a/html/changelogs/AutoChangeLog-pr-10608.yml b/html/changelogs/AutoChangeLog-pr-10608.yml
new file mode 100644
index 0000000000..1c2015813e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10608.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - rscadd: "you can now block people on your PDA"
diff --git a/html/changelogs/AutoChangeLog-pr-10615.yml b/html/changelogs/AutoChangeLog-pr-10615.yml
new file mode 100644
index 0000000000..f67392cd7f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10615.yml
@@ -0,0 +1,4 @@
+author: "keronshb"
+delete-after: True
+changes:
+ - bugfix: "fixed my messup"
diff --git a/html/changelogs/AutoChangeLog-pr-10617.yml b/html/changelogs/AutoChangeLog-pr-10617.yml
new file mode 100644
index 0000000000..923913a043
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10617.yml
@@ -0,0 +1,4 @@
+author: "kevinz000"
+delete-after: True
+changes:
+ - bugfix: "Grenades can now have their timers adjusted."
diff --git a/html/changelogs/AutoChangeLog-pr-10619.yml b/html/changelogs/AutoChangeLog-pr-10619.yml
new file mode 100644
index 0000000000..acb76034ac
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10619.yml
@@ -0,0 +1,7 @@
+author: "Seris02"
+delete-after: True
+changes:
+ - tweak: "conveyor belt now are stacks instead of single item"
+ - tweak: "conveyor crate has 30 belts"
+ - tweak: "printing a conveyor costs 3000 metal"
+ - rscadd: "you can press the conveyor switch in hand to link any not deployed belts to it"
diff --git a/html/changelogs/AutoChangeLog-pr-10621.yml b/html/changelogs/AutoChangeLog-pr-10621.yml
new file mode 100644
index 0000000000..0bb08dee2c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10621.yml
@@ -0,0 +1,4 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscadd: "You can now print .357 AP speedloaders from Security techfabs after you pick up the Advanced Non-Standard Ballistics node."
diff --git a/html/changelogs/AutoChangeLog-pr-10635.yml b/html/changelogs/AutoChangeLog-pr-10635.yml
new file mode 100644
index 0000000000..66c90808d6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-10635.yml
@@ -0,0 +1,4 @@
+author: "Hatterhat"
+delete-after: True
+changes:
+ - rscdel: "Forensic scanner removed from Advanced Biotechnology node."
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 71fceba8b4..c5a6914cf4 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
index 4ae3e5c488..dd45c0278a 100644
--- a/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
+++ b/modular_citadel/code/modules/projectiles/boxes_magazines/external/pistol.dm
@@ -78,3 +78,13 @@
build_path = /obj/item/ammo_box/a357
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/sl357ap
+ name = "revolver speedloader (.357 AP)"
+ desc = "A revolver speedloader. Cuts through like a hot knife through butter."
+ id = "sl357ap"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 30000, MAT_TITANIUM = 45000)
+ build_path = /obj/item/ammo_box/a357/ap
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY