Merge remote-tracking branch 'upstream/master' into Snowdout
@@ -99,7 +99,8 @@
|
||||
new_character.key = key //now transfer the key to link the client to our new body
|
||||
|
||||
/datum/mind/proc/store_memory(new_text)
|
||||
memory += "[new_text]<BR>"
|
||||
if((length(memory) + length(new_text)) <= MAX_MESSAGE_LEN)
|
||||
memory += "[new_text]<BR>"
|
||||
|
||||
/datum/mind/proc/show_memory(mob/recipient)
|
||||
var/output = "<B>[current.real_name]'s Memory</B><HR>"
|
||||
|
||||
@@ -1,200 +1,208 @@
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to robotics tasks live.
|
||||
*/
|
||||
|
||||
|
||||
/datum/supply_pack/robotics
|
||||
group = "Robotics"
|
||||
|
||||
/datum/supply_pack/randomised/robotics
|
||||
group = "Robotics"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robotics_assembly
|
||||
name = "Robotics assembly crate"
|
||||
contains = list(
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
/obj/item/weapon/storage/toolbox/electrical,
|
||||
/obj/item/device/flash = 4,
|
||||
/obj/item/weapon/cell/high = 2
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robotics assembly"
|
||||
access = access_robotics
|
||||
|
||||
/*/datum/supply_pack/robotics/robolimbs_basic
|
||||
name = "Basic robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (basic)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs_adv
|
||||
name = "All robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hephaestus,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (adv)"
|
||||
access = access_robotics
|
||||
*/
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/morpheus
|
||||
name = "Morpheus robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/morpheus)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Morpheus)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/cybersolutions
|
||||
name = "Cyber Solutions robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/cybersolutions)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Cyber Solutions)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/xion
|
||||
name = "Xion robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/xion)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Xion)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/grayson
|
||||
name = "Grayson robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/grayson)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Grayson)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/hephaestus
|
||||
name = "Hephaestus robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/hephaestus)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Hephaestus)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/wardtakahashi
|
||||
name = "Ward-Takahashi robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/wardtakahashi)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Ward-Takahashi)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/zenghu
|
||||
name = "Zeng Hu robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/zenghu)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Zeng Hu)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/bishop
|
||||
name = "Bishop robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/bishop)
|
||||
cost = 70
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Bishop)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_ripley
|
||||
name = "Circuit Crate (\"Ripley\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/book/manual/ripley_build_and_repair,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/main,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Ripley\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_odysseus
|
||||
name = "Circuit Crate (\"Odysseus\")"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/main
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "\"Odysseus\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod
|
||||
num_contained = 1
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/ripley,
|
||||
/obj/item/device/kit/paint/ripley/death,
|
||||
/obj/item/device/kit/paint/ripley/flames_red,
|
||||
/obj/item/device/kit/paint/ripley/flames_blue
|
||||
)
|
||||
name = "Random APLU modkit"
|
||||
cost = 200
|
||||
containertype = /obj/structure/closet/crate/science
|
||||
containername = "heavy crate"
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod/durand
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/durand,
|
||||
/obj/item/device/kit/paint/durand/seraph,
|
||||
/obj/item/device/kit/paint/durand/phazon
|
||||
)
|
||||
name = "Random Durand exosuit modkit"
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod/gygax
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/gygax,
|
||||
/obj/item/device/kit/paint/gygax/darkgygax,
|
||||
/obj/item/device/kit/paint/gygax/recitence
|
||||
)
|
||||
name = "Random Gygax exosuit modkit"
|
||||
|
||||
/datum/supply_pack/robotics/jumper_cables
|
||||
name = "Jumper kit crate"
|
||||
contains = list(
|
||||
/obj/item/device/defib_kit/jumper_kit = 2
|
||||
)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Jumper kit crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/bike
|
||||
name = "Spacebike Crate"
|
||||
contains = list()
|
||||
cost = 350
|
||||
containertype = /obj/structure/largecrate/vehicle/bike
|
||||
containername = "Spacebike Crate"
|
||||
|
||||
/datum/supply_pack/robotics/quadbike
|
||||
name = "ATV Crate"
|
||||
contains = list()
|
||||
cost = 300
|
||||
containertype = /obj/structure/largecrate/vehicle/quadbike
|
||||
containername = "ATV Crate"
|
||||
|
||||
/datum/supply_pack/robotics/quadtrailer
|
||||
name = "ATV Trailer Crate"
|
||||
contains = list()
|
||||
cost = 250
|
||||
containertype = /obj/structure/largecrate/vehicle/quadtrailer
|
||||
containername = "ATV Trailer Crate"
|
||||
/*
|
||||
* Here is where any supply packs
|
||||
* related to robotics tasks live.
|
||||
*/
|
||||
|
||||
|
||||
/datum/supply_pack/robotics
|
||||
group = "Robotics"
|
||||
|
||||
/datum/supply_pack/randomised/robotics
|
||||
group = "Robotics"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robotics_assembly
|
||||
name = "Robotics assembly crate"
|
||||
contains = list(
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
/obj/item/weapon/storage/toolbox/electrical,
|
||||
/obj/item/device/flash = 4,
|
||||
/obj/item/weapon/cell/high = 2
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robotics assembly"
|
||||
access = access_robotics
|
||||
|
||||
/*/datum/supply_pack/robotics/robolimbs_basic
|
||||
name = "Basic robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (basic)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs_adv
|
||||
name = "All robolimb blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hephaestus,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure/gear
|
||||
containername = "Robolimb blueprints (adv)"
|
||||
access = access_robotics
|
||||
*/
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/morpheus
|
||||
name = "Morpheus robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/morpheus)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Morpheus)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/antares
|
||||
name = "Antares robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/antares)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Antares)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/cybersolutions
|
||||
name = "Cyber Solutions robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/cybersolutions)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Cyber Solutions)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/xion
|
||||
name = "Xion robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/xion)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Xion)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/grayson
|
||||
name = "Grayson robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/grayson)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Grayson)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/hephaestus
|
||||
name = "Hephaestus robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/hephaestus)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Hephaestus)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/wardtakahashi
|
||||
name = "Ward-Takahashi robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/wardtakahashi)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Ward-Takahashi)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/zenghu
|
||||
name = "Zeng Hu robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/zenghu)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Zeng Hu)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/robolimbs/bishop
|
||||
name = "Bishop robolimb blueprints"
|
||||
contains = list(/obj/item/weapon/disk/limb/bishop)
|
||||
cost = 70
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Robolimb blueprints (Bishop)"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_ripley
|
||||
name = "Circuit Crate (\"Ripley\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/book/manual/ripley_build_and_repair,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/main,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Ripley\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_odysseus
|
||||
name = "Circuit Crate (\"Odysseus\")"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/odysseus/main
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "\"Odysseus\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod
|
||||
num_contained = 1
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/ripley,
|
||||
/obj/item/device/kit/paint/ripley/death,
|
||||
/obj/item/device/kit/paint/ripley/flames_red,
|
||||
/obj/item/device/kit/paint/ripley/flames_blue
|
||||
)
|
||||
name = "Random APLU modkit"
|
||||
cost = 200
|
||||
containertype = /obj/structure/closet/crate/science
|
||||
containername = "heavy crate"
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod/durand
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/durand,
|
||||
/obj/item/device/kit/paint/durand/seraph,
|
||||
/obj/item/device/kit/paint/durand/phazon
|
||||
)
|
||||
name = "Random Durand exosuit modkit"
|
||||
|
||||
/datum/supply_pack/randomised/robotics/exosuit_mod/gygax
|
||||
contains = list(
|
||||
/obj/item/device/kit/paint/gygax,
|
||||
/obj/item/device/kit/paint/gygax/darkgygax,
|
||||
/obj/item/device/kit/paint/gygax/recitence
|
||||
)
|
||||
name = "Random Gygax exosuit modkit"
|
||||
|
||||
/datum/supply_pack/robotics/jumper_cables
|
||||
name = "Jumper kit crate"
|
||||
contains = list(
|
||||
/obj/item/device/defib_kit/jumper_kit = 2
|
||||
)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "Jumper kit crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/bike
|
||||
name = "Spacebike Crate"
|
||||
contains = list()
|
||||
cost = 350
|
||||
containertype = /obj/structure/largecrate/vehicle/bike
|
||||
containername = "Spacebike Crate"
|
||||
|
||||
/datum/supply_pack/robotics/quadbike
|
||||
name = "ATV Crate"
|
||||
contains = list()
|
||||
cost = 300
|
||||
containertype = /obj/structure/largecrate/vehicle/quadbike
|
||||
containername = "ATV Crate"
|
||||
|
||||
/datum/supply_pack/robotics/quadtrailer
|
||||
name = "ATV Trailer Crate"
|
||||
contains = list()
|
||||
cost = 250
|
||||
containertype = /obj/structure/largecrate/vehicle/quadtrailer
|
||||
containername = "ATV Trailer Crate"
|
||||
|
||||
@@ -1,73 +1,74 @@
|
||||
/datum/supply_pack/robotics/mecha_gopher
|
||||
name = "Circuit Crate (\"Gopher\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/gopher/main,
|
||||
/obj/item/weapon/circuitboard/mecha/gopher/peripherals
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Gopher\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_polecat
|
||||
name = "Circuit Crate (\"Polecat\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/main,
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/targeting
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Polecat\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_weasel
|
||||
name = "Circuit Crate (\"Weasel\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/main,
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/targeting
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Weasel\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/some_robolimbs
|
||||
name = "Basic Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Basic Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/all_robolimbs
|
||||
name = "Advanced Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hephaestus,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
/obj/item/weapon/disk/limb/talon,
|
||||
/obj/item/weapon/disk/limb/dsi_tajaran,
|
||||
/obj/item/weapon/disk/limb/dsi_lizard,
|
||||
/obj/item/weapon/disk/limb/dsi_sergal,
|
||||
/obj/item/weapon/disk/limb/dsi_nevrean,
|
||||
/obj/item/weapon/disk/limb/dsi_vulpkanin,
|
||||
/obj/item/weapon/disk/limb/dsi_akula,
|
||||
/obj/item/weapon/disk/limb/dsi_spider,
|
||||
/obj/item/weapon/disk/limb/dsi_teshari,
|
||||
/obj/item/weapon/disk/limb/eggnerdltd,
|
||||
/obj/item/weapon/disk/limb/eggnerdltdred
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Advanced Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
/datum/supply_pack/robotics/mecha_gopher
|
||||
name = "Circuit Crate (\"Gopher\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/gopher/main,
|
||||
/obj/item/weapon/circuitboard/mecha/gopher/peripherals
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Gopher\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_polecat
|
||||
name = "Circuit Crate (\"Polecat\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/main,
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/polecat/targeting
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Polecat\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/mecha_weasel
|
||||
name = "Circuit Crate (\"Weasel\" APLU)"
|
||||
contains = list(
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/main,
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/peripherals,
|
||||
/obj/item/weapon/circuitboard/mecha/weasel/targeting
|
||||
)
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/science
|
||||
containername = "APLU \"Weasel\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/some_robolimbs
|
||||
name = "Basic Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/talon
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Basic Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_pack/robotics/all_robolimbs
|
||||
name = "Advanced Robolimb Blueprints"
|
||||
contains = list(
|
||||
/obj/item/weapon/disk/limb/bishop,
|
||||
/obj/item/weapon/disk/limb/hephaestus,
|
||||
/obj/item/weapon/disk/limb/morpheus,
|
||||
/obj/item/weapon/disk/limb/veymed,
|
||||
/obj/item/weapon/disk/limb/wardtakahashi,
|
||||
/obj/item/weapon/disk/limb/xion,
|
||||
/obj/item/weapon/disk/limb/zenghu,
|
||||
/obj/item/weapon/disk/limb/talon,
|
||||
/obj/item/weapon/disk/limb/dsi_tajaran,
|
||||
/obj/item/weapon/disk/limb/dsi_lizard,
|
||||
/obj/item/weapon/disk/limb/dsi_sergal,
|
||||
/obj/item/weapon/disk/limb/dsi_nevrean,
|
||||
/obj/item/weapon/disk/limb/dsi_vulpkanin,
|
||||
/obj/item/weapon/disk/limb/dsi_akula,
|
||||
/obj/item/weapon/disk/limb/dsi_spider,
|
||||
/obj/item/weapon/disk/limb/dsi_teshari,
|
||||
/obj/item/weapon/disk/limb/eggnerdltd,
|
||||
/obj/item/weapon/disk/limb/eggnerdltdred,
|
||||
/obj/item/weapon/disk/limb/antares
|
||||
)
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Advanced Robolimb Blueprint Crate"
|
||||
access = access_robotics
|
||||
|
||||
@@ -1,309 +1,321 @@
|
||||
/obj/item/robot_parts
|
||||
name = "robot parts"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
item_state = "buildpipe"
|
||||
icon_state = "blank"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/list/part = null // Order of args is important for installing robolimbs.
|
||||
var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics.
|
||||
var/model_info
|
||||
dir = SOUTH
|
||||
|
||||
/obj/item/robot_parts/set_dir()
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/New(var/newloc, var/model)
|
||||
..(newloc)
|
||||
|
||||
/obj/item/robot_parts/l_arm
|
||||
name = "cyborg left arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_arm"
|
||||
part = list(BP_L_ARM, BP_L_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_arm
|
||||
name = "cyborg right arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_arm"
|
||||
part = list(BP_R_ARM, BP_R_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/l_leg
|
||||
name = "cyborg left leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_leg"
|
||||
part = list(BP_L_LEG, BP_L_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_leg
|
||||
name = "cyborg leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_leg"
|
||||
part = list(BP_R_LEG, BP_R_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/chest
|
||||
name = "cyborg chest"
|
||||
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
|
||||
icon_state = "chest"
|
||||
part = list(BP_GROIN,BP_TORSO)
|
||||
var/wires = 0.0
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
|
||||
/obj/item/robot_parts/head
|
||||
name = "cyborg head"
|
||||
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
|
||||
icon_state = "head"
|
||||
part = list(BP_HEAD)
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
|
||||
/obj/item/robot_parts/robot_suit
|
||||
name = "endoskeleton"
|
||||
desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors."
|
||||
icon_state = "robo_suit"
|
||||
var/obj/item/robot_parts/l_arm/l_arm = null
|
||||
var/obj/item/robot_parts/r_arm/r_arm = null
|
||||
var/obj/item/robot_parts/l_leg/l_leg = null
|
||||
var/obj/item/robot_parts/r_leg/r_leg = null
|
||||
var/obj/item/robot_parts/chest/chest = null
|
||||
var/obj/item/robot_parts/head/head = null
|
||||
var/created_name = ""
|
||||
|
||||
/obj/item/robot_parts/robot_suit/New()
|
||||
..()
|
||||
src.updateicon()
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/updateicon()
|
||||
src.overlays.Cut()
|
||||
if(src.l_arm)
|
||||
src.overlays += "l_arm+o"
|
||||
if(src.r_arm)
|
||||
src.overlays += "r_arm+o"
|
||||
if(src.chest)
|
||||
src.overlays += "chest+o"
|
||||
if(src.l_leg)
|
||||
src.overlays += "l_leg+o"
|
||||
if(src.r_leg)
|
||||
src.overlays += "r_leg+o"
|
||||
if(src.head)
|
||||
src.overlays += "head+o"
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/check_completion()
|
||||
if(src.l_arm && src.r_arm)
|
||||
if(src.l_leg && src.r_leg)
|
||||
if(src.chest && src.head)
|
||||
feedback_inc("cyborg_frames_built",1)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
|
||||
var/obj/item/stack/material/M = W
|
||||
if (M.use(1))
|
||||
var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly
|
||||
B.loc = get_turf(src)
|
||||
to_chat(user, "<span class='notice'>You armed the robot frame.</span>")
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.remove_from_mob(src)
|
||||
user.put_in_inactive_hand(B)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>")
|
||||
if(istype(W, /obj/item/robot_parts/l_leg))
|
||||
if(src.l_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_leg))
|
||||
if(src.r_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/l_arm))
|
||||
if(src.l_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_arm))
|
||||
if(src.r_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/chest))
|
||||
if(src.chest) return
|
||||
if(W:wires && W:cell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.chest = W
|
||||
src.updateicon()
|
||||
else if(!W:wires)
|
||||
to_chat(user, "<span class='warning'>You need to attach wires to it first!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to attach a cell to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/head))
|
||||
if(src.head) return
|
||||
if(W:flash2 && W:flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.head = W
|
||||
src.updateicon()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to attach a flash to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/M = W
|
||||
if(check_completion())
|
||||
if(!istype(loc,/turf))
|
||||
to_chat(user, "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>")
|
||||
return
|
||||
if(!M.brainmob)
|
||||
to_chat(user, "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
if(!M.brainmob.key)
|
||||
var/ghost_can_reenter = 0
|
||||
if(M.brainmob.mind)
|
||||
for(var/mob/observer/dead/G in player_list)
|
||||
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
|
||||
ghost_can_reenter = 1 //May come in use again at another point.
|
||||
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; though it may be able to auto-resuscitate.</span>") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
|
||||
return
|
||||
if(!ghost_can_reenter)
|
||||
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>")
|
||||
return
|
||||
|
||||
if(M.brainmob.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
|
||||
if(jobban_isbanned(M.brainmob, "Cyborg"))
|
||||
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
|
||||
if(!O) return
|
||||
|
||||
user.drop_item()
|
||||
|
||||
O.mmi = W
|
||||
O.invisibility = 0
|
||||
O.custom_name = created_name
|
||||
O.updatename("Default")
|
||||
|
||||
M.brainmob.mind.transfer_to(O)
|
||||
|
||||
if(O.mind && O.mind.special_role)
|
||||
O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
||||
|
||||
O.job = "Cyborg"
|
||||
|
||||
for(var/datum/language/L in M.brainmob.languages)
|
||||
O.add_language(L.name)
|
||||
|
||||
O.cell = chest.cell
|
||||
O.cell.loc = O
|
||||
W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
|
||||
|
||||
// Since we "magically" installed a cell, we also have to update the correct component.
|
||||
if(O.cell)
|
||||
var/datum/robot_component/cell_component = O.components["power cell"]
|
||||
cell_component.wrapped = O.cell
|
||||
cell_component.installed = 1
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.Namepick()
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The MMI must go in after everything else!</span>")
|
||||
|
||||
if (istype(W, /obj/item/weapon/pen))
|
||||
var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN)
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, usr) && src.loc != usr)
|
||||
return
|
||||
|
||||
src.created_name = t
|
||||
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(src.cell)
|
||||
to_chat(user, "<span class='warning'>You have already inserted a cell!</span>")
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.cell = W
|
||||
to_chat(user, "<span class='notice'>You insert the cell!</span>")
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
if(src.wires)
|
||||
to_chat(user, "<span class='warning'>You have already inserted wire!</span>")
|
||||
return
|
||||
else
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
coil.use(1)
|
||||
src.wires = 1.0
|
||||
to_chat(user, "<span class='notice'>You insert the wire!</span>")
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
var/current_module = user.get_active_hand()
|
||||
if(current_module == W)
|
||||
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
|
||||
return
|
||||
else
|
||||
add_flashes(W,user)
|
||||
else
|
||||
add_flashes(W,user)
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
|
||||
to_chat(user, "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>")
|
||||
new /mob/living/simple_animal/spiderbot(get_turf(loc))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta
|
||||
if(src.flash1 && src.flash2)
|
||||
to_chat(user, "<span class='notice'>You have already inserted the eyes!</span>")
|
||||
return
|
||||
else if(src.flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash2 = W
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash1 = W
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
|
||||
|
||||
/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(sabotaged)
|
||||
to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You short out the safeties.</span>")
|
||||
sabotaged = 1
|
||||
return 1
|
||||
/obj/item/robot_parts
|
||||
name = "robot parts"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
item_state = "buildpipe"
|
||||
icon_state = "blank"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
var/list/part = null // Order of args is important for installing robolimbs.
|
||||
var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics.
|
||||
var/model_info
|
||||
dir = SOUTH
|
||||
|
||||
/obj/item/robot_parts/set_dir()
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/New(var/newloc, var/model)
|
||||
..(newloc)
|
||||
|
||||
/obj/item/robot_parts/l_arm
|
||||
name = "cyborg left arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_arm"
|
||||
part = list(BP_L_ARM, BP_L_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_arm
|
||||
name = "cyborg right arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_arm"
|
||||
part = list(BP_R_ARM, BP_R_HAND)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/l_leg
|
||||
name = "cyborg left leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "l_leg"
|
||||
part = list(BP_L_LEG, BP_L_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/r_leg
|
||||
name = "cyborg leg"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
icon_state = "r_leg"
|
||||
part = list(BP_R_LEG, BP_R_FOOT)
|
||||
model_info = 1
|
||||
|
||||
/obj/item/robot_parts/chest
|
||||
name = "cyborg chest"
|
||||
desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell."
|
||||
icon_state = "chest"
|
||||
part = list(BP_GROIN,BP_TORSO)
|
||||
var/wires = 0.0
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
|
||||
/obj/item/robot_parts/head
|
||||
name = "cyborg head"
|
||||
desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals."
|
||||
icon_state = "head"
|
||||
part = list(BP_HEAD)
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
|
||||
/obj/item/robot_parts/robot_suit
|
||||
name = "endoskeleton"
|
||||
desc = "A complex metal backbone with standard limb sockets and pseudomuscle anchors."
|
||||
icon_state = "robo_suit"
|
||||
var/obj/item/robot_parts/l_arm/l_arm = null
|
||||
var/obj/item/robot_parts/r_arm/r_arm = null
|
||||
var/obj/item/robot_parts/l_leg/l_leg = null
|
||||
var/obj/item/robot_parts/r_leg/r_leg = null
|
||||
var/obj/item/robot_parts/chest/chest = null
|
||||
var/obj/item/robot_parts/head/head = null
|
||||
var/created_name = ""
|
||||
|
||||
/obj/item/robot_parts/robot_suit/New()
|
||||
..()
|
||||
src.updateicon()
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/updateicon()
|
||||
src.overlays.Cut()
|
||||
if(src.l_arm)
|
||||
src.overlays += "l_arm+o"
|
||||
if(src.r_arm)
|
||||
src.overlays += "r_arm+o"
|
||||
if(src.chest)
|
||||
src.overlays += "chest+o"
|
||||
if(src.l_leg)
|
||||
src.overlays += "l_leg+o"
|
||||
if(src.r_leg)
|
||||
src.overlays += "r_leg+o"
|
||||
if(src.head)
|
||||
src.overlays += "head+o"
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/check_completion()
|
||||
if(src.l_arm && src.r_arm)
|
||||
if(src.l_leg && src.r_leg)
|
||||
if(src.chest && src.head)
|
||||
feedback_inc("cyborg_frames_built",1)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
|
||||
var/obj/item/stack/material/M = W
|
||||
if (M.use(1))
|
||||
var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly
|
||||
B.loc = get_turf(src)
|
||||
to_chat(user, "<span class='notice'>You armed the robot frame.</span>")
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.remove_from_mob(src)
|
||||
user.put_in_inactive_hand(B)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>")
|
||||
if(istype(W, /obj/item/stack/material) && W.get_material_name() == "plastic" && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
|
||||
var/obj/item/stack/material/M = W
|
||||
if (M.use(1))
|
||||
var/obj/item/weapon/secbot_assembly/edCLN_assembly/B = new /obj/item/weapon/secbot_assembly/edCLN_assembly
|
||||
B.loc = get_turf(src)
|
||||
to_chat(user, "<span class='notice'>You add a plastic covering to the robot frame.</span>")
|
||||
if (user.get_inactive_hand()==src)
|
||||
user.remove_from_mob(src)
|
||||
user.put_in_inactive_hand(B)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one sheet of plastic to cover the robot frame.</span>")
|
||||
if(istype(W, /obj/item/robot_parts/l_leg))
|
||||
if(src.l_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_leg))
|
||||
if(src.r_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/l_arm))
|
||||
if(src.l_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_arm))
|
||||
if(src.r_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/chest))
|
||||
if(src.chest) return
|
||||
if(W:wires && W:cell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.chest = W
|
||||
src.updateicon()
|
||||
else if(!W:wires)
|
||||
to_chat(user, "<span class='warning'>You need to attach wires to it first!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to attach a cell to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/head))
|
||||
if(src.head) return
|
||||
if(W:flash2 && W:flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.head = W
|
||||
src.updateicon()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to attach a flash to it first!</span>")
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/M = W
|
||||
if(check_completion())
|
||||
if(!istype(loc,/turf))
|
||||
to_chat(user, "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>")
|
||||
return
|
||||
if(!M.brainmob)
|
||||
to_chat(user, "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
if(!M.brainmob.key)
|
||||
var/ghost_can_reenter = 0
|
||||
if(M.brainmob.mind)
|
||||
for(var/mob/observer/dead/G in player_list)
|
||||
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
|
||||
ghost_can_reenter = 1 //May come in use again at another point.
|
||||
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; though it may be able to auto-resuscitate.</span>") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
|
||||
return
|
||||
if(!ghost_can_reenter)
|
||||
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>")
|
||||
return
|
||||
|
||||
if(M.brainmob.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>")
|
||||
return
|
||||
|
||||
if(jobban_isbanned(M.brainmob, "Cyborg"))
|
||||
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
|
||||
if(!O) return
|
||||
|
||||
user.drop_item()
|
||||
|
||||
O.mmi = W
|
||||
O.invisibility = 0
|
||||
O.custom_name = created_name
|
||||
O.updatename("Default")
|
||||
|
||||
M.brainmob.mind.transfer_to(O)
|
||||
|
||||
if(O.mind && O.mind.special_role)
|
||||
O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
||||
|
||||
O.job = "Cyborg"
|
||||
|
||||
for(var/datum/language/L in M.brainmob.languages)
|
||||
O.add_language(L.name)
|
||||
|
||||
O.cell = chest.cell
|
||||
O.cell.loc = O
|
||||
W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
|
||||
|
||||
// Since we "magically" installed a cell, we also have to update the correct component.
|
||||
if(O.cell)
|
||||
var/datum/robot_component/cell_component = O.components["power cell"]
|
||||
cell_component.wrapped = O.cell
|
||||
cell_component.installed = 1
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
callHook("borgify", list(O))
|
||||
O.Namepick()
|
||||
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The MMI must go in after everything else!</span>")
|
||||
|
||||
if (istype(W, /obj/item/weapon/pen))
|
||||
var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN)
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, usr) && src.loc != usr)
|
||||
return
|
||||
|
||||
src.created_name = t
|
||||
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(src.cell)
|
||||
to_chat(user, "<span class='warning'>You have already inserted a cell!</span>")
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.cell = W
|
||||
to_chat(user, "<span class='notice'>You insert the cell!</span>")
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
if(src.wires)
|
||||
to_chat(user, "<span class='warning'>You have already inserted wire!</span>")
|
||||
return
|
||||
else
|
||||
var/obj/item/stack/cable_coil/coil = W
|
||||
coil.use(1)
|
||||
src.wires = 1.0
|
||||
to_chat(user, "<span class='notice'>You insert the wire!</span>")
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
var/current_module = user.get_active_hand()
|
||||
if(current_module == W)
|
||||
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
|
||||
return
|
||||
else
|
||||
add_flashes(W,user)
|
||||
else
|
||||
add_flashes(W,user)
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
|
||||
to_chat(user, "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>")
|
||||
new /mob/living/simple_animal/spiderbot(get_turf(loc))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta
|
||||
if(src.flash1 && src.flash2)
|
||||
to_chat(user, "<span class='notice'>You have already inserted the eyes!</span>")
|
||||
return
|
||||
else if(src.flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash2 = W
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash1 = W
|
||||
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
|
||||
|
||||
|
||||
/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
|
||||
if(sabotaged)
|
||||
to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You short out the safeties.</span>")
|
||||
sabotaged = 1
|
||||
return 1
|
||||
|
||||
@@ -1,338 +1,361 @@
|
||||
/obj/item/stack/medical
|
||||
name = "medical pack"
|
||||
singular_name = "medical pack"
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
amount = 10
|
||||
max_amount = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
var/heal_brute = 0
|
||||
var/heal_burn = 0
|
||||
var/apply_sounds
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (!istype(M))
|
||||
user << "<span class='warning'>\The [src] cannot be applied to [M]!</span>"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
istype(user, /mob/living/silicon)) )
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(!affecting)
|
||||
user << "<span class='warning'>No body part there to work on!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.organ_tag == BP_HEAD)
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.head]!</span>"
|
||||
return 1
|
||||
else
|
||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.wear_suit]!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.robotic == ORGAN_ROBOT)
|
||||
user << "<span class='warning'>This isn't useful at all on a robotic limb.</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.robotic >= ORGAN_LIFELIKE)
|
||||
user << "<span class='warning'>You apply the [src], but it seems to have no effect...</span>"
|
||||
use(1)
|
||||
return 1
|
||||
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>[M] has been applied with [src] by [user].</span>", \
|
||||
"<span class='notice'>You apply \the [src] to [M].</span>" \
|
||||
)
|
||||
use(1)
|
||||
|
||||
M.updatehealth()
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "roll of gauze"
|
||||
singular_name = "gauze length"
|
||||
desc = "Some sterile gauze to wrap around bloody stumps."
|
||||
icon_state = "brutepack"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if(W.bandaged)
|
||||
continue
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
|
||||
if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
//H.add_side_effect("Itch")
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
// W.disinfect() // VOREStation - Tech1 should not disinfect
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/ointment
|
||||
name = "ointment"
|
||||
desc = "Used to treat those nasty burns."
|
||||
gender = PLURAL
|
||||
singular_name = "ointment"
|
||||
icon_state = "ointment"
|
||||
heal_burn = 1
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_salved())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
||||
use(1)
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack
|
||||
name = "advanced trauma kit"
|
||||
singular_name = "advanced trauma kit"
|
||||
desc = "An advanced trauma kit for severe injuries."
|
||||
icon_state = "traumakit"
|
||||
heal_brute = 7 //VOREStation Edit
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if (W.bandaged && W.disinfected)
|
||||
continue
|
||||
//if(used == amount) //VOREStation Edit
|
||||
// break //VOREStation Edit
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
W.disinfect()
|
||||
W.heal_damage(heal_brute)
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used = 1 //VOREStation Edit
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment
|
||||
name = "advanced burn kit"
|
||||
singular_name = "advanced burn kit"
|
||||
desc = "An advanced treatment kit for severe burns."
|
||||
icon_state = "burnkit"
|
||||
heal_burn = 7 //VOREStation Edit
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
apply_sounds = list('sound/effects/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
|
||||
if(affecting.is_salved())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
||||
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
||||
affecting.heal_damage(0,heal_burn)
|
||||
use(1)
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
|
||||
/obj/item/stack/medical/splint
|
||||
name = "medical splints"
|
||||
singular_name = "medical splint"
|
||||
desc = "Modular splints capable of supporting and immobilizing bones in both limbs and appendages."
|
||||
icon_state = "splint"
|
||||
amount = 5
|
||||
max_amount = 5
|
||||
|
||||
var/list/splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) //List of organs you can splint, natch.
|
||||
|
||||
/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
var/limb = affecting.name
|
||||
if(!(affecting.organ_tag in splintable_organs))
|
||||
to_chat(user, "<span class='danger'>You can't use \the [src] to apply a splint there!</span>")
|
||||
return
|
||||
if(affecting.splinted)
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \
|
||||
user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) ))
|
||||
to_chat(user, "<span class='danger'>You can't apply a splint to the arm you're using!</span>")
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
if(do_after(user, 50, M))
|
||||
if(affecting.splinted)
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if(M == user && prob(75))
|
||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/obj/item/stack/medical/splint/S = split(1)
|
||||
if(S)
|
||||
if(affecting.apply_splint(S))
|
||||
S.forceMove(affecting)
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||
if(isrobot(user))
|
||||
var/obj/item/stack/medical/splint/B = src
|
||||
if(B)
|
||||
if(affecting.apply_splint(B))
|
||||
B.forceMove(affecting)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
B.use(1)
|
||||
return
|
||||
user.visible_message("<span class='danger'>\The [user] fails to apply [src].</span>", "<span class='danger'>You fail to apply [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/stack/medical/splint/ghetto
|
||||
name = "makeshift splints"
|
||||
singular_name = "makeshift splint"
|
||||
desc = "For holding your limbs in place with duct tape and scrap metal."
|
||||
icon_state = "tape-splint"
|
||||
amount = 1
|
||||
splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
|
||||
/obj/item/stack/medical
|
||||
name = "medical pack"
|
||||
singular_name = "medical pack"
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
amount = 10
|
||||
max_amount = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
var/heal_brute = 0
|
||||
var/heal_burn = 0
|
||||
var/apply_sounds
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (!istype(M))
|
||||
user << "<span class='warning'>\The [src] cannot be applied to [M]!</span>"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
istype(user, /mob/living/silicon)) )
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(!affecting)
|
||||
user << "<span class='warning'>No body part there to work on!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.organ_tag == BP_HEAD)
|
||||
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.head]!</span>"
|
||||
return 1
|
||||
else
|
||||
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
|
||||
user << "<span class='warning'>You can't apply [src] through [H.wear_suit]!</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.robotic == ORGAN_ROBOT)
|
||||
user << "<span class='warning'>This isn't useful at all on a robotic limb.</span>"
|
||||
return 1
|
||||
|
||||
if(affecting.robotic >= ORGAN_LIFELIKE)
|
||||
user << "<span class='warning'>You apply the [src], but it seems to have no effect...</span>"
|
||||
use(1)
|
||||
return 1
|
||||
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
else
|
||||
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
user.visible_message( \
|
||||
"<span class='notice'>[M] has been applied with [src] by [user].</span>", \
|
||||
"<span class='notice'>You apply \the [src] to [M].</span>" \
|
||||
)
|
||||
use(1)
|
||||
|
||||
M.updatehealth()
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "roll of gauze"
|
||||
singular_name = "gauze length"
|
||||
desc = "Some sterile gauze to wrap around bloody stumps."
|
||||
icon_state = "brutepack"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if(W.bandaged)
|
||||
continue
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
|
||||
if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
//H.add_side_effect("Itch")
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
// W.disinfect() // VOREStation - Tech1 should not disinfect
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/ointment
|
||||
name = "ointment"
|
||||
desc = "Used to treat those nasty burns."
|
||||
gender = PLURAL
|
||||
singular_name = "ointment"
|
||||
icon_state = "ointment"
|
||||
heal_burn = 1
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
apply_sounds = list('sound/effects/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_salved())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
||||
use(1)
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack
|
||||
name = "advanced trauma kit"
|
||||
singular_name = "advanced trauma kit"
|
||||
desc = "An advanced trauma kit for severe injuries."
|
||||
icon_state = "traumakit"
|
||||
heal_brute = 7 //VOREStation Edit
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
apply_sounds = list('sound/effects/rip1.ogg','sound/effects/rip2.ogg','sound/effects/tape.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
for (var/datum/wound/W in affecting.wounds)
|
||||
if (W.internal)
|
||||
continue
|
||||
if (W.bandaged && W.disinfected)
|
||||
continue
|
||||
//if(used == amount) //VOREStation Edit
|
||||
// break //VOREStation Edit
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else if (W.damage_type == BRUISE)
|
||||
user.visible_message("<span class='notice'>\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
W.disinfect()
|
||||
W.heal_damage(heal_brute)
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used = 1 //VOREStation Edit
|
||||
update_icon() // Citadel Change
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment
|
||||
name = "advanced burn kit"
|
||||
singular_name = "advanced burn kit"
|
||||
desc = "An advanced treatment kit for severe burns."
|
||||
icon_state = "burnkit"
|
||||
heal_burn = 7 //VOREStation Edit
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
apply_sounds = list('sound/effects/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
|
||||
if(affecting.is_salved())
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
||||
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
||||
affecting.heal_damage(0,heal_burn)
|
||||
use(1)
|
||||
affecting.salve()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
update_icon() // Citadel Change
|
||||
|
||||
/obj/item/stack/medical/splint
|
||||
name = "medical splints"
|
||||
singular_name = "medical splint"
|
||||
desc = "Modular splints capable of supporting and immobilizing bones in both limbs and appendages."
|
||||
icon_state = "splint"
|
||||
amount = 5
|
||||
max_amount = 5
|
||||
|
||||
var/list/splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) //List of organs you can splint, natch.
|
||||
|
||||
/obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/living/user as mob)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
var/limb = affecting.name
|
||||
if(!(affecting.organ_tag in splintable_organs))
|
||||
to_chat(user, "<span class='danger'>You can't use \the [src] to apply a splint there!</span>")
|
||||
return
|
||||
if(affecting.splinted)
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \
|
||||
user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) ))
|
||||
to_chat(user, "<span class='danger'>You can't apply a splint to the arm you're using!</span>")
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
if(do_after(user, 50, M))
|
||||
if(affecting.splinted)
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if(M == user && prob(75))
|
||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/obj/item/stack/medical/splint/S = split(1)
|
||||
if(S)
|
||||
if(affecting.apply_splint(S))
|
||||
S.forceMove(affecting)
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||
if(isrobot(user))
|
||||
var/obj/item/stack/medical/splint/B = src
|
||||
if(B)
|
||||
if(affecting.apply_splint(B))
|
||||
B.forceMove(affecting)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
B.use(1)
|
||||
return
|
||||
user.visible_message("<span class='danger'>\The [user] fails to apply [src].</span>", "<span class='danger'>You fail to apply [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/stack/medical/splint/ghetto
|
||||
name = "makeshift splints"
|
||||
singular_name = "makeshift splint"
|
||||
desc = "For holding your limbs in place with duct tape and scrap metal."
|
||||
icon_state = "tape-splint"
|
||||
amount = 1
|
||||
splintable_organs = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
|
||||
|
||||
// Begin Citadel Changes - New advanced kit sprites
|
||||
/obj/item/stack/medical/advanced/initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/medical/advanced/update_icon()
|
||||
switch(amount)
|
||||
if(1 to 2)
|
||||
icon_state = initial(icon_state)
|
||||
if(3 to 4)
|
||||
icon_state = "[initial(icon_state)]_4"
|
||||
if(5 to 6)
|
||||
icon_state = "[initial(icon_state)]_6"
|
||||
if(7 to 8)
|
||||
icon_state = "[initial(icon_state)]_8"
|
||||
if(9)
|
||||
icon_state = "[initial(icon_state)]_9"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_10"
|
||||
// End Citadel Changes
|
||||
@@ -15,6 +15,24 @@
|
||||
user.visible_message(span("danger", "\The [user] [T.is] strangling [T.himself] with \the [src]! It looks like [T.he] [T.is] trying to commit suicide."), span("danger", "You start to strangle yourself with \the [src]!"), span("danger", "You hear the sound of someone choking!"))
|
||||
return (OXYLOSS)
|
||||
|
||||
|
||||
/obj/item/weapon/melee/sabre
|
||||
name = "officer's sabre"
|
||||
desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease."
|
||||
icon_state = "sabre"
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
flags = CONDUCT
|
||||
force = 35
|
||||
throwforce = 15
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_COMBAT = 4)
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/melee/sabre/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
visible_message(span("danger", "[user] is slitting [TU.his] stomach open with \the [src.name]! It looks like [TU.hes] trying to commit seppuku."), span("danger", "You slit your stomach open with \the [src.name]!"), span("danger", "You hear the sound of flesh tearing open.")) // gory, but it gets the point across
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/melee/umbrella
|
||||
name = "umbrella"
|
||||
desc = "To keep the rain off you. Use with caution on windy days."
|
||||
@@ -87,4 +105,4 @@
|
||||
new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters.
|
||||
new_voice.real_name = "cursed sword"
|
||||
voice_mobs.Add(new_voice)
|
||||
listening_objects |= src
|
||||
listening_objects |= src
|
||||
|
||||
@@ -433,3 +433,25 @@
|
||||
icon_state = "fannypack_yellow"
|
||||
item_state = "fannypack_yellow"
|
||||
|
||||
/obj/item/weapon/storage/belt/sheath
|
||||
name = "sabre sheath"
|
||||
desc = "An ornate sheath designed to hold an officer's blade."
|
||||
icon_state = "sheath-sabre"
|
||||
storage_slots = 1
|
||||
can_hold = list(
|
||||
/obj/item/weapon/melee/sabre,
|
||||
)
|
||||
starts_with = list(
|
||||
/obj/item/weapon/melee/sabre,
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/sheath/update_icon()
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
if(contents.len)
|
||||
icon_state += "-sabre"
|
||||
item_state += "-sabre"
|
||||
if(loc && isliving(loc))
|
||||
var/mob/living/L = loc
|
||||
L.regenerate_icons()
|
||||
..()
|
||||
|
||||
@@ -172,8 +172,11 @@
|
||||
max_w_class = ITEMSIZE_TINY
|
||||
|
||||
var/label_text = ""
|
||||
var/labeled = 0 // Citadel Change - Used in labeling
|
||||
var/base_name = " "
|
||||
var/base_desc = " "
|
||||
var/base_icon = "pill_canister" // Citadel Change - Used in recoloring
|
||||
var/bottle_color = "orange" // Citadel Change - Used in recoloring
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/New()
|
||||
..()
|
||||
@@ -193,6 +196,8 @@
|
||||
to_chat(user, "<span class='notice'>You set the label to \"[tmp_label]\".</span>")
|
||||
label_text = tmp_label
|
||||
update_name_label()
|
||||
labeled = 1 // Citadel Change - Overlay for labels
|
||||
update_icon() // Citadel Change - Overlay for labels
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -208,62 +213,119 @@
|
||||
name = "[base_name] ([label_text])"
|
||||
desc = "[base_desc] It is labeled \"[label_text]\"."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/verb/choose_color() // BEGIN Citadel Changes - Bottle recoloring
|
||||
set name = "Recolor bottle"
|
||||
set category = "Object"
|
||||
set desc = "Click to choose a color for the pill bottle."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
options["red"] = "red"
|
||||
options["orange"] = "orange"
|
||||
options["yellow"] = "yellow"
|
||||
options["green"] = "green"
|
||||
options["blue"] = "blue"
|
||||
options["purple"] = "purple"
|
||||
options["pink"] = "pink"
|
||||
options["black"] = "black"
|
||||
options["white"] = "white"
|
||||
var/choice = input(M,"Choose a color!","Recolor Bottle") in options
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
bottle_color = "[choice]"
|
||||
to_chat(usr,"<span class='notice'>The bottle is now [choice]. How [pick("pretty","professional","informative","creative","appropriate","bold")]!</span>")
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/update_icon()
|
||||
..()
|
||||
if(labeled == 1)
|
||||
add_overlay(image(icon = 'icons/obj/chemical.dmi', icon_state = "pill_canister_label"))
|
||||
if(bottle_color == "orange")
|
||||
icon_state = "[base_icon]"
|
||||
else
|
||||
icon_state = "[base_icon]_[bottle_color]"
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/initialize()
|
||||
. = ..()
|
||||
update_icon() // END Citadel Changes - Bottle recoloring
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/antitox
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to counter toxins."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "green" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/bicaridine
|
||||
name = "bottle of Bicaridine pills"
|
||||
desc = "Contains pills used to stabilize the severely injured."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "red" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin_plus
|
||||
name = "bottle of Dexalin Plus pills"
|
||||
desc = "Contains pills used to treat extreme cases of oxygen deprivation."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "blue" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dermaline
|
||||
name = "bottle of Dermaline pills"
|
||||
desc = "Contains pills used to treat burn wounds."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to treat toxic substances in the blood."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "green" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/inaprovaline
|
||||
name = "bottle of Inaprovaline pills"
|
||||
desc = "Contains pills used to stabilize patients."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "blue" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/kelotane
|
||||
name = "bottle of kelotane pills"
|
||||
desc = "Contains pills used to treat burns."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/spaceacillin
|
||||
name = "bottle of Spaceacillin pills"
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "white" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/spaceacillin = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/tramadol
|
||||
name = "bottle of Tramadol pills"
|
||||
desc = "Contains pills used to relieve pain."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "purple" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/citalopram
|
||||
name = "bottle of Citalopram pills"
|
||||
desc = "Contains pills used to stabilize a patient's mood."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/citalopram = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/carbon
|
||||
name = "bottle of Carbon pills"
|
||||
desc = "Contains pills used to neutralise chemicals in the stomach."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "black" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/carbon = 7)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/iron
|
||||
name = "bottle of Iron pills"
|
||||
desc = "Contains pills used to aid in blood regeneration."
|
||||
labeled = 1 // Citadel Change - Recoloring - There are a lot of these.
|
||||
bottle_color = "black" // Citadel Change - Recoloring - There are a lot of these.
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 7)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/obj/item/weapon/gun/energy/gun,
|
||||
/obj/item/weapon/melee/telebaton,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/weapon/storage/belt/sheath,
|
||||
/obj/item/weapon/storage/box/ids)
|
||||
|
||||
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
|
||||
req_access = list(access_cent_specops)
|
||||
|
||||
armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 95)
|
||||
armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/tool/crowbar, \
|
||||
/obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/device/multitool, \
|
||||
/obj/item/device/radio, /obj/item/device/analyzer,/obj/item/weapon/storage/briefcase/inflatable, /obj/item/weapon/melee/baton, /obj/item/weapon/gun, \
|
||||
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller)
|
||||
/obj/item/weapon/storage/firstaid, /obj/item/weapon/reagent_containers/hypospray, /obj/item/roller, /obj/item/weapon/storage/backpack)
|
||||
|
||||
/obj/item/weapon/rig/pmc/commander
|
||||
name = "PMC-C hardsuit control module"
|
||||
@@ -47,7 +47,6 @@
|
||||
desc = "A suit worn by private military contractors. This one is setup for engineering. Armoured and space ready."
|
||||
suit_type = "PMC engineer"
|
||||
icon_state = "pmc_engineergrey_rig"
|
||||
armor = list(melee = 60, bullet = 50, laser = 35,energy = 15, bomb = 30, bio = 100, rad = 100)
|
||||
siemens_coefficient = 0
|
||||
|
||||
/obj/item/weapon/rig/pmc/engineer/grey/equipped
|
||||
@@ -99,7 +98,7 @@
|
||||
)
|
||||
|
||||
/obj/item/weapon/rig/pmc/security
|
||||
name = "ERT-S suit control module"
|
||||
name = "PMC-S suit control module"
|
||||
desc = "A suit worn by private military contractors. This one is setup for security. Armoured and space ready."
|
||||
suit_type = "PMC security"
|
||||
icon_state = "pmc_securitygrey_rig"
|
||||
|
||||
@@ -1,200 +1,204 @@
|
||||
/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/material/proc/generate_recipes()
|
||||
recipes = list()
|
||||
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(hardness>50)
|
||||
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/material/steel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1)
|
||||
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2)
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2)
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("pill bottle", /obj/item/weapon/storage/pill_bottle, 1)
|
||||
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1)
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1)
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4)
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1)
|
||||
recipes += new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10)
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
|
||||
|
||||
/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]")
|
||||
|
||||
/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box)
|
||||
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty)
|
||||
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box)
|
||||
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes)
|
||||
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs)
|
||||
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps)
|
||||
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3)
|
||||
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg)
|
||||
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox)
|
||||
recipes += new/datum/stack_recipe_list("folders",list( \
|
||||
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue), \
|
||||
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder), \
|
||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red), \
|
||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
||||
))
|
||||
|
||||
/material/snow/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
|
||||
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10)
|
||||
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15)
|
||||
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10)
|
||||
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20)
|
||||
|
||||
/material/snowbrick/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/material/wood/sif/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20)
|
||||
recipes -= new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||
recipes -= new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
/material/proc/get_recipes()
|
||||
if(!recipes)
|
||||
generate_recipes()
|
||||
return recipes
|
||||
|
||||
/material/proc/generate_recipes()
|
||||
recipes = list()
|
||||
|
||||
// If is_brittle() returns true, these are only good for a single strike.
|
||||
recipes += new/datum/stack_recipe("[display_name] baseball bat", /obj/item/weapon/material/twohanded/baseballbat, 10, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] spoon", /obj/item/weapon/material/kitchen/utensil/spoon/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] armor plate", /obj/item/weapon/material/armor_plating, 1, time = 20, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] grave marker", /obj/item/weapon/material/gravemarker, 5, time = 50, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(integrity>=50)
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
if(hardness>50)
|
||||
recipes += new/datum/stack_recipe("[display_name] fork", /obj/item/weapon/material/kitchen/utensil/fork/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] knife", /obj/item/weapon/material/knife/plastic, 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] blade", /obj/item/weapon/material/butterflyblade, 6, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/material/steel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe_list("office chairs",list( \
|
||||
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
|
||||
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe_list("sofas", list( \
|
||||
new/datum/stack_recipe("sofa middle", /obj/structure/bed/chair/sofa, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa left", /obj/structure/bed/chair/sofa/left, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa right", /obj/structure/bed/chair/sofa/right, 1, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("sofa corner", /obj/structure/bed/chair/sofa/corner, 1, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("shelving", list( \
|
||||
new/datum/stack_recipe("dark shelving", /obj/structure/table/rack/shelf/steel, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("light shelving", /obj/structure/table/rack/shelf, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1)
|
||||
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2)
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2)
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/material/plasteel/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
/material/plastic/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("pill bottle", /obj/item/weapon/storage/pill_bottle, 1)
|
||||
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1)
|
||||
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1)
|
||||
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1)
|
||||
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4)
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1)
|
||||
recipes += new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10)
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
|
||||
|
||||
/material/wood/log/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]")
|
||||
|
||||
/material/cardboard/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box)
|
||||
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty)
|
||||
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box)
|
||||
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes)
|
||||
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs)
|
||||
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps)
|
||||
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3)
|
||||
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg)
|
||||
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox)
|
||||
recipes += new/datum/stack_recipe_list("folders",list( \
|
||||
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue), \
|
||||
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder), \
|
||||
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red), \
|
||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
||||
))
|
||||
|
||||
/material/snow/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
|
||||
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10)
|
||||
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15)
|
||||
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10)
|
||||
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20)
|
||||
|
||||
/material/snowbrick/generate_recipes()
|
||||
recipes = list()
|
||||
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/structure/barricade, 5, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] stool", /obj/item/weapon/stool, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] chair", /obj/structure/bed/chair, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
|
||||
|
||||
/material/wood/sif/generate_recipes()
|
||||
..()
|
||||
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/wood/sif, 1, 4, 20)
|
||||
recipes -= new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
|
||||
recipes -= new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
@@ -92,5 +92,5 @@
|
||||
/datum/language/seromi
|
||||
flags = 0
|
||||
/datum/language/gutter
|
||||
flags = WHITELISTED
|
||||
flags = 0
|
||||
machine_understands = FALSE
|
||||
|
||||
@@ -305,6 +305,9 @@
|
||||
if (sane)
|
||||
msg = sanitize(msg)
|
||||
|
||||
if((length(memory) + length(msg)) > MAX_MESSAGE_LEN)
|
||||
return
|
||||
|
||||
if (length(memory) == 0)
|
||||
memory += msg
|
||||
else
|
||||
|
||||
@@ -105,11 +105,16 @@
|
||||
|
||||
activate()
|
||||
if((. = ..()))
|
||||
to_chat(nif.human,"<span class='danger'>You are compelled to follow these rules: </span>\n<span class='notify'>[laws]</span>")
|
||||
to_chat(nif.human,"<span class='danger'>You feel a strong compulsion towards these directives: </span><br><span class='notify'>[laws]</span>\
|
||||
<br><span class='danger'>While the disk has a considerable hold on your mind, you feel like you would be able to resist the control if you were pushed to do something you would consider utterly unacceptable.\
|
||||
<br>\[OOC NOTE: Compliance laws are only a scene tool, and not something that is effective in actual gameplay, hence the above. For example, if you are compelled to do something that would affect the round or other players (kill a crewmember, steal an item, give the disker elevated access), you should not do so.\]</span>")
|
||||
|
||||
install()
|
||||
if((. = ..()))
|
||||
to_chat(nif.human,"<span class='danger'>You feel suddenly compelled to follow these rules: </span>\n<span class='notify'>[laws]</span>")
|
||||
log_game("[nif.human? nif.human : "ERROR: NO HUMAN ON NIF"] was compliance disked with [laws]")
|
||||
to_chat(nif.human,"<span class='danger'>You feel a strong compulsion towards these directives: </span><br><span class='notify'>[laws]</span>\
|
||||
<br><span class='danger'>While the disk has a considerable hold on your mind, you feel like you would be able to resist the control if you were pushed to do something you would consider utterly unacceptable.\
|
||||
<br>\[OOC NOTE: Compliance laws are only a scene tool, and not something that is effective in actual gameplay, hence the above. For example, if you are compelled to do something that would affect the round or other players (kill a crewmember, steal an item, give the disker elevated access), you should not do so.\]</span>")
|
||||
|
||||
uninstall()
|
||||
nif.notify("ERROR! Unable to comply!",TRUE)
|
||||
|
||||
@@ -211,4 +211,14 @@ END OF CITADEL CHANGES */
|
||||
parts = list(BP_HEAD)
|
||||
|
||||
/obj/item/weapon/disk/limb/posicase
|
||||
company = "cortexCases - Posi"
|
||||
company = "cortexCases - Posi"
|
||||
|
||||
/datum/robolimb/antares
|
||||
company = "Antares Robotics"
|
||||
desc = "Mustard-yellow industrial limb. Heavyset and thick."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/antares/antares_main.dmi'
|
||||
unavailable_to_build = 1
|
||||
monitor_styles = standard_monitor_styles
|
||||
|
||||
/obj/item/weapon/disk/limb/antares
|
||||
company = "Antares Robotics"
|
||||
|
||||
@@ -709,7 +709,7 @@
|
||||
// timed process
|
||||
// use power
|
||||
|
||||
#define LIGHTING_POWER_FACTOR 20 //20W per unit luminosity
|
||||
#define LIGHTING_POWER_FACTOR 5 //5W per unit luminosity - because 20W per tile-range illuminated??? Seriously??
|
||||
|
||||
|
||||
/obj/machinery/light/process()
|
||||
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 192 KiB |
BIN
icons/mob/human_races/cyberlimbs/antares/antares_main.dmi
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 163 KiB After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
@@ -154,7 +154,7 @@
|
||||
Z_LEVEL_SPACE_MID,
|
||||
Z_LEVEL_SPACE_HIGH)
|
||||
else
|
||||
return ..()
|
||||
return list(srcz) //may prevent runtimes, but more importantly gives gps units a shortwave-esque function
|
||||
|
||||
// For making the 6-in-1 holomap, we calculate some offsets
|
||||
#define TETHER_MAP_SIZE 140 // Width and height of compiled in tether z levels.
|
||||
|
||||