From f7b4338233db9478c300cb899423f86d97fe9479 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:57:50 -0400 Subject: [PATCH 1/4] sling bag + bug fixes --- code/game/objects/items.dm | 11 ++++--- code/game/objects/items/rope.dm | 0 code/game/objects/items/stacks/stack.dm | 15 +++++---- code/game/objects/items/storage/backpack.dm | 10 ++++++ .../base_steps/slapcraft_step_items.dm | 6 ++++ .../base_steps/slapcraft_step_stack.dm | 30 ++++++++++++++++++ .../slapcrafting/crafting_items/components.dm | 15 +++++++++ code/modules/slapcrafting/living_slapcraft.dm | 2 +- .../slapcrafting/recipes/clothing/back.dm | 15 +++++++++ .../slapcrafting/recipes/components/rope.dm | 11 +++++++ code/modules/slapcrafting/slapcraft_recipe.dm | 9 ++++-- daedalus.dme | 3 ++ icons/mob/clothing/back.dmi | Bin 135948 -> 136112 bytes icons/obj/slapcrafting/components.dmi | Bin 416 -> 590 bytes icons/obj/storage.dmi | Bin 79970 -> 81186 bytes 15 files changed, 113 insertions(+), 14 deletions(-) create mode 100644 code/game/objects/items/rope.dm create mode 100644 code/modules/slapcrafting/recipes/clothing/back.dm create mode 100644 code/modules/slapcrafting/recipes/components/rope.dm diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 84485e8459d4..6bd209c48c30 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -729,10 +729,13 @@ DEFINE_INTERACTABLE(/obj/item) R.activate_module(src) R.hud_used.update_robot_modules_display() -/obj/item/attackby(obj/item/item, mob/living/user, params) - if(user?.try_slapcraft(src, item)) - return TRUE - return ..() +/obj/item/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(.) + return + + if(user.try_slapcraft(src, tool)) + return ITEM_INTERACT_SUCCESS /obj/item/proc/GetDeconstructableContents() return get_all_contents() - src diff --git a/code/game/objects/items/rope.dm b/code/game/objects/items/rope.dm new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 307951c997d0..9eacee115472 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -167,6 +167,7 @@ /obj/item/stack/get_controls_info() . = ..() . += "Right Click - Split stack." + . += "Right Click (Same item) - Combine stack." /// Set the maptext for the item that shows how much junk is inside the trunk. /obj/item/stack/proc/update_maptext() @@ -632,10 +633,12 @@ /obj/item/stack/proc/on_movable_entered_occupied_turf(datum/source, atom/movable/arrived) SIGNAL_HANDLER - // Edge case. This signal will also be sent when src has entered the turf. Don't want to merge with ourselves. if(arrived == src) return + if(!isturf(loc)) + return + if(!arrived.throwing && can_merge(arrived)) INVOKE_ASYNC(src, PROC_REF(merge), arrived) @@ -722,13 +725,13 @@ is_zero_amount(delete_if_zero = TRUE) -/obj/item/stack/attackby(obj/item/W, mob/user, params) - if(can_merge(W, inhand = TRUE)) - var/obj/item/stack/S = W +/obj/item/stack/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(modifiers?[RIGHT_CLICK] && can_merge(tool, inhand = TRUE)) + var/obj/item/stack/S = tool if(merge(S)) to_chat(user, span_notice("[S] [stack_name] of [S.name] now contains [S.get_amount()] [S.singular_name]\s.")) - else - . = ..() + return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_BLOCKING /obj/item/stack/microwave_act(obj/machinery/microwave/M) if(istype(M) && M.dirty < 100) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index ee266c74b3e0..3a83b663f242 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -751,3 +751,13 @@ TYPEINFO_DEF(/obj/item/storage/backpack/holding) slowdown = 0 supports_variations_flags = NONE + +/obj/item/storage/backpack/sling + name = "sling bag" + desc = "A sling made out of cloth." + icon_state = "slingbag" + +/obj/item/storage/backpack/sling/Initialize() + . = ..() + atom_storage.max_slots = 3 + atom_storage.max_total_storage = 5 // Can hold 1 normal item and 2 tiny items. diff --git a/code/modules/slapcrafting/base_steps/slapcraft_step_items.dm b/code/modules/slapcrafting/base_steps/slapcraft_step_items.dm index ba6f4cc5bd74..bb8da9f9b3ee 100644 --- a/code/modules/slapcrafting/base_steps/slapcraft_step_items.dm +++ b/code/modules/slapcrafting/base_steps/slapcraft_step_items.dm @@ -109,3 +109,9 @@ /// Disambiguation go BRRRR /datum/slapcraft_step/item/flashlight/again +/datum/slapcraft_step/item/rope + desc = "Attach some rope." + item_types = list(/obj/item/rope) + + finish_msg = "%USER% attaches rope to the %TARGET%." + finish_msg_self = "You attach rope to the %TARGET%." diff --git a/code/modules/slapcrafting/base_steps/slapcraft_step_stack.dm b/code/modules/slapcrafting/base_steps/slapcraft_step_stack.dm index 9016ee62eff2..76779fa99f13 100644 --- a/code/modules/slapcrafting/base_steps/slapcraft_step_stack.dm +++ b/code/modules/slapcrafting/base_steps/slapcraft_step_stack.dm @@ -192,3 +192,33 @@ start_msg_self = "You begin attaching a wooden plank to the %TARGET%." finish_msg = "%USER% attaches a wooden plank to the %TARGET%." finish_msg_self = "You attach a wooden plank to the %TARGET%." + +/// Cloth stack +/datum/slapcraft_step/stack/cloth + desc = "Add a cloth sheet to the assembly." + todo_desc = "You could add a cloth sheet..." + item_types = list(/obj/item/stack/sheet/cloth) + amount = 1 + + start_msg = "%USER% begins attaching some cloth to the %TARGET%." + start_msg_self = "You begin inserting some cloth to the %TARGET%." + finish_msg = "%USER% attaches some cloth to the %TARGET%." + finish_msg_self = "You attach some cloth to the %TARGET%." + +/datum/slapcraft_step/stack/cloth/five + desc = "Add 5 cloth sheets to the assembly." + todo_desc = "You could add 5 cloth sheets..." + item_types = list(/obj/item/stack/sheet/cloth) + amount = 5 + + start_msg = "%USER% begins attaching some cloth to the %TARGET%." + start_msg_self = "You begin inserting some cloth to the %TARGET%." + finish_msg = "%USER% attaches some cloth to the %TARGET%." + finish_msg_self = "You attach some cloth to the %TARGET%." + +/// Used for crafting rope. +/datum/slapcraft_step/stack/cloth/rope + start_msg = "%USER% begins tying some cloth together." + start_msg_self = "%USER% begins tying some cloth together." + finish_msg = "%USER% ties some cloth together." + finish_msg_self = "%USER% ties some cloth together." diff --git a/code/modules/slapcrafting/crafting_items/components.dm b/code/modules/slapcrafting/crafting_items/components.dm index d92734ab00a3..76de66cff779 100644 --- a/code/modules/slapcrafting/crafting_items/components.dm +++ b/code/modules/slapcrafting/crafting_items/components.dm @@ -30,3 +30,18 @@ TYPEINFO_DEF(/obj/item/metal_ball) w_class = WEIGHT_CLASS_BULKY attack_verb_continuous = list("hits", "thwacks", "bowls") attack_verb_simple = list("hit", "thwack", "bowl") + +/obj/item/rope + name = "strand of rope" + desc = "A length of rope." + icon = 'icons/obj/slapcrafting/components.dmi' + icon_state = "rope" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + inhand_icon_state = "coil" + + w_class = WEIGHT_CLASS_NORMAL + + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + diff --git a/code/modules/slapcrafting/living_slapcraft.dm b/code/modules/slapcrafting/living_slapcraft.dm index d958fcb1139d..a2720b2b715d 100644 --- a/code/modules/slapcrafting/living_slapcraft.dm +++ b/code/modules/slapcrafting/living_slapcraft.dm @@ -8,7 +8,7 @@ // We need to find a recipe where the first item corresponds to the first step // ..and the second item corresponds to the second step var/list/available_recipes = slapcraft_recipes_for_type(first_item.type) - if(!available_recipes) + if(!length(available_recipes)) return FALSE var/list/recipes = list() diff --git a/code/modules/slapcrafting/recipes/clothing/back.dm b/code/modules/slapcrafting/recipes/clothing/back.dm new file mode 100644 index 000000000000..7c353d8e2411 --- /dev/null +++ b/code/modules/slapcrafting/recipes/clothing/back.dm @@ -0,0 +1,15 @@ +/datum/slapcraft_recipe/sling + name = "cloth sling" + examine_hint = "You could craft a sling with some rope." + category = SLAP_CAT_COMPONENTS + show_finish_text = TRUE + + steps = list( + /datum/slapcraft_step/stack/cloth/five, + /datum/slapcraft_step/item/rope, + ) + + result_type = /obj/item/storage/backpack/sling + +/datum/slapcraft_recipe/sling/finish_recipe(mob/living/user, obj/item/slapcraft_assembly/assembly) + . = ..() diff --git a/code/modules/slapcrafting/recipes/components/rope.dm b/code/modules/slapcrafting/recipes/components/rope.dm new file mode 100644 index 000000000000..7a4ed5c03040 --- /dev/null +++ b/code/modules/slapcrafting/recipes/components/rope.dm @@ -0,0 +1,11 @@ +/datum/slapcraft_recipe/rope + name = "rope" + examine_hint = "You could tie together cloth." + category = SLAP_CAT_COMPONENTS + show_finish_text = TRUE + + steps = list( + /datum/slapcraft_step/stack/cloth, + /datum/slapcraft_step/stack/cloth/rope + ) + result_type = /obj/item/rope diff --git a/code/modules/slapcrafting/slapcraft_recipe.dm b/code/modules/slapcrafting/slapcraft_recipe.dm index ee4001640513..7716325fa84c 100644 --- a/code/modules/slapcrafting/slapcraft_recipe.dm +++ b/code/modules/slapcrafting/slapcraft_recipe.dm @@ -34,6 +34,9 @@ // Can this assembly be taken apart before it's finished? var/can_disassemble = TRUE + /// Set to TRUE to delete all of the crafting components when the recipe is complete instead of moving them into the result. + var/destroy_components_on_completion = FALSE + /// Should we print text when we finish? Mostly used to de-bloat chat. var/show_finish_text = FALSE @@ -192,8 +195,9 @@ // Move items which wanted to go to the resulted item into it. Only supports for the first created item. var/atom/movable/first_item = results[1] - for(var/obj/item/item as anything in assembly.items_to_place_in_result) - item.forceMove(first_item) + if(!destroy_components_on_completion) + for(var/obj/item/item as anything in assembly.items_to_place_in_result) + item.forceMove(first_item) for(var/obj/item/item as anything in (results - assembly.items_to_place_in_result)) assembly.finished_items += item @@ -240,7 +244,6 @@ /// Behaviour after the item is created, and before the slapcrafting assembly is disposed. /// Here you can move the components into the item if you wish, or do other stuff with them. /datum/slapcraft_recipe/proc/after_create_items(list/items_list, obj/item/slapcraft_assembly/assembly) - return /// Here is the proc to get rid of the assembly, should one want to override it to handle that differently. /datum/slapcraft_recipe/proc/dispose_assembly(obj/item/slapcraft_assembly/assembly) diff --git a/daedalus.dme b/daedalus.dme index d967f81f1555..acc18522284a 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -1708,6 +1708,7 @@ #include "code\game\objects\items\puzzle_pieces.dm" #include "code\game\objects\items\RCD.dm" #include "code\game\objects\items\religion.dm" +#include "code\game\objects\items\rope.dm" #include "code\game\objects\items\RPD.dm" #include "code\game\objects\items\RSF.dm" #include "code\game\objects\items\scrolls.dm" @@ -4572,7 +4573,9 @@ #include "code\modules\slapcrafting\base_steps\slapcraft_step_tool.dm" #include "code\modules\slapcrafting\base_steps\slapcraft_step_weapon.dm" #include "code\modules\slapcrafting\crafting_items\components.dm" +#include "code\modules\slapcrafting\recipes\clothing\back.dm" #include "code\modules\slapcrafting\recipes\components\metal_shaping.dm" +#include "code\modules\slapcrafting\recipes\components\rope.dm" #include "code\modules\slapcrafting\recipes\components\wired_rod.dm" #include "code\modules\slapcrafting\recipes\medical\prosthetics.dm" #include "code\modules\slapcrafting\recipes\medical\splints.dm" diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index ada5f5ea41b6701870230e7458d195a4578cc415..7728df7df15d9da8f6a7d6bb1b8ca0d95a03d3d8 100644 GIT binary patch delta 7318 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 E0`VtgDF6Tf delta 7113 zcmY*;1ymK$xBhUE1_3GQl9WcI5+dD7hmUfo(+YP) z+Q3C|MAqW*yP^{Z^N|^Z^%;bCHTz&ojGEtE5OB#RN@B0}ST$Yy+bxN&hEG)UqvG}_ zYcsof8wr^5v0C(;iIyjz+yMd%>yt$Q>~=v+rc0fnk<~D9{5A*pdLbcE9O$ z%)gRLTQx=@)f1Ker3-&k93t%llJP$lo{gJml2qd2?gKB&i5vqdWgZ#YO^Pm#KIYGc zg}=UGtCF;3Y1h5dQ~Uj(?NRQl%hlt-G_+Gud}oz(eE&|)M%ead_B|lkbSCy#R&r=~ z7zPxVlyszUPnQl|f}|M$V8*SkTxALXbaZqRq1I~s-aH4U8K&$CMx}1$V=JMh$ZWwR z|M!vghn~<~2?X@OIc9I7;MS~1@CG$Opqi~e(-+qy63M-ONz2a+t?HJEnJbVhCK|*> z{^JT_GUSb%ob!AP!fDH;e-K&fFN+`RoctHu`{nRlIHEh2kprmQWt2CjYm4I{V$smC zO#Bls^1c{Lm`7)IHG-6;Mp)i)g{PQ?3T@GENe^~BjSjMySRz{gx`_&Sv!>F^;Bd<0 zC-~nRSIxVMA4VGu$y?g#I6L#-aAP*``OGY->mrHIFCg$)x{t&BSvUUMN4}PknvfLmH6w3mm+JaaLy?o`l5DX$}P?tCWh*2(?XK@)>vVEv7*ca zOKpMg?w%9>67$Ah`->R7cXjBnC@Pz?ONaqnOt1kMsnAvqe`oZ2oaIdsjzWBr>F7uiu#np+xEf?HiP5cvc*SYkzhj%F!uC*Md0oc)&TzM zH)JUnWV42b29?8_yiUjgd#?mYJNP2B5y-6MwniEFYKPMuyAZ_tkV8sh=H*&ACpLYXNhjz?4r2-m?g#L zmcy72_fR*k_A%e02&sJ1PlH#>WTmCVFK__g%3Jexxnwv-kp*xHx^m{{TQaN%ykdLh zq7d@Ed1mY-ij)%6lF8)ls6iBL@h`tHnJg_Qx9;K_vfCImSbnH_BUM=$LVzWHoRy>pn|76Zfip7 z`dM93G~v~t`p}~o4gpJHek0h(^qFCLf2339K)+*th9^h{XMYQPPtXZyaDyz8H|oPK zUJW@UC&A&Nc&N6Z{2_;Hi44}^kE|#R9xa+XzRnEZ>8U=$EtTK@RO6BE+&>o^V%M^I z3S}!Xs`19TAgR=6&MEU)rkLA08ucOvji*(N4i0$yX2TX>bsbfPKX^JP(qog5zLF}1 zo9iV-+>4tt7z&vQ@Y~BNHT1BKe3$n~CAV{0o!`v2k{Jzj!|3Lm7&pZ6zqG-x5cs`Y zPgT=1mDQ#ggP9>-KbQAIY?c@CGIK{Sp+z%55gdKwx7l?WiJ~)Yn8%A{mA9QTr10bI z9VbLMh8KrSW5Jb@ilcR18XE-K$aB`hqD|~51T}GB^G=bSa(5EX;fI0-wn)(nOY~i5 zNe_`KA)^)6N);4@C$&#hfut=fh-eahPg1;e{kiZZt4O=jt+&5V(qxj9VA)(>j$Ni5xg>=ktHQ||_1i3$I7V?? zwPV&TD8mH|3ju(Oi;JqI0QNwB057~YoLfLZ^G^2jCqGe5>9p3(fz&s|BeZgKz942%l1;W#huq4h4*#^(r?*) zIAaY(RMGToA`8l`&)XCWO&ff4c-~cLS=Gy=VFE3$@(_pvnpu*ZjMM<68M0`sKCjawi62NP7 z^v@-SBu!R7ui)+55GYl;O{{DPFZCcX8z<##;G4FV>*M8CGt9{p83!gA4h^UsZE$PF zCj0DhWYGru-M4c3W_OR(#bxd9T}Nd*pP9Ry_z2Hz{8{E|adRlurxyyJtisQN>+kEU z6qM&h2McYkc0ntRQDm1qYE^gv|5d-^7V9CUB33{3pnl5z zzDK~$bY1(!{b|&&m2Nq+fa>(kpqcXsEiJ7Zzq{ww z8R~}j57B1_nQgn(9el)S`uWy5BUiD}R%jHvz3o1c)j9M2{FmW};B3+G3>iEaGw5JS zj-LylCn&)$Q!v*t~+9;LvL53b$=?d=7f(DoO~JH9bT_0`IMB2;o^mzd7rN``Sj!3>Gb zXNIxGEVBEdzIoEu#2U*>z*FrHxNe()l0LZ(=;`K=)vVpOMy`lze2zLw#vK~!D@h@- zRKV|C4{mMSf?I?KO3&r{GSK@r4-^( z{pTJ^{QqYYSH4}+|JPFtEIRl+f+s8?@fxJ0__4iFANO8uDh#pfL+_9Wg)1YHy6c~6fTX54VMwE-2TkY{62tO zy_{!^Gvx4LtURM1TZ)VMZ*}r!p1oI9SC5aHR6UBaR(XAsh8vh)`XUH?hhCBqiVwR9 z@-VZri{3*o?Rb}+r%$!gWAoIxxFjkL*IJ|6qLo}vMy99Z<%ge1H?p*?AUTtZ_G4mW zd)@C)gwu=GB%HOeOjQ58-PzNVKxCrmJ3Qm-E0H1ni=1N=K8l$|0ZNXSu1#}EDDu(i zn=oio^k-B2<;^WDE<~>RP=bK1%@`O%XtHd>l$n{fS_5{m`)|YMZLVfnqm=j0JKeS! z`ZIcGna5U>lgPkmzan;bu1xLSBU#KPNk~F=_fSARqZKJNHClN@A^iHb??siQ?-^c2WPkd*gy2yPy-PM1QK+>)NLZNAGsSM!7C(f8GI)c}Nx!KH~OUntg zw6T-x+<{G}Mk6~Ul`!UO0Il7d(dp4JM=s)qUa7Gl(+G8zTVLH(f{U zQQ6vDH$PZq0N<=bHr)n7cqzZH{H*N9h;Ma=D4?OMOD`oQ6%A6_N0(9`{%fO1=z39EDaJwf zWT!+?T}vw-91SZqHYt8mGZn=M6PLmoY@L)X)wgdv&u?vI>$TvnC5^Hv=D%=Hg#p?jn^^|y-_>bj^Tz#G`xtp7hW!}8yrF^zOGg_c8nF*M{iJnnyy}79 z#fG4)GRr6dW@1uj3QuLXHFN>k$2iFEWP?Dh`T zUn=b)*nQq`TV6I0+@@akC0@oITsd}#Mg{M$>ldo^rhq{rAapJ;UmA-S4uU83CPR4! zC-^{HE1VqAuk&4_^I(!??lnYJRaNDel#sEqP9Kj=P8Pov$9hqMqkkSantsYALL~JFm`5ROad`9$U(vFI-DuE92;f&4BVq)w7r7bts{gJ05H;yPhlBA#lWDaiKn5tKh~anYaQc!Vm(wp~s26S<71OPZ122o1eraJ~VxdrhDW>e$6tNBV&caK>%kA5F`Wf-d-A23G z6;XKlfJ;!$_2V}9$vD!%p144SWTd7IH_$fK{UF*vt$Z8%dE2Jo@0ZzXqA^T90}1eU zX2IN?tANsM)O>7u?CC)OeFDLzL~ZkPqVY0|nC9mu5*X?iVh+D(AD(M}W&f@Y#9z=L z2a9r*bR@mhm+x3^TfzLLx^N_S+x^JRUG5!M4P%3t^ZBAduH97&ilB#9tT^EN3pLpj zTa51L1Ur!{(wPm?2+xx8esF17tV&EIr>3DP@H4@ur=juff0ubf z)Xz|u8S2+z?8iGL-!EUWkbF1FN>p0a=fba1-q?_-UWj%i}v~4S3kUMS=7{N zbxSdDpavnPpg|H2ks0z!0^#4;!xJ@;k&#f{&m&Z>P*YXqkdZNU)qt1@XNgPy&rndt_0@IwaWh8o$v>-vauU!ULZDg(`$}!A2vZIY|L&PX14RBsOA(6;rrJ4%BOMt%8O-*l3&&*J>uq4jU z+t$|Ca|;RSxb6?l&54wGl>IEPBQBwBQK5V@`;5WA$?9XS(&Uc6ck8Jx|FNEJ{miGa zY8Z28mNg9ce)7t8R-uiDx$PA6l}o>UIy?|F#7PA#x76ff5GCCVji?0cTXUXsj+x@< zvGe|!v;_$=Vy~AH^a-CZ57qxD&oMH>`rE+I5FWri??q@XP!p3dib7=!prVG82$wlI zNbLnAlEUW@Vd*Cx2I5duD5)5xa=DEon-Cyd+?U4Bfm_MmH7$hTuN>DaMrH}Ss{yql zAcVXr?=K`LFF!Oj6<77N=c*EY`lM#w_OvJI&G^^xqhd6b4+U97*uT^qTP6|fg9;%6 zeyS2yUwtE^v9&diDA{ytv$An*sH{HePic76(;Z9Ii`dI4ss>+~VD6C=jl^MtgKI0)57C00Y<3|(y}SwI=OLkUzj>iQE9KhP7)|p@1;rc`JRps4CvO@*4pZ>g8#~(3ZpnWJp2OEVfyo=_#`cdGp*~` z?w41yGx(9gA?SkIh$==#bPyFXE}@g8j{5RNaCB_U1y0uMS{E<8VUe7bm9V(D2%nia ze6mmF^Tu*nF#Gtja%Shr;c9>HMU17pCJI(E_C=fcqY2e=YpLe!mb%pqUKLFIGjMru z25c)Jb|2d={OxypxJf-zt~~z5Xpm}sbAK&zR{kJviN>m(9XNTY zNzL2M)4SWfw@w$$U+-ZQcKpwJ#q#nphp;dOX{`jtYP*w0=IkWxo%&z-8 z(Hev>qd`e_RvtYqNXv2iHW@TerFj`YKY#KK9AvaZWlelvrI4ya{fu9OU)@~2l8M>x zGOv#z-xQk&p|mW#Vsi!Y>OY=TeTOXlo1~g{d?0l}AZfl{L5Uu)8TYxpxwRE>Z=%Y1 z2$Pp>=Crvp@0(IWo2yj(yUo7sIH6L@%%D}7w%{ZaToYO`dlW{9Cgk6s+D~QvF;*{)MIRRVr=2#1|q{i1iigg#UNnPk{``pOL$OH=M z>tF`k#KoGnV=oh@nU{y;{m0_WMq*e8)?Hm zoXdhS04+N7eTnb<6+D9PI1UVY{kL?GT5mMw0L1*(A?jvb#{frKfo3&Ih##L%!b<)C}rB@3ip}c zVyOei8_f(GTz{G{hLe9d3w48tIM&qPrZvzDE$NB3pS9u|xx&^P7-;F36P8z5S;-u3 zhyF$SKug~GadN$SbEMvZJKBfQDsYG9G`#D{&?i0N;)O~1pq$McU=lT6h6;xi_9uAE z&>MoS;;auCNn=jA+!h7C(=H6|q2@fElU$r#%rqSoybNGASJArJ>8qIYvMJ11d|lik zgHdoiu%=ref3aDtIUR@HUTOIS@fPtkUp-aTFhQYv zTE(8~6I|M%q0O-%63GDduvUfj_I_`gAmO1aVerKAmm2AP$x` zdP2h}T!*6Rk6GvV`W|W9{9^-kw&j}#_vH!-@>Ly2{a{`%TXb{5IPpl3eYyRM1> z7e${=lVM+z6Rt8F@2bh5y6QBp?<9s5cpT)wbBW{QBIVaB4F69TAmyiXBgxUw-Q2TL zW#Oz_|I(ZD0Hs%-73R diff --git a/icons/obj/slapcrafting/components.dmi b/icons/obj/slapcrafting/components.dmi index 6b9b785a80851ef024b913f9e5125a0cf9e06328..3b3fe96007434fc0f20ff442d94cf9365e6b5020 100644 GIT binary patch delta 437 zcmV;m0ZRU$1I`4H7Y;xK0{{R3SVwH_0000jktHP|z`($upp%7zc(SpjQoyxl00001 zbW%=J06^y0W&i*Hf018qe-KnzlwXjFOOdjItDg(lp#TWLG7Fu%S_1$80YpheK~zYI z?UKQ5!!Qg*nF39H&>`6*hpf|4(Z{UN1u{nmpfy3^31rPsigF^^rkra~ zlmZMveER&P4De8~x|4s}Z0;eu{b3n+eocF=-{!#nuuFM?SfAhuf2{S_Mb}fHZnjsK zn&WdOaNFuj045T3lYkFacrOXSF_zFx4rBr%kPC=FE+7FT0SOohP@CMPDG9(!%x8yV z0RUqHkR~}10I1ASF9`sgjX9;mYAO(jb9Skk3H--j4jiJ8R@nMJEQjB6-n%G3h(utE z7zBJrh*Sk#?>o{6cXiMS6)ZaTN1ygbaG@|ADlY*ptBY0uLj56)wint!wiv=vBSIHy z7!xmXm}omcEP0d=XF!uiagq@U(a9BVPRMLAjr<%12Vs_$pQB_zvH#-lLIAa2yv>00 fhGP$l=?92k>lWZ?G@?00001bW%=J06^y0W&i*H zd68>wf8bK7tl;YB0(JucUNk4S)0~f=0001}Nkl-9cFx=CY02rBvI5fGy6Qej}3c>%?8$5?SA}a3x>i_@% M07*qoM6N<$g4sH30{{R3 diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 7d5cb94f1c56fc7d7832aad92bb47b5df76d8eea..caeab6ea564759bbcd00b547ac4f2339296c4eb2 100644 GIT binary patch delta 17395 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 delta 16169 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 niT@ez!~f0H{C}+ndvilfJzb4(Cut=Dpg%PwZN& Date: Wed, 19 Aug 2026 17:30:16 -0400 Subject: [PATCH 2/4] communative slapcrafting --- code/game/objects/items.dm | 3 +- code/modules/slapcrafting/living_slapcraft.dm | 65 ++++++++++++++----- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6bd209c48c30..f5723e0bc813 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -734,8 +734,7 @@ DEFINE_INTERACTABLE(/obj/item) if(.) return - if(user.try_slapcraft(src, tool)) - return ITEM_INTERACT_SUCCESS + return user.try_slapcraft(src, tool) /obj/item/proc/GetDeconstructableContents() return get_all_contents() - src diff --git a/code/modules/slapcrafting/living_slapcraft.dm b/code/modules/slapcrafting/living_slapcraft.dm index a2720b2b715d..5bf94b0d299a 100644 --- a/code/modules/slapcrafting/living_slapcraft.dm +++ b/code/modules/slapcrafting/living_slapcraft.dm @@ -1,3 +1,7 @@ +#define SLAPCRAFT_INVALID -1 +#define SLAPCRAFT_FAILED 0 +#define SLAPCRAFT_SUCCESS 1 + /// Have a living mob attempt to do a slapcraft. The mob is using the second item on the first item. /mob/living/proc/try_slapcraft(obj/item/first_item, obj/item/second_item) // You cannot craft with items in storage, you must be holding them in hand @@ -5,33 +9,53 @@ if((first_item.item_flags | second_item.item_flags) & IN_STORAGE) return FALSE + . = __slapcraft(src, first_item, second_item) + switch(.) + if(SLAPCRAFT_SUCCESS) + return ITEM_INTERACT_SUCCESS + + if(SLAPCRAFT_FAILED) + return ITEM_INTERACT_BLOCKING + + . = __slapcraft(src, second_item, first_item) + switch(.) + if(SLAPCRAFT_SUCCESS) + return ITEM_INTERACT_SUCCESS + + if(SLAPCRAFT_FAILED) + return ITEM_INTERACT_BLOCKING + + return NONE + +/// Wrapper proc, so we can try both permutations per interaction. +/proc/__slapcraft(mob/user, obj/item/first_item, obj/item/second_item) // We need to find a recipe where the first item corresponds to the first step // ..and the second item corresponds to the second step var/list/available_recipes = slapcraft_recipes_for_type(first_item.type) if(!length(available_recipes)) - return FALSE + return SLAPCRAFT_INVALID var/list/recipes = list() for(var/datum/slapcraft_recipe/recipe in available_recipes) //Always start from step one. var/datum/slapcraft_step/step_one = SLAPCRAFT_STEP(recipe.steps[1]) - if(!step_one.perform_check(src, first_item, null)) + if(!(step_one.perform_check(user, first_item, null))) continue // Get next suitable step that is available after the first one would be performed. var/list/pretend_list = list() pretend_list[step_one.type] = TRUE - var/datum/slapcraft_step/next_step = recipe.next_suitable_step(src, second_item, pretend_list, check_type_only = TRUE) + var/datum/slapcraft_step/next_step = recipe.next_suitable_step(user, second_item, pretend_list, check_type_only = TRUE) if(!next_step) continue - if(!next_step.perform_check(src, second_item, null, check_type_only = TRUE)) + if(!next_step.perform_check(user, second_item, null, check_type_only = TRUE)) continue recipes += recipe if(!length(recipes)) - return FALSE + return SLAPCRAFT_INVALID var/datum/slapcraft_recipe/target_recipe // If we have only one recipe, choose it instantly @@ -45,42 +69,47 @@ recipe_choices[recipe.name] = recipe.get_radial_image() recipe_choice_translation[recipe.name] = recipe - var/choice = show_radial_menu(src, first_item, recipe_choices, custom_check = FALSE, require_near = TRUE) + var/choice = show_radial_menu(user, first_item, recipe_choices, custom_check = FALSE, require_near = TRUE) if(choice) target_recipe = recipe_choice_translation[choice] + if(!target_recipe) - return TRUE + return SLAPCRAFT_FAILED // We have found the recipe we want to do, make an assembly item where the first item used to be. var/obj/item/slapcraft_assembly/assembly = new() assembly.set_recipe(target_recipe) /// The location to place the assembly or items if the user cannot hold them - var/atom/fallback_loc = drop_location() + var/atom/fallback_loc = user.drop_location() var/datum/slapcraft_step/step_one = SLAPCRAFT_STEP(target_recipe.steps[1]) var/list/errors = list() // Instantly and silently perform the first step on the assembly, disassemble it if something went wrong - if(!step_one.perform(src, first_item, assembly, instant = TRUE, silent = TRUE, error_list = errors)) + if(!step_one.perform(user, first_item, assembly, instant = TRUE, silent = TRUE, error_list = errors)) assembly.disassemble() if(length(errors)) errors = span_danger("I cannot craft that.
[jointext(errors, "
")]") - to_chat(src, examine_block(errors)) - return TRUE + to_chat(user, examine_block(errors)) + return SLAPCRAFT_FAILED - fallback_loc = drop_location() //We may have moved + fallback_loc = user.drop_location() //We may have moved - if(!put_in_hands(assembly)) + if(!user.put_in_hands(assembly)) assembly.forceMove(fallback_loc) - var/datum/slapcraft_step/step_two = target_recipe.next_suitable_step(src, second_item, assembly.step_states, check_type_only = TRUE) + var/datum/slapcraft_step/step_two = target_recipe.next_suitable_step(user, second_item, assembly.step_states, check_type_only = TRUE) // Perform the second step, also disassemble it if we stopped working on it, because keeping 1 component assembly is futile. - if(!step_two.perform(src, second_item, assembly, error_list = errors)) + if(!step_two.perform(user, second_item, assembly, error_list = errors)) assembly.disassemble() if(length(errors)) errors = span_danger("I cannot craft that.
[jointext(errors, "
")]") - to_chat(src, examine_block(errors)) - return TRUE - return TRUE + to_chat(user, examine_block(errors)) + return SLAPCRAFT_FAILED + return SLAPCRAFT_SUCCESS + +#undef SLAPCRAFT_INVALID +#undef SLAPCRAFT_FAILED +#undef SLAPCRAFT_SUCCESS From a7503195abdfe6c99d5018464fe2477f54be78f2 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:43:22 -0400 Subject: [PATCH 3/4] unused file --- code/game/objects/items/rope.dm | 0 daedalus.dme | 1 - 2 files changed, 1 deletion(-) delete mode 100644 code/game/objects/items/rope.dm diff --git a/code/game/objects/items/rope.dm b/code/game/objects/items/rope.dm deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/daedalus.dme b/daedalus.dme index acc18522284a..0d103283ab2b 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -1708,7 +1708,6 @@ #include "code\game\objects\items\puzzle_pieces.dm" #include "code\game\objects\items\RCD.dm" #include "code\game\objects\items\religion.dm" -#include "code\game\objects\items\rope.dm" #include "code\game\objects\items\RPD.dm" #include "code\game\objects\items\RSF.dm" #include "code\game\objects\items\scrolls.dm" From aed5ac6cd4cd0e4e7e44605ff68326ee5a312738 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:52:53 -0400 Subject: [PATCH 4/4] fix constructor being stupid --- code/game/objects/items/stacks/sheets/light.dm | 3 +++ code/modules/clothing/outfits/ert.dm | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index b8aff0c6c856..bea31e850482 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -13,6 +13,9 @@ grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/copper = 5) merge_type = /obj/item/stack/light_w +/obj/item/stack/light_w/thirty + amount = 30 + /obj/item/stack/light_w/examine(mob/user) . = ..() . += span_alert("The [name] looks unfinished, add iron to complete it.") diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index fd77cc84e062..d506a7ef93a5 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -453,7 +453,7 @@ backpack_contents = list( /obj/item/construction/rcd/loaded = 1, /obj/item/etherealballdeployer = 1, - /obj/item/stack/light_w = 30, + /obj/item/stack/light_w/thirty = 1, /obj/item/stack/sheet/glass/fifty = 1, /obj/item/stack/sheet/iron/fifty = 1, /obj/item/stack/sheet/plasteel/twenty = 1,