Meet the Smith - New Supply Role (#28273)

* Smith role, access, access helpers, spawn point, comms, and IDs

* Area defines

* Hammertime

* Cyberiad Smith's office

* Forgot some atmos stuff

* Autolathable Hammers

* Formatting

* Toolbelts can hold hammers

* Initial work on smith machines

* Farragus Smith Office

* Placeholder sprites, mapping

* Smart hopper points and console messages

* More work on smithing machines

* Fixed mapping, added qualities, added smithed items, fixed sizing, fixed access

* Smith components, new materials

* New ores, material datums, furnace, power hammer, kinetic assembler, hammer act, item creation

* Missed one

* Grrr map conflicts begone

* Dirt begone

* Casts and smelting

* Linters

* Attack chain linters!

* Better grip to throw people into your industrial machines

* Placeholder spots in the DMIs

* UpdatePaths - Space ruins now spawn new space ores in their rocks

* Small changes - removed excess tgui code from hopper

* Fixed a button on emerald

* Attaching inserts and lenses. Tool bits are pain.

* Tool bit initial implementation

* Merge conflict resolution

* Attack chain grrr

* Fixed a pair of minor mapping issues

* Tool bit implementation, efficiency, failure rate

* Hot things burn hands

* Points fix on hopper

* New mining rocks for space exploration

* Areas on asteroids

* Machinery icons 1

Adds basic icons for the new machinery

* Vendor iconstate update

* Crucible touchups

* Hammer touchups

* Crucible Input Animation

Adds an animation when you deposit ores

* Added scanning the crucible with multitool to get mineral count

* clothing sprites part 1

* locker sprite

* job icons

* garment bag

* Smith locker mapping

* Insert and Bit removal fix

* Job menu alignment fix, Allowed_items and small spriting path fixes

* Adds new asteroid ruins to config

* Ore Sprites

* Hammer Sprite

* Item Sprites 1

* Sheets, Wall Ores and Trim

* Sheet iconstate names

* species uniforms

* Tabs

Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Lens spelling fix

* Signalizes attaching and detaching modifications, fixes inserting items into smith machines, fixes cast bugs

* Fixed type lists

* Smithing machine bug fixes.

* Fixed adding modifications to items

* Crucible Lava Idle

Adds an idle animation for the crucible, but it needs overlay code to work.

* Fixed eguns

* Magma Crucible overlays and animations

* Machine broken/Off states

Adds broken, wires exposed (and on/off where appropriate) states to machines.

* Castivend recolor and Hot Items

* Overlays for all machines, new sprites for hot items, new checks, fixes

* Woe, farragus merge conflict

* update_appearance linters

* I have fat fingers.

* Forgot one

* transfer_item_to and qdel null check

* Usr to User

* Modsuits should not have inserts.

* Adds casting lip overlay

* Balance pass on movement debuffs and buffs

* Material movespeed changes

* Config Adjustments - USED FOR TESTMERGING. REVERT BEFORE FULL MERGE

* Math fixes for lenses and bits.

* Mobility suit no longer speeds you up, but negates suit-based slowdown like an oil slick potion. Fixed movement mods in material datums

* Bad var. Bad.

* Various fixes to bugs revealed in initial TM

* TYPO

* Lavaland base turf fix

* Paths in examine fix

* Adds an intercom to the workshop.

* Stamina-hybrid damage oversight fix for det revolver, uion, etc.

* Currently Operating Message fix

* Allows glass to show different turfs beneath. Adds plasmaglass section to workshop.

* Armor and upgrade fixes

* RCD tool bit equip fix

* Adds smith access to a few lists in access.dm that were missed in an oversight

* Indent fixes

* Fixes vending machine, allows tool bit use on mining equipment

* CI, you make me mad sometimes

* Removed duplicate code

* Name fix for CI again

* ORM now can handle space ores

* Adds space ores to Vetus drop and to trader inventories

* Fixes runtime with open hand attacking a lava furnace with nothing in it

* Adds crewvend kit to Castivend

* Fixes not being able to see new ores

* Adds drill and RCS to smith locker

* Map changes. Added cargo pad. Expanded catwalk. Moved vendors. Added recharger.

* Plant fixes

* Fixes doubled-up catwalk

* Emerald cargo windoor fix, small lavaland adjustment

* Small oversight for overlay fix

* Missing lightswitches

* Fixed stock parts mismatch in casting basin recipe

* Better support for power tools, grrr attackchain

* Better attack chain handling. Better handling for bit insertion

* Fixes handling of inserts with storage suits (like labcoats)

* sprites for bomber + plasmeme outfit

* Adds missing adjacency checks

* Buffs speed boost from upgrade - max upgrade reduces cycle to 2 seconds.

* Fixed floating lights, brightened the explorer's new room, expanded smith workshop slightly.

* Small hallway adjustment

* Illuminates metastation smith office

* Removes excessive decimals in magma crucible scan output

* Berserker should not have inserts.

* Buffs bit durability significantly, nerfs amplifier lens and densifier lense slightly

* Adds smith bomber jacket to loadout panel

* Adds random spawners for smithed items, adds random low-quality items to maints loot

* Adds traitor version of bulldog shotgun

* Revert "Adds traitor version of bulldog shotgun"

This reverts commit 1d39c59f07.

* Added check to assembler, moved desc changes to examine()

* plasmaman suit fix

* Fixed hot check when removing items from hammer and furnace

* Remaps lavaland workshop, fixed deltastation light switch

* Improper's the smith office name

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Compacts extra ore drops from Vetus

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* better looping

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Better loop

Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>

* Multitools don't need tool bits.

* Better variable names, fixed missing parenthesis

* Recursive hammering, removed attack animations when inserting items or using multitool on smithing machines

* window

* Update deltastation.dmm

* Update deltastation.dmm

* Update deltastation.dmm

* Fixes small oversights

* Minor lavaland remap

* Reverts TM-required changes in preparation for full merge

* Begone, stray font!

* Damn you cable CI

---------

Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Co-authored-by: ExusA <67055922+ExusA@users.noreply.github.com>
Co-authored-by: Christasmurf <25437893+Christasmurf@users.noreply.github.com>
Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: Fordoxia <143041327+Fordoxia@users.noreply.github.com>
Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
This commit is contained in:
PollardTheDragon
2025-03-15 17:35:21 -04:00
committed by GitHub
parent f7bb62d6f8
commit cd7cb01a1f
164 changed files with 14012 additions and 5038 deletions
+16 -2
View File
@@ -1176,6 +1176,20 @@
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
if(JOB_SMITH)
clothes_s = new /icon('icons/mob/clothing/under/cargo.dmi', "smith_s")
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "smith"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "smithing"), ICON_OVERLAY)
has_gloves = TRUE
if(prob(1))
clothes_s.Blend(new /icon('icons/mob/clothing/head/softcap.dmi', "smithsoft"), ICON_OVERLAY)
switch(backbag)
if(2)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY)
if(3)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-norm"), ICON_OVERLAY)
if(4)
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
if(JOB_MINER)
clothes_s = new /icon('icons/mob/clothing/under/cargo.dmi', "explorer_s")
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "explorer"), ICON_UNDERLAY)
@@ -2051,7 +2065,7 @@
return(job_support_high || job_support_med || job_support_low || job_medsci_high || job_medsci_med || job_medsci_low || job_engsec_high || job_engsec_med || job_engsec_low)
/datum/character_save/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 400, height = 700)
/datum/character_save/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Head of Security", "Quartermaster"), widthPerColumn = 400, height = 700)
if(!SSjobs)
return
@@ -2192,7 +2206,7 @@
html += "<font color=[prefLevelColor]>[prefLevelLabel]</font></a>"
html += "</td></tr>"
index += 1
for(var/i in 1 to limit - index) // Finish the column so it is even
html += "<tr bgcolor='[lastJob ? lastJob.selection_color : "#ffffff"]'><td width='60%' align='right'>&nbsp</td><td>&nbsp</td></tr>"
@@ -111,6 +111,11 @@
path = /obj/item/clothing/suit/jacket/bomber/expedition
allowed_roles = list("Quartermaster", "Explorer")
/datum/gear/suit/bomber/job/smith
display_name = "Bomber jacket, smith"
path = /obj/item/clothing/suit/jacket/bomber/smith
allowed_roles = list("Quartermaster", "Smith")
/datum/gear/suit/bomber/job/engi
display_name = "Bomber jacket, engineering"
path = /obj/item/clothing/suit/jacket/bomber/engi
+53
View File
@@ -768,11 +768,17 @@
var/max_suit_w = WEIGHT_CLASS_BULKY
///How long to break out of the suits
var/breakouttime
/// How many inserts can you put into the suit
var/insert_max = 1
/// Currently applied inserts
var/list/inserts = list()
/obj/item/clothing/suit/Initialize(mapload)
. = ..()
setup_shielding()
RegisterSignal(src, COMSIG_INSERT_ATTACH, PROC_REF(attach_insert))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(detach_insert))
/**
* Wrapper proc to apply shielding through AddComponent().
@@ -783,6 +789,12 @@
/obj/item/clothing/suit/proc/setup_shielding()
return
/obj/item/clothing/suit/examine(mob/user)
. = ..()
if(length(inserts))
. += "<span class='notice'>Has [length(inserts)] inserts attached.</span>"
. += "<span class='notice'>Inserts can be removed with Alt-Click.</span>"
///Hierophant card shielding. Saves me time.
/obj/item/clothing/suit/proc/setup_hierophant_shielding()
var/datum/component/shielded/shield = GetComponent(/datum/component/shielded)
@@ -869,6 +881,46 @@
/obj/item/clothing/suit/proc/special_overlays() // Does it have special overlays when worn?
return FALSE
/obj/item/clothing/suit/attackby__legacy__attackchain(obj/item/I, mob/living/user, params)
..()
if(istype(I, /obj/item/smithed_item/insert))
SEND_SIGNAL(src, COMSIG_INSERT_ATTACH, I, user)
/obj/item/clothing/suit/proc/detach_insert(atom/source, mob/user)
SIGNAL_HANDLER // COMSIG_CLICK_ALT
if(!Adjacent(user))
return
if(!length(inserts))
to_chat(user, "<span class='notice'>Your suit has no inserts to remove.</span>")
return
INVOKE_ASYNC(src, PROC_REF(finish_detach_insert), user)
/obj/item/clothing/suit/proc/finish_detach_insert(mob/user)
var/obj/item/smithed_item/insert/old_insert
if(length(inserts) == 1)
old_insert = inserts[1]
else
old_insert = tgui_input_list(user, "Select an insert", src, inserts)
if(!istype(old_insert, /obj/item/smithed_item/insert))
return
old_insert.on_detached()
user.put_in_hands(old_insert)
/obj/item/clothing/suit/proc/attach_insert(obj/source_item, obj/item/smithed_item/insert/new_insert, mob/user)
SIGNAL_HANDLER // COMSIG_INSERT_ATTACH
if(!Adjacent(user))
return
if(!istype(new_insert))
return
if(length(inserts) == insert_max)
to_chat(user, "<span class='notice'>Your suit has no slots to add an insert.</span>")
return
if(new_insert.flags & NODROP || !user.transfer_item_to(new_insert, src))
to_chat(user, "<span class='warning'>[new_insert] is stuck to your hand!</span>")
return
inserts += new_insert
new_insert.on_attached(src)
/obj/item/clothing/suit/proc/resist_restraints(mob/living/carbon/user, break_restraints)
var/effective_breakout_time = breakouttime
if(break_restraints)
@@ -945,6 +997,7 @@
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
)
insert_max = 0 // No inserts for space suits
//////////////////////////////
// MARK: UNDER CLOTHES
@@ -98,6 +98,22 @@
"Kidan" = 'icons/mob/clothing/species/kidan/gloves.dmi'
)
/obj/item/clothing/gloves/smithing
name = "smithing gloves"
desc = "Heatproof gloves designed for safely handling hot tools and even hotter metal."
icon_state = "smithing"
item_state = "smithing"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
sprite_sheets = list(
"Human" = 'icons/mob/clothing/hands.dmi',
"Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',
"Drask" = 'icons/mob/clothing/species/drask/gloves.dmi',
"Grey" = 'icons/mob/clothing/species/grey/gloves.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/gloves.dmi'
)
/obj/item/clothing/gloves/handwraps
name = "cloth handwraps"
+11
View File
@@ -178,6 +178,17 @@
"Drask" = 'icons/mob/clothing/species/drask/head/beret.dmi'
)
/obj/item/clothing/head/beret/smith
name = "smith's beret"
desc = "A brown beret with a black insignia emblazoned on it. Won't help you against the atmosphere of the planet, but will look stylish."
icon_state = "beret_smith"
item_color = "beret_smith"
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/head/beret.dmi',
"Drask" = 'icons/mob/clothing/species/drask/head/beret.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/head/beret.dmi'
)
//NT Career Trainer
/obj/item/clothing/head/beret/nct/black
name = "\improper NT Career Trainer's beret"
+7
View File
@@ -111,6 +111,13 @@
item_color = "expedition"
armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 5, BOMB = 0, RAD = 0, FIRE = 10, ACID = 50)
/obj/item/clothing/head/soft/smith
name = "smith's cap"
desc = "It's a brown baseball hat with a black smithing shield."
icon_state = "smithsoft"
item_color = "smith"
dog_fashion = /datum/dog_fashion/head/smith
/obj/item/clothing/head/soft/janitorgrey
name = "grey janitor's cap"
desc = "It's a grey baseball hat with a purple custodial shield."
+11
View File
@@ -238,6 +238,17 @@
knife_slot = TRUE
dyeable = FALSE
/obj/item/clothing/shoes/workboots/smithing
name = "smithing boots"
desc = "Steel-toed smithing boots to designed to protect the feet against both heavy objects and hot metal."
icon_state = "smith"
resistance_flags = FIRE_PROOF
cold_protection = FEET|LEGS
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
heat_protection = FEET|LEGS
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
dyeable = FALSE
/obj/item/clothing/shoes/winterboots
name = "winter boots"
desc = "Boots lined with 'synthetic' animal fur."
@@ -199,6 +199,12 @@
item_state = "expedition_envirohelm"
armor = list(MELEE = 25, BULLET = 20, LASER = 20, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = INFINITY, ACID = 150)
/obj/item/clothing/head/helmet/space/plasmaman/smith
name = "smithing plasma envirosuit helmet"
desc = "A plasmaman helmet design for smiths."
icon_state = "smith_envirohelm"
item_state = "smith_envirohelm"
/obj/item/clothing/head/helmet/space/plasmaman/chaplain
name = "chaplain's plasma envirosuit helmet"
desc = "An envirohelmet specially designed for only the most pious of plasmamen."
@@ -156,6 +156,7 @@
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
strip_delay = 80
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
@@ -214,6 +215,7 @@
dog_fashion = null
resistance_flags = FIRE_PROOF
allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/flash, /obj/item/storage/fancy/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/gun/energy, /obj/item/gun/projectile)
insert_max = 3
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
@@ -406,6 +408,7 @@
actions_types = list(/datum/action/item_action/toggle)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
hit_reaction_chance = 50
insert_max = 2
/// The cell reactive armor uses.
var/obj/item/stock_parts/cell/emproof/reactive/cell
/// Cost multiplier for armor. "Stronger" armors use 200 charge, other armors use 120.
@@ -709,6 +712,7 @@
sprite_sheets = null
armor = list(MELEE = 200, BULLET = 200, LASER = 50, ENERGY = 50, BOMB = INFINITY, RAD = INFINITY, FIRE = 450, ACID = 450)
flags_2 = RAD_PROTECT_CONTENTS_2
insert_max = 5
/obj/item/clothing/suit/armor/heavy
name = "heavy armor"
+23
View File
@@ -29,6 +29,24 @@
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
)
// Smith
/obj/item/clothing/suit/apron/smith
name = "smith's apron"
desc = "A black, heat-treated apron for use while smelting."
icon = 'icons/obj/clothing/suits/utility.dmi'
icon_state = "smith_apron"
item_state = "smith_apron"
icon_override = 'icons/mob/clothing/suits/utility.dmi'
allowed = list(/obj/item/hammer, /obj/item/smithing_cast, /obj/item/smithed_item, /obj/item/stack/sheet, /obj/item/stack/tile/brass)
resistance_flags = FIRE_PROOF
insert_max = 3
sprite_sheets = list(
"Drask" = 'icons/mob/clothing/species/drask/suits/utility.dmi',
"Grey" = 'icons/mob/clothing/species/grey/suits/utility.dmi',
"Kidan" = 'icons/mob/clothing/species/kidan/suits/utility.dmi',
"Vox" = 'icons/mob/clothing/species/vox/suits/utility.dmi'
)
//Chaplain
/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "chaplain hoodie"
@@ -164,6 +182,7 @@
armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 0, RAD = 0, FIRE = 0, ACID = 40)
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
@@ -252,6 +271,7 @@
item_state = "hopcoat"
allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, /obj/item/kitchen/knife/combat)
armor = list(MELEE = 15, BULLET = 10, LASER = 15, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = 50, ACID = 50)
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
@@ -267,6 +287,7 @@
item_state = "qmcoat"
allowed = list(/obj/item/paper, /obj/item/clipboard, /obj/item/gun/energy/kinetic_accelerator, /obj/item/melee/baton, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, /obj/item/melee/knuckleduster, /obj/item/rcs)
armor = list(MELEE = 15, BULLET = 10, LASER = 15, ENERGY = 5, BOMB = 15, RAD = 0, FIRE = 50, ACID = 50)
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
@@ -285,6 +306,7 @@
ignore_suitadjust = 0
actions_types = list(/datum/action/item_action/button)
adjust_flavour = "unbutton"
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
@@ -301,6 +323,7 @@
body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS
allowed = list(/obj/item/storage/fancy/cigarettes, /obj/item/stack/spacecash, /obj/item/flash, /obj/item/gavelhammer)
flags_inv = HIDEJUMPSUIT
insert_max = 2
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
+2
View File
@@ -22,6 +22,7 @@
desc = "Bluer than the standard model."
icon_state = "labcoat_cmo_open"
item_state = "labcoat_cmo_open"
insert_max = 2
/obj/item/clothing/suit/storage/labcoat/mad
name = "mad scientist's labcoat"
@@ -87,6 +88,7 @@
desc = "More purple than the standard model."
icon_state = "labcoat_rd_open"
item_state = "labcoat_rd_open"
insert_max = 2
/obj/item/clothing/suit/storage/labcoat/hydro
name = "hydroponics labcoat"
+41 -9
View File
@@ -19,6 +19,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO
allowed = list (/obj/item/gun/energy/laser/tag/blue)
resistance_flags = NONE
insert_max = 0
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
@@ -47,6 +48,7 @@
desc = "Yarr."
icon_state = "pirate_old"
item_state = "pirate_old"
insert_max = 0
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
@@ -57,6 +59,7 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
insert_max = 0
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
@@ -67,7 +70,7 @@
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
insert_max = 0
/obj/item/clothing/suit/cyborg_suit
name = "cyborg suit"
@@ -78,14 +81,14 @@
flags = CONDUCT
fire_resist = T0C+5200
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/johnny_coat
name = "johnny~~ coat"
desc = "Johnny~~"
icon_state = "johnny"
item_state = "johnny"
insert_max = 0
/obj/item/clothing/suit/justice
name = "justice suit"
@@ -93,7 +96,7 @@
icon_state = "justice"
item_state = "justice"
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/judgerobe
name = "judge's robe costume"
@@ -103,7 +106,7 @@
body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS
allowed = list(/obj/item/storage/fancy/cigarettes,/obj/item/stack/spacecash)
flags_inv = HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/wcoat
name = "waistcoat"
@@ -112,6 +115,7 @@
item_state = "wcoat"
blood_overlay_type = "armor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
insert_max = 0
sprite_sheets = list(
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
@@ -134,6 +138,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
resistance_flags = NONE
insert_max = 0
sprite_sheets = list(
"Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi',
@@ -149,7 +154,7 @@
item_state = "hastur"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/imperium_monk
name = "imperium monk"
@@ -159,6 +164,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDESHOES|HIDEJUMPSUIT
allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen)
insert_max = 0
/obj/item/clothing/suit/chickensuit
name = "chicken suit"
@@ -167,6 +173,7 @@
item_state = "chickensuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET
flags_inv = HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/corgisuit
name = "corgi suit"
@@ -176,6 +183,7 @@
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET
flags_inv = HIDEJUMPSUIT
dog_fashion = /datum/dog_fashion/back
insert_max = 0
/obj/item/clothing/suit/corgisuit/en
name = "super-hero E-N suit"
@@ -216,7 +224,7 @@
item_state = "monkeysuit"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/holidaypriest
name = "holiday priest"
@@ -226,6 +234,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/storage/bible, /obj/item/nullrod, /obj/item/reagent_containers/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen)
insert_max = 0
/obj/item/clothing/suit/snowman
name = "snowman outfit"
@@ -234,6 +243,7 @@
item_state = "snowman"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
flags_inv = HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/poncho
name = "poncho"
@@ -263,6 +273,7 @@
icon_state = "ponchoshame"
item_state = "ponchoshame"
flags = NODROP
insert_max = 0
/obj/item/clothing/suit/hooded/carp_costume
name = "carp costume"
@@ -274,6 +285,7 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
allowed = list(/obj/item/tank/internals/emergency_oxygen)
hoodtype = /obj/item/clothing/head/hooded/carp_hood
insert_max = 0
/obj/item/clothing/head/hooded/carp_hood
name = "carp hood"
@@ -294,6 +306,7 @@
flags = STOPSPRESSUREDMAGE
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
hoodtype = /obj/item/clothing/head/hooded/carp_hood/dragon
insert_max = 1
/obj/item/clothing/suit/hooded/carp_costume/dragon/equipped(mob/user, slot, initial)
. = ..()
@@ -330,6 +343,7 @@
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list(/obj/item/fish/salmon, /obj/item/fish_eggs/salmon)
hoodtype = /obj/item/clothing/head/hooded/salmon_hood
insert_max = 0
/obj/item/clothing/head/hooded/salmon_hood
name = "salmon hood"
@@ -349,6 +363,7 @@
flags = THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/bee_hood
sprite_sheets = list("Vox" = 'icons/mob/clothing/species/vox/suit.dmi')
insert_max = 0
/obj/item/clothing/head/hooded/bee_hood
name = "bee hood"
@@ -366,6 +381,7 @@
icon_state = "lingspacesuit"
item_state = "lingspacesuit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
insert_max = 0
/// Bleh!
/obj/item/clothing/suit/draculacoat
@@ -373,6 +389,7 @@
desc = "<i>What is a spessman? A miserable little pile of secrets.</i>"
icon_state = "draculacoat"
item_state = "draculacoat"
insert_max = 0
/*
* Winter Coats
@@ -437,6 +454,7 @@
item_state = "pimpcoat_tan"
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, RAD = 0, FIRE = 15, ACID = 50)
allowed = list(/obj/item/paper, /obj/item/clipboard, /obj/item/gun/energy/kinetic_accelerator, /obj/item/melee/baton, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, /obj/item/melee/knuckleduster, /obj/item/rcs)
insert_max = 3
/obj/item/clothing/suit/furcoat
name = "fur coat"
@@ -460,6 +478,7 @@
"Grey" = 'icons/mob/clothing/species/grey/suit.dmi',
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
)
insert_max = 3
/obj/item/clothing/head/hooded/winterhood/captain
icon_state = "winterhood_captain"
@@ -741,6 +760,7 @@
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
strip_delay = 60
breakouttime = 3000
insert_max = 0
/obj/item/clothing/suit/straight_jacket/equipped(mob/living/carbon/human/user, slot)
. = ..()
@@ -862,6 +882,7 @@
item_state = "xenos_helm"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
insert_max = 0
/obj/item/clothing/suit/storage/mercy_hoodie
name = "mercy robe"
@@ -1090,6 +1111,14 @@
item_state = "bomberexpedition"
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/energy/kinetic_accelerator, /obj/item/t_scanner/adv_mining_scanner, /obj/item/shovel, /obj/item/pickaxe, /obj/item/storage/bag/ore, /obj/item/gps)
/obj/item/clothing/suit/jacket/bomber/smith
name = "smithing bomber jacket"
desc = "A stylish jacket that has extra internal pockets for inserts."
icon_state = "bombersmith"
item_state = "bombersmith"
insert_max = 3
allowed = list(/obj/item/hammer, /obj/item/smithing_cast, /obj/item/smithed_item, /obj/item/stack/sheet, /obj/item/stack/tile/brass)
/obj/item/clothing/suit/jacket/bomber/hydro
name = "hydroponics bomber jacket"
desc = "A stylish choice for the workers of the hydroponics lab."
@@ -1191,7 +1220,7 @@
armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 15, ACID = 15)
allowed = list(/obj/item/gun/energy,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/flashlight/seclite)
actions_types = list(/datum/action/item_action/toggle_wings)
insert_max = 0
/obj/item/clothing/suit/toggle/owlwings/griffinwings
name = "griffon cloak"
@@ -1215,6 +1244,7 @@
icon_state = "lordadmiral"
item_state = "lordadmiral"
allowed = list (/obj/item/gun)
insert_max = 0
/obj/item/clothing/suit/fluff/noble_coat
name = "noble coat"
@@ -1223,7 +1253,7 @@
icon_state = "noble_coat"
item_state = "noble_coat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
insert_max = 0
///Advanced Protective Suit, AKA, God Mode in wearable form.
@@ -1246,6 +1276,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
slowdown = -10
siemens_coefficient = 0
insert_max = 5
var/on = FALSE
/obj/item/clothing/suit/advanced_protective_suit/Destroy()
@@ -1357,6 +1388,7 @@
w_class = WEIGHT_CLASS_TINY
flags = BLOCKHAIR
flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE
insert_max = 0
/obj/item/clothing/neck/cloak/furcape
name = "fur cape"
+7 -1
View File
@@ -31,6 +31,7 @@
pockets?.update_viewers()
/obj/item/clothing/suit/storage/AltClick(mob/user)
..()
if(ishuman(user) && Adjacent(user) && !user.incapacitated(FALSE, TRUE))
pockets?.open(user)
add_fingerprint(user)
@@ -45,6 +46,9 @@
return ..()
/obj/item/clothing/suit/storage/attackby__legacy__attackchain(obj/item/W as obj, mob/user as mob, params)
// Inserts shouldn't be added into the inventory of the pockets if they're attaching.
if(istype(W, /obj/item/smithed_item/insert) && length(inserts) != insert_max)
return ..()
..()
return pockets?.attackby__legacy__attackchain(W, user, params)
@@ -64,8 +68,10 @@
var/list/L = list()
L += src.contents
for(var/obj/item/I in src.contents)
if(!istype(I, /obj/item/smithed_item/insert)) // We don't want people to pull inserts out without calling the proper signals, so they shouldn't be displayed in storage.
L += I
for(var/obj/item/storage/S in src)
L += S.return_inv()
for(var/obj/item/gift/G in src)
+21
View File
@@ -109,3 +109,24 @@
icon_state = "expedition_overalls"
item_state = "expedition_overalls"
item_color = "expedition_overalls"
/obj/item/clothing/under/rank/cargo/smith
name = "smith's jumpsuit"
desc = "A brown jumpsuit with some extra metal pieces strapped to it. You're not sure why, but the added armor doesn't make you feel any safer..."
icon_state = "smith"
item_state = "smith"
item_color = "smith"
/obj/item/clothing/under/rank/cargo/smith/skirt
name = "smith's jumpskirt"
desc = "A brown jumpskirt with some extra metal pieces strapped to it. You're not sure why, but the added armor doesn't make you feel any safer..."
icon_state = "smith_skirt"
item_state = "smith_skirt"
item_color = "smith_skirt"
/obj/item/clothing/under/rank/cargo/smith/overalls
name = "smith's overalls"
desc = "A brown set of overalls over a black turtleneck, designed with thinner materials to keep the wearer cool in the heat of the forge."
icon_state = "smith_overalls"
item_state = "smith_overalls"
item_color = "smith_overalls"
@@ -19,6 +19,12 @@
item_state = "explorer_envirosuit"
item_color = "explorer_envirosuit"
/obj/item/clothing/under/plasmaman/smith
name = "smith envirosuit"
desc = "An airtight brown and black suit designed for safety around hot metal for plasmamen."
icon_state = "smith_envirosuit"
item_state = "smith_envirosuit"
item_color = "smith_envirosuit"
/obj/item/clothing/under/plasmaman/chef
name = "chef's plasma envirosuit"
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -5,6 +5,8 @@
var/turf/simulated/floor/primary_turf_type
/// Icon state of planet present on background of station Z-level
var/planet_icon_state
/// Icon for glass floors
var/primary_turf_type_icon
/datum/lavaland_theme/New()
if(!primary_turf_type)
@@ -23,6 +25,7 @@
name = "lava"
primary_turf_type = /turf/simulated/floor/lava/lava_land_surface
planet_icon_state = "planet_lava"
primary_turf_type_icon = 'icons/turf/floors/lava.dmi'
/datum/lavaland_theme/lava/setup()
var/datum/river_spawner/lava_spawner = new(level_name_to_num(MINING))
@@ -32,6 +35,7 @@
name = "plasma"
primary_turf_type = /turf/simulated/floor/lava/lava_land_surface/plasma
planet_icon_state = "planet_plasma"
primary_turf_type_icon = 'icons/turf/floors/liquidplasma.dmi'
/datum/lavaland_theme/plasma/setup()
var/datum/river_spawner/spawner = new(level_name_to_num(MINING))
@@ -42,8 +46,8 @@
name = "chasm"
primary_turf_type = /turf/simulated/floor/chasm/straight_down/lava_land_surface
planet_icon_state = "planet_chasm"
primary_turf_type_icon = 'icons/turf/floors/Chasms.dmi'
/datum/lavaland_theme/chasm/setup()
var/datum/river_spawner/spawner = new(level_name_to_num(MINING), spread_prob_ = 10, spread_prob_loss_ = 5)
spawner.generate(nodes = 6, min_x = 50, min_y = 7, max_x = 250, max_y = 225)
+3
View File
@@ -233,6 +233,9 @@
/obj/effect/mapping_helpers/airlock/access/any/supply/mineral_storage
access = ACCESS_MINERAL_STOREROOM
/obj/effect/mapping_helpers/airlock/access/any/supply/smith
access = ACCESS_SMITH
/obj/effect/mapping_helpers/airlock/access/any/supply/qm
access = ACCESS_QM
@@ -232,6 +232,9 @@
/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mineral_storage
access = ACCESS_MINERAL_STOREROOM
/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/smith
access = ACCESS_SMITH
/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/qm
access = ACCESS_QM
@@ -20,6 +20,11 @@
usesound = 'sound/effects/picaxe1.ogg'
toolspeed = 1
/obj/item/pickaxe/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/pickaxe/proc/playDigSound()
playsound(src, pick(digsound),20,1)
@@ -141,6 +146,11 @@
usesound = 'sound/effects/shovel_dig.ogg'
toolspeed = 0.5
/obj/item/shovel/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
@@ -25,6 +25,14 @@
var/obj/item/stack/R = new res(src)
R.amount = rand(10, 15) //ash drakes drop 5, this is perfectly fine
var/list/exquisite_ore = list(
/obj/item/stack/ore/platinum, // The vetus can have some, as a treat
/obj/item/stack/ore/iridium,
/obj/item/stack/ore/palladium
)
for(var/ore in exquisite_ore)
new ore(src, rand(5, 10)) // Don't want mining to step too much on explorer's toes.
/obj/structure/closet/crate/necropolis/ancient/ex_act(severity)
return
@@ -183,6 +183,7 @@
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi'
)
hide_tail_by_species = list("Unathi", "Tajaran", "Vox", "Vulpkanin")
insert_max = 0
/obj/item/clothing/suit/hooded/berserker/Initialize(mapload)
. = ..()
+5 -5
View File
@@ -1,7 +1,7 @@
#define BASE_POINT_MULT 0.65
#define BASE_SHEET_MULT 0.65
#define POINT_MULT_ADD_PER_RATING 0.35
#define SHEET_MULT_ADD_PER_RATING 0.35
#define BASE_POINT_MULT 0.90
#define BASE_SHEET_MULT 0.90
#define POINT_MULT_ADD_PER_RATING 0.10
#define SHEET_MULT_ADD_PER_RATING 0.10
/**
* # Ore Redemption Machine
@@ -56,7 +56,7 @@
/obj/machinery/mineral/ore_redemption/Initialize(mapload)
. = ..()
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, FALSE, /obj/item/stack, null, CALLBACK(src, PROC_REF(on_material_insert)))
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLATINUM, MAT_IRIDIUM, MAT_PALLADIUM), INFINITY, FALSE, /obj/item/stack, null, CALLBACK(src, PROC_REF(on_material_insert)))
ore_buffer = list()
files = new /datum/research/smelter(src)
// Stock parts
+41
View File
@@ -189,6 +189,47 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
refined_type = /obj/item/stack/sheet/mineral/diamond
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
/obj/item/stack/ore/platinum
name = "platinum ore"
desc = "Rock formation containing platinum."
icon_state = "platinum_ore"
item_state = "platinum_ore"
origin_tech = "materials=5"
singular_name = "platinum ore chunk"
points = 50
refined_type = /obj/item/stack/sheet/mineral/platinum
materials = list(MAT_PLATINUM = MINERAL_MATERIAL_AMOUNT)
/obj/item/stack/ore/palladium
name = "palladium ore"
desc = "Rock formation containing palladium."
icon_state = "palladium_ore"
item_state = "palladium_ore"
origin_tech = "materials=5"
singular_name = "palladium ore chunk"
points = 50
refined_type = /obj/item/stack/sheet/mineral/palladium
materials = list(MAT_PALLADIUM = MINERAL_MATERIAL_AMOUNT)
/obj/item/stack/ore/iridium
name = "iridium ore"
desc = "Rock formation containing iridium."
icon_state = "iridium_ore"
item_state = "iridium_ore"
origin_tech = "materials=5"
singular_name = "iridium ore chunk"
points = 50
refined_type = /obj/item/stack/sheet/mineral/iridium
materials = list(MAT_IRIDIUM = MINERAL_MATERIAL_AMOUNT)
/obj/item/stack/ore/brass
name = "brass ore"
desc = "Rock formation containing brass. This ore is not naturally occurring - if you see this, let development know."
singular_name = "brass ore chunk"
points = 1
refined_type = /obj/item/stack/tile/brass
materials = list(MAT_BRASS = MINERAL_MATERIAL_AMOUNT)
/obj/item/stack/ore/bananium
name = "bananium ore"
desc = "HONK!"
+1
View File
@@ -38,6 +38,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO
cold_protection = UPPER_TORSO|LOWER_TORSO
permeability_coefficient = 0.01
insert_max = 0
hide_tail_by_species = list("modsuit")
sprite_sheets = list(
"Vulpkanin" = 'icons/mob/clothing/modsuit/species/vulp_modsuits.dmi',
@@ -7,6 +7,10 @@
var/select_name = "energy"
fire_sound = 'sound/weapons/laser.ogg'
muzzle_flash_effect = /obj/effect/temp_visual/target_angled/muzzle_flash/energy
/// Damage multiplier from equipped lenses
var/lens_damage_multiplier = 1
/// Speed multiplier from equipped lenses.
var/lens_speed_multiplier = 1
/obj/item/ammo_casing/energy/laser
projectile_type = /obj/item/projectile/beam/laser
+5
View File
@@ -47,6 +47,11 @@
if(!istype(targloc) || !istype(curloc) || !BB)
return
BB.ammo_casing = src
if(istype(BB.ammo_casing, /obj/item/ammo_casing/energy))
var/obj/item/ammo_casing/energy/energy_casing = BB.ammo_casing
BB.damage = BB.damage * energy_casing.lens_damage_multiplier
BB.stamina = BB.stamina * energy_casing.lens_damage_multiplier
BB.speed = BB.speed * energy_casing.lens_speed_multiplier
if(target && get_dist(user, target) <= 1) //Point blank shot must always hit
BB.starting = curloc
@@ -9,6 +9,7 @@
origin_tech = "combat=3;powerstorage=3;engineering=3"
weapon_weight = WEAPON_LIGHT
can_flashlight = TRUE
can_be_lensed = FALSE
flight_x_offset = 15
flight_y_offset = 9
var/overheat_time = 16
@@ -34,12 +34,19 @@
var/overlay_set
/// Used when updating icon and overlays to determine the energy pips
var/ratio
/// Can it use a lens
var/can_be_lensed = TRUE
/// Current lens
var/obj/item/smithed_item/lens/current_lens
/obj/item/gun/energy/examine(mob/user)
. = ..()
if(cell)
. += "<span class='notice'>It is [round(cell.percent())]% charged.</span>"
. += "<span class='notice'>Energy weapons can fire through windows and other see-through surfaces. [can_charge ? "Can be recharged with a recharger" : "Cannot be recharged in a recharger."]</span>"
if(current_lens)
. += "<span class='notice'>Has a lens currently attached.</span>"
. += "<span class='notice'>Lenses can be removed with Alt-Click.</span>"
/obj/item/gun/energy/emp_act(severity)
cell.use(round(cell.charge / severity))
@@ -66,6 +73,40 @@
if(selfcharge)
START_PROCESSING(SSobj, src)
update_icon()
RegisterSignal(src, COMSIG_LENS_ATTACH, PROC_REF(attach_lens))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(detach_lens))
/obj/item/gun/energy/attackby__legacy__attackchain(obj/item/I, mob/living/user, params)
..()
if(istype(I, /obj/item/smithed_item/lens))
SEND_SIGNAL(src, COMSIG_LENS_ATTACH, I, user)
/obj/item/gun/energy/proc/attach_lens(atom/source, obj/item/smithed_item/lens/new_lens, mob/user)
SIGNAL_HANDLER // COMSIG_LENS_ATTACH
if(!Adjacent(user))
return
if(!can_be_lensed)
return
if(!istype(new_lens))
return
if(current_lens)
to_chat(user, "<span class='notice'>Your [src] already has a lens.</span>")
return
if(new_lens.flags & NODROP || !user.transfer_item_to(new_lens, src))
to_chat(user, "<span class='warning'>[new_lens] is stuck to your hand!</span>")
return
current_lens = new_lens
new_lens.on_attached(src)
/obj/item/gun/energy/proc/detach_lens(atom/source, mob/user)
SIGNAL_HANDLER // COMSIG_CLICK_ALT
if(!Adjacent(user))
return
if(!current_lens)
to_chat(user, "<span class='notice'>Your [src] has no lens to remove.</span>")
return
user.put_in_hands(current_lens)
current_lens.on_detached()
/obj/item/gun/energy/proc/update_ammo_types()
var/obj/item/ammo_casing/energy/shot
@@ -132,6 +173,8 @@
/obj/item/gun/energy/process_fire(atom/target, mob/living/user, message = 1, params, zone_override, bonus_spread = 0)
if(!chambered && can_shoot())
process_chamber()
if(current_lens)
current_lens.damage_lens()
return ..()
/obj/item/gun/energy/proc/select_fire(mob/living/user)
@@ -82,6 +82,14 @@
build_path = /obj/item/screwdriver
category = list("initial","Tools")
/datum/design/hammer
name = "Hammer"
id = "hammer"
build_type = AUTOLATHE
materials = list(MAT_METAL = 500)
build_path = /obj/item/hammer
category = list("initial","Tools")
/datum/design/wirecutters
name = "Wirecutters"
id = "wirecutters"
@@ -512,6 +512,66 @@
build_path = /obj/item/circuitboard/ore_redemption
category = list ("Misc. Machinery")
/datum/design/smart_hopper
name = "Machine Design (Smart Hopper)"
desc = "The circuit board for a Smart Hopper."
id = "smart_hopper"
req_tech = list("programming" = 2, "engineering" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/smart_hopper
category = list ("Misc. Machinery")
/datum/design/magma_crucible
name = "Machine Design (Magma Crucible)"
desc = "The circuit board for a Magma Crucible."
id = "magma_crucible"
req_tech = list("programming" = 2, "engineering" = 5, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/magma_crucible
category = list ("Misc. Machinery")
/datum/design/casting_basin
name = "Machine Design (Casting Bench)"
desc = "The circuit board for a Casting Bench."
id = "casting_bench"
req_tech = list("programming" = 2, "engineering" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/casting_basin
category = list ("Misc. Machinery")
/datum/design/power_hammer
name = "Machine Design (Power Hammer)"
desc = "The circuit board for a Power Hammer."
id = "power_hammer"
req_tech = list("programming" = 2, "engineering" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/power_hammer
category = list ("Misc. Machinery")
/datum/design/lava_furnace
name = "Machine Design (Lava Furnace)"
desc = "The circuit board for a Lava Furnace."
id = "lava_furnace"
req_tech = list("programming" = 2, "engineering" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/lava_furnace
category = list ("Misc. Machinery")
/datum/design/kinetic_assembler
name = "Machine Design (Kinetic Assembler)"
desc = "The circuit board for a Kinetic Assembler."
id = "kinetic_assembler"
req_tech = list("programming" = 2, "engineering" = 4, "plasmatech" = 3)
build_type = IMPRINTER
materials = list(MAT_GLASS = 1000)
build_path = /obj/item/circuitboard/kinetic_assembler
category = list ("Misc. Machinery")
/datum/design/mining_equipment_vendor
name = "Machine Design (Mining Rewards Vendor Board)"
desc = "The circuit board for a Mining Rewards Vendor."
+21
View File
@@ -14,6 +14,8 @@
/obj/item/retractor/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/retractor/augment
desc = "Micro-mechanical manipulator for retracting stuff."
@@ -37,6 +39,8 @@
/obj/item/hemostat/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/hemostat/augment
desc = "Tiny servos power a pair of pincers to stop bleeding."
@@ -57,6 +61,11 @@
attack_verb = list("burnt")
tool_behaviour = TOOL_CAUTERY
/obj/item/cautery/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/cautery/attack__legacy__attackchain(mob/living/target, mob/living/user)
if(!cigarette_lighter_act(user, target))
return ..()
@@ -107,6 +116,8 @@
/obj/item/surgicaldrill/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/surgicaldrill/suicide_act(mob/user)
to_chat(viewers(user), pick("<span class='suicide'>[user] is pressing [src] to [user.p_their()] temple and activating it! It looks like [user.p_theyre()] trying to commit suicide!</span>",
@@ -145,6 +156,8 @@
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
AddComponent(/datum/component/surgery_initiator)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/scalpel/suicide_act(mob/user)
@@ -246,6 +259,8 @@
/obj/item/circular_saw/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/circular_saw/augment
desc = "A small but very fast spinning saw. Edges dulled to prevent accidental cutting inside of the surgeon."
@@ -270,6 +285,8 @@
/obj/item/bonegel/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/bonegel/augment
toolspeed = 0.5
@@ -290,6 +307,8 @@
/obj/item/fix_o_vein/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/fix_o_vein/augment
toolspeed = 0.5
@@ -313,6 +332,8 @@
/obj/item/bonesetter/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_SURGICAL, ROUNDSTART_TRAIT)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/bonesetter/augment
toolspeed = 0.5
+8 -2
View File
@@ -28,6 +28,11 @@
/// How much power does each teleport use?
var/chargecost = 1000
/obj/item/rcs/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/rcs/get_cell()
return rcell
@@ -131,7 +136,8 @@
return
teleporting = FALSE
rcell.use(chargecost)
var/final_cost = chargecost * bit_efficiency_mod
rcell.use(final_cost)
playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE)
do_teleport(C, target)
to_chat(user, "<span class='notice'>Teleport successful. [round(rcell.charge/chargecost)] charge\s left.</span>")
to_chat(user, "<span class='notice'>Teleport successful. [round(rcell.charge/final_cost)] charge\s left.</span>")