"
- if(!autolink)
- dat += {"
- Frequency: [frequency]
- Code: [code]
- Probe Generators
- "}
+ break
- if(magnets.len >= 1)
+ looping = 1
- dat += "Magnets confirmed: "
- var/i = 0
- for(var/obj/machinery/magnetic_module/M in magnets)
- i++
- dat += " < \[[i]\] ([M.on ? "On":"Off"]) | Electricity level: - [M.electricity_level] +; Magnetic field: - [M.magnetic_field] + "
+ // Prepare the radio signal
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 // radio transmission
+ signal.source = src
+ signal.frequency = frequency
+ signal.data["code"] = code
- dat += " Speed: - [speed] + "
- dat += "Path: {[path]} "
- dat += "Moving: [moving ? "Enabled":"Disabled"]"
+ if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list!
+ pathpos = 1
+
+ var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive
+
+ if(!(nextmove in list("N","S","E","W","C","R")))
+ // N, S, E, W are directional
+ // C is center
+ // R is random (in magnetic field's bounds)
+ qdel(signal)
+ break // break the loop if the character located is invalid
+
+ signal.data["command"] = nextmove
- user << browse(dat, "window=magnet;size=400x500")
- onclose(user, "magnet")
-
- Topic(href, href_list)
- if(stat & (BROKEN|NOPOWER))
- return
- usr.set_machine(src)
- src.add_fingerprint(usr)
-
- if(href_list["radio-op"])
-
- // Prepare signal beforehand, because this is a radio operation
- var/datum/signal/signal = new
- signal.transmission_method = 1 // radio transmission
- signal.source = src
- signal.frequency = frequency
- signal.data["code"] = code
-
- // Apply any necessary commands
- switch(href_list["radio-op"])
- if("togglepower")
- signal.data["command"] = "toggle-power"
-
- if("minuselec")
- signal.data["command"] = "sub-elec"
- if("pluselec")
- signal.data["command"] = "add-elec"
-
- if("minusmag")
- signal.data["command"] = "sub-mag"
- if("plusmag")
- signal.data["command"] = "add-mag"
-
-
- // Broadcast the signal
+ pathpos++ // increase iterator
+ // Broadcast the signal
+ spawn()
radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
- spawn(1)
- updateUsrDialog() // pretty sure this increases responsiveness
+ if(speed == 10)
+ sleep(1)
+ else
+ sleep(12-speed)
- if(href_list["operation"])
- switch(href_list["operation"])
- if("plusspeed")
- speed++
- if(speed > 10)
- speed = 10
- if("minusspeed")
- speed --
- if(speed <= 0)
- speed = 1
- if("setpath")
- var/newpath = sanitize(copytext(input(usr, "Please define a new path!",,path) as text|null,1,MAX_MESSAGE_LEN))
- if(newpath && newpath != "")
- moving = 0 // stop moving
- path = newpath
- pathpos = 1 // reset position
- filter_path() // renders rpath
-
- if("togglemoving")
- moving = !moving
- if(moving)
- spawn() MagnetMove()
+ looping = 0
- updateUsrDialog()
+/obj/machinery/magnetic_controller/proc/filter_path()
+ // Generates the rpath variable using the path string, think of this as "string2list"
+ // Doesn't use params2list() because of the akward way it stacks entities
+ rpath = list() // clear rpath
+ var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length
- proc/MagnetMove()
- if(looping) return
+ for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
- while(moving && rpath.len >= 1)
+ var/nextchar = copytext(path, i, i+1) // find next character
- if(stat & (BROKEN|NOPOWER))
- break
+ if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
+ rpath += copytext(path, i, i+1) // else, add to list
- looping = 1
-
- // Prepare the radio signal
- var/datum/signal/signal = new
- signal.transmission_method = 1 // radio transmission
- signal.source = src
- signal.frequency = frequency
- signal.data["code"] = code
-
- if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list!
- pathpos = 1
-
- var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive
-
- if(!(nextmove in list("N","S","E","W","C","R")))
- // N, S, E, W are directional
- // C is center
- // R is random (in magnetic field's bounds)
- qdel(signal)
- break // break the loop if the character located is invalid
-
- signal.data["command"] = nextmove
-
-
- pathpos++ // increase iterator
-
- // Broadcast the signal
- spawn()
- radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS)
-
- if(speed == 10)
- sleep(1)
- else
- sleep(12-speed)
-
- looping = 0
-
-
- proc/filter_path()
- // Generates the rpath variable using the path string, think of this as "string2list"
- // Doesn't use params2list() because of the akward way it stacks entities
- rpath = list() // clear rpath
- var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length
-
- for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path
-
- var/nextchar = copytext(path, i, i+1) // find next character
-
- if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore
- rpath += copytext(path, i, i+1) // else, add to list
-
- // there doesn't HAVE to be separators but it makes paths syntatically visible
+ // there doesn't HAVE to be separators but it makes paths syntatically visible
diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm
index 37d1c3ae93c..dacb5f14f46 100644
--- a/code/game/machinery/syndicatebeacon.dm
+++ b/code/game/machinery/syndicatebeacon.dm
@@ -17,89 +17,89 @@
var/selfdestructing = 0
var/charges = 1
- attack_hand(var/mob/user as mob)
- usr.set_machine(src)
- var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]... Identity confirmed, "
- if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
- if(is_special_character(user))
- dat += "Operative record found. Greetings, Agent [user.name]. "
- else if(charges < 1)
- dat += "Connection severed. "
- else
- var/honorific = "Mr."
- if(user.gender == FEMALE)
- honorific = "Ms."
- dat += "Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]? "
- if(!selfdestructing)
- dat += "
\"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\" "
- dat += temptext
- user << browse(dat, "window=syndbeacon")
- onclose(user, "syndbeacon")
+/obj/machinery/syndicate_beacon/attack_hand(var/mob/user as mob)
+ usr.set_machine(src)
+ var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]... Identity confirmed, "
+ if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
+ if(is_special_character(user))
+ dat += "Operative record found. Greetings, Agent [user.name]. "
+ else if(charges < 1)
+ dat += "Connection severed. "
+ else
+ var/honorific = "Mr."
+ if(user.gender == FEMALE)
+ honorific = "Ms."
+ dat += "Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]? "
+ if(!selfdestructing)
+ dat += "
\"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\" "
+ dat += temptext
+ user << browse(dat, "window=syndbeacon")
+ onclose(user, "syndbeacon")
- Topic(href, href_list)
- if(..())
- return 1
- if(href_list["betraitor"])
- if(charges < 1)
+/obj/machinery/syndicate_beacon/Topic(href, href_list)
+ if(..())
+ return 1
+ if(href_list["betraitor"])
+ if(charges < 1)
+ src.updateUsrDialog()
+ return
+ var/mob/M = locate(href_list["traitormob"])
+ if(M.mind.special_role)
+ temptext = "We have no need for you at this time. Have a pleasant day. "
+ src.updateUsrDialog()
+ return
+ charges -= 1
+ switch(rand(1,2))
+ if(1)
+ temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind."
src.updateUsrDialog()
+ spawn(rand(50,200)) selfdestruct()
return
- var/mob/M = locate(href_list["traitormob"])
- if(M.mind.special_role)
- temptext = "We have no need for you at this time. Have a pleasant day. "
- src.updateUsrDialog()
- return
- charges -= 1
- switch(rand(1,2))
- if(1)
- temptext = "Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind."
- src.updateUsrDialog()
- spawn(rand(50,200)) selfdestruct()
- return
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/N = M
- ticker.mode.equip_traitor(N)
- ticker.mode.traitors += N.mind
- N.mind.special_role = SPECIAL_ROLE_TRAITOR
- var/objective = "Free Objective"
- switch(rand(1,100))
- if(1 to 50)
- objective = "Steal [pick("a hand teleporter", "the Captain's antique laser gun", "a jetpack", "the Captain's ID", "the Captain's jumpsuit")]."
- if(51 to 60)
- objective = "Destroy 70% or more of the station's plasma tanks."
- if(61 to 70)
- objective = "Cut power to 80% or more of the station's tiles."
- if(71 to 80)
- objective = "Destroy the AI."
- if(81 to 90)
- objective = "Kill all monkeys aboard the station."
- else
- objective = "Make certain at least 80% of the station evacuates on the shuttle."
- var/datum/objective/custom_objective = new(objective)
- custom_objective.owner = N.mind
- N.mind.objectives += custom_objective
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/N = M
+ ticker.mode.equip_traitor(N)
+ ticker.mode.traitors += N.mind
+ N.mind.special_role = SPECIAL_ROLE_TRAITOR
+ var/objective = "Free Objective"
+ switch(rand(1,100))
+ if(1 to 50)
+ objective = "Steal [pick("a hand teleporter", "the Captain's antique laser gun", "a jetpack", "the Captain's ID", "the Captain's jumpsuit")]."
+ if(51 to 60)
+ objective = "Destroy 70% or more of the station's plasma tanks."
+ if(61 to 70)
+ objective = "Cut power to 80% or more of the station's tiles."
+ if(71 to 80)
+ objective = "Destroy the AI."
+ if(81 to 90)
+ objective = "Kill all monkeys aboard the station."
+ else
+ objective = "Make certain at least 80% of the station evacuates on the shuttle."
+ var/datum/objective/custom_objective = new(objective)
+ custom_objective.owner = N.mind
+ N.mind.objectives += custom_objective
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = N.mind
- N.mind.objectives += escape_objective
+ var/datum/objective/escape/escape_objective = new
+ escape_objective.owner = N.mind
+ N.mind.objectives += escape_objective
- to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!")
+ to_chat(M, "You have joined the ranks of the Syndicate and become a traitor to the station!")
- message_admins("[key_name_admin(N)] has accepted a traitor objective from a syndicate beacon.")
+ message_admins("[key_name_admin(N)] has accepted a traitor objective from a syndicate beacon.")
- var/obj_count = 1
- for(var/datum/objective/OBJ in M.mind.objectives)
- to_chat(M, "Objective #[obj_count]: [OBJ.explanation_text]")
- obj_count++
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in M.mind.objectives)
+ to_chat(M, "Objective #[obj_count]: [OBJ.explanation_text]")
+ obj_count++
- src.add_fingerprint(usr)
- src.updateUsrDialog()
- return
+ src.add_fingerprint(usr)
+ src.updateUsrDialog()
+ return
- proc/selfdestruct()
- selfdestructing = 1
- spawn() explosion(src.loc, rand(3,8), rand(1,3), 1, 10)
+/obj/machinery/syndicate_beacon/proc/selfdestruct()
+ selfdestructing = 1
+ spawn() explosion(src.loc, rand(3,8), rand(1,3), 1, 10)
@@ -196,4 +196,4 @@
/obj/machinery/power/singularity_beacon/syndicate
icontype = "beaconsynd"
- icon_state = "beaconsynd0"
\ No newline at end of file
+ icon_state = "beaconsynd0"
diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index 0a12b637a39..539e4565d66 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -75,10 +75,10 @@
freq_listening = list(AI_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ)
//Common and other radio frequencies for people to freely use
- New()
- for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2)
- freq_listening |= i
- ..()
+/obj/machinery/telecomms/receiver/preset_right/New()
+ for(var/i = PUBLIC_LOW_FREQ, i < PUBLIC_HIGH_FREQ, i += 2)
+ freq_listening |= i
+ ..()
/obj/machinery/telecomms/receiver/preset_cent
id = "CentComm Receiver"
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index a5a1bb95bc1..75b9fc6b1b8 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -33,9 +33,9 @@
/obj/item/mecha_parts/chassis/ripley
name = "Ripley Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/ripley_chassis(src)
+/obj/item/mecha_parts/chassis/ripley/New()
+ ..()
+ construct = new /datum/construction/mecha/ripley_chassis(src)
/obj/item/mecha_parts/part/ripley_torso
name="Ripley Torso"
@@ -68,9 +68,9 @@
/obj/item/mecha_parts/chassis/gygax
name = "Gygax Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/gygax_chassis(src)
+/obj/item/mecha_parts/chassis/gygax/New()
+ ..()
+ construct = new /datum/construction/mecha/gygax_chassis(src)
/obj/item/mecha_parts/part/gygax_torso
name="Gygax Torso"
@@ -117,9 +117,9 @@
/obj/item/mecha_parts/chassis/durand
name = "Durand Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/durand_chassis(src)
+/obj/item/mecha_parts/chassis/durand/New()
+ ..()
+ construct = new /datum/construction/mecha/durand_chassis(src)
/obj/item/mecha_parts/part/durand_torso
name="Durand Torso"
@@ -163,39 +163,18 @@
/obj/item/mecha_parts/chassis/firefighter
name = "Firefighter Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/firefighter_chassis(src)
-/*
-/obj/item/mecha_parts/part/firefighter_torso
- name="Ripley-on-Fire Torso"
- icon_state = "ripley_harness"
-
-/obj/item/mecha_parts/part/firefighter_left_arm
- name="Ripley-on-Fire Left Arm"
- icon_state = "ripley_l_arm"
-
-/obj/item/mecha_parts/part/firefighter_right_arm
- name="Ripley-on-Fire Right Arm"
- icon_state = "ripley_r_arm"
-
-/obj/item/mecha_parts/part/firefighter_left_leg
- name="Ripley-on-Fire Left Leg"
- icon_state = "ripley_l_leg"
-
-/obj/item/mecha_parts/part/firefighter_right_leg
- name="Ripley-on-Fire Right Leg"
- icon_state = "ripley_r_leg"
-*/
+/obj/item/mecha_parts/chassis/firefighter/New()
+ ..()
+ construct = new /datum/construction/mecha/firefighter_chassis(src)
////////// HONK
/obj/item/mecha_parts/chassis/honker
name = "H.O.N.K Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/honker_chassis(src)
+/obj/item/mecha_parts/chassis/honker/New()
+ ..()
+ construct = new /datum/construction/mecha/honker_chassis(src)
/obj/item/mecha_parts/part/honker_torso
name="H.O.N.K Torso"
@@ -275,9 +254,9 @@
/obj/item/mecha_parts/chassis/phazon
name = "Phazon Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/phazon_chassis(src)
+/obj/item/mecha_parts/chassis/phazon/New()
+ ..()
+ construct = new /datum/construction/mecha/phazon_chassis(src)
/obj/item/mecha_parts/part/phazon_torso
name="Phazon Torso"
@@ -319,9 +298,9 @@
/obj/item/mecha_parts/chassis/odysseus
name = "Odysseus Chassis"
- New()
- ..()
- construct = new /datum/construction/mecha/odysseus_chassis(src)
+/obj/item/mecha_parts/chassis/odysseus/New()
+ ..()
+ construct = new /datum/construction/mecha/odysseus_chassis(src)
/obj/item/mecha_parts/part/odysseus_head
name="Odysseus Head"
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index 204fcfc67f2..d108311b99d 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -15,10 +15,10 @@
var/list/crowbar_salvage
var/salvage_num = 5
- New()
- ..()
- crowbar_salvage = new
- return
+/obj/effect/decal/mecha_wreckage/New()
+ ..()
+ crowbar_salvage = new
+ return
/obj/effect/decal/mecha_wreckage/ex_act(severity)
if(severity < 2)
@@ -86,20 +86,20 @@
name = "Gygax wreckage"
icon_state = "gygax-broken"
- New()
- ..()
- var/list/parts = list(/obj/item/mecha_parts/part/gygax_torso,
- /obj/item/mecha_parts/part/gygax_head,
- /obj/item/mecha_parts/part/gygax_left_arm,
- /obj/item/mecha_parts/part/gygax_right_arm,
- /obj/item/mecha_parts/part/gygax_left_leg,
- /obj/item/mecha_parts/part/gygax_right_leg)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/gygax/New()
+ ..()
+ var/list/parts = list(/obj/item/mecha_parts/part/gygax_torso,
+ /obj/item/mecha_parts/part/gygax_head,
+ /obj/item/mecha_parts/part/gygax_left_arm,
+ /obj/item/mecha_parts/part/gygax_right_arm,
+ /obj/item/mecha_parts/part/gygax_left_leg,
+ /obj/item/mecha_parts/part/gygax_right_leg)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
/obj/effect/decal/mecha_wreckage/gygax/dark
name = "Dark Gygax wreckage"
@@ -126,38 +126,38 @@
name = "Ripley wreckage"
icon_state = "ripley-broken"
- New()
- ..()
- var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/ripley/New()
+ ..()
+ var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
/obj/effect/decal/mecha_wreckage/ripley/firefighter
name = "Firefighter wreckage"
icon_state = "firefighter-broken"
- New()
- ..()
- var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
- /obj/item/mecha_parts/part/ripley_left_arm,
- /obj/item/mecha_parts/part/ripley_right_arm,
- /obj/item/mecha_parts/part/ripley_left_leg,
- /obj/item/mecha_parts/part/ripley_right_leg,
- /obj/item/clothing/suit/fire)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/ripley/firefighter/New()
+ ..()
+ var/list/parts = list(/obj/item/mecha_parts/part/ripley_torso,
+ /obj/item/mecha_parts/part/ripley_left_arm,
+ /obj/item/mecha_parts/part/ripley_right_arm,
+ /obj/item/mecha_parts/part/ripley_left_leg,
+ /obj/item/mecha_parts/part/ripley_right_leg,
+ /obj/item/clothing/suit/fire)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
/obj/effect/decal/mecha_wreckage/ripley/deathripley
name = "Death-Ripley wreckage"
@@ -167,42 +167,42 @@
name = "Honker wreckage"
icon_state = "honker-broken"
- New()
- ..()
- var/list/parts = list(
- /obj/item/mecha_parts/chassis/honker,
- /obj/item/mecha_parts/part/honker_torso,
- /obj/item/mecha_parts/part/honker_head,
- /obj/item/mecha_parts/part/honker_left_arm,
- /obj/item/mecha_parts/part/honker_right_arm,
- /obj/item/mecha_parts/part/honker_left_leg,
- /obj/item/mecha_parts/part/honker_right_leg)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/honker/New()
+ ..()
+ var/list/parts = list(
+ /obj/item/mecha_parts/chassis/honker,
+ /obj/item/mecha_parts/part/honker_torso,
+ /obj/item/mecha_parts/part/honker_head,
+ /obj/item/mecha_parts/part/honker_left_arm,
+ /obj/item/mecha_parts/part/honker_right_arm,
+ /obj/item/mecha_parts/part/honker_left_leg,
+ /obj/item/mecha_parts/part/honker_right_leg)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
/obj/effect/decal/mecha_wreckage/durand
name = "Durand wreckage"
icon_state = "durand-broken"
- New()
- ..()
- var/list/parts = list(
- /obj/item/mecha_parts/part/durand_torso,
- /obj/item/mecha_parts/part/durand_head,
- /obj/item/mecha_parts/part/durand_left_arm,
- /obj/item/mecha_parts/part/durand_right_arm,
- /obj/item/mecha_parts/part/durand_left_leg,
- /obj/item/mecha_parts/part/durand_right_leg)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/durand/New()
+ ..()
+ var/list/parts = list(
+ /obj/item/mecha_parts/part/durand_torso,
+ /obj/item/mecha_parts/part/durand_head,
+ /obj/item/mecha_parts/part/durand_left_arm,
+ /obj/item/mecha_parts/part/durand_right_arm,
+ /obj/item/mecha_parts/part/durand_left_leg,
+ /obj/item/mecha_parts/part/durand_right_leg)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
/obj/effect/decal/mecha_wreckage/durand/old
@@ -218,18 +218,18 @@
name = "Odysseus wreckage"
icon_state = "odysseus-broken"
- New()
- ..()
- var/list/parts = list(
- /obj/item/mecha_parts/part/odysseus_torso,
- /obj/item/mecha_parts/part/odysseus_head,
- /obj/item/mecha_parts/part/odysseus_left_arm,
- /obj/item/mecha_parts/part/odysseus_right_arm,
- /obj/item/mecha_parts/part/odysseus_left_leg,
- /obj/item/mecha_parts/part/odysseus_right_leg)
- for(var/i=0;i<2;i++)
- if(!isemptylist(parts) && prob(40))
- var/part = pick(parts)
- welder_salvage += part
- parts -= part
- return
+/obj/effect/decal/mecha_wreckage/odysseus/New()
+ ..()
+ var/list/parts = list(
+ /obj/item/mecha_parts/part/odysseus_torso,
+ /obj/item/mecha_parts/part/odysseus_head,
+ /obj/item/mecha_parts/part/odysseus_left_arm,
+ /obj/item/mecha_parts/part/odysseus_right_arm,
+ /obj/item/mecha_parts/part/odysseus_left_leg,
+ /obj/item/mecha_parts/part/odysseus_right_leg)
+ for(var/i=0;i<2;i++)
+ if(!isemptylist(parts) && prob(40))
+ var/part = pick(parts)
+ welder_salvage += part
+ parts -= part
+ return
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index 3cffb3f7eaf..a5cd1b8b6b1 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -16,40 +16,40 @@
var/list/gibamounts = list()
var/list/gibdirections = list() //of lists
- New(location, datum/dna/MobDNA)
- ..()
+/obj/effect/gibspawner/New(location, datum/dna/MobDNA)
+ ..()
- if(istype(loc,/turf)) //basically if a badmin spawns it
- Gib(loc, MobDNA)
+ if(istype(loc,/turf)) //basically if a badmin spawns it
+ Gib(loc, MobDNA)
- proc/Gib(atom/location, datum/dna/MobDNA = null)
- if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
- to_chat(world, "Gib list length mismatch!")
- return
+/obj/effect/gibspawner/proc/Gib(atom/location, datum/dna/MobDNA = null)
+ if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
+ to_chat(world, "Gib list length mismatch!")
+ return
- var/obj/effect/decal/cleanable/blood/gibs/gib = null
+ var/obj/effect/decal/cleanable/blood/gibs/gib = null
- if(sparks)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(2, 1, location)
- s.start()
+ if(sparks)
+ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
+ s.set_up(2, 1, location)
+ s.start()
- for(var/i = 1, i<= gibtypes.len, i++)
- if(gibamounts[i])
- for(var/j = 1, j<= gibamounts[i], j++)
- var/gibType = gibtypes[i]
- gib = new gibType(location)
+ for(var/i = 1, i<= gibtypes.len, i++)
+ if(gibamounts[i])
+ for(var/j = 1, j<= gibamounts[i], j++)
+ var/gibType = gibtypes[i]
+ gib = new gibType(location)
- gib.blood_DNA = list()
- if(MobDNA)
- gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
- else if(istype(src, /obj/effect/gibspawner/xeno))
- gib.blood_DNA["UNKNOWN DNA"] = "X*"
- else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
- gib.blood_DNA["Non-human DNA"] = "A+"
- var/list/directions = gibdirections[i]
- if(directions.len)
- gib.streak(directions)
+ gib.blood_DNA = list()
+ if(MobDNA)
+ gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
+ else if(istype(src, /obj/effect/gibspawner/xeno))
+ gib.blood_DNA["UNKNOWN DNA"] = "X*"
+ else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
+ gib.blood_DNA["Non-human DNA"] = "A+"
+ var/list/directions = gibdirections[i]
+ if(directions.len)
+ gib.streak(directions)
- qdel(src)
+ qdel(src)
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 5446ba348e6..b75df275659 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -1,36 +1,35 @@
-/obj/effect/gibspawner
- generic
- gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
- gibamounts = list(2,2,1)
+/obj/effect/gibspawner/generic
+ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
+ gibamounts = list(2,2,1)
- New()
- gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
- ..()
+/obj/effect/gibspawner/generic/New()
+ gibdirections = list(list(WEST, NORTHWEST, SOUTHWEST, NORTH),list(EAST, NORTHEAST, SOUTHEAST, SOUTH), list())
+ ..()
- human
- gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
- gibamounts = list(1,1,1,1,1,1,1)
+/obj/effect/gibspawner/human
+ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
+ gibamounts = list(1,1,1,1,1,1,1)
- New()
- gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
- gibamounts[6] = pick(0,1,2)
- ..()
+/obj/effect/gibspawner/human/New()
+ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
+ gibamounts[6] = pick(0,1,2)
+ ..()
- xeno
- gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core)
- gibamounts = list(1,1,1,1,1,1,1)
+/obj/effect/gibspawner/xeno
+ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core)
+ gibamounts = list(1,1,1,1,1,1,1)
- New()
- gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
- gibamounts[6] = pick(0,1,2)
- ..()
+/obj/effect/gibspawner/xeno/New()
+ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
+ gibamounts[6] = pick(0,1,2)
+ ..()
- robot
- sparks = 1
- gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
- gibamounts = list(1,1,1,1,1,1)
+/obj/effect/gibspawner/robot
+ sparks = 1
+ gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
+ gibamounts = list(1,1,1,1,1,1)
- New()
- gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
- gibamounts[6] = pick(0,1,2)
- ..()
\ No newline at end of file
+/obj/effect/gibspawner/robot/New()
+ gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs)
+ gibamounts[6] = pick(0,1,2)
+ ..()
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index cf698f439f5..286bd315b61 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -17,15 +17,16 @@
name = "body bags"
desc = "This box contains body bags."
icon_state = "bodybags"
- New()
- ..()
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
- new /obj/item/bodybag(src)
+
+/obj/item/storage/box/bodybags/New()
+ ..()
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
+ new /obj/item/bodybag(src)
/obj/structure/closet/body_bag
@@ -40,47 +41,47 @@
density = 0
- attackby(W as obj, mob/user as mob, params)
- if(istype(W, /obj/item/pen))
- var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
- if(user.get_active_hand() != W)
- return
- if(!in_range(src, user) && src.loc != user)
- return
- t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
- if(t)
- src.name = "body bag - "
- src.name += t
- src.overlays += image(src.icon, "bodybag_label")
- else
- src.name = "body bag"
- //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
+/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob, params)
+ if(istype(W, /obj/item/pen))
+ var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
+ if(user.get_active_hand() != W)
return
- else if(istype(W, /obj/item/wirecutters))
- to_chat(user, "You cut the tag off the bodybag")
+ if(!in_range(src, user) && src.loc != user)
+ return
+ t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
+ if(t)
+ src.name = "body bag - "
+ src.name += t
+ src.overlays += image(src.icon, "bodybag_label")
+ else
src.name = "body bag"
- src.overlays.Cut()
- return
+ //..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
+ return
+ else if(istype(W, /obj/item/wirecutters))
+ to_chat(user, "You cut the tag off the bodybag")
+ src.name = "body bag"
+ src.overlays.Cut()
+ return
- close()
- if(..())
- density = 0
- return 1
- return 0
+/obj/structure/closet/body_bag/close()
+ if(..())
+ density = 0
+ return 1
+ return 0
- MouseDrop(over_object, src_location, over_location)
- ..()
- if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
- if(!ishuman(usr)) return
- if(opened) return 0
- if(contents.len) return 0
- visible_message("[usr] folds up the [src.name]")
- new item_path(get_turf(src))
- spawn(0)
- qdel(src)
- return
+/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
+ if(!ishuman(usr)) return
+ if(opened) return 0
+ if(contents.len) return 0
+ visible_message("[usr] folds up the [src.name]")
+ new item_path(get_turf(src))
+ spawn(0)
+ qdel(src)
+ return
/obj/structure/closet/body_bag/relaymove(mob/user as mob)
if(user.stat)
@@ -89,4 +90,4 @@
// Make it possible to escape from bodybags in morgues and crematoriums
if(loc && (isturf(loc) || istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium)))
if(!open())
- to_chat(user, "It won't budge!")
\ No newline at end of file
+ to_chat(user, "It won't budge!")
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 19e26f06bf5..59cf53451cd 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -46,9 +46,10 @@
return
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
- proc/digest_delay()
+
+/obj/item/radio/beacon/bacon/proc/digest_delay()
spawn(600)
- qdel(src)
+ qdel(src)
// SINGULO BEACON SPAWNER
/obj/item/radio/beacon/syndicate
@@ -82,4 +83,4 @@
new /obj/machinery/syndicatebomb( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 2a4a5a3fab1..a91410c28fe 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -159,21 +159,21 @@
var/b2y1 = 0
var/b2y2 = 0
- New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
- if(!Target) return
+/datum/bullethole/New(obj/item/target/Target, pixel_x = 0, pixel_y = 0)
+ if(!Target) return
- // Randomize the first box
- b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
- b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
- b1y = pixel_y
- if(prob(35))
- b1y += rand(-4,4)
+ // Randomize the first box
+ b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
+ b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
+ b1y = pixel_y
+ if(prob(35))
+ b1y += rand(-4,4)
- // Randomize the second box
- b2x = pixel_x
- if(prob(35))
- b2x += rand(-4,4)
- b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
- b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
+ // Randomize the second box
+ b2x = pixel_x
+ if(prob(35))
+ b2x += rand(-4,4)
+ b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
+ b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
- Target.bulletholes.Add(src)
+ Target.bulletholes.Add(src)
diff --git a/code/game/objects/items/weapons/caution.dm b/code/game/objects/items/weapons/caution.dm
index 264753dc695..a4599a2e79f 100644
--- a/code/game/objects/items/weapons/caution.dm
+++ b/code/game/objects/items/weapons/caution.dm
@@ -10,53 +10,52 @@
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("warned", "cautioned", "smashed")
- proximity_sign
- var/timing = 0
- var/armed = 0
- var/timepassed = 0
+/obj/item/caution/proximity_sign
+ var/timing = 0
+ var/armed = 0
+ var/timepassed = 0
- attack_self(mob/user as mob)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.mind.assigned_role != "Janitor")
- return
- if(armed)
- armed = 0
- to_chat(user, "You disarm \the [src].")
- return
- timing = !timing
- if(timing)
- processing_objects.Add(src)
- else
- armed = 0
- timepassed = 0
- to_chat(H, "You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]")
+/obj/item/caution/proximity_sign/attack_self(mob/user as mob)
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(H.mind.assigned_role != "Janitor")
+ return
+ if(armed)
+ armed = 0
+ to_chat(user, "You disarm \the [src].")
+ return
+ timing = !timing
+ if(timing)
+ processing_objects.Add(src)
+ else
+ armed = 0
+ timepassed = 0
+ to_chat(H, "You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]")
- process()
- if(!timing)
- processing_objects.Remove(src)
- timepassed++
- if(timepassed >= 15 && !armed)
- armed = 1
- timing = 0
+/obj/item/caution/proximity_sign/process()
+ if(!timing)
+ processing_objects.Remove(src)
+ timepassed++
+ if(timepassed >= 15 && !armed)
+ armed = 1
+ timing = 0
- HasProximity(atom/movable/AM as mob|obj)
- if(armed)
- if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain))
- var/mob/living/carbon/C = AM
- if(C.m_intent != MOVE_INTENT_WALK)
- src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"")
- explosion(src.loc,-1,0,2)
- if(ishuman(C))
- dead_legs(C)
- if(src)
- qdel(src)
-
- proc/dead_legs(mob/living/carbon/human/H as mob)
- var/obj/item/organ/external/l = H.get_organ("l_leg")
- var/obj/item/organ/external/r = H.get_organ("r_leg")
- if(l)
- l.droplimb(0, DROPLIMB_SHARP)
- if(r)
- r.droplimb(0, DROPLIMB_SHARP)
+/obj/item/caution/proximity_sign/HasProximity(atom/movable/AM as mob|obj)
+ if(armed)
+ if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain))
+ var/mob/living/carbon/C = AM
+ if(C.m_intent != MOVE_INTENT_WALK)
+ src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"")
+ explosion(src.loc,-1,0,2)
+ if(ishuman(C))
+ dead_legs(C)
+ if(src)
+ qdel(src)
+/obj/item/caution/proximity_sign/proc/dead_legs(mob/living/carbon/human/H as mob)
+ var/obj/item/organ/external/l = H.get_organ("l_leg")
+ var/obj/item/organ/external/r = H.get_organ("r_leg")
+ if(l)
+ l.droplimb(0, DROPLIMB_SHARP)
+ if(r)
+ r.droplimb(0, DROPLIMB_SHARP)
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 3a7e203101d..681db222d0b 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -159,9 +159,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = HULKBLOCK
- ..()
+
+/obj/item/dnainjector/hulkmut/New()
+ block = HULKBLOCK
+ ..()
/obj/item/dnainjector/antihulk
name = "DNA-Injector (Anti-Hulk)"
@@ -169,9 +170,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = HULKBLOCK
- ..()
+
+/obj/item/dnainjector/antihulk/New()
+ block = HULKBLOCK
+ ..()
/obj/item/dnainjector/xraymut
name = "DNA-Injector (Xray)"
@@ -179,9 +181,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 8
- New()
- block = XRAYBLOCK
- ..()
+
+/obj/item/dnainjector/xraymut/New()
+ block = XRAYBLOCK
+ ..()
/obj/item/dnainjector/antixray
name = "DNA-Injector (Anti-Xray)"
@@ -189,10 +192,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 8
- New()
- block = XRAYBLOCK
- ..()
+/obj/item/dnainjector/antixray/New()
+ block = XRAYBLOCK
+ ..()
/obj/item/dnainjector/firemut
name = "DNA-Injector (Fire)"
@@ -200,9 +203,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 10
- New()
- block = FIREBLOCK
- ..()
+
+/obj/item/dnainjector/firemut/New()
+ block = FIREBLOCK
+ ..()
/obj/item/dnainjector/antifire
name = "DNA-Injector (Anti-Fire)"
@@ -210,9 +214,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 10
- New()
- block = FIREBLOCK
- ..()
+
+/obj/item/dnainjector/antifire/New()
+ block = FIREBLOCK
+ ..()
/obj/item/dnainjector/telemut
name = "DNA-Injector (Tele.)"
@@ -220,9 +225,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 12
- New()
- block = TELEBLOCK
- ..()
+
+/obj/item/dnainjector/telemut/New()
+ block = TELEBLOCK
+ ..()
/obj/item/dnainjector/telemut/darkbundle
name = "DNA injector"
@@ -235,9 +241,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 12
- New()
- block = TELEBLOCK
- ..()
+
+/obj/item/dnainjector/antitele/New()
+ block = TELEBLOCK
+ ..()
/obj/item/dnainjector/nobreath
name = "DNA-Injector (Breathless)"
@@ -245,9 +252,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = BREATHLESSBLOCK
- ..()
+
+/obj/item/dnainjector/nobreath/New()
+ block = BREATHLESSBLOCK
+ ..()
/obj/item/dnainjector/antinobreath
name = "DNA-Injector (Anti-Breathless)"
@@ -255,9 +263,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = BREATHLESSBLOCK
- ..()
+
+/obj/item/dnainjector/antinobreath/New()
+ block = BREATHLESSBLOCK
+ ..()
/obj/item/dnainjector/remoteview
name = "DNA-Injector (Remote View)"
@@ -265,9 +274,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = REMOTEVIEWBLOCK
- ..()
+
+/obj/item/dnainjector/remoteview/New()
+ block = REMOTEVIEWBLOCK
+ ..()
/obj/item/dnainjector/antiremoteview
name = "DNA-Injector (Anti-Remote View)"
@@ -275,9 +285,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = REMOTEVIEWBLOCK
- ..()
+
+/obj/item/dnainjector/antiremoteview/New()
+ block = REMOTEVIEWBLOCK
+ ..()
/obj/item/dnainjector/regenerate
name = "DNA-Injector (Regeneration)"
@@ -285,9 +296,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = REGENERATEBLOCK
- ..()
+
+/obj/item/dnainjector/regenerate/New()
+ block = REGENERATEBLOCK
+ ..()
/obj/item/dnainjector/antiregenerate
name = "DNA-Injector (Anti-Regeneration)"
@@ -295,9 +307,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = REGENERATEBLOCK
- ..()
+
+/obj/item/dnainjector/antiregenerate/New()
+ block = REGENERATEBLOCK
+ ..()
/obj/item/dnainjector/runfast
name = "DNA-Injector (Increase Run)"
@@ -305,9 +318,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = INCREASERUNBLOCK
- ..()
+
+/obj/item/dnainjector/runfast/New()
+ block = INCREASERUNBLOCK
+ ..()
/obj/item/dnainjector/antirunfast
name = "DNA-Injector (Anti-Increase Run)"
@@ -315,9 +329,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = INCREASERUNBLOCK
- ..()
+
+/obj/item/dnainjector/antirunfast/New()
+ block = INCREASERUNBLOCK
+ ..()
/obj/item/dnainjector/morph
name = "DNA-Injector (Morph)"
@@ -325,9 +340,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = MORPHBLOCK
- ..()
+
+/obj/item/dnainjector/morph/New()
+ block = MORPHBLOCK
+ ..()
/obj/item/dnainjector/antimorph
name = "DNA-Injector (Anti-Morph)"
@@ -335,9 +351,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = MORPHBLOCK
- ..()
+
+/obj/item/dnainjector/antimorph/New()
+ block = MORPHBLOCK
+ ..()
/obj/item/dnainjector/noprints
name = "DNA-Injector (No Prints)"
@@ -345,9 +362,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = NOPRINTSBLOCK
- ..()
+
+/obj/item/dnainjector/noprints/New()
+ block = NOPRINTSBLOCK
+ ..()
/obj/item/dnainjector/antinoprints
name = "DNA-Injector (Anti-No Prints)"
@@ -355,9 +373,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = NOPRINTSBLOCK
- ..()
+
+/obj/item/dnainjector/antinoprints/New()
+ block = NOPRINTSBLOCK
+ ..()
/obj/item/dnainjector/insulation
name = "DNA-Injector (Shock Immunity)"
@@ -365,9 +384,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = SHOCKIMMUNITYBLOCK
- ..()
+
+/obj/item/dnainjector/insulation/New()
+ block = SHOCKIMMUNITYBLOCK
+ ..()
/obj/item/dnainjector/antiinsulation
name = "DNA-Injector (Anti-Shock Immunity)"
@@ -375,9 +395,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = SHOCKIMMUNITYBLOCK
- ..()
+
+/obj/item/dnainjector/antiinsulation/New()
+ block = SHOCKIMMUNITYBLOCK
+ ..()
/obj/item/dnainjector/midgit
name = "DNA-Injector (Small Size)"
@@ -385,9 +406,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = SMALLSIZEBLOCK
- ..()
+
+/obj/item/dnainjector/midgit/New()
+ block = SMALLSIZEBLOCK
+ ..()
/obj/item/dnainjector/antimidgit
name = "DNA-Injector (Anti-Small Size)"
@@ -395,9 +417,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = SMALLSIZEBLOCK
- ..()
+
+/obj/item/dnainjector/antimidgit/New()
+ block = SMALLSIZEBLOCK
+ ..()
/////////////////////////////////////
/obj/item/dnainjector/antiglasses
@@ -406,9 +429,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 1
- New()
- block = GLASSESBLOCK
- ..()
+
+/obj/item/dnainjector/antiglasses/New()
+ block = GLASSESBLOCK
+ ..()
/obj/item/dnainjector/glassesmut
name = "DNA-Injector (Glasses)"
@@ -416,9 +440,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 1
- New()
- block = GLASSESBLOCK
- ..()
+
+/obj/item/dnainjector/glassesmut/New()
+ block = GLASSESBLOCK
+ ..()
/obj/item/dnainjector/epimut
name = "DNA-Injector (Epi.)"
@@ -426,9 +451,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 3
- New()
- block = EPILEPSYBLOCK
- ..()
+
+/obj/item/dnainjector/epimut/New()
+ block = EPILEPSYBLOCK
+ ..()
/obj/item/dnainjector/antiepi
name = "DNA-Injector (Anti-Epi.)"
@@ -436,9 +462,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 3
- New()
- block = EPILEPSYBLOCK
- ..()
+
+/obj/item/dnainjector/antiepi/New()
+ block = EPILEPSYBLOCK
+ ..()
/obj/item/dnainjector/anticough
name = "DNA-Injector (Anti-Cough)"
@@ -446,9 +473,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 5
- New()
- block = COUGHBLOCK
- ..()
+
+/obj/item/dnainjector/anticough/New()
+ block = COUGHBLOCK
+ ..()
/obj/item/dnainjector/coughmut
name = "DNA-Injector (Cough)"
@@ -456,9 +484,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 5
- New()
- block = COUGHBLOCK
- ..()
+
+/obj/item/dnainjector/coughmut/New()
+ block = COUGHBLOCK
+ ..()
/obj/item/dnainjector/clumsymut
name = "DNA-Injector (Clumsy)"
@@ -466,9 +495,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 6
- New()
- block = CLUMSYBLOCK
- ..()
+
+/obj/item/dnainjector/clumsymut/New()
+ block = CLUMSYBLOCK
+ ..()
/obj/item/dnainjector/anticlumsy
name = "DNA-Injector (Anti-Clumy)"
@@ -476,9 +506,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 6
- New()
- block = CLUMSYBLOCK
- ..()
+
+/obj/item/dnainjector/anticlumsy/New()
+ block = CLUMSYBLOCK
+ ..()
/obj/item/dnainjector/antitour
name = "DNA-Injector (Anti-Tour.)"
@@ -486,9 +517,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 7
- New()
- block = TWITCHBLOCK
- ..()
+
+/obj/item/dnainjector/antitour/New()
+ block = TWITCHBLOCK
+ ..()
/obj/item/dnainjector/tourmut
name = "DNA-Injector (Tour.)"
@@ -496,9 +528,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 7
- New()
- block = TWITCHBLOCK
- ..()
+
+/obj/item/dnainjector/tourmut/New()
+ block = TWITCHBLOCK
+ ..()
/obj/item/dnainjector/stuttmut
name = "DNA-Injector (Stutt.)"
@@ -506,9 +539,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 9
- New()
- block = NERVOUSBLOCK
- ..()
+
+/obj/item/dnainjector/stuttmut/New()
+ block = NERVOUSBLOCK
+ ..()
/obj/item/dnainjector/antistutt
@@ -517,9 +551,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 9
- New()
- block = NERVOUSBLOCK
- ..()
+
+/obj/item/dnainjector/antistutt/New()
+ block = NERVOUSBLOCK
+ ..()
/obj/item/dnainjector/blindmut
name = "DNA-Injector (Blind)"
@@ -527,9 +562,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 11
- New()
- block = BLINDBLOCK
- ..()
+
+/obj/item/dnainjector/blindmut/New()
+ block = BLINDBLOCK
+ ..()
/obj/item/dnainjector/antiblind
name = "DNA-Injector (Anti-Blind)"
@@ -537,9 +573,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 11
- New()
- block = BLINDBLOCK
- ..()
+
+/obj/item/dnainjector/antiblind/New()
+ block = BLINDBLOCK
+ ..()
/obj/item/dnainjector/telemut
name = "DNA-Injector (Tele.)"
@@ -547,9 +584,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 12
- New()
- block = TELEBLOCK
- ..()
+
+/obj/item/dnainjector/telemut/New()
+ block = TELEBLOCK
+ ..()
/obj/item/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
@@ -557,9 +595,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 12
- New()
- block = TELEBLOCK
- ..()
+
+/obj/item/dnainjector/antitele/New()
+ block = TELEBLOCK
+ ..()
/obj/item/dnainjector/deafmut
name = "DNA-Injector (Deaf)"
@@ -567,9 +606,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 13
- New()
- block = DEAFBLOCK
- ..()
+
+/obj/item/dnainjector/deafmut/New()
+ block = DEAFBLOCK
+ ..()
/obj/item/dnainjector/antideaf
name = "DNA-Injector (Anti-Deaf)"
@@ -577,9 +617,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 13
- New()
- block = DEAFBLOCK
- ..()
+
+/obj/item/dnainjector/antideaf/New()
+ block = DEAFBLOCK
+ ..()
/obj/item/dnainjector/hallucination
name = "DNA-Injector (Halluctination)"
@@ -587,9 +628,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
- New()
- block = HALLUCINATIONBLOCK
- ..()
+
+/obj/item/dnainjector/hallucination/New()
+ block = HALLUCINATIONBLOCK
+ ..()
/obj/item/dnainjector/antihallucination
name = "DNA-Injector (Anti-Hallucination)"
@@ -597,9 +639,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
- New()
- block = HALLUCINATIONBLOCK
- ..()
+
+/obj/item/dnainjector/antihallucination/New()
+ block = HALLUCINATIONBLOCK
+ ..()
/obj/item/dnainjector/h2m
name = "DNA-Injector (Human > Monkey)"
@@ -607,9 +650,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 14
- New()
- block = MONKEYBLOCK
- ..()
+
+/obj/item/dnainjector/h2m/New()
+ block = MONKEYBLOCK
+ ..()
/obj/item/dnainjector/m2h
name = "DNA-Injector (Monkey > Human)"
@@ -617,6 +661,7 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 14
- New()
- block = MONKEYBLOCK
- ..()
+
+/obj/item/dnainjector/m2h/New()
+ block = MONKEYBLOCK
+ ..()
diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm
index fc13fa69f79..bbad0eb9157 100644
--- a/code/game/objects/items/weapons/dnascrambler.dm
+++ b/code/game/objects/items/weapons/dnascrambler.dm
@@ -6,52 +6,52 @@
icon_state = "lepopen"
var/used = null
+/obj/item/dnascrambler/update_icon()
+ if(used)
+ icon_state = "lepopen0"
+ else
+ icon_state = "lepopen"
+
+/obj/item/dnascrambler/attack(mob/M as mob, mob/user as mob)
+ if(!M || !user)
+ return
+
+ if(!ishuman(M) || !ishuman(user))
+ return
+
+ if(used)
+ return
+
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(NO_DNA in H.dna.species.species_traits)
+ to_chat(user, "You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.")
+ return
+
+ if(M == user)
+ user.visible_message("[user] injects [user.p_them()]self with [src]!")
+ injected(user, user)
+ else
+ user.visible_message("[user] is trying to inject [M] with [src]!")
+ if(do_mob(user,M,30))
+ user.visible_message("[user] injects [M] with [src].")
+ injected(M, user)
+ else
+ to_chat(user, "You failed to inject [M].")
+
+/obj/item/dnascrambler/proc/injected(var/mob/living/carbon/human/target, var/mob/living/carbon/user)
+ if(istype(target))
+ var/mob/living/carbon/human/H = target
+ scramble(1, H, 100)
+ H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species.
+ H.sync_organ_dna(assimilate = 1)
+ H.update_body(0)
+ H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover.
+ H.reset_markings() //...Or markings.
+ H.dna.ResetUIFrom(H)
+ target.update_icons()
+
+ add_attack_logs(user, target, "injected with [src]")
+ used = 1
update_icon()
- if(used)
- icon_state = "lepopen0"
- else
- icon_state = "lepopen"
-
- attack(mob/M as mob, mob/user as mob)
- if(!M || !user)
- return
-
- if(!ishuman(M) || !ishuman(user))
- return
-
- if(used)
- return
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(NO_DNA in H.dna.species.species_traits)
- to_chat(user, "You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.")
- return
-
- if(M == user)
- user.visible_message("[user] injects [user.p_them()]self with [src]!")
- injected(user, user)
- else
- user.visible_message("[user] is trying to inject [M] with [src]!")
- if(do_mob(user,M,30))
- user.visible_message("[user] injects [M] with [src].")
- injected(M, user)
- else
- to_chat(user, "You failed to inject [M].")
-
- proc/injected(var/mob/living/carbon/human/target, var/mob/living/carbon/user)
- if(istype(target))
- var/mob/living/carbon/human/H = target
- scramble(1, H, 100)
- H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species.
- H.sync_organ_dna(assimilate = 1)
- H.update_body(0)
- H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover.
- H.reset_markings() //...Or markings.
- H.dna.ResetUIFrom(H)
- target.update_icons()
-
- add_attack_logs(user, target, "injected with [src]")
- used = 1
- update_icon()
- name = "used " + name
+ name = "used " + name
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 9e836fecc87..3de4fc4cf8d 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -432,18 +432,18 @@
desc = "Used for emergency sealing of air breaches."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+/obj/item/grenade/chem_grenade/metalfoam/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("aluminum", 30)
- B2.reagents.add_reagent("fluorosurfactant", 10)
- B2.reagents.add_reagent("sacid", 10)
+ B1.reagents.add_reagent("aluminum", 30)
+ B2.reagents.add_reagent("fluorosurfactant", 10)
+ B2.reagents.add_reagent("sacid", 10)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/incendiary
@@ -451,19 +451,19 @@
desc = "Used for clearing rooms of living things."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
+/obj/item/grenade/chem_grenade/incendiary/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
- B1.reagents.add_reagent("phosphorus", 25)
- B2.reagents.add_reagent("plasma", 25)
- B2.reagents.add_reagent("sacid", 25)
+ B1.reagents.add_reagent("phosphorus", 25)
+ B2.reagents.add_reagent("plasma", 25)
+ B2.reagents.add_reagent("sacid", 25)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/antiweed
@@ -471,20 +471,20 @@
desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+/obj/item/grenade/chem_grenade/antiweed/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("atrazine", 30)
- B1.reagents.add_reagent("potassium", 20)
- B2.reagents.add_reagent("phosphorus", 20)
- B2.reagents.add_reagent("sugar", 20)
- B2.reagents.add_reagent("atrazine", 10)
+ B1.reagents.add_reagent("atrazine", 30)
+ B1.reagents.add_reagent("potassium", 20)
+ B2.reagents.add_reagent("phosphorus", 20)
+ B2.reagents.add_reagent("sugar", 20)
+ B2.reagents.add_reagent("atrazine", 10)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/cleaner
@@ -492,18 +492,18 @@
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+/obj/item/grenade/chem_grenade/cleaner/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("fluorosurfactant", 40)
- B2.reagents.add_reagent("cleaner", 10)
- B2.reagents.add_reagent("water", 40) //when you make pre-designed foam reactions that carry the reagents, always add water last
+ B1.reagents.add_reagent("fluorosurfactant", 40)
+ B2.reagents.add_reagent("cleaner", 10)
+ B2.reagents.add_reagent("water", 40) //when you make pre-designed foam reactions that carry the reagents, always add water last
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/teargas
@@ -511,19 +511,19 @@
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+/obj/item/grenade/chem_grenade/teargas/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("condensedcapsaicin", 25)
- B1.reagents.add_reagent("potassium", 25)
- B2.reagents.add_reagent("phosphorus", 25)
- B2.reagents.add_reagent("sugar", 25)
+ B1.reagents.add_reagent("condensedcapsaicin", 25)
+ B1.reagents.add_reagent("potassium", 25)
+ B2.reagents.add_reagent("phosphorus", 25)
+ B2.reagents.add_reagent("sugar", 25)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
@@ -550,19 +550,19 @@
desc = "Contains sarin gas; extremely deadly and fast acting; use with extreme caution."
stage = READY
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+/obj/item/grenade/chem_grenade/saringas/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("sarin", 25)
- B1.reagents.add_reagent("potassium", 25)
- B2.reagents.add_reagent("phosphorus", 25)
- B2.reagents.add_reagent("sugar", 25)
+ B1.reagents.add_reagent("sarin", 25)
+ B1.reagents.add_reagent("potassium", 25)
+ B2.reagents.add_reagent("phosphorus", 25)
+ B2.reagents.add_reagent("sugar", 25)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
#undef EMPTY
#undef WIRED
diff --git a/code/game/objects/items/weapons/grenades/clowngrenade.dm b/code/game/objects/items/weapons/grenades/clowngrenade.dm
index 18dbf93ae45..bce9861fb72 100644
--- a/code/game/objects/items/weapons/grenades/clowngrenade.dm
+++ b/code/game/objects/items/weapons/grenades/clowngrenade.dm
@@ -10,44 +10,34 @@
var/path = 0
var/affected_area = 2
- prime()
- ..()
- playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3)
- /*
- for(var/turf/simulated/floor/T in view(affected_area, src.loc))
- if(prob(75))
- banana(T)
- */
- var/i = 0
- var/number = 0
- for(var/direction in alldirs)
- for(i = 0; i < 2; i++)
- number++
- var/obj/item/grown/bananapeel/traitorpeel/peel = new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
- /* var/direction = pick(alldirs)
- var/spaces = pick(1;150, 2)
- var/a = 0
- for(a = 0; a < spaces; a++)
- step(peel,direction)*/
- var/a = 1
- if(number & 2)
- for(a = 1; a <= 2; a++)
- step(peel,direction)
- else
+/obj/item/grenade/clown_grenade/prime()
+ ..()
+ playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3)
+ /*
+ for(var/turf/simulated/floor/T in view(affected_area, src.loc))
+ if(prob(75))
+ banana(T)
+ */
+ var/i = 0
+ var/number = 0
+ for(var/direction in alldirs)
+ for(i = 0; i < 2; i++)
+ number++
+ var/obj/item/grown/bananapeel/traitorpeel/peel = new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
+ /* var/direction = pick(alldirs)
+ var/spaces = pick(1;150, 2)
+ var/a = 0
+ for(a = 0; a < spaces; a++)
+ step(peel,direction)*/
+ var/a = 1
+ if(number & 2)
+ for(a = 1; a <= 2; a++)
step(peel,direction)
- new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
- qdel(src)
- return
-/*
- proc/banana(turf/T as turf)
- if(!T || !istype(T))
- return
- if(locate(/obj/structure/grille) in T)
- return
- if(locate(/obj/structure/window) in T)
- return
- new /obj/item/grown/bananapeel/traitorpeel(T)
-*/
+ else
+ step(peel,direction)
+ new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
+ qdel(src)
+ return
/obj/item/grown/bananapeel/traitorpeel
trip_stun = 0
diff --git a/code/game/objects/items/weapons/grenades/custom_grenades.dm b/code/game/objects/items/weapons/grenades/custom_grenades.dm
index 133cc906850..b5598bc86be 100644
--- a/code/game/objects/items/weapons/grenades/custom_grenades.dm
+++ b/code/game/objects/items/weapons/grenades/custom_grenades.dm
@@ -3,17 +3,17 @@
desc = "From the makers of BLAM! brand foaming space cleaner, this bomb guarantees steady work for any janitor."
stage = 2
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/list/muck = list("blood","carbon","flour","radium")
- var/filth = pick(muck - "radium") // not usually radioactive
+/obj/item/grenade/chem_grenade/dirt/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/list/muck = list("blood","carbon","flour","radium")
+ var/filth = pick(muck - "radium") // not usually radioactive
- B1.reagents.add_reagent(filth,25)
- if(prob(25))
- B1.reagents.add_reagent(pick(muck - filth,25)) // but sometimes...
+ B1.reagents.add_reagent(filth,25)
+ if(prob(25))
+ B1.reagents.add_reagent(pick(muck - filth,25)) // but sometimes...
- beakers += B1
+ beakers += B1
/obj/item/grenade/chem_grenade/meat
@@ -22,18 +22,18 @@
stage = 2
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
+/obj/item/grenade/chem_grenade/meat/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
- B1.reagents.add_reagent("blood",60)
- if(prob(5))
- B1.reagents.add_reagent("blood",1) // Quality control problems, causes a mess
- B2.reagents.add_reagent("cryoxadone",30)
+ B1.reagents.add_reagent("blood",60)
+ if(prob(5))
+ B1.reagents.add_reagent("blood",1) // Quality control problems, causes a mess
+ B2.reagents.add_reagent("cryoxadone",30)
- beakers += B1
- beakers += B2
+ beakers += B1
+ beakers += B2
/obj/item/grenade/chem_grenade/holywater
payload_name = "holy water"
@@ -41,11 +41,11 @@
stage = 2
det_time = 30
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B = new(src)
- B.reagents.add_reagent("holywater",100)
- beakers += B
+/obj/item/grenade/chem_grenade/holywater/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B = new(src)
+ B.reagents.add_reagent("holywater",100)
+ beakers += B
/obj/item/grenade/chem_grenade/hellwater
payload_name = "hell water"
@@ -53,15 +53,15 @@
stage = 2
det_time = 30
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
- B1.reagents.add_reagent("hell_water",80)
- B1.reagents.add_reagent("sugar",20)
- B2.reagents.add_reagent("hell_water", 60)
- B2.reagents.add_reagent("potassium", 20)
- B2.reagents.add_reagent("phosphorus", 20)
+/obj/item/grenade/chem_grenade/hellwater/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
+ B1.reagents.add_reagent("hell_water",80)
+ B1.reagents.add_reagent("sugar",20)
+ B2.reagents.add_reagent("hell_water", 60)
+ B2.reagents.add_reagent("potassium", 20)
+ B2.reagents.add_reagent("phosphorus", 20)
/obj/item/grenade/chem_grenade/drugs
@@ -69,40 +69,40 @@
desc = "How does it work?"
stage = 2
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
+/obj/item/grenade/chem_grenade/drugs/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
- B1.reagents.add_reagent("space_drugs", 25)
- B1.reagents.add_reagent("lsd", 25)
- B1.reagents.add_reagent("potassium", 25)
- B2.reagents.add_reagent("phosphorus", 25)
- B2.reagents.add_reagent("sugar", 25)
+ B1.reagents.add_reagent("space_drugs", 25)
+ B1.reagents.add_reagent("lsd", 25)
+ B1.reagents.add_reagent("potassium", 25)
+ B2.reagents.add_reagent("phosphorus", 25)
+ B2.reagents.add_reagent("sugar", 25)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
/obj/item/grenade/chem_grenade/ethanol
payload_name = "ethanol"
desc = "Ach, that hits the spot."
stage = 2
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
+/obj/item/grenade/chem_grenade/ethanol/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
- B1.reagents.add_reagent("ethanol", 75)
- B1.reagents.add_reagent("potassium", 25)
- B2.reagents.add_reagent("phosphorus", 25)
- B2.reagents.add_reagent("sugar", 25)
- B2.reagents.add_reagent("ethanol", 25)
+ B1.reagents.add_reagent("ethanol", 75)
+ B1.reagents.add_reagent("potassium", 25)
+ B2.reagents.add_reagent("phosphorus", 25)
+ B2.reagents.add_reagent("sugar", 25)
+ B2.reagents.add_reagent("ethanol", 25)
- beakers += B1
- beakers += B2
- update_icon()
+ beakers += B1
+ beakers += B2
+ update_icon()
// -------------------------------------
// Grenades using new grenade assemblies
@@ -208,107 +208,67 @@
payload_name = "EMP"
stage = 2
- New()
- ..()
- var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B1.reagents.add_reagent("uranium",50)
- B2.reagents.add_reagent("iron",50)
- beakers += B1
- beakers += B2
+/obj/item/grenade/chem_grenade/emp/New()
+ ..()
+ var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+ B1.reagents.add_reagent("uranium",50)
+ B2.reagents.add_reagent("iron",50)
+ beakers += B1
+ beakers += B2
// Assembly Variants
-/obj/item/grenade/chem_grenade/emp/remote
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/signaler)
+/obj/item/grenade/chem_grenade/emp/remote/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/signaler)
-/obj/item/grenade/chem_grenade/emp/prox
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
+/obj/item/grenade/chem_grenade/emp/prox/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
-/obj/item/grenade/chem_grenade/emp/mine
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/mousetrap)
-
-// --------------------------------------
-// Dangerous slime core grenades
-// --------------------------------------
-/*
-/obj/item/grenade/chem_grenade/large/bluespace
- payload_name = "bluespace slime"
- desc = "A standard grenade casing containing weaponized slime extract."
- stage = 2
-
- New()
- ..()
- var/obj/item/slime_extract/bluespace/B1 = new(src)
- B1.Uses = rand(1,3)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B2.reagents.add_reagent("plasma",5 * B1.Uses)
- beakers += B1
- beakers += B2
-
-/obj/item/grenade/chem_grenade/large/bluespace/prox
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
-
-/obj/item/grenade/chem_grenade/large/bluespace/mine
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/mousetrap)
-
-/obj/item/grenade/chem_grenade/large/bluespace/remote
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/signaler)
-*/
+/obj/item/grenade/chem_grenade/emp/mine/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/large/monster
payload_name = "gold slime"
desc = "A standard grenade containing weaponized slime extract."
stage = 2
- New()
- ..()
- var/obj/item/slime_extract/gold/B1 = new(src)
- B1.Uses = rand(1,3)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B2.reagents.add_reagent("plasma",5 * B1.Uses)
- beakers += B1
- beakers += B2
+/obj/item/grenade/chem_grenade/large/monster/New()
+ ..()
+ var/obj/item/slime_extract/gold/B1 = new(src)
+ B1.Uses = rand(1,3)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+ B2.reagents.add_reagent("plasma",5 * B1.Uses)
+ beakers += B1
+ beakers += B2
-/obj/item/grenade/chem_grenade/large/monster/prox
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
+/obj/item/grenade/chem_grenade/large/monster/prox/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
-/obj/item/grenade/chem_grenade/large/monster/mine
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/mousetrap)
+/obj/item/grenade/chem_grenade/large/monster/mine/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/mousetrap)
-/obj/item/grenade/chem_grenade/large/monster/remote
- New()
- ..()
- CreateDefaultTrigger(/obj/item/assembly/signaler)
+/obj/item/grenade/chem_grenade/large/monster/remote/New()
+ ..()
+ CreateDefaultTrigger(/obj/item/assembly/signaler)
/obj/item/grenade/chem_grenade/large/feast
payload_name = "silver slime"
desc = "A standard grenade containing weaponized slime extract."
stage = 2
- New()
- ..()
- var/obj/item/slime_extract/silver/B1 = new(src)
- B1.Uses = rand(1,3)
- var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
- B2.reagents.add_reagent("plasma",5 * B1.Uses)
- beakers += B1
- beakers += B2
+/obj/item/grenade/chem_grenade/large/feast/New()
+ ..()
+ var/obj/item/slime_extract/silver/B1 = new(src)
+ B1.Uses = rand(1,3)
+ var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
+ B2.reagents.add_reagent("plasma",5 * B1.Uses)
+ beakers += B1
+ beakers += B2
// --------------------------------------
// Syndie Kits
@@ -316,25 +276,30 @@
/obj/item/storage/box/syndie_kit/remotegrenade
name = "Remote Grenade Kit"
- New()
- ..()
- new /obj/item/grenade/chem_grenade/explosion/remote(src)
- new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
- new /obj/item/assembly/signaler(src)
- return
+
+/obj/item/storage/box/syndie_kit/remotegrenade/New()
+ ..()
+ new /obj/item/grenade/chem_grenade/explosion/remote(src)
+ new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
+ new /obj/item/assembly/signaler(src)
+ return
+
/obj/item/storage/box/syndie_kit/remoteemp
name = "Remote EMP Kit"
- New()
- ..()
- new /obj/item/grenade/chem_grenade/emp/remote(src)
- new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
- new /obj/item/assembly/signaler(src)
- return
+
+/obj/item/storage/box/syndie_kit/remoteemp/New()
+ ..()
+ new /obj/item/grenade/chem_grenade/emp/remote(src)
+ new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
+ new /obj/item/assembly/signaler(src)
+ return
+
/obj/item/storage/box/syndie_kit/remotelube
name = "Remote Lube Kit"
- New()
- ..()
- new /obj/item/grenade/chem_grenade/lube(src)
- new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
- new /obj/item/assembly/signaler(src)
- return
\ No newline at end of file
+
+/obj/item/storage/box/syndie_kit/remotelube/New()
+ ..()
+ new /obj/item/grenade/chem_grenade/lube(src)
+ new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
+ new /obj/item/assembly/signaler(src)
+ return
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index c4ccb3e83dc..6b9c4d815f4 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -8,31 +8,31 @@
slot_flags = SLOT_BELT
var/datum/effect_system/smoke_spread/bad/smoke
- New()
- ..()
- src.smoke = new /datum/effect_system/smoke_spread/bad
- src.smoke.attach(src)
+/obj/item/grenade/smokebomb/New()
+ ..()
+ src.smoke = new /datum/effect_system/smoke_spread/bad
+ src.smoke.attach(src)
- Destroy()
- QDEL_NULL(smoke)
- return ..()
+/obj/item/grenade/smokebomb/Destroy()
+ QDEL_NULL(smoke)
+ return ..()
- prime()
- playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
- src.smoke.set_up(10, 0, usr.loc)
- spawn(0)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
- sleep(10)
- src.smoke.start()
+/obj/item/grenade/smokebomb/prime()
+ playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
+ src.smoke.set_up(10, 0, usr.loc)
+ spawn(0)
+ src.smoke.start()
+ sleep(10)
+ src.smoke.start()
+ sleep(10)
+ src.smoke.start()
+ sleep(10)
+ src.smoke.start()
- for(var/obj/structure/blob/B in view(8,src))
- var/damage = round(30/(get_dist(B,src)+1))
- B.health -= damage
- B.update_icon()
- sleep(80)
- qdel(src)
- return
+ for(var/obj/structure/blob/B in view(8,src))
+ var/damage = round(30/(get_dist(B,src)+1))
+ B.health -= damage
+ B.update_icon()
+ sleep(80)
+ qdel(src)
+ return
diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm
index ac8c7d04a95..c6ece450f5e 100644
--- a/code/game/objects/items/weapons/lighters.dm
+++ b/code/game/objects/items/weapons/lighters.dm
@@ -24,8 +24,7 @@
icon_on = "zippoon"
icon_off = "zippo"
-/obj/item/lighter/random
- New()
+/obj/item/lighter/random/New()
var/color = pick("r","c","y","g")
icon_on = "lighter-[color]-on"
icon_off = "lighter-[color]"
diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm
index f8cc628dc01..a38f6e11873 100644
--- a/code/game/objects/items/weapons/misc.dm
+++ b/code/game/objects/items/weapons/misc.dm
@@ -89,25 +89,25 @@
icon_state = "lightning"
desc = "test lightning"
- New()
+/obj/item/lightning/New()
icon = midicon
icon_state = "1"
- afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
- var/angle = get_angle(A, user)
-// to_chat(world, angle)
- angle = round(angle) + 45
- if(angle > 180)
- angle -= 180
- else
- angle += 180
+/obj/item/lightning/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
+ var/angle = get_angle(A, user)
+ //to_chat(world, angle)
+ angle = round(angle) + 45
+ if(angle > 180)
+ angle -= 180
+ else
+ angle += 180
- if(!angle)
- angle = 1
-// to_chat(world, "adjusted [angle]")
- icon_state = "[angle]"
-// to_chat(world, "[angle] [(get_dist(user, A) - 1)]")
- user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15)
+ if(!angle)
+ angle = 1
+ //to_chat(world, "adjusted [angle]")
+ icon_state = "[angle]"
+ //to_chat(world, "[angle] [(get_dist(user, A) - 1)]")
+ user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15)
/obj/item/newton
name = "newton cradle"
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 85a0e679bb6..5395f2e8395 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -167,10 +167,9 @@
desc = "An NT Deluxe satchel, with the finest quality leather and the company logo in a thin gold stitch"
icon_state = "nt_deluxe"
-/obj/item/storage/backpack/satchel/withwallet
- New()
- ..()
- new /obj/item/storage/wallet/random( src )
+/obj/item/storage/backpack/satchel/withwallet/New()
+ ..()
+ new /obj/item/storage/wallet/random(src)
/obj/item/storage/backpack/satchel_norm
name = "satchel"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 3e7f2f6f8c9..da97f330c1f 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -207,122 +207,122 @@
w_class = WEIGHT_CLASS_NORMAL
allow_quick_empty = 1 // this function is superceded
- New()
- ..()
- //verbs -= /obj/item/storage/verb/quick_empty
- //verbs += /obj/item/storage/bag/sheetsnatcher/quick_empty
+/obj/item/storage/bag/sheetsnatcher/New()
+ ..()
+ //verbs -= /obj/item/storage/verb/quick_empty
+ //verbs += /obj/item/storage/bag/sheetsnatcher/quick_empty
- can_be_inserted(obj/item/W as obj, stop_messages = 0)
- if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
- if(!stop_messages)
- to_chat(usr, "The snatcher does not accept [W].")
- return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
- var/current = 0
- for(var/obj/item/stack/sheet/S in contents)
- current += S.amount
- if(capacity == current)//If it's full, you're done
- if(!stop_messages)
- to_chat(usr, "The snatcher is full.")
- return 0
- return 1
+/obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
+ if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
+ if(!stop_messages)
+ to_chat(usr, "The snatcher does not accept [W].")
+ return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
+ var/current = 0
+ for(var/obj/item/stack/sheet/S in contents)
+ current += S.amount
+ if(capacity == current)//If it's full, you're done
+ if(!stop_messages)
+ to_chat(usr, "The snatcher is full.")
+ return 0
+ return 1
// Modified handle_item_insertion. Would prefer not to, but...
- handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
- var/obj/item/stack/sheet/S = W
- if(!istype(S)) return 0
+/obj/item/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
+ var/obj/item/stack/sheet/S = W
+ if(!istype(S)) return 0
- var/amount
- var/inserted = 0
- var/current = 0
- for(var/obj/item/stack/sheet/S2 in contents)
- current += S2.amount
- if(capacity < current + S.amount)//If the stack will fill it up
- amount = capacity - current
+ var/amount
+ var/inserted = 0
+ var/current = 0
+ for(var/obj/item/stack/sheet/S2 in contents)
+ current += S2.amount
+ if(capacity < current + S.amount)//If the stack will fill it up
+ amount = capacity - current
+ else
+ amount = S.amount
+
+ for(var/obj/item/stack/sheet/sheet in contents)
+ if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
+ sheet.amount += amount // they should only be removed through procs in this file, which split them up.
+ S.amount -= amount
+ inserted = 1
+ break
+
+ if(!inserted || !S.amount)
+ usr.unEquip(S)
+ usr.update_icons() //update our overlays
+ if(usr.client && usr.s_active != src)
+ usr.client.screen -= S
+ S.dropped(usr)
+ if(!S.amount)
+ qdel(S)
else
- amount = S.amount
+ S.loc = src
- for(var/obj/item/stack/sheet/sheet in contents)
- if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
- sheet.amount += amount // they should only be removed through procs in this file, which split them up.
- S.amount -= amount
- inserted = 1
- break
-
- if(!inserted || !S.amount)
- usr.unEquip(S)
- usr.update_icons() //update our overlays
- if(usr.client && usr.s_active != src)
- usr.client.screen -= S
- S.dropped(usr)
- if(!S.amount)
- qdel(S)
- else
- S.loc = src
-
- orient2hud(usr)
- if(usr.s_active)
- usr.s_active.show_to(usr)
- update_icon()
- return 1
+ orient2hud(usr)
+ if(usr.s_active)
+ usr.s_active.show_to(usr)
+ update_icon()
+ return 1
// Sets up numbered display to show the stack size of each stored mineral
// NOTE: numbered display is turned off currently because it's broken
- orient2hud(mob/user as mob)
- var/adjusted_contents = contents.len
+/obj/item/storage/bag/sheetsnatcher/orient2hud(mob/user as mob)
+ var/adjusted_contents = contents.len
- //Numbered contents display
- var/list/datum/numbered_display/numbered_contents
- if(display_contents_with_number)
- numbered_contents = list()
- adjusted_contents = 0
- for(var/obj/item/stack/sheet/I in contents)
- adjusted_contents++
- var/datum/numbered_display/D = new/datum/numbered_display(I)
- D.number = I.amount
- numbered_contents.Add( D )
+ //Numbered contents display
+ var/list/datum/numbered_display/numbered_contents
+ if(display_contents_with_number)
+ numbered_contents = list()
+ adjusted_contents = 0
+ for(var/obj/item/stack/sheet/I in contents)
+ adjusted_contents++
+ var/datum/numbered_display/D = new/datum/numbered_display(I)
+ D.number = I.amount
+ numbered_contents.Add( D )
- var/row_num = 0
- var/col_count = min(7,storage_slots) -1
- if(adjusted_contents > 7)
- row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
- src.standard_orient_objs(row_num, col_count, numbered_contents)
- return
+ var/row_num = 0
+ var/col_count = min(7,storage_slots) -1
+ if(adjusted_contents > 7)
+ row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
+ src.standard_orient_objs(row_num, col_count, numbered_contents)
+ return
// Modified quick_empty verb drops appropriate sized stacks
- quick_empty()
- var/location = get_turf(src)
- for(var/obj/item/stack/sheet/S in contents)
- while(S.amount)
- var/obj/item/stack/sheet/N = new S.type(location)
- var/stacksize = min(S.amount,N.max_amount)
- N.amount = stacksize
- S.amount -= stacksize
- if(!S.amount)
- qdel(S) // todo: there's probably something missing here
- orient2hud(usr)
- if(usr.s_active)
- usr.s_active.show_to(usr)
- update_icon()
+/obj/item/storage/bag/sheetsnatcher/quick_empty()
+ var/location = get_turf(src)
+ for(var/obj/item/stack/sheet/S in contents)
+ while(S.amount)
+ var/obj/item/stack/sheet/N = new S.type(location)
+ var/stacksize = min(S.amount,N.max_amount)
+ N.amount = stacksize
+ S.amount -= stacksize
+ if(!S.amount)
+ qdel(S) // todo: there's probably something missing here
+ orient2hud(usr)
+ if(usr.s_active)
+ usr.s_active.show_to(usr)
+ update_icon()
// Instead of removing
- remove_from_storage(obj/item/W as obj, atom/new_location)
- var/obj/item/stack/sheet/S = W
- if(!istype(S)) return 0
+/obj/item/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location)
+ var/obj/item/stack/sheet/S = W
+ if(!istype(S)) return 0
- //I would prefer to drop a new stack, but the item/attack_hand code
- // that calls this can't recieve a different object than you clicked on.
- //Therefore, make a new stack internally that has the remainder.
- // -Sayu
+ //I would prefer to drop a new stack, but the item/attack_hand code
+ // that calls this can't recieve a different object than you clicked on.
+ //Therefore, make a new stack internally that has the remainder.
+ // -Sayu
- if(S.amount > S.max_amount)
- var/obj/item/stack/sheet/temp = new S.type(src)
- temp.amount = S.amount - S.max_amount
- S.amount = S.max_amount
+ if(S.amount > S.max_amount)
+ var/obj/item/stack/sheet/temp = new S.type(src)
+ temp.amount = S.amount - S.max_amount
+ S.amount = S.max_amount
- return ..(S,new_location)
+ return ..(S,new_location)
// -----------------------------
// Sheet Snatcher (Cyborg)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 5ba58e2f313..67f32dbfd58 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -631,21 +631,21 @@
max_combined_w_class = 280
can_hold = list()
- New()
- ..()
- new /obj/item/crowbar(src)
- new /obj/item/screwdriver(src)
- new /obj/item/weldingtool/hugetank(src)
- new /obj/item/wirecutters(src)
- new /obj/item/wrench(src)
- new /obj/item/multitool(src)
- new /obj/item/stack/cable_coil(src)
+/obj/item/storage/belt/bluespace/admin/New()
+ ..()
+ new /obj/item/crowbar(src)
+ new /obj/item/screwdriver(src)
+ new /obj/item/weldingtool/hugetank(src)
+ new /obj/item/wirecutters(src)
+ new /obj/item/wrench(src)
+ new /obj/item/multitool(src)
+ new /obj/item/stack/cable_coil(src)
- new /obj/item/restraints/handcuffs(src)
- new /obj/item/dnainjector/xraymut(src)
- new /obj/item/dnainjector/firemut(src)
- new /obj/item/dnainjector/telemut(src)
- new /obj/item/dnainjector/hulkmut(src)
+ new /obj/item/restraints/handcuffs(src)
+ new /obj/item/dnainjector/xraymut(src)
+ new /obj/item/dnainjector/firemut(src)
+ new /obj/item/dnainjector/telemut(src)
+ new /obj/item/dnainjector/hulkmut(src)
// new /obj/item/spellbook(src) // for smoke effects, door openings, etc
// new /obj/item/magic/spellbook(src)
@@ -660,15 +660,15 @@
max_combined_w_class = 280
can_hold = list()
- New()
- ..()
- new /obj/item/crowbar(src)
- new /obj/item/screwdriver(src)
- new /obj/item/weldingtool/hugetank(src)
- new /obj/item/wirecutters(src)
- new /obj/item/wrench(src)
- new /obj/item/multitool(src)
- new /obj/item/stack/cable_coil(src)
+/obj/item/storage/belt/bluespace/sandbox/New()
+ ..()
+ new /obj/item/crowbar(src)
+ new /obj/item/screwdriver(src)
+ new /obj/item/weldingtool/hugetank(src)
+ new /obj/item/wirecutters(src)
+ new /obj/item/wrench(src)
+ new /obj/item/multitool(src)
+ new /obj/item/stack/cable_coil(src)
- new /obj/item/analyzer(src)
- new /obj/item/healthanalyzer(src)
+ new /obj/item/analyzer(src)
+ new /obj/item/healthanalyzer(src)
diff --git a/code/modules/atmos_automation/console.dm b/code/modules/atmos_automation/console.dm
index e486898d18d..f4c3873717c 100644
--- a/code/modules/atmos_automation/console.dm
+++ b/code/modules/atmos_automation/console.dm
@@ -13,216 +13,216 @@
var/list/datum/automation/automations = list()
- receive_signal(datum/signal/signal)
- if(!signal || signal.encryption) return
+/obj/machinery/computer/general_air_control/atmos_automation/receive_signal(datum/signal/signal)
+ if(!signal || signal.encryption) return
- var/id_tag = signal.data["tag"]
- if(!id_tag)
- return
+ var/id_tag = signal.data["tag"]
+ if(!id_tag)
+ return
- sensor_information[id_tag] = signal.data
+ sensor_information[id_tag] = signal.data
- process()
- if(on)
- for(var/datum/automation/A in automations)
- A.process()
+/obj/machinery/computer/general_air_control/atmos_automation/process()
+ if(on)
+ for(var/datum/automation/A in automations)
+ A.process()
- update_icon()
+/obj/machinery/computer/general_air_control/atmos_automation/update_icon()
+ icon_state = initial(icon_state)
+ // Broken
+ if(stat & BROKEN)
+ icon_state += "b"
+
+ // Powered
+ else if(stat & NOPOWER)
icon_state = initial(icon_state)
- // Broken
- if(stat & BROKEN)
- icon_state += "b"
+ icon_state += "0"
+ else if(on)
+ icon_state += "_active"
- // Powered
- else if(stat & NOPOWER)
- icon_state = initial(icon_state)
- icon_state += "0"
- else if(on)
- icon_state += "_active"
+/obj/machinery/computer/general_air_control/atmos_automation/proc/request_device_refresh(device)
+ send_signal(list("tag"=device, "status"))
- proc/request_device_refresh(var/device)
- send_signal(list("tag"=device, "status"))
+/obj/machinery/computer/general_air_control/atmos_automation/proc/send_signal(list/data, filter = RADIO_ATMOSIA)//filter's here so the AAC can cross communicate to things like vents, which have a different filter
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
+ signal.data=data
+ signal.data["sigtype"]="command"
+ signal.data["advcontrol"]=1//AAC balancing, you need to manually get up to the machine to make it listen to this
+ radio_connection.post_signal(src, signal, range = 8, filter = filter)
- proc/send_signal(var/list/data, var/filter = RADIO_ATMOSIA)//filter's here so the AAC can cross communicate to things like vents, which have a different filter
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
- signal.data=data
- signal.data["sigtype"]="command"
- signal.data["advcontrol"]=1//AAC balancing, you need to manually get up to the machine to make it listen to this
- radio_connection.post_signal(src, signal, range = 8, filter = filter)
+/obj/machinery/computer/general_air_control/atmos_automation/proc/selectValidChildFor(datum/automation/parent, mob/user, list/valid_returntypes)
+ var/list/choices=list()
+ for(var/childtype in automation_types)
+ var/datum/automation/A = new childtype(src)
+ if(A.returntype == null)
+ continue
+ if(!(A.returntype in valid_returntypes))
+ continue
+ choices[A.name]=A
+ if(choices.len==0)
+ testing("Unable to find automations with returntype in [english_list(valid_returntypes)]!")
+ return 0
+ var/label=input(user, "Select new automation:", "Automations", "Cancel") as null|anything in choices
+ if(!label)
+ return 0
+ return choices[label]
- proc/selectValidChildFor(var/datum/automation/parent, var/mob/user, var/list/valid_returntypes)
- var/list/choices=list()
- for(var/childtype in automation_types)
- var/datum/automation/A = new childtype(src)
- if(A.returntype == null)
- continue
- if(!(A.returntype in valid_returntypes))
- continue
- choices[A.name]=A
- if(choices.len==0)
- testing("Unable to find automations with returntype in [english_list(valid_returntypes)]!")
- return 0
- var/label=input(user, "Select new automation:", "Automations", "Cancel") as null|anything in choices
- if(!label)
- return 0
- return choices[label]
+/obj/machinery/computer/general_air_control/atmos_automation/return_text()
+ var/out=..()
- return_text()
- var/out=..()
+ if(on)
+ out += "RUNNING"
+ else
+ out += "STOPPED"
- if(on)
- out += "RUNNING"
- else
- out += "STOPPED"
+ out += {"
+
Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!
Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
+
+
+ "}
+
+ M << browse(dat, "window=paiRecruit;size=580x580;")
+
+/datum/paiController/proc/findPAI(var/obj/item/paicard/p, var/mob/user)
+ requestRecruits(p, user)
+ var/list/available = list()
+ for(var/datum/paiCandidate/c in paiController.pai_candidates)
+ if(c.ready)
+ var/found = 0
+ for(var/mob/o in respawnable_list)
+ if(o.key == c.key)
+ found = 1
+ if(found)
+ available.Add(c)
+ var/dat = ""
+
+ dat += {"
+
+
+
+
- "}
+
+
+ pAI Availability List
+ "}
+ dat += "
Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.
"
+ for(var/datum/paiCandidate/c in available)
dat += {"
-
- pAI Personality Configuration
-
Please configure your pAI personality's options. Remember, what you enter here could determine whether or not the user requesting a personality chooses you!
Do you like to partner with sneaky social ninjas? Like to help security hunt down thugs? Enjoy watching an engineer's back while he saves the station yet again? This doesn't have to be limited to just station jobs. Pretty much any general descriptor for what you'd like to be doing works here.
Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
+
"}
- M << browse(dat, "window=paiRecruit;size=580x580;")
+ dat += {"
+
+
+ "}
- proc/findPAI(var/obj/item/paicard/p, var/mob/user)
- requestRecruits(p, user)
- var/list/available = list()
- for(var/datum/paiCandidate/c in paiController.pai_candidates)
- if(c.ready)
- var/found = 0
- for(var/mob/o in respawnable_list)
- if(o.key == c.key)
- found = 1
- if(found)
- available.Add(c)
- var/dat = ""
+ user << browse(dat, "window=findPai")
- dat += {"
-
-
-
-
-
-
- pAI Availability List
- "}
- dat += "
Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.
"
+/datum/paiController/proc/requestRecruits(var/obj/item/paicard/P, mob/user)
+ for(var/mob/dead/observer/O in player_list)
+ if(O.client && (ROLE_PAI in O.client.prefs.be_special))
+ if(player_old_enough_antag(O.client,ROLE_PAI))
+ if(check_recruit(O))
+ to_chat(O, "A pAI card activated by [user.real_name] is looking for personalities. (Teleport | Sign Up)")
+ //question(O.client)
- for(var/datum/paiCandidate/c in available)
- dat += {"
-
-
- "}
-
- dat += {"
-
-
- "}
-
- user << browse(dat, "window=findPai")
-
- proc/requestRecruits(var/obj/item/paicard/P, mob/user)
- for(var/mob/dead/observer/O in player_list)
- if(O.client && (ROLE_PAI in O.client.prefs.be_special))
- if(player_old_enough_antag(O.client,ROLE_PAI))
- if(check_recruit(O))
- to_chat(O, "A pAI card activated by [user.real_name] is looking for personalities. (Teleport | Sign Up)")
- //question(O.client)
-
- proc/check_recruit(var/mob/dead/observer/O)
- if(jobban_isbanned(O, ROLE_PAI) || jobban_isbanned(O,"nonhumandept"))
- return 0
- if(!player_old_enough_antag(O.client,ROLE_PAI))
- return 0
- if(cannotPossess(O))
- return 0
- if(!(O in respawnable_list))
- return 0
- if(O.client)
- return 1
+/datum/paiController/proc/check_recruit(var/mob/dead/observer/O)
+ if(jobban_isbanned(O, ROLE_PAI) || jobban_isbanned(O,"nonhumandept"))
return 0
+ if(!player_old_enough_antag(O.client,ROLE_PAI))
+ return 0
+ if(cannotPossess(O))
+ return 0
+ if(!(O in respawnable_list))
+ return 0
+ if(O.client)
+ return 1
+ return 0
- proc/question(var/client/C)
- spawn(0)
- if(!C) return
- asked.Add(C.key)
- asked[C.key] = world.time
- var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
- if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
- if(response == "Yes")
- recruitWindow(C.mob)
- else if(response == "Never for this round")
- var/warning = alert(C, "Are you sure? This action will be undoable and you will need to wait until next round.", "You sure?", "Yes", "No")
- if(warning == "Yes")
- asked[C.key] = INFINITY
- else
- question(C)
+/datum/paiController/proc/question(var/client/C)
+ spawn(0)
+ if(!C) return
+ asked.Add(C.key)
+ asked[C.key] = world.time
+ var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round")
+ if(!C) return //handle logouts that happen whilst the alert is waiting for a response.
+ if(response == "Yes")
+ recruitWindow(C.mob)
+ else if(response == "Never for this round")
+ var/warning = alert(C, "Are you sure? This action will be undoable and you will need to wait until next round.", "You sure?", "Yes", "No")
+ if(warning == "Yes")
+ asked[C.key] = INFINITY
+ else
+ question(C)
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index f4db32b8081..9c130780d81 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -6,7 +6,7 @@
act = copytext(act, 1, t1)
//Emote Cooldown System (it's so simple!)
- // proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
+ //proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
@@ -174,4 +174,4 @@
"You announce you are operating in low power mode.")
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
else
- to_chat(src, "You can only use this emote when you're out of charge.")
\ No newline at end of file
+ to_chat(src, "You can only use this emote when you're out of charge.")
diff --git a/code/modules/mob/living/simple_animal/bot/emote.dm b/code/modules/mob/living/simple_animal/bot/emote.dm
index 70e27937745..2ea085464a7 100644
--- a/code/modules/mob/living/simple_animal/bot/emote.dm
+++ b/code/modules/mob/living/simple_animal/bot/emote.dm
@@ -9,7 +9,7 @@
act = copytext(act,1,length(act))
//Emote Cooldown System (it's so simple!)
- // proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
+ //proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
var/on_CD = 0
act = lowertext(act)
switch(act)
@@ -69,4 +69,4 @@
playsound(src.loc, 'sound/goonstation/voice/robot_scream.ogg', 80, 0)
m_type = 2
- ..(act, m_type, message)
\ No newline at end of file
+ ..(act, m_type, message)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 78e7ad47f57..8593de82ba5 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -511,154 +511,152 @@
var/tomail = 0 //changes if contains wrapped package
var/hasmob = 0 //If it contains a mob
- Destroy()
- QDEL_NULL(gas)
- active = 0
- return ..()
+/obj/structure/disposalholder/Destroy()
+ QDEL_NULL(gas)
+ active = 0
+ return ..()
// initialize a holder from the contents of a disposal unit
- proc/init(var/obj/machinery/disposal/D)
- gas = D.air_contents// transfer gas resv. into holder object
+/obj/structure/disposalholder/proc/init(var/obj/machinery/disposal/D)
+ gas = D.air_contents// transfer gas resv. into holder object
- //Check for any living mobs trigger hasmob.
- //hasmob effects whether the package goes to cargo or its tagged destination.
- for(var/mob/living/M in D)
- if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
- hasmob = 1
+ //Check for any living mobs trigger hasmob.
+ //hasmob effects whether the package goes to cargo or its tagged destination.
+ for(var/mob/living/M in D)
+ if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
+ hasmob = 1
- //Checks 1 contents level deep. This means that players can be sent through disposals...
- //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
- for(var/obj/O in D)
- if(O.contents)
- for(var/mob/living/M in O.contents)
- if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
- hasmob = 1
+ //Checks 1 contents level deep. This means that players can be sent through disposals...
+ //...but it should require a second person to open the package. (i.e. person inside a wrapped locker)
+ for(var/obj/O in D)
+ if(O.contents)
+ for(var/mob/living/M in O.contents)
+ if(M && M.stat != 2 && !istype(M,/mob/living/silicon/robot/drone))
+ hasmob = 1
- // now everything inside the disposal gets put into the holder
- // note AM since can contain mobs or objs
- for(var/atom/movable/AM in D)
- AM.loc = src
- if(istype(AM, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = AM
- if(FAT in H.mutations) // is a human and fat?
- has_fat_guy = 1 // set flag on holder
- if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
- var/obj/structure/bigDelivery/T = AM
- destinationTag = T.sortTag
- if(istype(AM, /obj/item/smallDelivery) && !hasmob)
- var/obj/item/smallDelivery/T = AM
- destinationTag = T.sortTag
- //Drones can mail themselves through maint.
- if(istype(AM, /mob/living/silicon/robot/drone))
- var/mob/living/silicon/robot/drone/drone = AM
- destinationTag = drone.mail_destination
- if(istype(AM, /obj/item/shippingPackage) && !hasmob)
- var/obj/item/shippingPackage/sp = AM
- if(sp.sealed) //only sealed packages get delivered to their intended destination
- destinationTag = sp.sortTag
+ // now everything inside the disposal gets put into the holder
+ // note AM since can contain mobs or objs
+ for(var/atom/movable/AM in D)
+ AM.loc = src
+ if(istype(AM, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = AM
+ if(FAT in H.mutations) // is a human and fat?
+ has_fat_guy = 1 // set flag on holder
+ if(istype(AM, /obj/structure/bigDelivery) && !hasmob)
+ var/obj/structure/bigDelivery/T = AM
+ destinationTag = T.sortTag
+ if(istype(AM, /obj/item/smallDelivery) && !hasmob)
+ var/obj/item/smallDelivery/T = AM
+ destinationTag = T.sortTag
+ //Drones can mail themselves through maint.
+ if(istype(AM, /mob/living/silicon/robot/drone))
+ var/mob/living/silicon/robot/drone/drone = AM
+ destinationTag = drone.mail_destination
+ if(istype(AM, /obj/item/shippingPackage) && !hasmob)
+ var/obj/item/shippingPackage/sp = AM
+ if(sp.sealed) //only sealed packages get delivered to their intended destination
+ destinationTag = sp.sortTag
// start the movement process
// argument is the disposal unit the holder started in
- proc/start(var/obj/machinery/disposal/D)
- if(!D.trunk)
- D.expel(src) // no trunk connected, so expel immediately
- return
-
- loc = D.trunk
- active = 1
- dir = DOWN
- spawn(1)
- move() // spawn off the movement process
-
+/obj/structure/disposalholder/proc/start(var/obj/machinery/disposal/D)
+ if(!D.trunk)
+ D.expel(src) // no trunk connected, so expel immediately
return
+ loc = D.trunk
+ active = 1
+ dir = DOWN
+ spawn(1)
+ move() // spawn off the movement process
+
+ return
+
// movement process, persists while holder is moving through pipes
- proc/move()
- var/obj/structure/disposalpipe/last
- while(active)
- /* if(hasmob && prob(3))
- for(var/mob/living/H in src)
- if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system,
- H.take_overall_damage(20, 0, TRUE, "Blunt Trauma") */ //horribly maim any living creature jumping down disposals. c'est la vie
+/obj/structure/disposalholder/proc/move()
+ var/obj/structure/disposalpipe/last
+ while(active)
+ /* if(hasmob && prob(3))
+ for(var/mob/living/H in src)
+ if(!istype(H,/mob/living/silicon/robot/drone)) //Drones use the mailing code to move through the disposal system,
+ H.take_overall_damage(20, 0, "Blunt Trauma") */ //horribly maim any living creature jumping down disposals. c'est la vie
- if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
- active = 0
- // find the fat guys
- for(var/mob/living/carbon/human/H in src)
+ if(has_fat_guy && prob(2)) // chance of becoming stuck per segment if contains a fat guy
+ active = 0
+ // find the fat guys
+ for(var/mob/living/carbon/human/H in src)
- break
- sleep(1) // was 1
- var/obj/structure/disposalpipe/curr = loc
- last = curr
- curr = curr.transfer(src)
- if(!curr)
- last.expel(src, loc, dir)
+ break
+ sleep(1) // was 1
+ var/obj/structure/disposalpipe/curr = loc
+ last = curr
+ curr = curr.transfer(src)
+ if(!curr)
+ last.expel(src, loc, dir)
- //
- if(!(count--))
- active = 0
- return
+ //
+ if(!(count--))
+ active = 0
+ return
// find the turf which should contain the next pipe
- proc/nextloc()
- return get_step(loc,dir)
+/obj/structure/disposalholder/proc/nextloc()
+ return get_step(loc,dir)
// find a matching pipe on a turf
- proc/findpipe(var/turf/T)
-
- if(!T)
- return null
-
- var/fdir = turn(dir, 180) // flip the movement direction
- for(var/obj/structure/disposalpipe/P in T)
- if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
- return P
- // if no matching pipe, return null
+/obj/structure/disposalholder/proc/findpipe(var/turf/T)
+ if(!T)
return null
+ var/fdir = turn(dir, 180) // flip the movement direction
+ for(var/obj/structure/disposalpipe/P in T)
+ if(fdir & P.dpdir) // find pipe direction mask that matches flipped dir
+ return P
+ // if no matching pipe, return null
+ return null
+
// merge two holder objects
// used when a a holder meets a stuck holder
- proc/merge(var/obj/structure/disposalholder/other)
- for(var/atom/movable/AM in other)
- AM.loc = src // move everything in other holder to this one
- if(ismob(AM))
- var/mob/M = AM
- if(M.client) // if a client mob, update eye to follow this holder
- M.client.eye = src
+/obj/structure/disposalholder/proc/merge(var/obj/structure/disposalholder/other)
+ for(var/atom/movable/AM in other)
+ AM.loc = src // move everything in other holder to this one
+ if(ismob(AM))
+ var/mob/M = AM
+ if(M.client) // if a client mob, update eye to follow this holder
+ M.client.eye = src
- if(other.has_fat_guy)
- has_fat_guy = 1
- qdel(other)
+ if(other.has_fat_guy)
+ has_fat_guy = 1
+ qdel(other)
// called when player tries to move while in a pipe
- relaymove(mob/user as mob)
+/obj/structure/disposalholder/relaymove(mob/user as mob)
+ if(!istype(user,/mob/living))
+ return
- if(!istype(user,/mob/living))
- return
+ var/mob/living/U = user
- var/mob/living/U = user
+ if(U.stat || U.last_special <= world.time)
+ return
- if(U.stat || U.last_special <= world.time)
- return
+ U.last_special = world.time+100
- U.last_special = world.time+100
+ if(src.loc)
+ for(var/mob/M in hearers(src.loc.loc))
+ to_chat(M, "CLONG, clong!")
- if(src.loc)
- for(var/mob/M in hearers(src.loc.loc))
- to_chat(M, "CLONG, clong!")
-
- playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
+ playsound(src.loc, 'sound/effects/clang.ogg', 50, 0, 0)
// called to vent all gas in holder to a location
- proc/vent_gas(var/atom/location)
- if(location)
- location.assume_air(gas) // vent all gas to turf
- air_update_turf()
- return
+/obj/structure/disposalholder/proc/vent_gas(var/atom/location)
+ if(location)
+ location.assume_air(gas) // vent all gas to turf
+ air_update_turf()
+ return
// Disposal pipes
@@ -1000,44 +998,44 @@
var/negdir = 0
var/sortdir = 0
- proc/updatedesc()
- desc = "An underfloor disposal pipe with a package sorting mechanism."
- if(sortType>0)
- var/tag = uppertext(TAGGERLOCATIONS[sortType])
- desc += "\nIt's tagged with [tag]"
+/obj/structure/disposalpipe/sortjunction/proc/updatedesc()
+ desc = "An underfloor disposal pipe with a package sorting mechanism."
+ if(sortType>0)
+ var/tag = uppertext(TAGGERLOCATIONS[sortType])
+ desc += "\nIt's tagged with [tag]"
- proc/updatedir()
- posdir = dir
- negdir = turn(posdir, 180)
+/obj/structure/disposalpipe/sortjunction/proc/updatedir()
+ posdir = dir
+ negdir = turn(posdir, 180)
- if(icon_state == "pipe-j1s")
- sortdir = turn(posdir, -90)
- else
- icon_state = "pipe-j2s"
- sortdir = turn(posdir, 90)
+ if(icon_state == "pipe-j1s")
+ sortdir = turn(posdir, -90)
+ else
+ icon_state = "pipe-j2s"
+ sortdir = turn(posdir, 90)
- dpdir = sortdir | posdir | negdir
+ dpdir = sortdir | posdir | negdir
- New()
- ..()
- updatedir()
- updatedesc()
- update()
+/obj/structure/disposalpipe/sortjunction/New()
+ ..()
+ updatedir()
+ updatedesc()
+ update()
+ return
+
+/obj/structure/disposalpipe/sortjunction/attackby(var/obj/item/I, var/mob/user, params)
+ if(..())
return
- attackby(var/obj/item/I, var/mob/user, params)
- if(..())
- return
+ if(istype(I, /obj/item/destTagger))
+ var/obj/item/destTagger/O = I
- if(istype(I, /obj/item/destTagger))
- var/obj/item/destTagger/O = I
-
- if(O.currTag > 0)// Tag set
- sortType = O.currTag
- playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
- var/tag = uppertext(TAGGERLOCATIONS[O.currTag])
- to_chat(user, "Changed filter to [tag]")
- updatedesc()
+ if(O.currTag > 0)// Tag set
+ sortType = O.currTag
+ playsound(src.loc, 'sound/machines/twobeep.ogg', 100, 1)
+ var/tag = uppertext(TAGGERLOCATIONS[O.currTag])
+ to_chat(user, "Changed filter to [tag]")
+ updatedesc()
// next direction to move
@@ -1045,61 +1043,59 @@
// if coming in from posdir, then flip around and go back to posdir
// if coming in from sortdir, go to posdir
- nextdir(var/fromdir, var/sortTag)
- //var/flipdir = turn(fromdir, 180)
- if(fromdir != sortdir) // probably came from the negdir
+/obj/structure/disposalpipe/sortjunction/nextdir(var/fromdir, var/sortTag)
+ //var/flipdir = turn(fromdir, 180)
+ if(fromdir != sortdir) // probably came from the negdir
- if(src.sortType == sortTag) //if destination matches filtered type...
- return sortdir // exit through sortdirection
- else
- return posdir
- else // came from sortdir
- // so go with the flow to positive direction
+ if(src.sortType == sortTag) //if destination matches filtered type...
+ return sortdir // exit through sortdirection
+ else
return posdir
+ else // came from sortdir
+ // so go with the flow to positive direction
+ return posdir
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir, H.destinationTag)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
+/obj/structure/disposalpipe/sortjunction/transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir, H.destinationTag)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
+ return P
//a three-way junction that sorts objects destined for the mail office mail table (tomail = 1)
/obj/structure/disposalpipe/wrapsortjunction
-
desc = "An underfloor disposal pipe which sorts wrapped and unwrapped objects."
icon_state = "pipe-j1s"
var/posdir = 0
var/negdir = 0
var/sortdir = 0
- New()
- ..()
- posdir = dir
- if(icon_state == "pipe-j1s")
- sortdir = turn(posdir, -90)
- negdir = turn(posdir, 180)
- else
- icon_state = "pipe-j2s"
- sortdir = turn(posdir, 90)
- negdir = turn(posdir, 180)
- dpdir = sortdir | posdir | negdir
+/obj/structure/disposalpipe/wrapsortjunction/New()
+ ..()
+ posdir = dir
+ if(icon_state == "pipe-j1s")
+ sortdir = turn(posdir, -90)
+ negdir = turn(posdir, 180)
+ else
+ icon_state = "pipe-j2s"
+ sortdir = turn(posdir, 90)
+ negdir = turn(posdir, 180)
+ dpdir = sortdir | posdir | negdir
- update()
- return
+ update()
+ return
// next direction to move
@@ -1107,40 +1103,34 @@
// if coming in from posdir, then flip around and go back to posdir
// if coming in from sortdir, go to posdir
- nextdir(var/fromdir, var/istomail)
- //var/flipdir = turn(fromdir, 180)
- if(fromdir != sortdir) // probably came from the negdir
-
- if(istomail) //if destination matches filtered type...
- return sortdir // exit through sortdirection
- else
- return posdir
- else // came from sortdir
- // so go with the flow to positive direction
+/obj/structure/disposalpipe/wrapsortjunction/nextdir(var/fromdir, var/istomail)
+ //var/flipdir = turn(fromdir, 180)
+ if(fromdir != sortdir) // probably came from the negdir
+ if(istomail) //if destination matches filtered type...
+ return sortdir // exit through sortdirection
+ else
return posdir
+ else // came from sortdir
+ return posdir // so go with the flow to positive direction
- transfer(var/obj/structure/disposalholder/H)
- var/nextdir = nextdir(H.dir, H.tomail)
- H.dir = nextdir
- var/turf/T = H.nextloc()
- var/obj/structure/disposalpipe/P = H.findpipe(T)
-
- if(P)
- // find other holder in next loc, if inactive merge it with current
- var/obj/structure/disposalholder/H2 = locate() in P
- if(H2 && !H2.active)
- H.merge(H2)
-
- H.loc = P
- else // if wasn't a pipe, then set loc to turf
- H.loc = T
- return null
-
- return P
-
+/obj/structure/disposalpipe/wrapsortjunction/transfer(var/obj/structure/disposalholder/H)
+ var/nextdir = nextdir(H.dir, H.tomail)
+ H.dir = nextdir
+ var/turf/T = H.nextloc()
+ var/obj/structure/disposalpipe/P = H.findpipe(T)
+ if(P)
+ // find other holder in next loc, if inactive merge it with current
+ var/obj/structure/disposalholder/H2 = locate() in P
+ if(H2 && !H2.active)
+ H.merge(H2)
+ H.loc = P
+ else // if wasn't a pipe, then set loc to turf
+ H.loc = T
+ return null
+ return P
//a trunk joining to a disposal bin or outlet on the same turf
/obj/structure/disposalpipe/trunk
@@ -1203,18 +1193,6 @@
/obj/structure/disposalpipe/trunk/attackby(var/obj/item/I, var/mob/user, params)
//Disposal bins or chutes
- /*
- These shouldn't be required
- var/obj/machinery/disposal/D = locate() in src.loc
- if(D && D.anchored)
- return
-
- //Disposal outlet
- var/obj/structure/disposaloutlet/O = locate() in src.loc
- if(O && O.anchored)
- return
- */
-
//Disposal constructors
var/obj/structure/disposalconstruct/C = locate() in src.loc
if(C && C.anchored)
@@ -1275,18 +1253,13 @@
// i.e. will be treated as an empty turf
desc = "A broken piece of disposal pipe."
- New()
- ..()
- update()
- return
+/obj/structure/disposalpipe/broken/New()
+ ..()
+ update()
+ return
- // called when welded
- // for broken pipe, remove and turn into scrap
-
- welded()
-// var/obj/item/scrap/S = new(src.loc)
-// S.set_components(200,0,0)
- qdel(src)
+/obj/structure/disposalpipe/broken/welded()
+ qdel(src)
// the disposal outlet machine
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 1b1b5c0ffa9..a98e8e60adc 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -223,31 +223,31 @@
flags = CONDUCT
slot_flags = SLOT_BELT
- proc/openwindow(mob/user as mob)
- var/dat = "
TagMaster 2.2
"
+/obj/item/destTagger/proc/openwindow(mob/user as mob)
+ var/dat = "
TagMaster 2.2
"
- dat += "
"
- for(var/i = 1, i <= TAGGERLOCATIONS.len, i++)
- dat += "