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 21:35:21 +00:00
committed by GitHub
co-authored by Luc DGamerL ExusA Christasmurf Fordoxia Burzah
parent f7bb62d6f8
commit cd7cb01a1f
164 changed files with 14012 additions and 5038 deletions
+4
View File
@@ -97,6 +97,10 @@
name = "Mining Station Storage"
icon_state = "storage"
/area/mine/outpost/smith_workshop
name = "Smith's Workshop"
icon_state = "smith"
/area/mine/outpost/maintenance
name = "Mining Station Maintenance"
icon_state = "maintcentral"
@@ -35,6 +35,10 @@
sound_environment = SOUND_AREA_LARGE_ENCLOSED
request_console_flags = RC_SUPPLY
/area/station/supply/smith_office
name = "Smith's Office"
icon_state = "smith"
/area/station/supply/qm
name = "\improper Quartermaster's Office"
icon_state = "qm"
+2
View File
@@ -84,6 +84,8 @@
act_result = wirecutter_act(user, tool)
if(TOOL_WELDER)
act_result = welder_act(user, tool)
if(TOOL_HAMMER)
act_result = hammer_act(user, tool)
if(!act_result)
return NONE
+3
View File
@@ -598,6 +598,9 @@
/atom/proc/welder_act(mob/living/user, obj/item/I)
return
/atom/proc/hammer_act(mob/living/user, obj/item/I)
return
/// This is when an atom is emagged. Should return false if it fails, or it has no emag_act defined.
/atom/proc/emag_act(mob/user)
SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT, user)
+4 -2
View File
@@ -105,7 +105,7 @@
ACCESS_COURT, ACCESS_CONSTRUCTION, ACCESS_CREMATORIUM, ACCESS_JANITOR, ACCESS_ENGINE, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_FORENSICS_LOCKERS,
ACCESS_GENETICS, ACCESS_EXPEDITION, ACCESS_BRIG, ACCESS_HOP, ACCESS_HOS, ACCESS_HYDROPONICS, ACCESS_CHANGE_IDS, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN,
ACCESS_INTERNAL_AFFAIRS, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MIME,
ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_NTREP, ACCESS_PARAMEDIC, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_SMITH, ACCESS_MORGUE, ACCESS_NTREP, ACCESS_PARAMEDIC, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_ENGINE_EQUIP, ACCESS_PSYCHIATRIST, ACCESS_QM, ACCESS_RD, ACCESS_RC_ANNOUNCE, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_RESEARCH, ACCESS_SECURITY,
ACCESS_SURGERY, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_TCOMSAT, ACCESS_TOX_STORAGE, ACCESS_VIROLOGY, ACCESS_WEAPONS, ACCESS_XENOBIOLOGY, ACCESS_TRAINER, ACCESS_EVIDENCE)
@@ -136,7 +136,7 @@
if(REGION_ENGINEERING) //engineering and maintenance
return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE)
if(REGION_SUPPLY) //supply
return list(ACCESS_EXPEDITION, ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_CARGO_BAY, ACCESS_SUPPLY_SHUTTLE, ACCESS_QM, ACCESS_HEADS_VAULT)
return list(ACCESS_EXPEDITION, ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_SMITH, ACCESS_CARGO, ACCESS_CARGO_BAY, ACCESS_SUPPLY_SHUTTLE, ACCESS_QM, ACCESS_HEADS_VAULT)
if(REGION_COMMAND) //command
return list(ACCESS_HEADS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_TELEPORTER, ACCESS_EVA, ACCESS_TCOMSAT, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_HEADS_VAULT, ACCESS_BLUESHIELD, ACCESS_NTREP, ACCESS_HOP, ACCESS_CAPTAIN)
if(REGION_CENTCOMM) //because why the heck not
@@ -270,6 +270,8 @@
return "Main Vault"
if(ACCESS_MINING_STATION)
return "Mining Outpost"
if(ACCESS_SMITH)
return "Smith's Workshop"
if(ACCESS_XENOBIOLOGY)
return "Xenobiology Lab"
if(ACCESS_HOP)
+1
View File
@@ -143,6 +143,7 @@
department_roles = list(
"Quartermaster",
"Cargo Technician",
"Smith",
"Shaft Miner",
"Spelunker"
)
+34 -1
View File
@@ -28,7 +28,8 @@
ACCESS_SUPPLY_SHUTTLE,
ACCESS_WEAPONS,
ACCESS_TELEPORTER,
ACCESS_EXPEDITION
ACCESS_EXPEDITION,
ACCESS_SMITH
)
blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY)
outfit = /datum/outfit/job/qm
@@ -87,7 +88,39 @@
id = /obj/item/card/id/supply
pda = /obj/item/pda/cargo
/datum/job/smith
title = "Smith"
flag = JOB_SMITH
department_flag = JOBCAT_SUPPORT
total_positions = 1
spawn_positions = 1
job_department_flags = DEP_FLAG_SUPPLY
supervisors = "the quartermaster"
department_head = list("Quartermaster")
selection_color = "#eeddbe"
access = list(
ACCESS_CARGO_BAY,
ACCESS_CARGO,
ACCESS_MAINT_TUNNELS,
ACCESS_MINERAL_STOREROOM,
ACCESS_MINERAL_STOREROOM,
ACCESS_MINING,
ACCESS_MINING_STATION,
ACCESS_SMITH
)
alt_titles = list("Metalworker", "Tinkerer")
outfit = /datum/outfit/job/smith
/datum/outfit/job/smith
name = "Smith"
jobtype = /datum/job/smith
gloves = /obj/item/clothing/gloves/smithing
uniform = /obj/item/clothing/under/rank/cargo/smith
l_ear = /obj/item/radio/headset/headset_cargo
shoes = /obj/item/clothing/shoes/workboots/smithing
id = /obj/item/card/id/smith
pda = /obj/item/pda/cargo
/datum/job/mining
title = "Shaft Miner"
+1
View File
@@ -72,6 +72,7 @@ GLOBAL_LIST_INIT(service_positions, list(
GLOBAL_LIST_INIT(supply_positions, list(
"Quartermaster",
"Cargo Technician",
"Smith",
"Shaft Miner",
"Explorer"
))
@@ -41,7 +41,7 @@
var/list/jobs = list("Assistant", "Clown", "Chef", "Janitor", "Bartender", "Botanist", "Explorer", "Quartermaster",
"Station Engineer", "Atmospheric Technician", "Medical Doctor", "Coroner", "Geneticist", "Chaplain", "Librarian",
"Security Officer", "Detective", "Scientist", "Roboticist", "Shaft Miner", "Cargo Technician", "Internal Affairs Agent")
"Security Officer", "Detective", "Scientist", "Roboticist", "Shaft Miner", "Cargo Technician", "Internal Affairs Agent", "Smith")
/// Jobs that NT stations dont offer/mispelled
var/list/incorrect_jobs = list("Syndicate Operative", "Syndicate Researcher", "Veterinary", "Brig Physician",
"Pod Pilot", "Cremist", "Cluwne", "Work Safety Inspector", "Musician",
+67
View File
@@ -319,6 +319,7 @@ to destroy them and players will be able to make replacements.
"JaniDrobe" = /obj/machinery/economy/vending/janidrobe,
"LawDrobe" = /obj/machinery/economy/vending/lawdrobe,
"TrainDrobe" = /obj/machinery/economy/vending/traindrobe,
"Castivend" = /obj/machinery/economy/vending/smith,
"CrewVend 3000" = /obj/machinery/economy/vending/custom)
var/static/list/unique_vendors = list(
"ShadyCigs Ultra" = /obj/machinery/economy/vending/cigarette/beach,
@@ -1051,6 +1052,72 @@ to destroy them and players will be able to make replacements.
req_components = list(/obj/item/stock_parts/manipulator = 2, /obj/item/stack/cable_coil = 2)
// End telecomms circuit boards
/obj/item/circuitboard/smart_hopper
board_name = "Ore Redemption"
icon_state = "supply"
build_path = /obj/machinery/mineral/smart_hopper
board_type = "machine"
origin_tech = "programming=1;engineering=2"
req_components = list(
/obj/item/stack/sheet/glass = 1,
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1)
/obj/item/circuitboard/magma_crucible
board_name = "Magma Crucible"
icon_state = "supply"
build_path = /obj/machinery/magma_crucible
board_type = "machine"
origin_tech = "programming=1;engineering=4"
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/micro_laser = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/assembly/igniter = 1)
/obj/item/circuitboard/casting_basin
board_name = "Casting Basin"
icon_state = "supply"
build_path = /obj/machinery/smithing/casting_basin
board_type = "machine"
origin_tech = "programming=1;engineering=4"
req_components = list(
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/sheet/glass = 1
)
/obj/item/circuitboard/power_hammer
board_name = "Power Hammer"
icon_state = "supply"
build_path = /obj/machinery/smithing/power_hammer
board_type = "machine"
origin_tech = "programming=1;engineering=4"
req_components = list(
/obj/item/stock_parts/manipulator = 4,
/obj/item/stack/sheet/plasteel = 1)
/obj/item/circuitboard/lava_furnace
board_name = "Lava Furnace"
icon_state = "supply"
build_path = /obj/machinery/smithing/lava_furnace
board_type = "machine"
origin_tech = "programming=1;engineering=4"
req_components = list(
/obj/item/stock_parts/micro_laser = 4,
/obj/item/assembly/igniter = 1)
/obj/item/circuitboard/kinetic_assembler
board_name = "Kinetic Assembler"
icon_state = "supply"
build_path = /obj/machinery/smithing/kinetic_assembler
board_type = "machine"
origin_tech = "programming=1;engineering=4"
req_components = list(
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/manipulator = 3,
/obj/item/stack/sheet/glass = 1)
/obj/item/circuitboard/ore_redemption
board_name = "Ore Redemption"
icon_state = "supply"
File diff suppressed because it is too large Load Diff
+3
View File
@@ -109,6 +109,9 @@
// Supply
"Quartermaster" = "supradio",
"Cargo Technician" = "supradio",
"Smith" = "supradio",
"Metalworker" = "supradio",
"Tinkerer" = "supradio",
"Shaft Miner" = "supradio",
"Spelunker" = "supradio",
"Explorer" = "supradio",
+23
View File
@@ -354,3 +354,26 @@
refill_canister = /obj/item/vending_refill/security
prices = list(/obj/item/food/donut = 40,
/obj/item/storage/fancy/donut_box = 200) //Bulk discount
/obj/machinery/economy/vending/smith
name = "\improper Castivend"
desc = "Everything you need to start your own smithing workshop."
icon_state = "castivend"
category = VENDOR_TYPE_DEPARTMENTAL
req_access = list(ACCESS_SMITH)
products = list(/obj/item/smithing_cast/sheet = 6,
/obj/item/smithing_cast/component/insert_frame = 3,
/obj/item/smithing_cast/component/insert_lining = 3,
/obj/item/smithing_cast/component/bit_mount = 3,
/obj/item/smithing_cast/component/bit_head = 3,
/obj/item/smithing_cast/component/lens_focus = 3,
/obj/item/smithing_cast/component/lens_frame = 3,
/obj/item/smithing_cast/component/trim = 3,
/obj/item/storage/box/crewvend = 1)
refill_canister = /obj/item/vending_refill/smith
prices = list(
/obj/item/storage/box/crewvend = 100
)
+4
View File
@@ -318,6 +318,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp
name = "Cargo Technician"
icon_state = "CargoTech"
/obj/effect/landmark/start/smith
name = "Smith"
icon_state = "CargoTech"
/obj/effect/landmark/start/chaplain
name = "Chaplain"
icon_state = "Chap"
@@ -40,8 +40,10 @@
/obj/item/stack/sheet/mineral/titanium = 5,
/obj/item/stack/sheet/plasteel = 5,
// Hybrid stuff you could in theory get from mining
/obj/item/stack/sheet/titaniumglass = 5,
// Rare space ore sheets
/obj/item/stack/sheet/mineral/platinum = 5,
/obj/item/stack/sheet/mineral/iridium = 5,
/obj/item/stack/sheet/mineral/palladium = 5,
// Rare stuff you can't get from mining
/obj/item/stack/sheet/mineral/tranquillite = 5,
+50
View File
@@ -173,6 +173,16 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
var/tip_timer = 0
// Smithing vars
/// List of attached tool bits
var/list/attached_bits = list()
/// Maximum number of bits
var/max_bits = 1
/// Failure rate of using this tool. Without a bit, defaults to 0 for no failure chance
var/bit_failure_rate = 0
/// Efficiency modifier for tools that use energy or fuel
var/bit_efficiency_mod = 1
///////////////////////////
// MARK: item hover FX
///////////////////////////
@@ -285,6 +295,10 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
msg += "*--------*"
. += msg
if(length(attached_bits))
. += "<span class='notice'>Has [length(attached_bits)] bits attached.</span>"
. += "<span class='notice'>Bits can be removed with Alt-Click.</span>"
if(HAS_TRAIT(src, TRAIT_BUTCHERS_HUMANS))
. += "<span class='warning'>Can be used to butcher dead people into meat while on harm intent.</span>"
@@ -444,6 +458,42 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
owner.visible_message("<span class='danger'>[owner] blocks [attack_text] with [src]!</span>")
return signal_result
/// Used to add a bit through a signal
/obj/item/proc/add_bit(atom/source, obj/item/smithed_item/tool_bit/bit, mob/user)
SIGNAL_HANDLER // COMSIG_BIT_ATTACH
if(length(attached_bits) >= max_bits)
to_chat(user, "<span class='notice'>Your tool already has the maximum number of bits!</span>")
return
if(bit.flags & NODROP || !user.transfer_item_to(bit, src))
to_chat(user, "<span class='warning'>[bit] is stuck to your hand!</span>")
return
attached_bits += bit
bit.on_attached(src)
/// Used to remove a bit through a signal
/obj/item/proc/remove_bit(atom/source, mob/user)
SIGNAL_HANDLER // COMSIG_CLICK_ALT
if(!Adjacent(user))
return
if(!length(attached_bits))
to_chat(user, "<span class='notice'>Your [src] has no tool bits to remove.</span>")
return
INVOKE_ASYNC(src, PROC_REF(finish_remove_bit), user)
/obj/item/proc/finish_remove_bit(mob/user)
if(!Adjacent(user))
return
var/obj/item/smithed_item/tool_bit/old_bit
if(length(attached_bits) == 1)
old_bit = attached_bits[1]
else
old_bit = tgui_input_list(user, "Select a tool bit", src, attached_bits)
if(!istype(old_bit, /obj/item/smithed_item/tool_bit))
return
old_bit.on_detached()
user.put_in_hands(old_bit)
/// Generic use proc. Depending on the item, it uses up fuel, charges, sheets, etc. Returns TRUE on success, FALSE on failure.
/obj/item/proc/use(used)
return !used
@@ -440,6 +440,42 @@ GLOBAL_LIST_INIT(sandbag_recipes, list (
. = ..()
recipes = GLOB.tranquillite_recipes
/obj/item/stack/sheet/mineral/platinum
name = "platinum"
desc = "Shiny and valuable."
icon_state = "sheet-platinum"
item_state = "sheet-platinum"
singular_name = "platinum"
origin_tech = "materials=5"
sheettype = "platinum"
merge_type = /obj/item/stack/sheet/mineral/platinum
materials = list(MAT_PLATINUM = MINERAL_MATERIAL_AMOUNT)
point_value = 25
/obj/item/stack/sheet/mineral/palladium
name = "palladium"
desc = "A valuable space mineral."
icon_state = "sheet-palladium"
item_state = "sheet-palladium"
singular_name = "palladium"
origin_tech = "materials=5"
sheettype = "palladium"
merge_type = /obj/item/stack/sheet/mineral/palladium
materials = list(MAT_PALLADIUM = MINERAL_MATERIAL_AMOUNT)
point_value = 25
/obj/item/stack/sheet/mineral/iridium
name = "iridium"
desc = "A dense mineral found in abundance in space and extremely rare on planets."
icon_state = "sheet-iridium"
item_state = "sheet-iridium"
singular_name = "iridium"
origin_tech = "materials=5"
sheettype = "iridium"
merge_type = /obj/item/stack/sheet/mineral/iridium
materials = list(MAT_IRIDIUM = MINERAL_MATERIAL_AMOUNT)
point_value = 25
/*
* Titanium
*/
@@ -644,6 +644,7 @@ GLOBAL_LIST_INIT(brass_recipes, list (
turf_type = /turf/simulated/floor/clockwork
table_type = /obj/structure/table/reinforced/brass
dynamic_icon_state = TRUE
materials = list(MAT_BRASS = 2000)
/obj/item/stack/tile/brass/examine_more(mob/user)
. = ..()
+10
View File
@@ -21,6 +21,11 @@
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 30)
tool_behaviour = TOOL_CROWBAR
/obj/item/crowbar/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/crowbar/red
desc = "A hefty steel crowbar with red stripes. It'll hit a bit harder than a normal crowbar."
icon_state = "crowbar_red"
@@ -137,5 +142,10 @@
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
for(var/obj/item/smithed_item/tool_bit/bit in attached_bits)
bit.on_detached()
bit.forceMove(cutjaws)
cutjaws.attached_bits += bit
bit.on_attached(cutjaws)
qdel(src)
user.put_in_active_hand(cutjaws)
+33
View File
@@ -0,0 +1,33 @@
/obj/item/hammer
name = "hammer"
desc = "A useful tool to many throughout history. Slightly better than a weighted rock."
icon = 'icons/obj/tools.dmi'
icon_state = "hammer"
item_state = "hammer"
belt_icon = "hammer"
usesound = 'sound/magic/fellowship_armory.ogg'
flags = CONDUCT
slot_flags = ITEM_SLOT_BELT
force = 10
throwforce = 7
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL = 300)
origin_tech = "engineering=1;combat=1"
attack_verb = list("attacked", "hammered", "smashed", "bludgeoned", "whacked")
toolspeed = 1
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 30)
tool_behaviour = TOOL_HAMMER
/obj/item/hammer/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/hammer/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is bashing [user.p_their()] head with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
if(!use_tool(user, user, 3 SECONDS, volume = tool_volume))
return SHAME
playsound(loc, usesound, 50, FALSE)
return BRUTELOSS
@@ -29,6 +29,8 @@
. = ..()
AddComponent(/datum/component/surgery_initiator/robo)
RegisterSignal(src, COMSIG_ATTACK, PROC_REF(on_attack))
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/screwdriver/nuke
name = "screwdriver"
@@ -129,6 +131,11 @@
playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, 1)
var/obj/item/wrench/power/b_drill = new /obj/item/wrench/power
to_chat(user, "<span class='notice'>You attach the bolt driver bit to [src].</span>")
for(var/obj/item/smithed_item/tool_bit/bit in attached_bits)
bit.on_detached()
bit.forceMove(b_drill)
b_drill.attached_bits += bit
bit.on_attached(b_drill)
qdel(src)
user.put_in_active_hand(b_drill)
@@ -37,6 +37,17 @@
// but only if the delay between the beginning and the end is not too small
if(delay >= MIN_TOOL_SOUND_DELAY)
play_tool_sound(target, volume)
// If it has a bit, wear and tear
for(var/obj/item/smithed_item/tool_bit/bit in attached_bits)
bit.damage_bit()
// If it has a chance to fail, see if it failed
if(bit_failure_rate)
if(prob(bit_failure_rate))
return
return TRUE
// Called before use_tool if there is a delay, or by use_tool if there isn't.
+3
View File
@@ -46,6 +46,8 @@
create_reagents(maximum_fuel)
reagents.add_reagent("fuel", maximum_fuel)
update_icon()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/weldingtool/Destroy()
STOP_PROCESSING(SSobj, src)
@@ -140,6 +142,7 @@
user.flash_eyes(light_intensity)
/obj/item/weldingtool/use(amount)
amount = amount * bit_efficiency_mod
if(GET_FUEL < amount * requires_fuel)
return
remove_fuel(amount)
@@ -25,6 +25,11 @@
new_attack_chain = TRUE
/obj/item/wirecutters/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/wirecutters/New(loc, param_color = null)
..()
if(random_color)
@@ -154,5 +159,10 @@
playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1)
var/obj/item/crowbar/power/pryjaws = new /obj/item/crowbar/power
to_chat(user, "<span class='notice'>You attach the pry jaws to [src].</span>")
for(var/obj/item/smithed_item/tool_bit/bit in attached_bits)
bit.on_detached()
bit.forceMove(pryjaws)
pryjaws.attached_bits += bit
bit.on_attached(pryjaws)
qdel(src)
user.put_in_active_hand(pryjaws)
+10
View File
@@ -21,6 +21,11 @@
new_attack_chain = TRUE
/obj/item/wrench/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/wrench/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is unsecuring [user.p_their()] head with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -79,6 +84,11 @@
playsound(get_turf(user),'sound/items/change_drill.ogg', 50, 1)
var/obj/item/wirecutters/power/s_drill = new /obj/item/screwdriver/power
to_chat(user, "<span class='notice'>You attach the screwdriver bit to [src].</span>")
for(var/obj/item/smithed_item/tool_bit/bit in attached_bits)
bit.on_detached()
bit.forceMove(s_drill)
s_drill.attached_bits += bit
bit.on_attached(s_drill)
qdel(src)
user.put_in_active_hand(s_drill)
+6
View File
@@ -277,6 +277,8 @@
/obj/item/rcd/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
if(!length(possible_actions))
possible_actions = list()
for(var/action_type in subtypesof(/datum/rcd_act))
@@ -419,6 +421,9 @@
SStgui.update_uis(src)
/obj/item/rcd/item_interaction(mob/living/user, obj/item/used, list/modifiers)
if(istype(used, /obj/item/smithed_item/tool_bit))
SEND_SIGNAL(src, COMSIG_BIT_ATTACH, used, user)
return ..()
if(!istype(used, /obj/item/rcd_ammo))
return ..()
var/obj/item/rcd_ammo/ammo = used
@@ -636,6 +641,7 @@
* * amount - the amount of matter to use
*/
/obj/item/rcd/use(amount)
amount = amount * bit_efficiency_mod
if(matter < amount)
return FALSE
matter -= amount
+7 -1
View File
@@ -558,11 +558,17 @@
icon_state = "cargo"
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
/obj/item/card/id/smith
name = "Smith ID"
registered_name = "Smith"
icon_state = "smith"
access = list(ACCESS_CARGO_BAY, ACCESS_CARGO, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_SMITH)
/obj/item/card/id/quartermaster
name = "Quartermaster ID"
registered_name = "Quartermaster"
icon_state = "quartermaster"
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_SMITH)
/obj/item/card/id/shaftminer
name = "Shaftminer ID"
@@ -96,7 +96,8 @@
/obj/item/holosign_creator,
/obj/item/stack/nanopaste,
/obj/item/robotanalyzer,
/obj/item/rpd/bluespace
/obj/item/rpd/bluespace,
/obj/item/hammer
)
/obj/item/storage/belt/utility/full/populate_contents()
@@ -342,3 +342,20 @@
new /obj/item/clothing/gloves/color/black(src)
new /obj/item/clothing/shoes/jackboots(src)
new /obj/item/clothing/mask/gas/explorer(src)
/obj/item/storage/bag/garment/smith
name = "smith's garment bag"
desc = "A bag for storing extra clothes and shoes. This one belongs to the smith."
/obj/item/storage/bag/garment/smith/populate_contents()
new /obj/item/clothing/under/rank/cargo/smith(src)
new /obj/item/clothing/under/rank/cargo/smith/skirt(src)
new /obj/item/clothing/under/rank/cargo/smith/overalls(src)
new /obj/item/clothing/suit/apron/smith(src)
new /obj/item/clothing/suit/jacket/bomber/smith(src)
new /obj/item/clothing/head/soft/smith(src)
new /obj/item/clothing/head/beret/smith(src)
new /obj/item/clothing/gloves/smithing(src)
new /obj/item/clothing/shoes/workboots/smithing(src)
new /obj/item/clothing/under/plasmaman/smith(src)
new /obj/item/clothing/head/helmet/space/plasmaman/smith(src)
@@ -154,6 +154,10 @@
machine_name = "Robotech Deluxe"
icon_state = "refill_engi"
/obj/item/vending_refill/smith
machine_name = "Castivend"
icon_state = "refill_custom"
//Departmental clothing vendors
/obj/item/vending_refill/secdrobe
@@ -32,6 +32,20 @@
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
new /obj/item/storage/bag/expedition(src)
/obj/structure/closet/secure_closet/smith
name = "smith's locker"
req_access = list(ACCESS_SMITH)
icon_state = "cargo"
opened_door_sprite = "cargo"
closed_door_sprite = "smith"
/obj/structure/closet/secure_closet/smith/populate_contents()
new /obj/item/radio/headset/headset_cargo(src)
new /obj/item/storage/bag/garment/smith(src)
new /obj/item/eftpos(src)
new /obj/item/pickaxe/drill(src)
new /obj/item/rcs(src)
/obj/structure/closet/secure_closet/quartermaster
name = "quartermaster's locker"
req_access = list(ACCESS_QM)
+18 -2
View File
@@ -23,11 +23,27 @@
/turf/simulated/floor/transparent/glass/Initialize(mapload)
. = ..()
var/image/I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE)
I.plane = PLANE_SPACE
return INITIALIZE_HINT_LATELOAD
/turf/simulated/floor/transparent/glass/LateInitialize()
. = ..()
var/image/I = null
if(is_mining_level(z))
if(SSmapping.lavaland_theme?.primary_turf_type_icon)
I = null
I = image(SSmapping.lavaland_theme.primary_turf_type_icon, src, "windowed")
else
I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE)
I.plane = PLANE_SPACE
else
I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE)
I.plane = PLANE_SPACE
I.layer = PLATING_LAYER
underlays += I
dir = SOUTH //dirs that are not 2/south cause smoothing jank
icon_state = "" //Prevents default icon appearing behind the glass
QUEUE_SMOOTH(src)
/turf/simulated/floor/transparent/glass/welder_act(mob/user, obj/item/I)
if(!broken && !burnt)
+50
View File
@@ -190,6 +190,22 @@
var/new_ore_type = pickweight(mineralSpawnChanceList)
set_ore(new_ore_type)
/turf/simulated/mineral/random/space
mineralSpawnChanceList = list(
/datum/ore/iron = 40,
/datum/ore/plasma = 20,
/datum/ore/silver = 12,
/datum/ore/titanium = 11,
/datum/ore/gold = 10,
/datum/ore/uranium = 5,
/datum/ore/gibtonite = 4,
/datum/ore/bluespace = 1,
/datum/ore/diamond = 1,
/datum/ore/platinum = 3,
/datum/ore/palladium = 3,
/datum/ore/iridium = 3
)
/turf/simulated/mineral/ancient
name = "ancient rock"
desc = "A rare asteroid rock that appears to be resistant to all mining tools except pickaxes!"
@@ -286,6 +302,22 @@
/datum/ore/bluespace = 20,
)
/turf/simulated/mineral/random/high_chance/space
color = COLOR_YELLOW
mineralChance = 25
mineralSpawnChanceList = list(
/datum/ore/silver = 50,
/datum/ore/plasma = 50,
/datum/ore/gold = 45,
/datum/ore/titanium = 45,
/datum/ore/uranium = 35,
/datum/ore/diamond = 30,
/datum/ore/bluespace = 20,
/datum/ore/platinum = 25,
/datum/ore/palladium = 25,
/datum/ore/iridium = 25
)
/turf/simulated/mineral/random/high_chance/clown
mineralChance = 40
mineralSpawnChanceList = list(
@@ -334,6 +366,24 @@
/datum/ore/bluespace = 1,
)
/turf/simulated/mineral/random/low_chance/space
color = COLOR_VIOLET
mineralChance = 6
mineralSpawnChanceList = list(
/datum/ore/iron = 40,
/datum/ore/plasma = 15,
/datum/ore/silver = 6,
/datum/ore/gold = 4,
/datum/ore/titanium = 4,
/datum/ore/gibtonite = 2,
/datum/ore/uranium = 2,
/datum/ore/diamond = 1,
/datum/ore/bluespace = 1,
/datum/ore/platinum = 1,
/datum/ore/palladium = 1,
/datum/ore/iridium = 1
)
/turf/simulated/mineral/random/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface