Expanded productivity bit usage (#30476)

This commit is contained in:
PollardTheDragon
2025-10-01 10:49:32 -04:00
committed by GitHub
parent 8f4111e05a
commit 37bcc87b39
6 changed files with 37 additions and 9 deletions

View File

@@ -186,6 +186,8 @@
/obj/item/storage/AltClick(mob/user)
if(ishuman(user) && Adjacent(user) && !user.incapacitated(FALSE, TRUE))
if(attached_bits.len > 0)
..()
open(user)
add_fingerprint(user)
else if(isobserver(user))
@@ -631,6 +633,8 @@
var/turf/T = get_turf(src)
hide_from(user)
for(var/obj/item/I in contents)
if(I & attached_bits)
continue
remove_from_storage(I, T)
I.scatter_atom()
CHECK_TICK

View File

@@ -122,6 +122,8 @@
/obj/item/kitchen/knife/Initialize(mapload)
. = ..()
AddComponent(/datum/component/surgery_initiator/robo)
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/kitchen/knife/suicide_act(mob/user)
user.visible_message(pick("<span class='suicide'>[user] is slitting [user.p_their()] wrists with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>", \

View File

@@ -265,6 +265,11 @@
icon_state = "portaseeder"
origin_tech = "biotech=3;engineering=2"
/obj/item/storage/bag/plants/portaseeder/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_BIT_ATTACH, PROC_REF(add_bit))
RegisterSignal(src, COMSIG_CLICK_ALT, PROC_REF(remove_bit))
/obj/item/storage/bag/plants/portaseeder/examine(mob/user)
. = ..()
if(Adjacent(user))
@@ -275,8 +280,14 @@
to_chat(user, "<span class='warning'>[src] has no seeds inside!</span>")
return
var/had_anything = FALSE
var/seed_amount = 1
// Multiply seeds by productivity
seed_amount = clamp(seed_amount * bit_productivity_mod, 1, 4)
// Reduce with low efficiency
if(bit_efficiency_mod < 1)
seed_amount = max(1, seed_amount * bit_efficiency_mod)
for(var/obj/item/O in contents)
had_anything |= seedify(O, 1)
had_anything |= seedify(O, seed_amount)
hide_from_all()
if(had_anything)
to_chat(user, "<span class='notice'>[src] whirrs a bit as it converts the plants inside to seeds.</span>")

View File

@@ -348,6 +348,9 @@
var/initial_volume = 0 // the total some of reagents this food had initially
for(var/ingredient in list_reagents)
initial_volume += list_reagents[ingredient]
// Total slices after factoring in productivity value of the knife
slices_num = clamp(slices_num * used.bit_productivity_mod, 1, round(slices_num * 2.5))
// we want to account for how much has been eaten already, reduce slices by how is left vs. how much food we started with
slices_num = clamp(slices_num * (reagents.total_volume / initial_volume), 1, slices_num)
var/slices_lost
@@ -362,6 +365,9 @@
"<span class='notice'>You crudely slice [src] with [used], destroying some in the process!</span>"
)
slices_lost = rand(1, min(1, round(slices_num / 2)))
// Low efficiency means more loss.
if(used.bit_efficiency_mod < 1)
slices_lost = slices_num * (1 - used.bit_efficiency_mod)
var/reagents_per_slice = reagents.total_volume/slices_num
for(var/i in 1 to (slices_num - slices_lost))
var/obj/slice = new slice_path (loc, TRUE)

View File

@@ -23,7 +23,7 @@
/obj/item/smithed_item/tool_bit
)
/// Amount of extra items made in batches
var/batch_extras = 2
var/batch_extras = 1
/obj/machinery/smithing/kinetic_assembler/Initialize(mapload)
. = ..()
@@ -251,14 +251,18 @@
playsound(src, 'sound/magic/fellowship_armory.ogg', 50, TRUE)
finished_product.forceMove(src.loc)
SSblackbox.record_feedback("tally", "smith_assembler_production", 1, "[finished_product.type]")
// Modify based on productivity
var/total_extras = clamp(round(1 * i.bit_productivity_mod / 2), 0, 2)
if(is_type_in_typecache(finished_product, batched_item_types))
for(var/iterator in 1 to batch_extras)
var/obj/item/smithed_item/extra_product = new finished_product.type(src.loc)
extra_product.quality = finished_product.quality
extra_product.material = finished_product.material
extra_product.set_stats()
extra_product.update_appearance(UPDATE_NAME)
extra_product.scatter_atom()
total_extras += clamp(round(batch_extras * i.bit_productivity_mod / 2), 1, 4)
for(var/iterator in 1 to total_extras)
var/obj/item/smithed_item/extra_product = new finished_product.type(src.loc)
extra_product.quality = finished_product.quality
extra_product.material = finished_product.material
extra_product.set_stats()
extra_product.update_appearance(UPDATE_NAME)
extra_product.scatter_atom()
finished_product = null
// MARK: Scientific Assembler

View File

@@ -147,6 +147,7 @@
speed_mod = -1
failure_rate = -20
durability = 300
productivity_mod = 4
quality = /datum/smith_quality/masterwork
material = /datum/smith_material/platinum