mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-31 00:49:06 +01:00
Remaps the machinist workshop to fulfil a few criteria missing from https://github.com/Aurorastation/Aurora.3/pull/22718. Particularly aims to make the workshop more functional for IPC medical gameplay. - The surgical theatre has been expanded so two machinists can more practically work in the same space at the same time. In the existing design, this portion of the workshop is far too claustrophobic. It also has a desk. - The exosuit chargers no longer obstruct access from the garage door. - Resolved a lot of awkward uses of decals and platforms, which should also make for more useable space. - Cleaned up the wiring - both rooms are now wired to the civilian subgrid. Previously, the main workshop area was hooked via a very awkward line to the operations subgrid, while the theatre was wired to civilian. - Shifted a lot of the clutter into the robotics vendor, such as the empty first-aid kits for medbots. - Shifted materials crates + the crate shelf to a central position, to make them easier to track. Things of note for maintainers: - It's never ideal to remap something very soon after the original implementation, but having given this remap a full month, I think it's had a fair chance. Having played machinist in it, the layout is very tough to work in. It's a very cluttered environment, which becomes much harder to look at once there's a disassembled mech cluttering the centre with a dozen or so objects. This aims to be more intuitive to play in and less overwhelming for players. - The surgical theatre contains one additional IV drip, one extra O- bag, and one organ cooler for borgings, and there are now two roller beds accessible by the front desk. I'd rather have a more unique solution for this problem long-term, but in the short-term it very much sucks to have to ask to borrow a roller from medical just so you can move a damaged industrial, given you can no longer pick that industrial up unless you're playing a huge species. - Otherwise, the workshop has the same resources as before and will be able to make the same things. (screenshot taken after testing, and prior to further changes) <img width="1081" height="1080" alt="image" src="https://github.com/user-attachments/assets/a8eef0e3-630b-463d-b3c3-22769001b513" /> <img width="480" height="448" alt="image" src="https://github.com/user-attachments/assets/535dc851-7bab-48f7-a916-a5a1f12bf650" />
359 lines
12 KiB
Plaintext
359 lines
12 KiB
Plaintext
/* Surgery Tools
|
|
* Contains:
|
|
* * Retractor
|
|
* * Hemostat
|
|
* * Cautery
|
|
* * Surgical Drill
|
|
* * Scalpel
|
|
* * Circular Saw
|
|
* * Tray
|
|
*/
|
|
/obj/item/surgery
|
|
name = "surgery tool parent item"
|
|
desc = DESC_PARENT
|
|
icon = 'icons/obj/surgery.dmi'
|
|
contained_sprite = TRUE
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
drop_sound = 'sound/items/drop/weldingtool.ogg'
|
|
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
|
|
recyclable = TRUE
|
|
|
|
/obj/item/surgery/Initialize(mapload, ...)
|
|
. = ..()
|
|
item_flags |= ITEM_FLAG_SURGERY
|
|
|
|
/*
|
|
* Retractor
|
|
*/
|
|
/obj/item/surgery/retractor
|
|
name = "retractor"
|
|
desc = "A pair of retractor forceps. Allows careful opening of incisions to reach inside someone."
|
|
icon_state = "retractor"
|
|
item_state = "retractor"
|
|
surgerysound = 'sound/items/surgery/retractor.ogg'
|
|
matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000)
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
tool_behaviour = TOOL_RETRACTOR
|
|
|
|
/*
|
|
* Hemostat
|
|
*/
|
|
/obj/item/surgery/hemostat
|
|
name = "hemostat"
|
|
desc = "A pair of hemostatic forceps, able to clamp blood vessels shut to stop bleeding during surgery. Its narrow tip also lets it double as a tool for removing things from surgical sites."
|
|
icon_state = "hemostat"
|
|
item_state = "hemostat"
|
|
surgerysound = 'sound/items/surgery/hemostat.ogg'
|
|
matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500)
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
attack_verb = list("attacked", "pinched")
|
|
tool_behaviour = TOOL_HEMOSTAT
|
|
|
|
/*
|
|
* Cautery
|
|
*/
|
|
/obj/item/surgery/cautery
|
|
name = "cautery"
|
|
desc = "An electrocautery pen. Uses electrical currents to burn tissue closed, useful for quickly sealing wounds or incisions."
|
|
icon_state = "cautery"
|
|
item_state = "cautery"
|
|
surgerysound = 'sound/items/surgery/cautery.ogg'
|
|
matter = list(MATERIAL_STEEL = 5000, MATERIAL_GLASS = 2500)
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
attack_verb = list("burnt")
|
|
tool_behaviour = TOOL_CAUTERY
|
|
|
|
/*
|
|
* Surgical Drill
|
|
*/
|
|
/obj/item/surgery/surgicaldrill
|
|
name = "surgical drill"
|
|
desc = "A drill specialized for surgical use. Capable of creating surgical cavities and safely breaching through Vaurcae carapace for initial incisions."
|
|
icon_state = "drill"
|
|
item_state = "drill"
|
|
surgerysound = 'sound/items/surgery/surgicaldrill.ogg'
|
|
hitsound = SFX_DRILL_HIT
|
|
matter = list(MATERIAL_STEEL = 15000, MATERIAL_GLASS = 10000)
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
force = 22
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
attack_verb = list("drilled")
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
tool_behaviour = TOOL_DRILL
|
|
|
|
/*
|
|
* Scalpel
|
|
*/
|
|
/obj/item/surgery/scalpel
|
|
name = "scalpel"
|
|
desc = "A surgical-grade scalpel with an incredibly sharp blade that keeps its edge. Used in a variety of surgical situations from incisions, to transplants, to debridements."
|
|
icon_state = "scalpel"
|
|
item_state = "scalpel"
|
|
surgerysound = 'sound/items/surgery/scalpel.ogg'
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
force = 15
|
|
sharp = 1
|
|
edge = TRUE
|
|
w_class = WEIGHT_CLASS_TINY
|
|
slot_flags = SLOT_EARS
|
|
throwforce = 5
|
|
throw_speed = 3
|
|
throw_range = 5
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
matter = list(MATERIAL_STEEL = 10000, MATERIAL_GLASS = 5000)
|
|
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
|
drop_sound = 'sound/items/drop/knife.ogg'
|
|
pickup_sound = 'sound/items/pickup/knife.ogg'
|
|
tool_behaviour = TOOL_SCALPEL
|
|
|
|
/*
|
|
* Researchable Scalpels
|
|
*/
|
|
|
|
/obj/item/surgery/scalpel/laser
|
|
name = "laser scalpel"
|
|
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field."
|
|
icon_state = "scalpel_laser"
|
|
surgerysound = 'sound/items/surgery/cautery.ogg'
|
|
matter = list(MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500)
|
|
damtype = "fire"
|
|
force = 18
|
|
tool_quality = STANDARD_TOOL_LEVEL + 1
|
|
|
|
/obj/item/surgery/scalpel/manager
|
|
name = "incision management system"
|
|
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
|
|
icon_state = "scalpel_manager"
|
|
surgerysound = 'sound/items/surgery/cautery.ogg'
|
|
matter = list (MATERIAL_STEEL = 12500, MATERIAL_GLASS = 7500, MATERIAL_SILVER = 1500, MATERIAL_GOLD = 1500, MATERIAL_DIAMOND = 750)
|
|
force = 8
|
|
tool_quality = STANDARD_TOOL_LEVEL + 2
|
|
|
|
/*
|
|
* Circular Saw
|
|
*/
|
|
/obj/item/surgery/circular_saw
|
|
name = "surgical saw"
|
|
desc = "A reciprocating electric bonesaw. While designed to cut through bone, it's powerful enough to cut limbs and even hardsuits if necessary. Watch your fingers."
|
|
icon_state = "saw"
|
|
item_state = "saw"
|
|
surgerysound = 'sound/items/surgery/circularsaw.ogg'
|
|
hitsound = 'sound/weapons/saw/circsawhit.ogg'
|
|
obj_flags = OBJ_FLAG_CONDUCTABLE
|
|
force = 22
|
|
w_class = WEIGHT_CLASS_NORMAL
|
|
throwforce = 9
|
|
throw_speed = 3
|
|
throw_range = 5
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
|
matter = list(MATERIAL_STEEL = 20000, MATERIAL_GLASS = 10000)
|
|
attack_verb = list("attacked", "slashed", "sawed", "cut")
|
|
sharp = TRUE
|
|
edge = TRUE
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
tool_behaviour = TOOL_SAW
|
|
|
|
// Miscellanous
|
|
/obj/item/surgery/bone_gel
|
|
name = "bone gel"
|
|
desc = "A bottle-and-nozzle applicator containing a specialized gel. When applied to bone tissue, it can reinforce and repair breakages and act as a glue to keep bones in place while they heal."
|
|
icon_state = "bone-gel"
|
|
item_state = "bone-gel"
|
|
surgerysound = 'sound/items/surgery/bonegel.ogg'
|
|
force = 2
|
|
throwforce = 5
|
|
drop_sound = 'sound/items/drop/bottle.ogg'
|
|
pickup_sound = 'sound/items/pickup/bottle.ogg'
|
|
|
|
/obj/item/surgery/fix_o_vein
|
|
name = "vascular recoupler"
|
|
desc = "An advanced automatic surgical instrument that operates with extreme finesse. It can quickly and safely repair and recouple ruptured blood vessels and ligaments using highly elaborate, biodegradable microsutures. It can also be used for transplantations to attach organs to the body."
|
|
icon_state = "fixovein"
|
|
item_state = "fixovein"
|
|
surgerysound = 'sound/items/surgery/fixovein.ogg'
|
|
force = 2
|
|
throwforce = 5
|
|
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3)
|
|
var/usage_amount = 10
|
|
drop_sound = 'sound/items/drop/accessory.ogg'
|
|
pickup_sound = 'sound/items/pickup/accessory.ogg'
|
|
|
|
/obj/item/surgery/bonesetter
|
|
name = "bone setter"
|
|
desc = "A pair of forceps with a screw. It's designed to manipulate bones and hold them together, and is best paired with a bottle of bone gel for mending fractures."
|
|
icon_state = "bonesetter"
|
|
item_state = "bonesetter"
|
|
surgerysound = 'sound/items/surgery/bonesetter.ogg'
|
|
force = 18
|
|
throwforce = 9
|
|
throw_speed = 3
|
|
throw_range = 5
|
|
attack_verb = list("attacked", "hit", "bludgeoned")
|
|
tool_behaviour = TOOL_BONESET
|
|
|
|
/obj/item/storage/box/fancy/tray
|
|
name = "surgery tray"
|
|
desc = "A tray of surgical tools."
|
|
icon = 'icons/obj/surgery.dmi'
|
|
icon_state = "surgerytray"
|
|
use_sound = null
|
|
drop_sound = 'sound/items/drop/axe.ogg'
|
|
pickup_sound = 'sound/items/pickup/axe.ogg'
|
|
force = 2
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
storage_slots = 10
|
|
attack_verb = list("slammed")
|
|
icon_type = "surgery tool"
|
|
storage_type = "tray"
|
|
can_hold = list(
|
|
/obj/item/surgery/bonesetter,
|
|
/obj/item/surgery/cautery,
|
|
/obj/item/surgery/circular_saw,
|
|
/obj/item/surgery/hemostat,
|
|
/obj/item/surgery/retractor,
|
|
/obj/item/surgery/scalpel,
|
|
/obj/item/surgery/surgicaldrill,
|
|
/obj/item/surgery/bone_gel,
|
|
/obj/item/surgery/fix_o_vein,
|
|
/obj/item/stack/medical/advanced/bruise_pack,
|
|
/obj/item/stack/nanopaste
|
|
)
|
|
|
|
starts_with = list(
|
|
/obj/item/surgery/bonesetter = 1,
|
|
/obj/item/surgery/cautery = 1,
|
|
/obj/item/surgery/circular_saw = 1,
|
|
/obj/item/surgery/hemostat = 1,
|
|
/obj/item/surgery/retractor = 1,
|
|
/obj/item/surgery/scalpel = 1,
|
|
/obj/item/surgery/surgicaldrill = 1,
|
|
/obj/item/surgery/bone_gel = 1,
|
|
/obj/item/surgery/fix_o_vein = 1,
|
|
/obj/item/stack/medical/advanced/bruise_pack = 1
|
|
)
|
|
|
|
/obj/item/storage/box/fancy/tray/update_icon()
|
|
ClearOverlays()
|
|
|
|
var/list/types_and_overlays = list(
|
|
/obj/item/surgery/bonesetter = "tray_bonesetter",
|
|
/obj/item/surgery/cautery = "tray_cautery",
|
|
/obj/item/surgery/circular_saw = "tray_saw",
|
|
/obj/item/surgery/hemostat = "tray_hemostat",
|
|
/obj/item/surgery/retractor = "tray_retractor",
|
|
/obj/item/surgery/scalpel = "tray_scalpel",
|
|
/obj/item/surgery/scalpel/laser = "tray_scalpel_laser",
|
|
/obj/item/surgery/scalpel/manager = "tray_scalpel_manager",
|
|
/obj/item/surgery/surgicaldrill = "tray_drill",
|
|
/obj/item/surgery/bone_gel = "tray_bone-gel",
|
|
/obj/item/surgery/fix_o_vein = "tray_fixovein",
|
|
/obj/item/stack/medical/advanced/bruise_pack = "tray_bruise_pack",
|
|
/obj/item/autopsy_scanner = "tray_autopsy_scanner",
|
|
/obj/item/mass_spectrometer = "tray_mass_spectrometer",
|
|
/obj/item/reagent_containers/glass/beaker/vial = "tray_vial",
|
|
/obj/item/reagent_containers/syringe = "tray_syringe"
|
|
)
|
|
for (var/obj/item/W in contents)
|
|
if (types_and_overlays[W.type])
|
|
AddOverlays(types_and_overlays[W.type])
|
|
types_and_overlays -= W.type
|
|
|
|
/obj/item/storage/box/fancy/tray/fill()
|
|
. = ..()
|
|
update_icon()
|
|
|
|
/obj/item/storage/box/fancy/tray/attackby(obj/item/attacking_item, mob/user)
|
|
..()
|
|
update_icon()
|
|
|
|
/obj/item/storage/box/fancy/tray/attack_hand(mob/user as mob)
|
|
if(ishuman(user))
|
|
src.open(user)
|
|
|
|
/obj/item/storage/box/fancy/tray/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params)
|
|
if((over && (!use_check(over))) && (over.contents.Find(src) || in_range(src, over)))
|
|
var/mob/dropped_onto_mob = over
|
|
if(ishuman(dropped_onto_mob) && !dropped_onto_mob.get_active_hand())
|
|
var/mob/living/carbon/human/H = user
|
|
var/obj/item/organ/external/temp = H.organs_by_name[H.hand?BP_L_HAND:BP_R_HAND]
|
|
|
|
if(temp && !temp.is_usable())
|
|
to_chat(H, SPAN_NOTICE("You try to move your [temp.name], but cannot!"))
|
|
return
|
|
|
|
to_chat(H, SPAN_NOTICE("You pick up the [src]."))
|
|
pixel_x = 0
|
|
pixel_y = 0
|
|
forceMove(get_turf(H))
|
|
H.put_in_hands(src)
|
|
|
|
return
|
|
|
|
/obj/item/storage/box/fancy/tray/attack(mob/living/target_mob, mob/living/user, target_zone)
|
|
if(..() && contents.len)
|
|
spill(3, get_turf(target_mob))
|
|
playsound(target_mob, SFX_TRAY_HIT, 50, 1) //sound playin' again
|
|
user.visible_message(SPAN_DANGER("[user] smashes \the [src] into [target_mob], causing it to spill its contents across the area!"))
|
|
|
|
/obj/item/storage/box/fancy/tray/throw_impact(atom/hit_atom)
|
|
..()
|
|
spill(3, src.loc)
|
|
|
|
/obj/item/storage/box/fancy/tray/autopsy
|
|
name = "autopsy tray"
|
|
starts_with = list(
|
|
/obj/item/surgery/circular_saw = 1,
|
|
/obj/item/surgery/hemostat = 1,
|
|
/obj/item/surgery/retractor = 1,
|
|
/obj/item/surgery/scalpel = 1,
|
|
/obj/item/surgery/surgicaldrill = 1,
|
|
/obj/item/surgery/cautery = 1,
|
|
/obj/item/autopsy_scanner = 1,
|
|
/obj/item/mass_spectrometer = 1,
|
|
/obj/item/reagent_containers/glass/beaker/vial = 1,
|
|
/obj/item/reagent_containers/syringe = 1
|
|
)
|
|
|
|
can_hold = list(
|
|
/obj/item/surgery/circular_saw,
|
|
/obj/item/surgery/hemostat,
|
|
/obj/item/surgery/retractor,
|
|
/obj/item/surgery/scalpel,
|
|
/obj/item/surgery/surgicaldrill,
|
|
/obj/item/surgery/cautery,
|
|
/obj/item/autopsy_scanner,
|
|
/obj/item/mass_spectrometer,
|
|
/obj/item/reagent_containers/glass/beaker/vial,
|
|
/obj/item/reagent_containers/syringe
|
|
)
|
|
|
|
/obj/item/storage/box/fancy/tray/machinist
|
|
name = "machinist operation tray"
|
|
desc = "A tray of various tools for use by machinists in repairing robots."
|
|
// So additional tools can be added.
|
|
max_storage_space = 23
|
|
can_hold = list(
|
|
/obj/item/surgery/cautery,
|
|
/obj/item/surgery/circular_saw,
|
|
/obj/item/surgery/hemostat,
|
|
/obj/item/surgery/retractor,
|
|
/obj/item/surgery/scalpel,
|
|
/obj/item/surgery/bone_gel,
|
|
/obj/item/stack/nanopaste
|
|
)
|
|
|
|
starts_with = list(
|
|
/obj/item/surgery/cautery = 1,
|
|
/obj/item/surgery/circular_saw = 1,
|
|
/obj/item/surgery/hemostat = 1,
|
|
/obj/item/surgery/retractor = 1,
|
|
/obj/item/surgery/scalpel = 1,
|
|
/obj/item/surgery/bone_gel = 1
|
|
)
|