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