merge conflicts + getting rid of commented code for now
This commit is contained in:
@@ -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 += "<li><a href='byond://?src=[REF(src)];choice=Message;target=[REF(P)]'>[P]</a>"
|
||||
if(P.owner in blocked_pdas)
|
||||
dat += "<li><a href='byond://?src=[REF(src)];choice=unblock_pda;target=[P.owner]'>(BLOCKED - CLICK TO UNBLOCK) [P]</a>"
|
||||
else
|
||||
dat += "<li><a href='byond://?src=[REF(src)];choice=Message;target=[REF(P)]'>[P]</a>"
|
||||
if(cartridge)
|
||||
dat += cartridge.message_special(P)
|
||||
dat += "</li>"
|
||||
@@ -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, "<span class='warning'>[icon2html(src, user)] The following recipients have blocked your message: [string_blocked].</span>")
|
||||
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 += "<i><b>→ To [target_text]:</b></i><br>[signal.format_message()]<br>"
|
||||
// Show it to ghosts
|
||||
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message(TRUE)]</span>"
|
||||
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, "<span class='info'>Message sent to [target_text]: \"[emoji_message]\"</span>")
|
||||
// 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 += "<i><b>← From <a href='byond://?src=[REF(src)];choice=Message;target=[REF(signal.source)]'>[signal.data["name"]]</a> ([signal.data["job"]]):</b></i><br>[signal.format_message()]<br>"
|
||||
|
||||
tnote += "<i><b>← From <a href='byond://?src=[REF(src)];choice=Message;target=[REF(signal.source)]'>[signal.data["name"]]</a> ([signal.data["job"]]):</b></i> <a href='byond://?src=[REF(src)];choice=toggle_block;target=[signal.data["name"]]'>(BLOCK/UNBLOCK)</a><br>[signal.format_message()]<br>"
|
||||
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 = "<a href='?src=[REF(L)];track=[html_encode(signal.data["name"])]'>"
|
||||
hrefend = "</a>"
|
||||
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message(TRUE)] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message(TRUE)] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>) <a href='byond://?src=[REF(src)];choice=toggle_block;target=[signal.data["name"]]'>(BLOCK/UNBLOCK)</a>")
|
||||
|
||||
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, "<span class='notice'>[icon2html(src, user)] [target] blocked from messages. Use the messenger PDA list to unblock.</span>")
|
||||
LAZYOR(blocked_pdas, target)
|
||||
|
||||
/obj/item/pda/proc/unblock_pda(mob/user, target)
|
||||
to_chat(user, "<span class='notice'>[icon2html(src, user)] [target] unblocked from messages.</span>")
|
||||
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
|
||||
#undef PDA_OVERLAY_PAI
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,"<span class='notice'>You turn on [src]'s silicon interactions.</span>")
|
||||
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,"<span class='notice'>You turn off [src]'s silicon interactions.</span>")
|
||||
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
|
||||
|
||||
*/
|
||||
return TRUE
|
||||
@@ -174,7 +174,7 @@
|
||||
if(!GlandTest)
|
||||
say("Experimental dissection not detected!")
|
||||
return "<span class='bad'>No glands detected!</span>"
|
||||
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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
var/siliconaccesstoggle = FALSE
|
||||
|
||||
var/voluntary_ghosted = FALSE //whether or not they voluntarily ghosted.
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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, "<span class='danger'>The solution spews out foam!</span>")
|
||||
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, "<span class='danger'>The solution spews out a metallic foam!</span>")
|
||||
|
||||
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("<span class='danger'>The solution spews out metallic foam!</span>")
|
||||
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, "<span class='danger'>The solution spews out a metallic foam!</span>")
|
||||
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
|
||||
|
||||
@@ -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, "<span class='userdanger'>The divine explosion sears you!</span>")
|
||||
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 = "<span class='boldannounce'>Sparks start flying around the black powder!</span>"
|
||||
|
||||
/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
|
||||
|
||||
@@ -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("<span class='notice'>The [BC.name] appears out of thin air!</span>")
|
||||
..()
|
||||
@@ -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("<span class='danger'>Infused with plasma, the core begins to expand uncontrollably!</span>")
|
||||
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("<span class='danger'>Infused with slime jelly, the core begins to expand uncontrollably!</span>")
|
||||
S.icon_state = "[S.base_state]_active"
|
||||
|
||||
@@ -149,8 +149,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
|
||||
"<span class='notice'>You struggle to pry up \the [src] with \the [I].</span>")
|
||||
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, "<span class='notice'>You remove the conveyor belt.</span>")
|
||||
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, "<span class='notice'>You link the switch to the conveyor belt assembly.</span>")
|
||||
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, "<span class='notice'>You cannot place a conveyor belt under yourself.</span>")
|
||||
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, "<span class='notice'>You have linked all nearby conveyor belt assemblies to this switch.</span>")
|
||||
|
||||
/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, "<span class='warning'>You cannot place a conveyor belt under yourself!</span>")
|
||||
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, "<span class='notice'>You link the switch to the conveyor belt assembly.</span>")
|
||||
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 = "<h1>Congratulations!</h1><p>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!</p><p>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!</p>"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Ghosting no longer stops abductors from using you."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "PersianXerxes"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Reduces the range of the forcefield projector from 7 tiles to 2 tiles."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "you can now block people on your PDA"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "keronshb"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "fixed my messup"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "kevinz000"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Grenades can now have their timers adjusted."
|
||||
@@ -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"
|
||||
@@ -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."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Hatterhat"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscdel: "Forensic scanner removed from Advanced Biotechnology node."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 51 KiB |
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user