From ae8f4e35277e1a0f75fd303387ed0f579ffca5f5 Mon Sep 17 00:00:00 2001
From: Gristlebee <56049844+Gristlebee@users.noreply.github.com>
Date: Tue, 28 May 2024 15:12:01 -0700
Subject: [PATCH 001/132] Blastdoor and Atmos Holofield ID multitool syncing
(#3004)
## About The Pull Request
Multitools can be used on a button with it's panel open to add a blast
door or holofield controller to it's buffer.
The ID can be copied onto a blast door the same way as changing it
normally with a multitool. For holofields, you need to have the access
mode on unlocked and it's panel closed.
Adds holofield controllers to the autolathe.
Changes all the span classes to span macros
## Why It's Good For The Game
When you have a roundstart blast door break or holofield break for
whatever reason, it's almost impossible to replace and properly resync
without ripping out the rest of the blastdoors or the other holofield.
This should make reconstruction more convienent.
Also being able to make and use your own holofield controller adds a
more intuitive way to rig up player made holofields, as currently you
have to use signallers on the activation wire.
## Changelog
:cl:
add: Autolathe can print holofield controllers.
add: You can sync blastdoors and holofields to a controller in a button
with a multitool
code: span macros for blast doors, buttons and holofields
/:cl:
---------
Signed-off-by: Gristlebee <56049844+Gristlebee@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
---
code/game/machinery/buttons.dm | 26 +++--
code/game/machinery/doors/poddoor.dm | 34 +++---
code/game/machinery/shieldgen.dm | 109 ++++++++++--------
.../research/designs/autolathe_designs.dm | 8 ++
4 files changed, 106 insertions(+), 71 deletions(-)
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index b10dba436e0d..f6c004ddca71 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -68,34 +68,40 @@
default_deconstruction_screwdriver(user, "button-open", "[skin]",W)
update_appearance()
else
- to_chat(user, "Maintenance Access Denied.")
+ to_chat(user, span_alert("Maintenance Access Denied."))
flick("[skin]-denied", src)
return
if(panel_open)
if(!device && istype(W, /obj/item/assembly))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
device = W
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
if(!board && istype(W, /obj/item/electronics/airlock))
if(!user.transferItemToLoc(W, src))
- to_chat(user, "\The [W] is stuck to you!")
+ to_chat(user, span_warning("\The [W] is stuck to you!"))
return
board = W
if(board.one_access)
req_one_access = board.accesses
else
req_access = board.accesses
- to_chat(user, "You add [W] to the button.")
+ to_chat(user, span_notice("You add [W] to the button."))
+
+ if(device && W.tool_behaviour == TOOL_MULTITOOL)
+ var/obj/item/multitool/multi = W
+ if(istype(device, /obj/item/assembly/control))
+ multi.buffer = device
+ to_chat(user, span_notice("You copy the [device] to your multitool's buffer."))
if(!device && !board && W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "You start unsecuring the button frame...")
+ to_chat(user, span_notice("You start unsecuring the button frame..."))
W.play_tool_sound(src)
if(W.use_tool(src, user, 40))
- to_chat(user, "You unsecure the button frame.")
+ to_chat(user, span_notice("You unsecure the button frame."))
transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src)))
playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE)
qdel(src)
@@ -153,14 +159,14 @@
req_one_access = list()
board = null
update_appearance()
- to_chat(user, "You remove electronics from the button frame.")
+ to_chat(user, span_notice("You remove electronics from the button frame."))
else
if(skin == "doorctrl")
skin = "launcher"
else
skin = "doorctrl"
- to_chat(user, "You change the button frame's front panel.")
+ to_chat(user, span_notice("You change the button frame's front panel."))
return
if((machine_stat & (NOPOWER|BROKEN)))
@@ -170,7 +176,7 @@
return
if(!allowed(user))
- to_chat(user, "Access Denied.")
+ to_chat(user, span_alert("Access Denied."))
flick("[skin]-denied", src)
return
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 4e846c26f14a..ce705c71e434 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -23,26 +23,32 @@
/obj/machinery/door/poddoor/attackby(obj/item/W, mob/user, params)
. = ..()
if((resistance_flags & INDESTRUCTIBLE) && W.tool_behaviour == TOOL_SCREWDRIVER) // This makes it so ERT members cannot cheese by opening their blast doors.
- to_chat(user, "You can't find the panel!")
+ to_chat(user, span_warning("You can't find the panel!"))
return
if(W.tool_behaviour == TOOL_SCREWDRIVER)
if(density)
- to_chat(user, "You need to open [src] to access the maintenance panel!")
+ to_chat(user, span_warning("You need to open [src] to access the maintenance panel"))
return
else if(default_deconstruction_screwdriver(user, icon_state, icon_state, W))
- to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].")
+ to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src]."))
return TRUE
if(panel_open && !density)
if(W.tool_behaviour == TOOL_MULTITOOL)
- var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null
- if(change_id)
- id = clamp(round(change_id, 1), 1, 100)
- to_chat(user, "You change the ID to [id].")
+ var/obj/item/multitool/multi = W
+ if (istype(multi.buffer,/obj/item/assembly/control))
+ var/obj/item/assembly/control/controller = multi.buffer
+ id = controller.id
+ to_chat(user, span_notice("You copy the ID in your multitool's buffer into the [src]."))
+ else
+ var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null
+ if(change_id)
+ id = clamp(round(change_id, 1), 1, 100)
+ to_chat(user, span_notice("You change the ID to [id]."))
if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "You start to remove the airlock electronics.")
+ to_chat(user, span_notice("You start to remove the airlock electronics."))
if(!(machine_stat & NOPOWER))
do_sparks(5, TRUE, src)
electrocute_mob(user, get_area(src), src, 1, TRUE) //fuck this fella
@@ -52,9 +58,9 @@
/obj/machinery/door/poddoor/examine(mob/user)
. = ..()
- . += "The maintenance panel is [panel_open ? "opened" : "closed"]."
+ . += span_notice("The maintenance panel is [panel_open ? "opened" : "closed"].")
if(panel_open)
- . += "The airlock electronics are exposed and could be pried out."
+ . += span_notice("The airlock electronics are exposed and could be pried out.")
/obj/machinery/door/poddoor/deconstruct(disassembled = TRUE, mob/user)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -142,9 +148,9 @@
/obj/machinery/door/poddoor/attack_alien(mob/living/carbon/alien/humanoid/user)
if(density & !(resistance_flags & INDESTRUCTIBLE))
add_fingerprint(user)
- user.visible_message("[user] begins prying open [src].",\
- "You begin digging your claws into [src] with all your might!",\
- "You hear groaning metal...")
+ user.visible_message(span_warning("[user] begins prying open [src]."),\
+ span_noticealien("You begin digging your claws into [src] with all your might"),\
+ span_warning("You hear groaning metal..."))
playsound(src, 'sound/machines/creaking.ogg', 100, TRUE)
var/time_to_open = 5 SECONDS
@@ -153,7 +159,7 @@
if(do_after(user, time_to_open, TRUE, src))
if(density && !open(TRUE)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!)
- to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!")
+ to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!"))
else
return ..()
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 9f2f56e2e1ce..df865aee82e5 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -122,25 +122,23 @@
if(.)
return
if(locked && !issilicon(user))
- to_chat(user, "The machine is locked, you are unable to use it!")
+ to_chat(user, span_notice("The machine is locked, you are unable to use it!"))
return
if(panel_open)
- to_chat(user, "The panel must be closed before operating this machine!")
+ to_chat(user, span_warning("The panel must be closed before operating this machine!"))
return
if (active)
- user.visible_message("[user] deactivated \the [src].", \
- "You deactivate \the [src].", \
- "You hear heavy droning fade out.")
+ user.visible_message(span_notice("[user] deactivated \the [src]."), span_notice("You deactivate \the [src]."), span_hear("You hear heavy droning fade out"))
shields_down()
else
if(anchored)
- user.visible_message("[user] activated \the [src].", \
- "You activate \the [src].", \
- "You hear heavy droning.")
+ user.visible_message(span_notice("[user] activated \the [src]."), \
+ span_notice("You activate \the [src]."), \
+ span_hear("You hear heavy droning."))
shields_up()
else
- to_chat(user, "The device must first be secured to the floor!")
+ to_chat(user, span_warning("The device must first be secured to the floor!"))
return
/obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params)
@@ -148,60 +146,60 @@
W.play_tool_sound(src, 100)
panel_open = !panel_open
if(panel_open)
- to_chat(user, "You open the panel and expose the wiring.")
+ to_chat(user, span_notice("You open the panel and expose the wiring."))
else
- to_chat(user, "You close the panel.")
+ to_chat(user, span_notice("You close the panel."))
else if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open)
var/obj/item/stack/cable_coil/coil = W
if (coil.get_amount() < 1)
- to_chat(user, "You need one length of cable to repair [src]!")
+ to_chat(user, span_warning("You need one length of cable to repair [src]!"))
return
- to_chat(user, "You begin to replace the wires...")
+ to_chat(user, span_notice("You begin to replace the wires..."))
if(do_after(user, 30, target = src))
if(coil.get_amount() < 1)
return
coil.use(1)
obj_integrity = max_integrity
set_machine_stat(machine_stat & ~BROKEN)
- to_chat(user, "You repair \the [src].")
+ to_chat(user, span_notice("You repair \the [src]."))
update_appearance()
else if(W.tool_behaviour == TOOL_WRENCH)
if(locked)
- to_chat(user, "The bolts are covered! Unlocking this would retract the covers.")
+ to_chat(user, span_warning("The bolts are covered! Unlocking this would retract the covers."))
return
if(!anchored && !isinspace())
W.play_tool_sound(src, 100)
- to_chat(user, "You secure \the [src] to the floor!")
+ to_chat(user, span_notice("You secure \the [src] to the floor!"))
set_anchored(TRUE)
else if(anchored)
W.play_tool_sound(src, 100)
- to_chat(user, "You unsecure \the [src] from the floor!")
+ to_chat(user, span_notice("You unsecure \the [src] from the floor!"))
if(active)
- to_chat(user, "\The [src] shuts off!")
+ to_chat(user, span_notice("\The [src] shuts off!"))
shields_down()
set_anchored(FALSE)
else if(W.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
return ..()
/obj/machinery/shieldgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/shieldgen/update_icon_state()
icon_state = "shield[active ? "on" : "off"][(machine_stat & BROKEN) ? "br" : null]"
@@ -275,9 +273,7 @@
if(!active_power_usage || surplus() >= active_power_usage)
add_load(active_power_usage)
else
- visible_message("The [src.name] shuts down due to lack of power!", \
- "If this message is ever seen, something is wrong.",
- "You hear heavy droning fade out.")
+ visible_message(span_danger("The [src.name] shuts down due to lack of power!"), "If this message is ever seen, something is wrong.",span_hear("You hear heavy droning fade out."))
active = FALSE
log_game("[src] deactivated due to lack of power at [AREACOORD(src)]")
for(var/direction in GLOB.cardinals)
@@ -348,7 +344,7 @@
/obj/machinery/power/shieldwallgen/can_be_unfasten_wrench(mob/user, silent)
if(active)
if(!silent)
- to_chat(user, "Turn off the shield generator first!")
+ to_chat(user, span_warning("Turn off the shield generator first!"))
return FAILED_UNFASTEN
return ..()
@@ -388,11 +384,11 @@
if(item.GetID())
if(allowed(user) && !(obj_flags & EMAGGED))
locked = !locked
- to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.")
+ to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls."))
else if(obj_flags & EMAGGED)
- to_chat(user, "Error, access controller damaged!")
+ to_chat(user, span_danger("Error, access controller damaged!"))
else
- to_chat(user, "Access denied.")
+ to_chat(user, span_danger("Access denied."))
else
add_fingerprint(user)
@@ -406,25 +402,23 @@
shock(user,50)
return
if(!anchored)
- to_chat(user, "\The [src] needs to be firmly secured to the floor first!")
+ to_chat(user, span_warning("\The [src] needs to be firmly secured to the floor first!"))
return
if(locked && !issilicon(user))
- to_chat(user, "The controls are locked!")
+ to_chat(user, span_warning("The controls are locked!"))
return
if(!powernet)
- to_chat(user, "\The [src] needs to be powered by a wire!")
+ to_chat(user, span_warning("\The [src] needs to be powered by a wire!"))
return
if(active)
- user.visible_message("[user] turned \the [src] off.", \
- "You turn off \the [src].", \
- "You hear heavy droning fade out.")
+ user.visible_message(span_notice("[user] turned \the [src] off."), \
+ span_notice("You turn off \the [src]."), \
+ span_hear("You hear heavy droning fade out."))
active = FALSE
log_game("[src] was deactivated by [key_name(user)] at [AREACOORD(src)]")
else
- user.visible_message("[user] turned \the [src] on.", \
- "You turn on \the [src].", \
- "You hear heavy droning.")
+ user.visible_message(span_notice("[user] turned \the [src] on."), span_notice("ou turn on \the [src]."), span_hear("ou hear heavy droning."))
active = ACTIVE_SETUPFIELDS
log_game("[src] was activated by [key_name(user)] at [AREACOORD(src)]")
add_fingerprint(user)
@@ -435,28 +429,28 @@
if(!powernet)
return
if(active)
- visible_message("The [src.name] hums as it powers down.", \
+ visible_message(span_notice("The [src.name] hums as it powers down."), \
"If this message is ever seen, something is wrong.", \
- "You hear heavy droning fade out.")
+ span_notice("You hear heavy droning fade out."))
playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = 6120)
active = FALSE
log_game("[src] was deactivated by wire pulse at [AREACOORD(src)]")
else
- visible_message("The [src.name] beeps as it powers up.", \
+ visible_message(span_notice("The [src.name] beeps as it powers up."), \
"If this message is ever seen, something is wrong.", \
- "You hear heavy droning.")
+ span_notice("You hear heavy droning."))
playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = 6120)
active = ACTIVE_SETUPFIELDS
log_game("[src] was activated by wire pulse at [AREACOORD(src)]")
/obj/machinery/power/shieldwallgen/emag_act(mob/user)
if(obj_flags & EMAGGED)
- to_chat(user, "The access controller is damaged!")
+ to_chat(user, span_warning("The access controller is damaged!"))
return
obj_flags |= EMAGGED
locked = FALSE
playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
- to_chat(user, "You short out the access controller.")
+ to_chat(user, span_warning("You short out the access controller."))
/obj/machinery/power/shieldwallgen/proc/shock(mob/user, prb)
if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock
@@ -511,10 +505,31 @@
/obj/machinery/power/shieldwallgen/atmos/proc/can_be_rotated(mob/user, rotation_type)
if (anchored)
- to_chat(user, "It is fastened to the floor!")
+ to_chat(user, span_warning("It is fastened to the floor!"))
return FALSE
return TRUE
+/obj/machinery/power/shieldwallgen/atmos/attacked_by(obj/item/I, mob/living/user)
+ if(I.tool_behaviour == TOOL_MULTITOOL)
+ var/obj/item/multitool/multi = I
+ if(!panel_open && !locked)
+ if(istype(multi.buffer,/obj/item/assembly/control/shieldwallgen))
+ var/obj/item/assembly/control/shieldwallgen/controller = multi.buffer
+ to_chat(user, span_notice("You copy the ID in your multitool's buffer to the [src]."))
+ id = controller.id
+ return TRUE
+
+ else
+ to_chat(user, span_warning("The controls are locked!"))
+ return
+
+ return ..()
+
+/obj/machinery/power/shieldwallgen/atmos/multitool_act(mob/living/user, obj/item/I)
+ . = ..()
+
+
+
/// Same as in the normal shieldwallgen, but with the shieldwalls replaced with atmos shieldwalls
/obj/machinery/power/shieldwallgen/atmos/setup_field(direction)
if(!direction)
@@ -586,7 +601,7 @@
setDir(get_dir(gen_primary, gen_secondary))
if(hardshield == TRUE)
for(var/mob/living/victim in get_turf(src))
- visible_message("\The [src] is suddenly occupying the same space as \the [victim]!")
+ visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [victim]!"))
victim.gib()
/obj/machinery/shieldwall/Destroy()
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 8a0c572015db..e39d48e5cc77 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -1191,6 +1191,14 @@
build_path = /obj/item/assembly/control
category = list("initial","Misc")
+/datum/design/holofield_control
+ name = "Holofield Controller"
+ id = "holofield"
+ build_type = AUTOLATHE
+ materials = list(/datum/material/iron = 100, /datum/material/glass = 50)
+ build_path = /obj/item/assembly/control/shieldwallgen
+ category = list("initial","Misc")
+
/datum/design/trashbag
name="Trash Bag"
id="trashbag"
From dcde44f88ad7af71cea08f01f51efee5cacf365f Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Tue, 28 May 2024 17:22:40 -0500
Subject: [PATCH 002/132] Automatic changelog generation for PR #3004 [ci skip]
---
html/changelogs/AutoChangeLog-pr-3004.yml | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-3004.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3004.yml b/html/changelogs/AutoChangeLog-pr-3004.yml
new file mode 100644
index 000000000000..c7f5824a24b6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3004.yml
@@ -0,0 +1,7 @@
+author: Gristlebee
+changes:
+ - {rscadd: Autolathe can print holofield controllers.}
+ - {rscadd: You can sync blastdoors and holofields to a controller in a button with
+ a multitool}
+ - {code_imp: 'span macros for blast doors, buttons and holofields'}
+delete-after: true
From 7252491198abe51b5c8376c829d94fca6658091b Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Wed, 29 May 2024 00:54:52 +0000
Subject: [PATCH 003/132] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-3004.yml | 7 -------
html/changelogs/AutoChangeLog-pr-3005.yml | 6 ------
html/changelogs/AutoChangeLog-pr-3029.yml | 5 -----
html/changelogs/archive/2024-05.yml | 12 ++++++++++++
4 files changed, 12 insertions(+), 18 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-3004.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3005.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-3029.yml
diff --git a/html/changelogs/AutoChangeLog-pr-3004.yml b/html/changelogs/AutoChangeLog-pr-3004.yml
deleted file mode 100644
index c7f5824a24b6..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3004.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-author: Gristlebee
-changes:
- - {rscadd: Autolathe can print holofield controllers.}
- - {rscadd: You can sync blastdoors and holofields to a controller in a button with
- a multitool}
- - {code_imp: 'span macros for blast doors, buttons and holofields'}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3005.yml b/html/changelogs/AutoChangeLog-pr-3005.yml
deleted file mode 100644
index ef27a62d6efc..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3005.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: Gristlebee
-changes:
- - {rscadd: Holopads now display the location of the last holopad that called them
- on examine.}
- - {code_imp: Span macros for hologram.dm}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3029.yml b/html/changelogs/AutoChangeLog-pr-3029.yml
deleted file mode 100644
index fadc2ae83351..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3029.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: Apogee-dev
-changes:
- - {tweak: Syndicate mobs have been renamed to Ramzi Clique mobs. New sprites will
- come later.}
-delete-after: true
diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml
index 2cab207766bf..abf441035ee7 100644
--- a/html/changelogs/archive/2024-05.yml
+++ b/html/changelogs/archive/2024-05.yml
@@ -163,3 +163,15 @@
Zevotech:
- rscdel: Clown and mime fan quirks have been removed
- rscdel: Removes the clown and mime fan pins
+2024-05-29:
+ Apogee-dev:
+ - tweak: Syndicate mobs have been renamed to Ramzi Clique mobs. New sprites will
+ come later.
+ Gristlebee:
+ - rscadd: Holopads now display the location of the last holopad that called them
+ on examine.
+ - code_imp: Span macros for hologram.dm
+ - rscadd: Autolathe can print holofield controllers.
+ - rscadd: You can sync blastdoors and holofields to a controller in a button with
+ a multitool
+ - code_imp: span macros for blast doors, buttons and holofields
From 3e9e61de37acc702a8b3dab8788b1c1db9eea7c0 Mon Sep 17 00:00:00 2001
From: Imaginos16 <77556824+Imaginos16@users.noreply.github.com>
Date: Tue, 28 May 2024 20:25:24 -0700
Subject: [PATCH 004/132] Adds Representation For The Solarian Marine
Biologist's Society (#3032)
## About The Pull Request
Does what it says on the tin. Those marine biologists really need
representation you know?
![image](https://github.com/shiptest-ss13/Shiptest/assets/77556824/88f13d8f-34ef-407c-9ddd-89cc86decdcc)
## Why It's Good For The Game
It looks cute. I intend to add more when I can figure out jokes for each
of them.
## Changelog
:cl: PositiveEntropy
add: Solarian Marine Bi-ologists now have proper representation in the
form of a cute cloak!
/:cl:
---------
Co-authored-by: FalloutFalcon
---
.../icemoon_surface_corporate_rejects.dmm | 8 +-
_maps/RandomRuins/SpaceRuins/crashedship.dmm | 2 +-
.../WasteRuins/wasteplanet_clowncrash.dmm | 2 +-
.../wasteplanet_fortress_of_solitide.dmm | 32 +++--
.../nanotrasen/nanotrasen_skipper.dmm | 2 +-
code/__DEFINES/icon_smoothing.dm | 1 -
code/controllers/subsystem/traumas.dm | 2 +-
.../components/crafting/recipes/misc.dm | 7 ++
code/datums/components/remote_materials.dm | 2 +-
code/datums/materials/basemats.dm | 86 ++------------
.../game/gamemodes/clown_ops/clown_weapons.dm | 6 +-
code/game/machinery/doors/airlock_types.dm | 10 --
code/game/machinery/recycler.dm | 2 +-
.../objects/items/stacks/sheets/mineral.dm | 109 +++++-------------
.../items/stacks/sheets/sheet_types.dm | 50 --------
.../items/stacks/tiles/tile_mineral.dm | 10 --
code/game/objects/items/storage/boxes.dm | 4 +-
.../crates_lockers/closets/syndicate.dm | 2 +-
.../objects/structures/door_assembly_types.dm | 8 --
code/game/objects/structures/false_walls.dm | 13 ---
code/game/objects/structures/girders.dm | 12 +-
.../structures/icemoon/cave_entrance.dm | 30 +++--
code/game/objects/structures/spawner.dm | 2 +-
code/game/objects/structures/statues.dm | 2 +-
code/game/turfs/closed/_closed.dm | 41 -------
code/game/turfs/closed/minerals.dm | 13 +--
code/game/turfs/closed/wall/mineral_walls.dm | 18 ---
code/game/turfs/closed/wall/misc_walls.dm | 2 +-
code/game/turfs/open/floor/mineral_floor.dm | 42 -------
code/game/turfs/open/lava.dm | 21 +++-
code/modules/antagonists/cult/blood_magic.dm | 2 +-
code/modules/antagonists/cult/cult.dm | 17 +--
.../antagonists/cult/cult_structures.dm | 2 +-
code/modules/cargo/bounties/special.dm | 8 +-
code/modules/cargo/bounty.dm | 2 +-
code/modules/cargo/exports/materials.dm | 21 +---
code/modules/clothing/shoes/bananashoes.dm | 8 +-
code/modules/clothing/suits/cloaks.dm | 5 +
.../recipes/tablecraft/recipes_soup.dm | 2 +-
code/modules/mining/abandoned_crates.dm | 2 +-
code/modules/mining/equipment/mining_tools.dm | 2 +
code/modules/mining/machine_processing.dm | 2 +-
code/modules/mining/machine_redemption.dm | 2 +-
code/modules/mining/machine_silo.dm | 2 +-
code/modules/mining/minebot.dm | 2 +-
code/modules/mining/mint.dm | 5 +-
code/modules/mining/money_bag.dm | 2 +-
code/modules/mining/ores_coins.dm | 33 ++----
.../projectiles/guns/ballistic/pistol.dm | 6 +
.../reagents/chemistry/recipes/others.dm | 2 +-
.../chemistry/recipes/slime_extracts.dm | 2 +-
.../designs/mechfabricator_designs.dm | 22 ++--
.../research/designs/medical_designs.dm | 2 +-
code/modules/research/designs/misc_designs.dm | 2 +-
.../xenobiology/crossbreeding/charged.dm | 2 +-
icons/effects/ore_visuals.dmi | Bin 22791 -> 21414 bytes
icons/mob/clothing/belt.dmi | Bin 30611 -> 32413 bytes
icons/mob/clothing/belt_mirror.dmi | Bin 62055 -> 65317 bytes
icons/mob/clothing/neck.dmi | Bin 100787 -> 109602 bytes
icons/mob/inhands/misc/sheets_lefthand.dmi | Bin 8412 -> 5744 bytes
icons/mob/inhands/misc/sheets_righthand.dmi | Bin 9280 -> 7962 bytes
icons/mob/inhands/weapons/guns_lefthand.dmi | Bin 106692 -> 107205 bytes
icons/mob/inhands/weapons/guns_righthand.dmi | Bin 110757 -> 111147 bytes
icons/obj/clothing/cloaks.dmi | Bin 27607 -> 28046 bytes
icons/obj/guns/projectile.dmi | Bin 46428 -> 46505 bytes
icons/obj/ores.dmi | Bin 3957 -> 8098 bytes
icons/obj/stack_objects.dmi | Bin 50559 -> 44543 bytes
icons/turf/walls/bananium_wall.dmi | Bin 5785 -> 0 bytes
68 files changed, 188 insertions(+), 510 deletions(-)
delete mode 100644 icons/turf/walls/bananium_wall.dmi
diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
index 28a963ed476a..add7c0f50743 100644
--- a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
+++ b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm
@@ -84,8 +84,8 @@
"cN" = (
/obj/structure/safe/floor,
/obj/item/hand_tele,
-/obj/item/stack/sheet/mineral/adamantine,
-/obj/item/stack/sheet/mineral/adamantine,
+/obj/item/stack/sheet/mineral/hidden/hellstone,
+/obj/item/stack/sheet/mineral/hidden/hellstone,
/turf/open/floor/plating/asteroid/snow/icemoon,
/area/ruin/unpowered/corprejectrooms)
"cP" = (
@@ -1726,11 +1726,11 @@
/obj/item/spacecash/bundle/c1000,
/obj/item/spacecash/bundle/c1000,
/obj/item/stack/sheet/bluespace_crystal/five,
-/obj/item/stack/sheet/mineral/bananium{
+/obj/item/stack/sheet/mineral/hidden/hellstone{
amount = 15
},
/obj/item/stack/sheet/mineral/gold/twenty,
-/obj/item/stack/sheet/mineral/runite/ten,
+/obj/item/stack/sheet/mineral/hidden/hellstone/ten,
/obj/item/toy/figure/captain,
/obj/item/organ/cyberimp/brain/anti_stun,
/obj/item/disk/design_disk/adv/knight_gear,
diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
index 9a154053c0bf..358b08790095 100644
--- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm
+++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm
@@ -2232,7 +2232,7 @@
/turf/closed/mineral/diamond,
/area/awaymission/BMPship)
"hw" = (
-/turf/closed/mineral/bananium,
+/turf/closed/mineral/bscrystal,
/area/awaymission/BMPship)
"hE" = (
/turf/closed/wall/mineral/titanium/nodiagonal,
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
index ae2434a3ca45..11c0ecc1a2ff 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm
@@ -96,7 +96,7 @@
/area/overmap_encounter/planetoid/cave/explored)
"r" = (
/obj/structure/table/reinforced,
-/obj/item/stack/ore/bananium,
+/obj/item/stack/ore/hellstone,
/turf/open/floor/plating/asteroid,
/area/overmap_encounter/planetoid/cave/explored)
"s" = (
diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
index 73735c65542b..227bbf0c0338 100644
--- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
+++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm
@@ -342,7 +342,7 @@
"cX" = (
/obj/structure/statue/bananium/clown,
/obj/effect/decal/cleanable/cobweb/cobweb2,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"dg" = (
/obj/structure/sign/poster/contraband/eat,
@@ -430,7 +430,7 @@
/area/ruin/powered)
"ed" = (
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"ee" = (
/obj/machinery/photocopier,
@@ -578,12 +578,8 @@
/turf/open/floor/plating/rust,
/area/ruin/powered)
"fk" = (
-/obj/machinery/door/airlock/bananium{
- name = "Clown Embassy";
- dir = 4
- },
/obj/item/grown/bananapeel,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"fn" = (
/obj/effect/gibspawner/human,
@@ -695,7 +691,7 @@
/area/ruin/powered)
"go" = (
/obj/machinery/light/small/directional/west,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"gp" = (
/mob/living/simple_animal/hostile/rat,
@@ -735,7 +731,7 @@
/turf/open/floor/plating,
/area/ruin/powered)
"gL" = (
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"gM" = (
/obj/structure/rack,
@@ -762,7 +758,7 @@
/area/ruin/powered)
"hd" = (
/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"he" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{
@@ -1123,7 +1119,7 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"kO" = (
/obj/item/trash/chips,
@@ -1133,7 +1129,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"kS" = (
/obj/effect/decal/cleanable/blood,
@@ -1507,7 +1503,7 @@
/obj/item/pneumatic_cannon/pie,
/obj/item/reagent_containers/spray/waterflower/lube,
/obj/machinery/light/small/directional/east,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"nK" = (
/obj/structure/table,
@@ -2375,7 +2371,7 @@
/obj/effect/decal/cleanable/blood,
/obj/effect/mob_spawn/human/clown/corpse,
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"vX" = (
/obj/item/ammo_casing,
@@ -2773,7 +2769,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/generic,
/obj/item/trash/cheesie,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Aa" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -3113,7 +3109,7 @@
/area/ruin/powered)
"Cy" = (
/obj/structure/closet/cardboard,
-/obj/item/coin/bananium,
+/obj/item/coin/hellstone,
/obj/item/reagent_containers/food/snacks/soup/clownstears,
/turf/open/floor/plating,
/area/ruin/powered)
@@ -4333,7 +4329,7 @@
"Ow" = (
/obj/structure/table/wood/fancy/orange,
/obj/item/clothing/under/rank/civilian/clown/rainbow,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Ox" = (
/obj/effect/decal/cleanable/dirt/dust,
@@ -4422,7 +4418,7 @@
/area/ruin/powered)
"Pr" = (
/obj/effect/decal/cleanable/dirt/dust,
-/turf/open/floor/mineral/bananium,
+/turf/open/floor/mineral/gold,
/area/ruin/powered)
"Px" = (
/mob/living/simple_animal/hostile/rat,
diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
index 436d6185ee54..93c59445ee41 100644
--- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
+++ b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm
@@ -2868,7 +2868,7 @@
pixel_x = 4;
pixel_y = 8
},
-/obj/item/coin/adamantine{
+/obj/item/coin/hellstone{
pixel_x = -12;
pixel_y = -3
},
diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm
index 6c07dd234392..ff1072ffdbad 100644
--- a/code/__DEFINES/icon_smoothing.dm
+++ b/code/__DEFINES/icon_smoothing.dm
@@ -99,7 +99,6 @@ DEFINE_BITFIELD(smoothing_flags, list(
#define SMOOTH_GROUP_SILVER_WALLS S_OBJ(3) ///turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver
#define SMOOTH_GROUP_DIAMOND_WALLS S_OBJ(4) ///turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond
#define SMOOTH_GROUP_PLASMA_WALLS S_OBJ(5) ///turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma
-#define SMOOTH_GROUP_BANANIUM_WALLS S_OBJ(6) ///turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium
#define SMOOTH_GROUP_SANDSTONE_WALLS S_OBJ(7) ///turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone
#define SMOOTH_GROUP_WOOD_WALLS S_OBJ(8) ///turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood
#define SMOOTH_GROUP_IRON_WALLS S_OBJ(9) ///turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 64339d794205..aa7b276afb59 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -128,7 +128,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/melee/cultblade, /obj/item/cult_bastard,
/obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult,
/obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
- /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
+ /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
/obj/item/soulstone,
/obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard,
diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm
index 4df0521bcff3..0ed4acb5be78 100644
--- a/code/datums/components/crafting/recipes/misc.dm
+++ b/code/datums/components/crafting/recipes/misc.dm
@@ -211,3 +211,10 @@
/obj/item/organ/heart = 1,
/obj/item/stack/sheet/cotton/cloth = 3)
category = CAT_MISC
+
+/datum/crafting_recipe/candorupgrade
+ name = "Candor Upgrade"
+ result = /obj/item/gun/ballistic/automatic/pistol/candor/phenex
+ reqs = list(/obj/item/stack/sheet/mineral/hidden = 4,
+ /obj/item/gun/ballistic/automatic/pistol/candor = 1)
+ category = CAT_MISC
diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm
index de61c13ae295..2f3aa79749b2 100644
--- a/code/datums/components/remote_materials.dm
+++ b/code/datums/components/remote_materials.dm
@@ -52,7 +52,7 @@ handles linking back and forth.
/datum/material/diamond,
/datum/material/plasma,
/datum/material/uranium,
- /datum/material/bananium,
+ /datum/material/hellstone,
/datum/material/titanium,
/datum/material/bluespace,
/datum/material/plastic,
diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm
index 98db1541c953..ed8dd509ec3b 100644
--- a/code/datums/materials/basemats.dm
+++ b/code/datums/materials/basemats.dm
@@ -127,30 +127,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
ore_type = /obj/item/stack/ore/bluespace_crystal
value_per_unit = 0.15
-///Honks and slips
-/datum/material/bananium
- name = "bananium"
- id = "bananium"
- desc = "Material with hilarious properties"
- color = "#ffff00" //obnoxiously bright yellow
- categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- ore_type = /obj/item/stack/ore/bananium
- value_per_unit = 0.5
- beauty_modifier = 0.5
- armor_modifiers = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) //Clowns cant be blown away.
-
-/datum/material/bananium/on_applied(atom/source, amount, material_flags)
- . = ..()
- source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20)
- source.AddComponent(/datum/component/slippery, min(amount / 10, 80))
-
-
-/datum/material/bananium/on_removed(atom/source, amount, material_flags)
- . = ..()
- qdel(source.GetComponent(/datum/component/slippery))
- qdel(source.GetComponent(/datum/component/squeak))
-
///Mediocre force increase
/datum/material/titanium
@@ -166,18 +142,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
beauty_modifier = 0.05
armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1)
-/datum/material/runite
- name = "runite"
- id = "runite"
- desc = "Runite"
- color = "#3F9995"
- strength_modifier = 1.3
- categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/runite
- value_per_unit = 0.3
- beauty_modifier = 0.5
- armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle.
-
///Force decrease
/datum/material/plastic
name = "plastic"
@@ -224,42 +188,20 @@ Unless you know what you're doing, only use the first three numbers. They're in
var/obj/wooden = source
wooden.resistance_flags &= ~FLAMMABLE
-///Stronk force increase
-/datum/material/adamantine
- name = "adamantine"
- id = "adamantine"
- desc = "A powerful material made out of magic, I mean science!"
- color = "#6d7e8e"
+//Remember when the theme used to be "Eerie" before 1.3? Good times.
+/datum/material/hellstone
+ name = "hellstone"
+ id = "hellstone"
+ desc = "A colloquialism given to millenia-old slag, heat-treated through the eons in deep magma."
+ color = "#ffaf5e"
strength_modifier = 1.5
categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/adamantine
+ sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+ ore_type = /obj/item/stack/ore/hellstone
value_per_unit = 0.25
beauty_modifier = 0.4
armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.3, "energy" = 1.3, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 2.5, "acid" = 1)
-///RPG Magic.
-/datum/material/mythril
- name = "mythril"
- id = "mythril"
- desc = "How this even exists is byond me"
- color = "#f2d5d7"
- categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE)
- sheet_type = /obj/item/stack/sheet/mineral/mythril
- value_per_unit = 0.75
- strength_modifier = 1.2
- armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.5, "energy" = 1.5, "bomb" = 1.5, "bio" = 1.5, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
- beauty_modifier = 0.5
-
-/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags)
- . = ..()
- if(istype(source, /obj/item))
- source.AddComponent(/datum/component/fantasy)
-
-/datum/material/mythril/on_removed_obj(atom/source, material_flags)
- . = ..()
- if(istype(source, /obj/item))
- qdel(source.GetComponent(/datum/component/fantasy))
-
//formed when freon react with o2, emits a lot of plasma when heated
/datum/material/hot_ice
name = "hot ice"
@@ -323,18 +265,6 @@ Unless you know what you're doing, only use the first three numbers. They're in
turf_sound_override = FOOTSTEP_SAND
texture_layer_icon_state = "sand"
-/datum/material/runedmetal
- name = "runed metal"
- id = "runed metal"
- desc = "Mir'ntrath barhah Nar'sie."
- color = "#3C3434"
- categories = list(MAT_CATEGORY_RIGID = TRUE)
- sheet_type = /obj/item/stack/sheet/runed_metal
- value_per_unit = 0.75
- armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5)
- beauty_modifier = -0.15
- texture_layer_icon_state = "runed"
-
/datum/material/bronze
name = "bronze"
id = "bronze"
diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm
index fe95ea3c5988..3064a52a48ad 100644
--- a/code/game/gamemodes/clown_ops/clown_weapons.dm
+++ b/code/game/gamemodes/clown_ops/clown_weapons.dm
@@ -40,14 +40,14 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize()
. = ..()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- bananium.insert_amount_mat(max_recharge, /datum/material/bananium)
+ bananium.insert_amount_mat(max_recharge, /datum/material/hellstone)
START_PROCESSING(SSobj, src)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process()
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- var/bananium_amount = bananium.get_material_amount(/datum/material/bananium)
+ var/bananium_amount = bananium.get_material_amount(/datum/material/hellstone)
if(bananium_amount < max_recharge)
- bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/bananium)
+ bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/hellstone)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user)
ui_action_click(user)
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 8e0ed982b501..492ce30f6ac4 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -264,17 +264,7 @@
opacity = FALSE
glass = TRUE
-/obj/machinery/door/airlock/bananium
- name = "bananium airlock"
- desc = "Honkhonkhonk"
- icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
- assemblytype = /obj/structure/door_assembly/door_assembly_bananium
- doorOpen = 'sound/items/bikehorn.ogg'
- has_hatch = FALSE
-/obj/machinery/door/airlock/bananium/glass
- opacity = FALSE
- glass = TRUE
/obj/machinery/door/airlock/sandstone
name = "sandstone airlock"
diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm
index af0c08162311..82265e244448 100644
--- a/code/game/machinery/recycler.dm
+++ b/code/game/machinery/recycler.dm
@@ -21,7 +21,7 @@
/obj/machinery/recycler/Initialize()
AddComponent(/datum/component/butchering/recycler, 1, amount_produced,amount_produced/5)
- AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
+ AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE)
. = ..()
update_appearance()
req_one_access = get_all_accesses() + get_all_centcom_access()
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index e3ef63e116d4..9fc6fa808a46 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -332,32 +332,6 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \
/obj/item/stack/sheet/mineral/silver/five
amount = 5
-/*
- * Clown
- */
-/obj/item/stack/sheet/mineral/bananium
- name = "bananium"
- icon_state = "sheet-bananium"
- item_state = "sheet-bananium"
- singular_name = "bananium sheet"
- sheettype = "bananium"
- custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
-
- grind_results = list(/datum/reagent/consumable/banana = 20)
- point_value = 50
- merge_type = /obj/item/stack/sheet/mineral/bananium
- material_type = /datum/material/bananium
- walltype = /turf/closed/wall/mineral/bananium
-
-GLOBAL_LIST_INIT(bananium_recipes, list ( \
- new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \
- new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \
- ))
-
-/obj/item/stack/sheet/mineral/bananium/get_main_recipes()
- . = ..()
- . += GLOB.bananium_recipes
-
/*
* Titanium
*/
@@ -436,7 +410,6 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \
. = ..()
. += GLOB.plastitanium_recipes
-
/*
* Snow
*/
@@ -465,56 +438,6 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \
. = ..()
. += GLOB.snow_recipes
-/****************************** Others ****************************/
-
-/*
- * Adamantine
-*/
-
-/obj/item/stack/sheet/mineral/adamantine
- name = "adamantine"
- icon_state = "sheet-adamantine"
- item_state = "sheet-adamantine"
- singular_name = "adamantine sheet"
- custom_materials = list(/datum/material/adamantine=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/adamantine
- grind_results = list(/datum/reagent/liquidadamantine = 10)
-
-/obj/item/stack/sheet/mineral/adamantine/ten
- amount = 10
-
-/*
- * Runite
- */
-
-/obj/item/stack/sheet/mineral/runite
- name = "runite"
- desc = "Rare material found in distant lands."
- singular_name = "runite bar"
- icon_state = "sheet-runite"
- item_state = "sheet-runite"
- custom_materials = list(/datum/material/runite=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/runite
- material_type = /datum/material/runite
-
-/obj/item/stack/sheet/mineral/runite/ten
- amount = 10
-
-/*
- * Mythril
- */
-/obj/item/stack/sheet/mineral/mythril
- name = "mythril"
- icon_state = "sheet-mythril"
- item_state = "sheet-mythril"
- singular_name = "mythril sheet"
- novariants = TRUE
- custom_materials = list(/datum/material/mythril=MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/mineral/mythril
-
-/obj/item/stack/sheet/mineral/mythril/ten
- amount = 10
-
/*
* Alien Alloy
*/
@@ -573,3 +496,35 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
/obj/item/stack/sheet/mineral/coal/ten
amount = 10
+
+/*
+ * Hellstone
+ */
+/obj/item/stack/sheet/mineral/hidden
+ name = "????????"
+ singular_name = "????????"
+
+/obj/item/stack/sheet/mineral/hidden/hellstone
+ name = "hellstone"
+ icon_state = "sheet-hellstone"
+ item_state = "sheet-hellstone"
+ singular_name = "hellstone bar"
+ sheettype = "hellstone"
+ resistance_flags = FIRE_PROOF | LAVA_PROOF
+ custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT)
+ grind_results = list(/datum/reagent/clf3 = 5)
+ point_value = 20
+ merge_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+ material_type = /datum/material/hellstone
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/fifty
+ amount = 50
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/twenty
+ amount = 20
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/ten
+ amount = 10
+
+/obj/item/stack/sheet/mineral/hidden/hellstone/five
+ amount = 5
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 00f995ed70dd..68a6772bb4e4 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -31,10 +31,6 @@
tableVariant = /obj/structure/table
material_type = /datum/material/iron
-/obj/item/stack/sheet/metal/narsie_act()
- new /obj/item/stack/sheet/runed_metal(loc, amount)
- qdel(src)
-
/obj/item/stack/sheet/metal/fifty
amount = 50
@@ -444,52 +440,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
else
. = ..()
-
-/*
- * Runed Metal
- */
-
-GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
- new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \
- ))
-
-/obj/item/stack/sheet/runed_metal
- name = "runed metal"
- desc = "Sheets of cold metal with shifting inscriptions writ upon them."
- singular_name = "runed metal sheet"
- icon_state = "sheet-runed"
- item_state = "sheet-runed"
- icon = 'icons/obj/stack_objects.dmi'
- custom_materials = list(/datum/material/runedmetal = MINERAL_MATERIAL_AMOUNT)
- merge_type = /obj/item/stack/sheet/runed_metal
- novariants = TRUE
- grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15)
- material_type = /datum/material/runedmetal
-
-/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user)
- if(!iscultist(user))
- to_chat(user, "Only one with forbidden knowledge could hope to work this metal...")
- return FALSE
- return ..()
-
-/obj/item/stack/sheet/runed_metal/get_main_recipes()
- . = ..()
- . += GLOB.runed_metal_recipes
-
-/obj/item/stack/sheet/runed_metal/fifty
- amount = 50
-
-/obj/item/stack/sheet/runed_metal/ten
- amount = 10
-
-/obj/item/stack/sheet/runed_metal/five
- amount = 5
-
/*
* Bronze
*/
diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm
index c5e05b5212fc..ad00f3902c50 100644
--- a/code/game/objects/items/stacks/tiles/tile_mineral.dm
+++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm
@@ -48,16 +48,6 @@
mineralType = "diamond"
custom_materials = list(/datum/material/diamond=500)
-/obj/item/stack/tile/mineral/bananium
- name = "bananium tile"
- singular_name = "bananium floor tile"
- desc = "A tile made out of bananium, HOOOOOOOOONK!"
- icon_state = "tile_bananium"
- item_state = "tile-bananium"
- turf_type = /turf/open/floor/mineral/bananium
- mineralType = "bananium"
- custom_materials = list(/datum/material/bananium=500)
-
/obj/item/stack/tile/mineral/abductor
name = "alien floor tile"
singular_name = "alien floor tile"
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index fb001b2eb56b..a7fdbc05691a 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -1370,10 +1370,10 @@
/obj/item/stack/sheet/mineral/uranium=20,\
/obj/item/stack/sheet/mineral/diamond=50,\
/obj/item/stack/sheet/bluespace_crystal=50,\
- /obj/item/stack/sheet/mineral/bananium=50,\
+ /obj/item/stack/sheet/mineral/hidden/hellstone=50,\
/obj/item/stack/sheet/mineral/wood=50,\
/obj/item/stack/sheet/plastic/fifty=1,\
- /obj/item/stack/sheet/runed_metal/fifty=1
+ /obj/item/stack/sheet/mineral/hidden/hellstone/fifty=1
)
generate_items_inside(items_inside,src)
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index ee9a29945aa0..fc0aae860782 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -105,7 +105,7 @@
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/uranium,
/obj/item/stack/sheet/mineral/diamond,
- /obj/item/stack/sheet/mineral/bananium,
+ /obj/item/stack/sheet/mineral/hidden/hellstone,
/obj/item/stack/sheet/plasteel,
/obj/item/stack/sheet/mineral/titanium,
/obj/item/stack/sheet/mineral/plastitanium,
diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm
index 2558993a5278..d2bcf77cfda7 100644
--- a/code/game/objects/structures/door_assembly_types.dm
+++ b/code/game/objects/structures/door_assembly_types.dm
@@ -214,14 +214,6 @@
mineral = "plasma"
glass_type = /obj/machinery/door/airlock/plasma/glass
-/obj/structure/door_assembly/door_assembly_bananium
- name = "bananium airlock assembly"
- desc = "Honk."
- icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
- base_name = "bananium airlock"
- airlock_type = /obj/machinery/door/airlock/bananium
- mineral = "bananium"
- glass_type = /obj/machinery/door/airlock/bananium/glass
/obj/structure/door_assembly/door_assembly_sandstone
name = "sandstone airlock assembly"
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index a0097504c1d3..d5a8c3e496c1 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -269,19 +269,6 @@
if(exposed_temperature > 300)
burnbabyburn()
-/obj/structure/falsewall/bananium
- name = "bananium wall"
- desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- mineral = /obj/item/stack/sheet/mineral/bananium
- walltype = /turf/closed/wall/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
-
-
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 25822d69ff00..6463282eb6df 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -364,7 +364,7 @@
add_fingerprint(user)
if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes
user.visible_message("[user] strikes [src] with [W]!", "You demolish [src].")
- new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1)
qdel(src)
else if(W.tool_behaviour == TOOL_WELDER)
@@ -374,19 +374,19 @@
to_chat(user, "You start slicing apart the girder...")
if(W.use_tool(src, user, 40, volume=50))
to_chat(user, "You slice apart the girder.")
- var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1)
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 1)
transfer_fingerprints_to(R)
qdel(src)
else if(istype(W, /obj/item/pickaxe/drill/jackhammer))
to_chat(user, "Your jackhammer smashes through the girder!")
- var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 2)
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 2)
transfer_fingerprints_to(R)
W.play_tool_sound(src)
qdel(src)
- else if(istype(W, /obj/item/stack/sheet/runed_metal))
- var/obj/item/stack/sheet/runed_metal/R = W
+ else if(istype(W, /obj/item/stack/sheet/mineral/hidden/hellstone))
+ var/obj/item/stack/sheet/mineral/hidden/hellstone/R = W
if(R.get_amount() < 1)
to_chat(user, "You need at least one sheet of runed metal to construct a runed wall!")
return 0
@@ -408,7 +408,7 @@
/obj/structure/girder/cult/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1)
qdel(src)
/obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm
index 07ecef04afac..d1fc91c8e596 100644
--- a/code/game/objects/structures/icemoon/cave_entrance.dm
+++ b/code/game/objects/structures/icemoon/cave_entrance.dm
@@ -5,7 +5,6 @@ GLOBAL_LIST_INIT(ore_probability, list(
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/gold = 50,
/obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/bananium = 5,
/obj/item/stack/ore/titanium = 75,
/obj/item/pickaxe/diamond = 15,
/obj/item/borg/upgrade/modkit/cooldown = 5,
@@ -258,8 +257,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /mob/living/simple_animal/hostile/clown/fleshclown(loc)
if(prob(25))//you lost
new /obj/item/circlegame(loc)
- new /obj/item/stack/sheet/mineral/bananium(loc)
- new /turf/open/floor/mineral/bananium(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(loc)
if(2)//basic demonic incursion
visible_message("You glimpse an indescribable abyss in the portal. Horrifying monsters appear in a gout of flame.")
playsound(loc,'sound/hallucinations/wail.ogg', 200, FALSE, 50, TRUE, TRUE)
@@ -618,19 +616,19 @@ GLOBAL_LIST_INIT(ore_probability, list(
visible_message("You catch a brief glimpse of a vast production complex. One of the assembly lines outputs through the portal!")
playsound(loc,'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, 50, TRUE, TRUE)
if(prob(45))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot(loc)
if(prob(35))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot(loc)
if(prob(25))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot/strong(loc)
if(prob(35))
new /obj/item/stack/sheet/mineral/silver/twenty(loc)
@@ -665,9 +663,9 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /obj/item/circuitboard/machine/ore_silo(loc)
new /mob/living/simple_animal/hostile/hivebot/mechanic(loc)
if(prob(35))
- new /obj/item/stack/sheet/mineral/adamantine/ten(loc)
- new /obj/item/stack/sheet/mineral/runite/ten(loc)
- new /obj/item/stack/sheet/mineral/mythril/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
new /mob/living/simple_animal/hostile/hivebot/strong(loc)
if(prob(35))
new /obj/item/circuitboard/machine/medipen_refiller(loc)
@@ -838,7 +836,7 @@ GLOBAL_LIST_INIT(ore_probability, list(
new /obj/item/bedsheet/cult(loc)
new /mob/living/simple_animal/hostile/construct/wraith/hostile(loc)
if(prob(50))
- new /obj/item/stack/sheet/runed_metal/ten(loc)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc)
if(prob(35))
new /obj/item/sharpener/cult(loc)
new /mob/living/simple_animal/hostile/construct/artificer/hostile(loc)
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index 9773221f0c22..c3c8e07cc3ab 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -5,7 +5,7 @@ GLOBAL_LIST_INIT(astroloot, list(
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/gold = 50,
/obj/item/stack/ore/diamond = 25,
- /obj/item/stack/ore/bananium = 5,
+ /obj/item/stack/ore/hellstone = 5,
/obj/item/stack/ore/titanium = 75,
/obj/item/pickaxe/diamond = 15,
/obj/item/borg/upgrade/modkit/cooldown = 5,
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index 642c2c2efdd4..9f51ba34476a 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -224,7 +224,7 @@
/obj/structure/statue/bananium
max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/bananium
+ material_drop_type = /obj/item/stack/sheet/mineral/hidden/hellstone
impressiveness = 50
desc = "A bananium statue with a small engraving:'HOOOOOOONK'."
var/spam_flag = 0
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index cfede10541d4..bb5d6f7311c0 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -86,47 +86,6 @@
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS)
canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS)
-/turf/closed/indestructible/riveted/supermatter
- name = "wall"
- desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern."
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- smoothing_flags = SMOOTH_BITMASK
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS)
-
-/turf/closed/indestructible/riveted/supermatter/Bumped(atom/movable/AM)
- if(isliving(AM))
- AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!",\
- "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
- "You hear an unearthly noise as a wave of heat washes over you.")
- else if(isobj(AM) && !iseffect(AM))
- AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\
- "You hear a loud crack as you are washed with a wave of heat.")
- else
- return
-
- playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, TRUE)
- Consume(AM)
-
-/turf/closed/indestructible/riveted/supermatter/proc/Consume(atom/movable/AM)
- if(isliving(AM))
- var/mob/living/user = AM
- if(user.status_flags & GODMODE)
- return
- message_admins("[src] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].")
- investigate_log("has consumed [key_name(user)].", INVESTIGATE_SUPERMATTER)
- user.dust(force = TRUE)
- else if(isobj(AM))
- if(!iseffect(AM))
- var/suspicion = ""
- if(AM.fingerprintslast)
- suspicion = "last touched by [AM.fingerprintslast]"
- message_admins("[src] has consumed [AM], [suspicion] [ADMIN_JMP(src)].")
- investigate_log("has consumed [AM] - [suspicion].", INVESTIGATE_SUPERMATTER)
- qdel(AM)
-
/turf/closed/indestructible/syndicate
icon = 'icons/turf/walls/plastitanium_wall.dmi'
icon_state = "plastitanium_wall-0"
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index ab46afa7e884..370afeaeedf2 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -281,14 +281,13 @@
light_range = 2
light_power = 1
-
/turf/closed/mineral/random/snow/underground
baseturfs = /turf/open/floor/plating/asteroid/snow/icemoon
// abundant ore
mineralChance = 10
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 10, /obj/item/stack/ore/diamond = 4, /obj/item/stack/ore/gold = 20, /obj/item/stack/ore/titanium = 22,
- /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /obj/item/stack/ore/bananium = 1,
+ /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20,
/turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2)
/turf/closed/mineral/random/snow/high_chance
@@ -404,11 +403,6 @@
initial_gas_mix = FROZEN_ATMOS
defer_change = TRUE
-/turf/closed/mineral/bananium
- mineralType = /obj/item/stack/ore/bananium
- mineralAmt = 3
- scan_state = "rock_Bananium"
-
/turf/closed/mineral/bscrystal
mineralType = /obj/item/stack/ore/bluespace_crystal
mineralAmt = 1
@@ -650,10 +644,7 @@
H.mind.adjust_experience(/datum/skill/mining, 100) //yay!
/turf/closed/mineral/strong/proc/drop_ores()
- if(prob(10))
- new /obj/item/stack/sheet/mineral/mythril(src, 5)
- else
- new /obj/item/stack/sheet/mineral/adamantine(src, 5)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 5)
/turf/closed/mineral/strong/acid_melt()
return
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 720a95afd0e1..89a00d04c142 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -68,24 +68,6 @@
icon_state = "diamond_wall-255"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
-/turf/closed/wall/mineral/bananium
- name = "bananium wall"
- desc = "A wall with bananium plating. Honk!"
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium_wall-0"
- base_icon_state = "bananium_wall"
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_CONNECTORS
- smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS)
- canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS, SMOOTH_GROUP_WALLS,SMOOTH_GROUP_AIRLOCK)
- connector_icon = 'icons/turf/connectors/bananium_wall_connector.dmi'
- connector_icon_state = "bananium_wall_connector"
- no_connector_typecache = list(/turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium)
-
-/turf/closed/wall/mineral_bananium/yesdiag
- icon_state = "bananium_wall-255"
- smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS
-
/turf/closed/wall/mineral/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating. Rough."
diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm
index e6e5c8f0c557..20fcb2cb9f57 100644
--- a/code/game/turfs/closed/wall/misc_walls.dm
+++ b/code/game/turfs/closed/wall/misc_walls.dm
@@ -6,7 +6,7 @@
base_icon_state = "cult_wall"
smoothing_flags = SMOOTH_BITMASK
canSmoothWith = null
- sheet_type = /obj/item/stack/sheet/runed_metal
+ sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone
sheet_amount = 1
girder_type = /obj/structure/girder/cult
diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm
index 476a69fa468d..5d53a162b087 100644
--- a/code/game/turfs/open/floor/mineral_floor.dm
+++ b/code/game/turfs/open/floor/mineral_floor.dm
@@ -172,48 +172,6 @@
/turf/open/floor/mineral/plastitanium/red/brig
name = "brig floor"
-//BANANIUM
-
-/turf/open/floor/mineral/bananium
- name = "bananium floor"
- icon_state = "bananium"
- floor_tile = /obj/item/stack/tile/mineral/bananium
- icons = list("bananium","bananium_dam")
- var/spam_flag = 0
-
-/turf/open/floor/mineral/bananium/Entered(atom/movable/AM)
- .=..()
- if(!.)
- if(isliving(AM))
- squeak()
-
-/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_hand(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_paw(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/proc/honk()
- if(spam_flag < world.time)
- playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
- spam_flag = world.time + 20
-
-/turf/open/floor/mineral/bananium/proc/squeak()
- if(spam_flag < world.time)
- playsound(src, "clownstep", 50, TRUE)
- spam_flag = world.time + 10
-
-/turf/open/floor/mineral/bananium/airless
- initial_gas_mix = AIRLESS_ATMOS
//DIAMOND
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 99f1d590c05a..eb2132940bd9 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -18,6 +18,8 @@
heavyfootstep = FOOTSTEP_LAVA
var/particle_emitter = /obj/effect/particle_emitter/lava
+ /// Whether the lava has been dug with hellstone found successfully
+ var/is_mined = FALSE
/turf/open/lava/Initialize(mapload)
. = ..()
@@ -100,10 +102,10 @@
/turf/open/lava/TakeTemperature(temp)
-/turf/open/lava/attackby(obj/item/C, mob/user, params)
+/turf/open/lava/attackby(obj/item/attacking_item, mob/user, params)
..()
- if(istype(C, /obj/item/stack/rods/lava))
- var/obj/item/stack/rods/lava/R = C
+ if(istype(attacking_item, /obj/item/stack/rods/lava))
+ var/obj/item/stack/rods/lava/R = attacking_item
var/obj/structure/lattice/lava/H = locate(/obj/structure/lattice/lava, src)
if(H)
to_chat(user, "There is already a lattice here!")
@@ -115,6 +117,19 @@
else
to_chat(user, "You need one rod to build a heatproof lattice.")
return
+ if(attacking_item.tool_behaviour == TOOL_MINING && (attacking_item.custom_materials[SSmaterials.GetMaterialRef(/datum/material/diamond)]))
+ if(is_mined)
+ to_chat(user, span_notice("This has already been cleared out of hellstone..."))
+ return FALSE
+ to_chat(user, span_notice("You start parting away [src]..."))
+ if(attacking_item.use_tool(src, user, 175, volume=30))
+ to_chat(user, span_notice("You part away [src]."))
+ playsound(src, 'sound/effects/break_stone.ogg', 30, TRUE)
+ if (prob(10))
+ new /obj/item/stack/ore/hellstone(src)
+ is_mined = TRUE
+ return TRUE
+ return FALSE
/turf/open/lava/proc/is_safe()
//if anything matching this typecache is found in the lava, we don't burn things
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 003abfd42991..00dc550c11ce 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -601,7 +601,7 @@
var/quantity = candidate.amount
if(candidate.use(quantity))
uses --
- new /obj/item/stack/sheet/runed_metal(T,quantity)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(T,quantity)
to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!")
SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
else if(istype(target,/mob/living/silicon/robot))
diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm
index e7f37d37f4a6..406c51956035 100644
--- a/code/modules/antagonists/cult/cult.dm
+++ b/code/modules/antagonists/cult/cult.dm
@@ -61,7 +61,7 @@
var/mob/living/current = owner.current
add_objectives()
if(give_equipment)
- equip_cultist(TRUE)
+ equip_cultist()
SSticker.mode.cult += owner // Only add after they've been given objectives
current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000")
@@ -69,13 +69,11 @@
current.client.images += cult_team.blood_target_image
-/datum/antagonist/cult/proc/equip_cultist(metal=TRUE)
+/datum/antagonist/cult/proc/equip_cultist()
var/mob/living/carbon/H = owner.current
if(!istype(H))
return
. += cult_give_item(/obj/item/melee/cultblade/dagger, H)
- if(metal)
- . += cult_give_item(/obj/item/stack/sheet/runed_metal/ten, H)
to_chat(owner, "These will help you jumpstart a cult of your own in this sector. Use them well, and remember - you are not the only one.")
@@ -163,21 +161,16 @@
/datum/antagonist/cult/get_admin_commands()
. = ..()
.["Dagger"] = CALLBACK(src, PROC_REF(admin_give_dagger))
- .["Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_give_metal))
- .["Remove Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_take_all))
+ .["Metal"] = CALLBACK(src, PROC_REF(admin_take_all))
/datum/antagonist/cult/proc/admin_give_dagger(mob/admin)
- if(!equip_cultist(metal=FALSE))
+ if(!equip_cultist())
to_chat(admin, "Spawning dagger failed!")
-/datum/antagonist/cult/proc/admin_give_metal(mob/admin)
- if (!equip_cultist(metal=TRUE))
- to_chat(admin, "Spawning runed metal failed!")
-
/datum/antagonist/cult/proc/admin_take_all(mob/admin)
var/mob/living/current = owner.current
for(var/o in current.GetAllContents())
- if(istype(o, /obj/item/melee/cultblade/dagger) || istype(o, /obj/item/stack/sheet/runed_metal))
+ if(istype(o, /obj/item/melee/cultblade/dagger))
qdel(o)
/datum/antagonist/cult/master
diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm
index 66526d96a34f..60816a90d45d 100644
--- a/code/modules/antagonists/cult/cult_structures.dm
+++ b/code/modules/antagonists/cult/cult_structures.dm
@@ -5,7 +5,7 @@
light_power = 2
var/cooldowntime = 0
break_sound = 'sound/hallucinations/veryfar_noise.ogg'
- debris = list(/obj/item/stack/sheet/runed_metal = 1)
+ debris = list(/obj/item/stack/sheet/mineral/hidden/hellstone = 1)
/obj/structure/destructible/cult/proc/conceal() //for spells that hide cult presence
density = FALSE
diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm
index af61a6698e44..fa581504ca89 100644
--- a/code/modules/cargo/bounties/special.dm
+++ b/code/modules/cargo/bounties/special.dm
@@ -19,12 +19,12 @@
return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate))
return TRUE
-/datum/bounty/item/adamantine
- name = "Adamantine"
- description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while."
+/datum/bounty/item/hellstone
+ name = "Hellstone"
+ description = "Nanotrasen's anomalous materials division is in desparate need for Hellstone. Send them a large shipment and we'll make it worth your while."
reward = 35000
required_count = 10
- wanted_types = list(/obj/item/stack/sheet/mineral/adamantine)
+ wanted_types = list(/obj/item/stack/sheet/mineral/hidden/hellstone)
/datum/bounty/item/trash
name = "Trash"
diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm
index 01efd57be70b..3807e9bd6984 100644
--- a/code/modules/cargo/bounty.dm
+++ b/code/modules/cargo/bounty.dm
@@ -166,7 +166,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
/********************************Low Priority Gens********************************/
var/list/low_priority_strict_type_list = list( /datum/bounty/item/alien_organs,
/datum/bounty/item/syndicate_documents,
- /datum/bounty/item/adamantine,
+ /datum/bounty/item/hellstone,
/datum/bounty/item/trash,
/datum/bounty/more_bounties)
diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm
index 1bf35a94c440..f81654978ac2 100644
--- a/code/modules/cargo/exports/materials.dm
+++ b/code/modules/cargo/exports/materials.dm
@@ -26,11 +26,6 @@
// Materials. Prices have been heavily nerfed from the original values; mining is boring, so it shouldn't be a good way to make money.
-/datum/export/material/bananium
- cost = 250
- material_id = /datum/material/bananium
- message = "cm3 of bananium"
-
/datum/export/material/diamond
cost = 125
material_id = /datum/material/diamond
@@ -62,15 +57,10 @@
material_id = /datum/material/titanium
message = "cm3 of titanium"
-/datum/export/material/adamantine
+/datum/export/material/hellstone
cost = 125
- material_id = /datum/material/adamantine
- message = "cm3 of adamantine"
-
-/datum/export/material/mythril
- cost = 375
- material_id = /datum/material/mythril
- message = "cm3 of mythril"
+ material_id = /datum/material/hellstone
+ message = "cm3 of hellstone"
/datum/export/material/bscrystal
cost = 75
@@ -82,11 +72,6 @@
message = "cm3 of plastic"
material_id = /datum/material/plastic
-/datum/export/material/runite
- cost = 150
- message = "cm3 of runite"
- material_id = /datum/material/runite
-
/datum/export/material/metal
cost = 2
message = "cm3 of metal"
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
index a09ea07a3250..4ed246a587be 100644
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ b/code/modules/clothing/shoes/bananashoes.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
- AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
+ AddComponent(/datum/component/material_container, list(/datum/material/hellstone), 200000, TRUE, /obj/item/stack)
AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
@@ -24,7 +24,7 @@
var/mob/wearer = loc
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
if(on && istype(wearer))
- if(bananium.get_material_amount(/datum/material/bananium) < 100)
+ if(bananium.get_material_amount(/datum/material/hellstone) < 100)
on = !on
if(!always_noslip)
clothing_flags &= ~NOSLIP
@@ -32,7 +32,7 @@
to_chat(loc, "You ran out of bananium!")
else
new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(wearer.dir, 180))) //honk
- bananium.use_amount_mat(100, /datum/material/bananium)
+ bananium.use_amount_mat(100, /datum/material/hellstone)
/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
@@ -48,7 +48,7 @@
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- if(bananium.get_material_amount(/datum/material/bananium))
+ if(bananium.get_material_amount(/datum/material/hellstone))
on = !on
update_appearance()
to_chat(user, "You [on ? "activate" : "deactivate"] the prototype shoes.")
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index bce5d5bd2445..4e3f6d5e3a9c 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -67,6 +67,11 @@
desc = "Worn by high ranking vampires of the transylvanian society of vampires."
icon_state = "trans"
+/obj/item/clothing/neck/cloak/bi
+ name = "solarian marine biologist cloak"
+ desc = "Commonly worn by members of the Solarian Marine Biologist Society, dedicated to the study and preservation of marine wildlife."
+ icon_state = "bi"
+
/obj/item/clothing/suit/hooded/cloak/goliath
name = "goliath cloak"
icon_state = "goliath_cloak"
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
index 0d7f403b538d..d0558f94fdb5 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm
@@ -152,7 +152,7 @@
/datum/reagent/water = 10,
/obj/item/reagent_containers/glass/bowl = 1,
/obj/item/reagent_containers/food/snacks/grown/banana = 1,
- /obj/item/stack/ore/bananium = 1
+ /obj/item/stack/sheet/mineral/hidden/hellstone = 1
)
result = /obj/item/reagent_containers/food/snacks/soup/clownstears
subcategory = CAT_SOUP
diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm
index 613a68a2de47..d86cfebf1197 100644
--- a/code/modules/mining/abandoned_crates.dm
+++ b/code/modules/mining/abandoned_crates.dm
@@ -192,7 +192,7 @@
if(77 to 78)
new /obj/item/toy/plush/lizardplushie(src)
if(79 to 80)
- new /obj/item/stack/sheet/mineral/bananium(src, 10)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 10)
if(81 to 82)
new /obj/item/bikehorn/airhorn(src)
if(83 to 84)
diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm
index ed8be5000a66..d38a3ce8b55b 100644
--- a/code/modules/mining/equipment/mining_tools.dm
+++ b/code/modules/mining/equipment/mining_tools.dm
@@ -53,6 +53,7 @@
force = 19
custom_price = 1500
custom_premium_price = 2000
+ custom_materials = list(/datum/material/diamond=2000)
/obj/item/pickaxe/drill
name = "mining drill"
@@ -81,6 +82,7 @@
toolspeed = 0.2
desc = "EXOCOM's improvement on the NT autodrill design, featuring a premium diamond cutting head. Yours is the drill that will pierce the heavens!"
force = 20
+ custom_materials = list(/datum/material/diamond=2000)
/obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version!
name = "diamond-tipped integrated mining drill" //To inherit the NODROP_1 flag, and easier to change borg specific drill mechanics.
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 74d35e830a7e..0ae29ca8ee54 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -143,7 +143,7 @@
/obj/machinery/mineral/processing_unit/Initialize()
. = ..()
proximity_monitor = new(src, 1)
- AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
+ AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack)
stored_research = new /datum/techweb/specialized/autounlocking/smelter
selected_material = SSmaterials.GetMaterialRef(/datum/material/iron)
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index fd36a4bb4ab1..65aea8732d03 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -17,7 +17,7 @@
var/points = 0
var/ore_multiplier = 1
var/point_upgrade = 1
- var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50, /datum/material/bananium = 60)
+ var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50, /datum/material/hellstone = 60)
/// Variable that holds a timer which is used for callbacks to `send_console_message()`. Used for preventing multiple calls to this proc while the ORM is eating a stack of ores.
var/console_notify_timer
var/datum/techweb/stored_research
diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm
index 788d1c102f75..6a210f4d87ff 100644
--- a/code/modules/mining/machine_silo.dm
+++ b/code/modules/mining/machine_silo.dm
@@ -22,10 +22,10 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
/datum/material/diamond,
/datum/material/plasma,
/datum/material/uranium,
- /datum/material/bananium,
/datum/material/titanium,
/datum/material/bluespace,
/datum/material/plastic,
+ /datum/material/hellstone,
)
AddComponent(/datum/component/material_container, materials_list, INFINITY, allowed_types=/obj/item/stack, _disable_attackby=TRUE)
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 707d68a871f7..cc2a9f176c70 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -33,7 +33,7 @@
wanted_objects = list(
/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver,
/obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron,
- /obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium)
+ /obj/item/stack/ore/hellstone, /obj/item/stack/ore/titanium)
healable = 0
loot = list(/obj/effect/decal/cleanable/robot_debris)
del_on_death = TRUE
diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm
index 33117d99c518..79c2f0d52208 100644
--- a/code/modules/mining/mint.dm
+++ b/code/modules/mining/mint.dm
@@ -24,11 +24,8 @@
/datum/material/uranium,
/datum/material/titanium,
/datum/material/diamond,
- /datum/material/bananium,
- /datum/material/adamantine,
- /datum/material/mythril,
/datum/material/plastic,
- /datum/material/runite
+ /datum/material/hellstone,
), MINERAL_MATERIAL_AMOUNT * 75, FALSE, /obj/item/stack)
chosen = SSmaterials.GetMaterialRef(chosen)
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index 46011ae8ec7e..2c8ac19a353a 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -26,4 +26,4 @@
new /obj/item/coin/silver(src)
new /obj/item/coin/gold(src)
new /obj/item/coin/gold(src)
- new /obj/item/coin/adamantine(src)
+ new /obj/item/coin/hellstone(src)
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
index ec971ed84bed..1dfe590cac0a 100644
--- a/code/modules/mining/ores_coins.dm
+++ b/code/modules/mining/ores_coins.dm
@@ -217,16 +217,6 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
mine_experience = 10
scan_state = "rock_Diamond"
-/obj/item/stack/ore/bananium
- name = "bananium ore"
- icon_state = "Bananium ore"
- item_state = "Bananium ore"
- singular_name = "bananium ore chunk"
- points = 60
- custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/bananium
- mine_experience = 15
- scan_state = "rock_Bananium"
/obj/item/stack/ore/titanium
name = "titanium ore"
@@ -240,6 +230,16 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
scan_state = "rock_Titanium"
spreadChance = 5
+/obj/item/stack/ore/hellstone
+ name = "hellstone ore"
+ icon_state = "hellstone-ore"
+ item_state = "hellstone-ore"
+ singular_name = "hellstone ore chunk"
+ resistance_flags = LAVA_PROOF
+ points = 50
+ custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT)
+ refined_type = /obj/item/stack/sheet/mineral/hidden/hellstone
+
/obj/item/stack/ore/slag
name = "slag"
desc = "Completely useless."
@@ -458,20 +458,11 @@ GLOBAL_LIST_INIT(sand_recipes, list(\
/obj/item/coin/titanium
custom_materials = list(/datum/material/titanium = 400)
-/obj/item/coin/bananium
- custom_materials = list(/datum/material/bananium = 400)
-
-/obj/item/coin/adamantine
- custom_materials = list(/datum/material/adamantine = 400)
-
-/obj/item/coin/mythril
- custom_materials = list(/datum/material/mythril = 400)
-
/obj/item/coin/plastic
custom_materials = list(/datum/material/plastic = 400)
-/obj/item/coin/runite
- custom_materials = list(/datum/material/runite = 400)
+/obj/item/coin/hellstone
+ custom_materials = list(/datum/material/hellstone = 400)
/obj/item/coin/twoheaded
desc = "Hey, this coin's the same on both sides!"
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 1cb86fec256d..4c3aafad7ce3 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -79,6 +79,12 @@
/obj/item/gun/ballistic/automatic/pistol/candor/factory/no_mag
spawnwithmagazine = FALSE
+/obj/item/gun/ballistic/automatic/pistol/candor/phenex
+ name = "\improper HP Phenex"
+ desc = "A uniquely modified version of the Candor, famously created by Hunter's Pride. Named after the daemonic Phoenix of legend that the Ashen Huntsman had once slain, this hell-kissed weapon is more visually intimidating than its original counterpart, but mechanically acts the same. Chambered in .45."
+ icon_state = "phenex"
+ item_state = "hp_phenex"
+
/obj/item/gun/ballistic/automatic/pistol/deagle
name = "\improper Desert Eagle"
desc = "An oversized handgun chambered in .50 AE. A true hand cannon."
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 10cd8ffc72eb..e7494191d1df 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -56,7 +56,7 @@
/datum/chemical_reaction/adamantinesolidification/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
- new /obj/item/stack/sheet/mineral/adamantine(location)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(location)
/datum/chemical_reaction/silversolidification
required_reagents = list(/datum/reagent/silver = 20, /datum/reagent/consumable/frostoil = 5, /datum/reagent/carbon = 10)
diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
index 97290d54213f..d3bf1e211290 100644
--- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm
+++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm
@@ -425,7 +425,7 @@
required_other = TRUE
/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder)
- new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(holder.my_atom))
..()
//Bluespace
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index dfd373dcd3d7..46dddeb0c586 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -445,7 +445,7 @@
id = "honk_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_torso
- materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/bananium=10000)
+ materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/hellstone=10000)
construction_time = 300
category = list("H.O.N.K")
@@ -454,7 +454,7 @@
id = "honk_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_head
- materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -463,7 +463,7 @@
id = "honk_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_left_arm
- materials = list(/datum/material/iron=15000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -472,7 +472,7 @@
id = "honk_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_arm
- materials = list(/datum/material/iron=15000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -481,7 +481,7 @@
id = "honk_left_leg"
build_type = MECHFAB
build_path =/obj/item/mecha_parts/part/honker_left_leg
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -490,7 +490,7 @@
id = "honk_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/honker_right_leg
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 200
category = list("H.O.N.K")
@@ -657,7 +657,7 @@
id = "mech_mousetrap_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -666,7 +666,7 @@
id = "mech_banana_mortar"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar
- materials = list(/datum/material/iron=20000,/datum/material/bananium=5000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000)
construction_time = 300
category = list("Exosuit Equipment")
@@ -675,7 +675,7 @@
id = "mech_honker"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker
- materials = list(/datum/material/iron=20000,/datum/material/bananium=10000)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=10000)
construction_time = 500
category = list("Exosuit Equipment")
@@ -684,7 +684,7 @@
id = "mech_punching_face"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove
- materials = list(/datum/material/iron=20000,/datum/material/bananium=7500)
+ materials = list(/datum/material/iron=20000,/datum/material/hellstone=7500)
construction_time = 400
category = list("Exosuit Equipment")
@@ -769,7 +769,7 @@
id = "borg_transform_clown"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/transform/clown
- materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/bananium = 1000)
+ materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/hellstone = 1000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index 343ff920df20..95a03b829608 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -476,7 +476,7 @@
desc = "Makes death amusing."
id = "implant_trombone"
build_type = PROTOLATHE
- materials = list(/datum/material/glass = 500, /datum/material/bananium = 500)
+ materials = list(/datum/material/glass = 500, /datum/material/hellstone = 500)
build_path = /obj/item/implantcase/sad_trombone
category = list("Medical Designs")
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index eeca189ef2dc..816cd4f9fdbf 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -130,7 +130,7 @@
desc = "Damn son, where'd you find this?"
id = "air_horn"
build_type = PROTOLATHE
- materials = list(/datum/material/iron = 4000, /datum/material/bananium = 1000)
+ materials = list(/datum/material/iron = 4000, /datum/material/hellstone = 1000)
build_path = /obj/item/bikehorn/airhorn
category = list("Equipment")
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
index 501ff548e08f..25aa79302918 100644
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ b/code/modules/research/xenobiology/crossbreeding/charged.dm
@@ -146,7 +146,7 @@ Charged extracts:
effect_desc = "Creates bananium. Oh no."
/obj/item/slimecross/charged/pyrite/do_effect(mob/user)
- new /obj/item/stack/sheet/mineral/bananium(get_turf(user), 10)
+ new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(user), 10)
user.visible_message("[src] solidifies with a horrifying banana stench!")
..()
diff --git a/icons/effects/ore_visuals.dmi b/icons/effects/ore_visuals.dmi
index 1353a2d814ad318313b994ee7490af4e58840184..b64b8f0427e2c58524a30de282ed775bb176738c 100644
GIT binary patch
literal 21414
zcmeHvXH-+!+wY;-XrqkM1RNb@7%3_xAWcPOMw-e1N(&AGB9b62KnMW~4k9p&6zL)Y
zDgpvRXekt7s6puj5|9!gkOTq*NJ#F<_HB$}U*fLX
zT1xLz+6MrD^sm2Mybb`nqX9tT<(^&OH~3`tQShTK;
Y7rlZ!1APO6ec>;9~a
z7}&L9_C~|;)k3YcNarh0Pw5wi%IRauv!!3JhxdOmz8s5{HQXKiou0hOxy|rs-}PNv
zr4Eni=FdC)-K3J%MCu;Ai#Vbi+W`RA-~4*<{BL2|OA{{728M67ujnc~DfH-m(4#f(
zc9`_TxV6^eIq$EpE5SjzduQ)ebno3f^`0
z*j7H*3%#2>X}H(cFX;Zgd-NkuJzvW3={GA0+LB#^-8}BrF9jJnlG}Kd-biY8zmkH&
zPaq)$!#eVL8C&Ap90&;6L-^112XT*Yv*_(tpa`|XlT>ylB_J15yxYig2&FKwu
zl%jP7!3uemo=HA^O(I&gvT(w{K#U;%A!=v4$kY(Vm}tO+V9O;8Er8f_Nrxl)E-C`r
z*Bf?r_x#8|xhp!ivWB#N{0!jgWsIOV&NC87_|4Of98vSmcjZ`Svt*&)cx>);iT0i~
z5B{-Io!%Y${R)8g1q{coR82+kPLE08lmnqOy$yPN+&z?zghk-`KT=U2>S!+<+JJyk
zlZ`TjqK}BjVXJg)?EF=i0{Z6y%PiKX2_-ZXxm+E%$-K29AMqz3m9IL&8XdBr;ECek
z`d_9L#Y#79a=d5bf-IJwYUC8%)C=f+yw!a^75kxOeMW8}5C
zBF-{e_4H89uvuR)CUPZvg}s5ZWtq3{a_*8vWM=4Eh3~9i&&~RoCkg<4#&`GRp7H9e
zB|*xatKWrhjQS9}lh75%*GBVPs=RGj-MYjV>x7F>V9o7aPq)^P)a;Hco<+uo2
zy)r5whW)h9&+iQy!rlUv)2P^TQq~!0FEPS6fz|
zxv5;laH=hv8Cs`(skg6w4C+khWZ{7Av)N#FAG!-hm&RTL`Lyp{_asxrHHF;
zvo07U?kczRF1K_Fv0O>&9L8~{SDS0nDetYsqklozF!XlIJd31ryk4#^&BP3SylEdR
z%IqPXEvRYFH2qqBeD^LWo>q1S)%46SvKlyd9OPZDt*>0d~}BH0Gd)$O$HOjcT7
zFiKVseBMqmwN;;|Y7*9WO{(vqxX1kYka#M}+$gk({mhKTo|LoM;uhn=BfhvCTh*^O
z0sa_pAM&kHRk_o1v&y4;xPgNotFJ&u_%{@yNS3i}qZ^H~240MlvlI5lHpn?n=El<`
zeRbQE)fsaWm-+_YMEYkSAcs5M{CKVv2-v&$l)_=)@zz-erQ?yT9;&JGW||93@$_(x
zzF%6M&e{=|b1mWym?vc=XuqGxm7XLck=l19f6!kST_;#*JQ46_n*PTB=$
zPBd6$=oZ^X?&e!y!>;Wp1{(#wPML1E8XfZ?`2e-9(2S4yM!4;;tx_$QXT<>X#97Y0
z$*E1_A%i|btB1rX>vPkkJe3VXF0rN+3e@V!KgACwkq!DHs0{K=7?w8l#Tio*j4>Nq
z4
z0oK8g#ELKT7&P-Cs~2s)JsuPlDFHaWfo++Lz5exiCj!UH$sZ)F8-y$lc=s3CP;=O1
z6nkQ>wa?<7h_vae+)*S=1vTpj<=wBlI$oN*d7(T{1vzZ4$68~B=rbJ}ZUABNzU920
zBF;lypY0krKg?b%;O3dq?D4Js)n)loE_kFp(lts2&^t7!PQ1L1_DRS03fssqi$FW;&i*Nn^on?j#;Iy1osni9?B_
zk-9=eiq^~gC(jV>@Proq#oQg-arSx+PP(1)uI$IMDGYg0u}O_n!XA4d254Jw5;jfEJ$1(O7v&b!qi^M|RuImT<-^8^<@xzfw3q>WNwnUr=Z
z{*Zp}zF4xSRA8O$wgmYSJKFgpJ`S4^yGl*wUKNkub*
zd9$Tgd{=Z(H6-%mLKIul!gGei&VJe`c}Oa;UES_6nQhI`EBzFIr7omtvUNizp%9FZ
ztZ!H*srnb$<(d5sGmfM)0=i32#;})0b?IEh8a0~MrAX-W1R2LbGSi>b1eBRE`;4E|
zgqU&OQ$C-rg-M$>equd#3fP=m(q7Qt$AHu?{sP)(&w>lS3W<13(WNz})Jy~hMH8WNHY>y2jb#-7x
zmt>4#@Cu5o(e0BzZW5nifq;a@F&M-Ws^RsCmClw}O{dotZzUAx890g&jw`s=A-}f9
ztq$1R<>)4wvB!gYau8%AxqE9qrg|p@q5w}G5N9VUoTTU)6flNiI?vNu61)!2nNdf6FdYP>~q9KA;
z1kGkQeC+=S%W$jDQd8bWwmh(9O*lQe1@iGk4YH74(FG!{y5g#XUOI%PRlXkd
zEwa|Q1pZE=l|Z<6gZM<^MCJjYHmoa6tK;qJbY1cpBsU?zql
z1G6?kwflX2aj=KC!|6&?F?JUC#2PpScJJ}ke==u21AlM?<~P=fl^BWxFL%XlaAoyb
zbE)<#2q}GD4P$5Xg{LmSoZFnK@t^K}g2@X>`vC|jb1ZQPT^`fdE3(ZpSdM_o1V|f+
zDFD%!kL%CR_RKx6L4b+1BQ6aSu=CK9CTIlJ(&&|Uxt82y&2i|911
zDHaE!yG{rXS0H%=LwLCQA0MuSv=e5#g{ggE9pfK6D$LjlGq(S~1{HiFdFRuJ+fevn
zbnlwEf5qTmp&DcxIG06vIH0PIp7iH{oS7?%KeKdHY-u=yO9YXMh
zVBd;XujDlIwx!34@LGZ*Lay{+$ne4Mnhssj&=T{fVp!Q3x;clOi>{vaF~hk(e;(A!
z;C3XHKy4|JdAk8&om5y9Cj4VTg|VoxdqCJKA?yqJW(W^?s1Cw*o?)X
zZ}Q}^{atjvm1)=nJ4@2r?M6*`gPk~-J(?tr9d{Yt^p^tQ&y69bGiN1lf#nj%(xN3J
zZlrH#{#!FS@cuB8TVThu4HipYkwd{2o|p{`kVpt`;7=M)jsL!GMKaHyVz*ug6!&(&
zH4~YvR&9j&1=$*5vh~^TE5rDWs}D;sdTJbUb?I9(9dJFv!5TAM(E_Q@=?WaKfkIhI
zP$?Wl}j%LpWCVYU%|^A}D;=Sxb_CuhB(S>9Zt;IS7vnyO^=mcW|OxPjIU4-YKB;KDeFu?%I(eI-PGJ%#|(%`c{Ya2
zJ>xg`{#W$IZYN4VNU*R7aQA>K@7?a-e#QQBQdJROoj3fG$tk4=PCUlf)q&N|(-3@b
z6k$j1#6yv2$WX?N8$N1hvm$h4V(qFue7!pEe68~~Z+7-=ah|_9ZwzCQ<^r$p;WhOY
zYKlm^d6ViH`c}?Xol8blmbv;~VA_2a)xvnN9-O!oj)t-1AZ6f)4r-wfQRmlC|8am)}_j|fZ
z7PnNc>F6mSyHN>c%v&dAjU^-6Ji^j5F@L5s8IRCsXmU2NH|A8cozk>!IL=8CVffXEP*>Is7IU3#;G~IfbnOc|f3rT|
z=2p+&d0@5_o<~x>(H{)6M`;76CPIp$bx?E3p#xwwQDqnsNK%!lOp9?7B+NHl0sUz)<=wcLy(j
zng4kUE1z`v7TAhFZfr{STl{iN>~g^h1|AHZ^x@O{ABsp`;d&
zy{lb&M^J{(a#D{rPI6k`NUQKiwNJwbeQ^)5VwPrMOMms1aIT>F`-X1=VJd9?rcY0n
zbTxdoiZCGH;e7MZ(=#O*4l-#@U5dKY^dQ+>UEY}0@Y3C0Gh}$U_i+B|ZC1l|8BFJ6
zMEPB}8`@`^AZe?FdSq6K0lM>&5@0LRBoET2{Ymdtt8!Qm;sCWy!2B;
zL}+Rkp2gPw0-6Zxx3=QBZ{W;%YERK#JLmP{rFVg&El^)`f6K{U@edtPAk0&eGLap$
z@kJ>{z4|sQCrkA%jN9yEwPWpI?!*==&SS%w4?*)Ca)+m>8NW&H+iG+`WgU#54_h4H5`9xTTKO&@mpC{;%x7R-J>;S{W7epCt5u23qS={)hFkBx9u@&M@z_NmNJAa=SinXo0eki$A8r
zmPxeb*}B>)0frSyQ8Yb90(A3U9ZMPUu{fM$Wl;{LM7bYh+{R6h?47K)WVV|}Ci|TU
zj?1t|i4xwb3;JOk5e4qhw{14j-=L)4Ut-o
z@|%9mUOR}+HwHyw_Ru)?<2r2zuYpz~I~adW9Qoz7KQAz1%9b#DBniM+)>dxtx
zbA9Ggs6YO5I+`k{-7L_3$#nOXUpTxuOEoPF1rxUB;RE&P2dm9#19x1e8FW)~oe=ZM
z!hN!GaLE9t;Kt24?e0
z>cxW{)MNala*V!_?E(
zH`Xe=am%4DkmW4z4Zc)Swe6lVky;gWi5Zd)%9!41(cxbwuW%nriJr37B@O%g^D0Ab
z-E6#b|1CZiVU8&|oU8AerfFCrh2;j0t}N9-J1gx5c67@v|At*S?
zKkE*vf13h?x56|O;XkwxmPCamQSfLe7(&F(f45W!(N02WmryJIp@0yyCj>nH57C{Q
z{0+Ld<X{#h-kr{0*fO@-hWPQo6qfM{^ZJnnaavGCrs_J4lcRqDX#y+(-q~I
z@SyZV8NRzR6us)}uw}3NO(z^KRV}`bTIWgvSN=87$Nx3Z2ma;G-v9FCFaOOZU;Ven
z^3%T|U&_D0JK=Id+Wkkeg@Pi~3Xg9NKU!!}{tL}7)C!?i{6C--1no#>({37zCnM0%
zQ&wOfYP8A~uA7UCT#TS2^M>L7?#Dvs7Y9qMFt7=wJnD{{;2w`-g4iJRydVb+cHA&ut@9u(v@z_yVZ_>ezB8oc=wu
z)5@TDGX?`NXg@f2ZyEwcLF;|7Ll{HLCAQ+Dx0>aKze7hh6ylIAvManWvYgOX#
zPGzq9V?;dCi+rJ<|GD6h=qb%Vk69*4fxt&K*m!M4>9QOOEOL$Hv{FFSpG1_|!#}<)c#gRq)970x&rhqXs{($mR6UxtGuyh|0^f6{8LLz2MjqsFyYAo8BGEba+vGEpu;E=exA3R)DSzJ=;FFp8o}XQR8W_X!?kNy6$}
zi|DT(a@=~io~T7B9AoAfBig)vOj0#Hn;X{KF-J7#M;Zprb$ceId)oBl)8ckTTY6o9
z$l>?a#Z|}E)Q$X%hNrLtR~%~MxQBeQE>7h|ZTpVvw0BTOwUey(`fwU$1^XaB9q9XT
zY>1nq~~{k&s^v)egb01lAaTcwzB2A!gEmOoTVxwzAP{~`WNN1#ur)r19Nhptf*Ta!;Ui
zMY5?}TWYfBkNfOShRr-E_2t)bse)xU?GAuicYAxjGxek_L&C&Hgi6LkQR{=XGeH;N
zC*mvDf^y~1LCt6L6@U?(#!^{XS>hA~|8`5ucBaSEG3}3B?dHs)D7mLW=Z8K<21n&V
zRMAA9u3%}Vyokb~Uyd>|bbSo4kV}(|y%(?DHkuy^`wK)j>EP4>y^aBxgTt9B5pv^AYvv$t9l#Q@WlFHwkwbNEuTIt!fP_imv*|()(=Ouxy)X
zs^awhH-;={fu6vitMxPf_zI-U*;cLSFT4b`>=r3I50AH2``h1;WbIFJ*&
zY%L@BPa^{UlQ?LoeD`fqvPXKbQo5gSA5Z}O$R&4d
zn;Qh9k0^dBMJ`HU8~}i4JPu;K{u#nUtMG(Q_$CT~FuNg4<@~28Bg|U~bAJEzpK-zj
mCwTJvX9%_8|BhC)@bZ3n(%wMcNEFf2nx>1?khR+
zS@Ag6lt##tyver@kI7rQy$QI-_pz+$!dRnuUSVIv<`jIfWcH3
zoi6C99e;-W=Sk;r_cI?Kd#Eh;c8)cF%r-;(Rq}Bql(umxeE~Uj?pgCo$8TbdBb+#t
z+DY-E8&uR2cS9=L=+5|+XC_^Cdd)SR*V?8xAn0evNbk~(;H;HNyJtglAq^Blw0kN4
zet{P@of5M9qwekh`+UwD7(ja%0CU*m!5#)|Rovsj9tL|n
zU?cEv&jTNvb5D+qJWUxQpNQmuw!T=MFS_&U2qbs+WpS4?l(yfz*xGWbM*iS2k@xbn
zGWJuyysH0X%k2cEy{usloNs2G+IP{|66djVTnLgcwXll_{G2O1LXHqB5F;2{2HK<&
z$I*rZ6OU46^5p+`kIqAdV%FUy6rrmZ%eEDUhSlf=?l=*ofY0X6DE#n<_B$+LDOLC_
zX~)6RZ&2P5s=6_Z+!>gcg|eD=x7Vda+%mhIRaI1Obf1JT*T{R>o?=B4WnbBHNn-*%7xiO!)<5k+ny$waahRJ3`33uKFgpsd}6IL^?4I+LtN7>r6
zz;GH84)*phYc_|i4C~$%FPAzrKS^rU@t&-yxLxUyeuziT0D5HPFqJH-H2l3WFAJ^V
zT|$zIkWWxFfo9Q_jsK7V!(KPZ731@tZ`y5)`>SV{=(pJs*S|}_W{dfZkG1TgZ8gX2
zHhC_zPaLpl84~rROy3M*ayIBOCI>$dFqIJ#(cO^GwVK-64$4gHOeTJJz6!o;pcfDj
zpl37UG~0u#3p1@%lR7@`+=QiW#56#P9A(a3zp?SU;5l|f&Z@F-tjc%Bl`ptEOG7G(
z{KdV?x$Lx{U`(oQsOw;1J%c*l(cAk>LFaPphaEay0Wja?AFqyVCyZm3xHapd#zYxR
zLV{F7nE$%_<@r`iM8fGx$cJNiqF1_Sca33Fi`LJ>&`FO|!kSO-?5CsBGxwJP%=oWue#kwNKqCy06d-nMpIqYfAi8
ziMX?vy5-6d8FPpt0LgdON6kz9~0HAJ}V|7Qg}>U
zXXWIvdzUyB%U|N+>z6!QHFHA=Q=+5_K
zM(4aQUP>L^|dz*r+zf}fZDeHATVk7C|VM+W7=crPebk~o`&R;
zkR(#&S*}R`UXKd}wd8tO{wZ({+=kEP#a`M=NywWDH;}e=cm)vbod!acL*IZNV0>b`afDkR5ZQ1%r`mNx7(+i_6hQN
zzFSk=k^F8#V@upPH3g3(RVxvQXz!X2;oHpuT@Fwcv_9V@gQ}yBy$`7gB94J!7qmiq
zsk+?x$#1_(`LjSPQdX~8LA@_NZ)lWsFkYSSi6PT^Yk&iis-t@~t**9hSt(TI4azVZ
zFb5*J1Kf7wV$`pLKgW?AQ=hxilxE6D@~@`uk<&LQd5@s(XG7ov{*p}Qt`N-ix8P0{8j*;}n3P$ia**=b_h)RqspkvA
zN*fSc9CuLg)CzJo^B(AK;(rIMf`ffC_Rc_6D?iNB!2woTm7heGR{sc#M{=mE|%DpTyj%4-ZM#
zi3rtu8eeri|LVEc1aWaVzryYE_n4J{WB1On73z5!{nK#_#^qZZ3}NW7suv&41$B4H
zHOBdE4)OKWuQMs#n@_OPO2q4Z9?axXAkSZLHS(9kB>3yX5ua#Si=yA`zLvKY0vS>)
z^@j%stLH>eM+fE?VioFddDSfDmx=B3Bq)^g0}Q^hF>prIpAJNm*K!_8A#vk`m=f*h-@+vz-K2qBi-g0Xv0Jdm%M46m(2HG}40}@vHrGU((^mA+cpa0#F6njxhcsjgXI+
zCS0w3W06n6j)9B7t_#1d2{KnvL!l%j%kvTDWh6yQD
zYLL4_+L?T7prQuL!Ygv(yL3l8WQ``~RnxblPMtOl@0dAT+z`Qqx)MXB#)J}cUzm!x
zzYwn*vr`4d&)i7k2+z-A*gy@zp`oEy3=LZ~n(^$Z<*WeEm52Y*l{&h(
zn133M)hjwzg3|Tu1rS|e`Q&xdZ-lAvB3R`bRtojCDroIH!0Mbf7Ct|myDtjs1ZzIX
zI8|N_Ohr#7YvC5``4R>vsaXAT?t9@u8#meOJk3CX)$fy8eQ0;;6$^`}LP$x8jPacJ
zOXFCFRzAqu;KXArOxGv%7hnb-KRVDzlQ;F620vU^pv^$3&qNy_DEv)PR=;#+0t_bv
z#AE_2bGw`eb_8@d_uB&iL5e&h!f_N_FB*@|s=Gjtx;LjH`@Wo0^2|97XbN+kU@f(5HPkIG?N(}hPWI$Hb$~9}c#r_`W{y%nCrkmm~OPfePoAI_&So}jHfpN>U
z7@>)v)9D;1|I=N%mxG`^4E`$^JiBF@@vpN0Kg4toxBm)mdszMJkj5Tg_V~iKhCLqa
zVeogUbiU{TNsk7dqHzVy86C{q_rg;#m{$Om1iEG`Rxtcw9cpn|ux%iKuf=+O!TZ8}RSbNBACv
zyg$!-)@B5vCth@o2U!}w0vpAey)<3)2g|P;^OwsAguJ4J*|3obZ^{7(dilmAEVZK1
z8;MLj@k_AZ7SS#voT7TYAtEzHbtdVPUD!*yXoNHL{_eL2IfWRvW>@_wP^zj1YoAFs
z>!N?F4Sc6gH9(qO#n)R&>owgy3U<3r@v4Rcszrg7;)g*$aekT9%6+6Y!_aYo9l9x|
zKmL<3oxZ+pn&7iD
z8LeMZ%DvAq#p8jiEJzm#PYT*!Pvl2aVP_Fh
zmOiYiO(usTyIr%B4x+{fts_{!aVvnfih6(RofERoSlRxvK#{RpPc~NQS}khpW}b;^
z%d6gf6PBVin$4U^!m>vSxYDz#K|{_mBYIlyZ^$lnky??8zKlwR!rVicT5;B;#Jh7h
zWzI^hGWRta_0RTRAHK8jb7kbCV*^)Y$ey^Q%h8DJQB-%^?)tpT@Yl{Wz#B=br&8vh
z3)c@=kA~^XFVy_3P3Y;VUx@{Kzuvjy;?~1YvE9@%sNn|M%@;Nyj|_DOEz;?r$p9zo
zv@loFhB%S~@_wA0YBMp0nR`Wv%nZA5>~1jr&quVQbB?)N9cS7=V-_t3VZJ>WQUbc?
z2yU&nsRH!kS}1P-*NKK+-wctq=bc>>YycH7tH0}frN6?c2h6@8PegRhn9$0rH9}XS
zLMRUK!X=$X|lc*5m|ps&qbMIZ>Qxy4J>>I8L@3p75=BEC~gd?d(u5
zF!psMUd@5J^?0uNNpL2>nB-5{My&oBUBXs%gRvK}@>dlo>k;KK?v3c*{-ez&$lmnN
zL=!OLJY?batxYh>_dEdymFrKb^j6;Wp<~?kx!b&$53$4y?
zZW6O^S)@{FgsqbL6BIR#zHm5|tnNGGj{dv;F5BmYw_mTc>B>A>f$gYk7`?-NZ{eaq
zCBKV-vLtFgIZK%_fng0jJYfe5Cw_AN^Z=(7v3d{Dx9ja!n9Pl>E)TpTkBG`m)2iBm
zbq&!Xh9!WqaeM+0Vd_mfGMI0rx|tE$GZeUCnWU>t;v3P(RJ)MyBU`GK;)udzVl2MW
zg)8y{2?)k~PTan(g-_25w>zawmz9ZIFUVbL#U`wy7HVjGXlBo6Mg27B(XowzAy|e`
zQM%$hfpNllt^vsu_PK
zot}N5Xdn)2X!z1}(QdP6b-kJf=NV1FAIOjn5iJ(`1*l=f=J)oDjmPy?~Kw%BpF#x*mWq
zL$kZQ<#rbhzfV7jc6H&3MXm$gTf>thBz31xHomOiz%c?SGX9^4p~u8rEcGHh@#_A`
zISVh7#KK99bDZz$4g@5QOmfyBFYf1x#Lr)?M2dkbx~#<7f#IJR;Sb+ReEL-9dB~)=
zDUCkw#1^Qtf8XzR07S9xu~VDC(3v^PN6^tIWWJHb8rcw;cB*@qJ!eJ58ICjWGgrvk
z+u``PQN*oUNuyHbC|9x&L!gIgm3X%;Y0{Fp@g|IG{PEYIUTAgrtKzE9K-qgWFrloq
z`zuHpId^9VUfG>Q+N*19yx0`bj5%z-VDEAonRM5~Ll*0yon2h4oGSv()JMYmsl-^T
zakPThQIb|*Dcl7KV^o%T!I;I`2+y`8;)ic-v<=>kgOIv*CYtC*s#@+=o6vTg9Fw`t
z7T)3T`J|%feNv@f#8X9-*ZJyg*X<3^}LPplo)S^hS3PKdNIGycX0CH3*MmJS~(l-qOon)#rpswz-tUcvbh|
zyN#2}WuOvlpv@$BV1103OCD8!2K3j%tm{rE|{#
z7AX^B+03^_T+M){*V%pWs`vFI?JkM3`O2=Ok^YE{8hVB-r{>hy(D+WfEey;vXEYYG
z>|ZKh)dh6Lln8ij-Au}F1FL|1*Tj-DMQ?_Nt_-Mzj4+T}R=O)<_005n0Y_7(wusMc
z_gS_(o!VRkEcq;gf+0xe86~2KS|vm4Q)8D1yPOS~<*Wvud4*tjzDrQz8y7QgbK44u
zOtjXEFxFyAA-%tay#iP_NNSK#sI5xAZ0a=UB;dlj|IK+lCHgAs_h=;!9?@bUcfamx
z!u(LN#k%!!wMaVkFXyhD(
zxwqcLqO|+rKL0Q{A>51abC?fpM=N4#n?2ROXQ&-ZPE70Q5Bna_J|2CPcC?d75!v}NNV7+eLW
z&CG8RmxY8PB-U$m5&a{E2Dx7z@Y*E;BAkiNDV_g(@>i(wBqeD%NM)cud7GS(``j+!
zZqP^;I7S1LREVFQfahk~=^~|#Nmg!`0MG5)GcXMQL~00DgAbVmJejNfg1n!MO4mM~
zG8#*20JY?#`@1-Gx#+moJv?_6dUWn?k1A{QDmml1kfXA)3spnIZ=+cYua%oV;QUs|
zn0i6C>j~Z5GL6l-{+7!=V0NXbDS<;#-X(2(!C)Pb7=!)uZ;0o5XUb4!hOV1U8mW5H
zHSwvIzhbNNQzu*qx#M}NZ9B;VkySvVTXCzfO=QeypkW#;kFqXs2e+t7=g$I69V
zTN3jeQO-N%Lg^PGoLk~WyGkrLQmSv1B4_0o
zHk>{U=VhQ}q6lFcpY@L6NH@IQWV&5U|69;|dlBXLHHx;9c+;SW*3;?*Cw}Y0#Iw
zMFn1tvdk?k62cBcKGR=0{^#rc-{{+39sfHV+QWGdXP_Ye9hDOID+NJP0t@W#0{kzi
z-5yi_Tcfl$GXEWJ@1gc@gIYuC@91&4gfOtXuekUl8sMxgxRaWis&5ZIslvtaV|NMq
z`7k?|b{;??qN@2=-)_@9-xt~zdPY|Ps{AfW2=e*qP=n$t&FpI-bM47#
zIXUqlrZ83BCiE3ufS>>MUzA1{D3}jrG2G5A;Ns}(Dx$xA2NO1PV}-hGT8Ch6*xop%
z6SJ6ZV0{it;s%diV%L59_LFZuf-@9#w~E`Hot=7Rqv6vP2~6*xpbH?{>xGlh3}x$W
zA@HN0&4zeRtVHqZ#FWZ9dU?r%_A!2^b@%kNZm$!tFOxYgUL&VWw#T`T%tY&MsUucr
z1}J4#6=^lQ38oDFq2VBzmZ&&s8oBjDGpfGxE$7A4(ceJd%FIsc>uDXT%^f5LbtESz
zw@Ucr^~IPMoZ1Z4CgJMb_k+zyJ-xZ5p@P;ruBmfkqWBda5N<5XSVr11KV{M!DbvX@
z(;ngBbc5YlCO(A9*}$#-v^KAAK^ijD!_aVHyazx(t#nQY>k9qdY?pSmpa2xLA5!<-
zZ=d$_YdI)CsfCq1Lf>LQI|!g#E-~wa8af8tk*GBs@%HYj
z?h+-|j>i$hK>7NR4g0)^P1B{qTD^#-JPz^th6;@_LhU
zL@rHLXB!Qg0j(-ZzP$55eIGEk$ikXQuj;BQ!Q?ByIy*bR#*hppBs+ZoC7axTkVjfg;KQHOzhxqj5$`EeB}Mxufd%
zWn^SP3ml!D&r)eLN6=s|e7z_roZWmkx8Lfi6)0`rRG)VP=M?PfMSxhO*T!&6y|EHP
zrJ(AAenGHy?NYHyo9`5MC#=CenVF%rA!B_W@7;$4c}U9v2<2Lzp?EWhee4q?#KaU8
z6@i8sN@h!nHQ_-Rn0`~#YHeLz#K{M|$BwWIHD|ATj_QpsHYYkGIJvxbN)lYn`<{bJa6VPmvntzT=G;f?dhjgQCPF5+h(bjOH6D`awOh5N{KoEk0$C?PQj7FuV!
zLL#*Ydt)d~X1$*kAgx?mdRQ{eD?HB{$4XUK4b$OIMJh?_NY%kb46WJ$?TGTB4LpCT&Wj0WA1S(UVTsOGjeGL;p_Q3C>sn_eL2^FzwTNkR@S+T#nO=p6K@;M}BebK|
zmO2+q*q3ap>lLmjnjDL#%*a4nss?#|W^c5g)<(N6iTa)hGDKhCC!gk&PLqm*h^A
z1R|)6KdOv18|w@OKkB=8l8?{H(x71I2{1;WDoWbg5dmFeW4GUq6H_`mI{L^o&?HgO
z*Z?0NpYqr$*^ab~49$#}71h-t0jv^?2JoXn-O!`M{r6O+L2$FCCUB%MWUJ5gH1M-&MYGp3^YhL?%V02ANnM>NP(Pq8
z2rTRCX5+Wj1;gIxS_JQ9$~TwkuCA_y&CrtSY9V)b_fz0(Kx9%kh`s(<%^UZW{jGxy
zY@=B(A8+^m_!u@VVq$Djw67Hkj@e)d;n9P&c^o563eUrYNlkBj4u7gf%?ouq8w!`W
zpk~-7uBUX!)_J#DsJ;Ksp~~o
zA;gD)#TNn!wofzFyb)eXXz&a8ox_8a;q{idan}~+rzrBPOpE&E?ITcb|DCVwNrMtB
z0<;8>$VI1?wi>8^Cr#u(r)41VhX>p$bkHM9Kok4>`}_WIg{B6^ErVwp?U?bZ)g&2n3}n
z;Mp5-TMmb@;1)AHTHT(@0Am3Bk@rEB6
q=mh8g+x)Ws9qes=Pya)OJ%&&{hx2>${egEAAg6y#ulRTS2mb-SOTl6Q
diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi
index 398d4589ad71aa3c9c5a663287ace76b5800c4b1..f334af20104e2739fa4b13c705000cda712f33f3 100644
GIT binary patch
literal 32413
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