mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 05:30:05 +01:00
## About The Pull Request People had been noting that it was taking longer to pay off a 1000 point gulag sentence than expected, because we made some changes to mining and forgot to update it So now: - There are ores in the walls again (iron, plasma, silver, and gold) - Materials are now worth a variable amount of points (iron = plasma < silver < gold) - Boulders mined from the walls pop into a large amount of the kinds of ores you can mine - Boulders dragged out of the infinite use "work pit" contain a guaranteed large amount of iron The upshot of these changes are: - You can pull 14 boulders out of the hole for a guaranteed time spent of about 6 and a half quite boring minutes to guarantee finishing your sentence (if you know exactly what you are doing and optimise it, probably a bit longer for many people) - You can mine the walls for ore at the mercy of RNG, you will _likely_ be done in about 5 minutes of mining if you're an early sentence and obviously it gets harder the more people have already mined out the ores I aimed for about 5 and 6 minutes as a target because of a combination of travel time, the fact that you need to actively do something, and because of the weather. Remember that's only 5 or 6 minutes actually doing _mining_ (or... watching progress bars and repeatedly falling over), doesn't include variations in skill or luck, being hustled into the teleporter, suiting up, processing the ores, summoning the shuttle, taking the ores to the shuttle, and an ash storm if you're unlucky. So all around, probably adds up to be reasonably close to a 10 minute brig timer. We all know most people given a 1 point sentence are just going to kill themselves anyway. Also I moved some lightbulbs in the mining station work camp area because you couldn't see some of the important tiles and it was annoying me ## Why It's Good For The Game We advise players that 1000 points in the work camp is work about a 10 minute brig sentence and this is basically ban-baiting from our policy page if it's not actually true ## Changelog 🆑 balance: Adjusted the values of ores from the work camp to make a 1000 point sentence closer to a 10 minute brig timer map: Moved some lightbulbs around in the work camp so you can see the bars getting printed /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
114 lines
4.4 KiB
Plaintext
114 lines
4.4 KiB
Plaintext
/obj/item/stack/sheet
|
|
name = "sheet"
|
|
lefthand_file = 'icons/mob/inhands/items/sheets_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/items/sheets_righthand.dmi'
|
|
icon_state = "sheet-metal_3"
|
|
abstract_type = /obj/item/stack/sheet
|
|
full_w_class = WEIGHT_CLASS_NORMAL
|
|
force = 5
|
|
throwforce = 5
|
|
max_amount = 50
|
|
throw_speed = 1
|
|
throw_range = 3
|
|
attack_verb_continuous = list("bashes", "batters", "bludgeons", "thrashes", "smashes")
|
|
attack_verb_simple = list("bash", "batter", "bludgeon", "thrash", "smash")
|
|
novariants = FALSE
|
|
material_flags = MATERIAL_EFFECTS | MATERIAL_NO_DESCRIPTORS
|
|
table_type = /obj/structure/table/greyscale
|
|
pickup_sound = 'sound/items/handling/materials/metal_pick_up.ogg'
|
|
drop_sound = 'sound/items/handling/materials/metal_drop.ogg'
|
|
sound_vary = TRUE
|
|
usable_for_construction = TRUE
|
|
/// text string used to find typepaths used in door and wall (false and tram too) construction for door assemblies and girders respectively
|
|
var/construction_path_type = null
|
|
///If true, this is worth points in the gulag labour stacker
|
|
var/gulag_value = 0
|
|
///Set to true if this is vended from a material storage
|
|
var/manufactured = FALSE
|
|
/// whether this sheet can be sniffed by the material sniffer
|
|
var/sniffable = FALSE
|
|
|
|
/obj/item/stack/sheet/Initialize(mapload, new_amount, merge = TRUE, list/mat_override=null, mat_amt=1)
|
|
. = ..()
|
|
pixel_x = rand(-4, 4)
|
|
pixel_y = rand(-4, 4)
|
|
if(sniffable && amount >= 10 && is_station_level(z))
|
|
GLOB.sniffable_sheets |= src
|
|
|
|
/obj/item/stack/sheet/Destroy(force)
|
|
if(sniffable)
|
|
GLOB.sniffable_sheets -= src
|
|
return ..()
|
|
|
|
/obj/item/stack/sheet/examine(mob/user)
|
|
. = ..()
|
|
if (manufactured && gulag_value)
|
|
. += span_notice("It has been embossed with a manufacturer's mark of guaranteed quality.")
|
|
|
|
var/datum/material/material = get_master_material()
|
|
if (!HAS_TRAIT(user, TRAIT_RESEARCH_SCANNER) || !material)
|
|
return
|
|
|
|
var/list/material_string = list()
|
|
for (var/prop_id in material.mat_properties)
|
|
var/datum/material_property/property = SSmaterials.properties[prop_id]
|
|
var/prop_value = material.get_property(prop_id)
|
|
if (isnull(prop_value)) // Error?
|
|
continue
|
|
var/descriptor = property?.get_descriptor(prop_value)
|
|
var/tooltip_hint = property?.get_tooltip(prop_value)
|
|
if (descriptor) // Overriden derivative property?
|
|
material_string += span_tooltip("[property]: [tooltip_hint]", descriptor)
|
|
|
|
if (length(material_string))
|
|
. += span_info("[capitalize(material.name)] is [english_list(material_string)].")
|
|
|
|
/obj/item/stack/sheet/add(_amount)
|
|
. = ..()
|
|
if(sniffable && amount >= 10 && is_station_level(z))
|
|
GLOB.sniffable_sheets |= src
|
|
|
|
/obj/item/stack/sheet/merge(obj/item/stack/sheet/target_stack, limit)
|
|
. = ..()
|
|
manufactured = manufactured && target_stack.manufactured
|
|
|
|
/obj/item/stack/sheet/copy_evidences(obj/item/stack/sheet/from)
|
|
. = ..()
|
|
manufactured = from.manufactured
|
|
|
|
/// removing from sniffable handled by the sniffer itself when it checks for targets
|
|
|
|
/**
|
|
* Facilitates sheets being smacked on the floor
|
|
*
|
|
* This is used for crafting by hitting the floor with items.
|
|
* The initial use case is glass sheets breaking in to shards when the floor is hit.
|
|
* Args:
|
|
* * target: The floor that was hit
|
|
* * user: The user that did the action
|
|
* * modifiers: The modifiers passed in from attackby
|
|
*/
|
|
/obj/item/stack/sheet/proc/on_attack_floor(turf/open/floor/target, mob/user, list/modifiers)
|
|
var/list/shards = list()
|
|
for(var/datum/material/mat in custom_materials)
|
|
if(mat.shard_type)
|
|
shards += mat.shard_type
|
|
if(!shards.len)
|
|
return FALSE
|
|
if(!use(1))
|
|
to_chat(user, is_cyborg ? span_warning("There is not enough material in the synthesizer to produce a shard!") : span_warning("Somehow, there is not enough of [src] to shatter!"))
|
|
if(!is_cyborg)
|
|
stack_trace("A stack of sheet material was attempted to be shattered into shards while having less than 1 sheets remaining.")
|
|
return FALSE
|
|
user.do_attack_animation(target, ATTACK_EFFECT_BOOP)
|
|
playsound(target, SFX_SHATTER, 70, TRUE)
|
|
var/list/shards_created = list()
|
|
for(var/shard_to_create in shards)
|
|
var/obj/item/new_shard = new shard_to_create(target)
|
|
new_shard.add_fingerprint(user)
|
|
shards_created += "[new_shard.name]"
|
|
user.visible_message(span_notice("[user] shatters the sheet of [name] on [target], leaving [english_list(shards_created)]."), \
|
|
span_notice("You shatter the sheet of [name] on [target], leaving [english_list(shards_created)]."))
|
|
return TRUE
|
|
|