diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 25d86db461e..5d894c02e5c 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -1183,7 +1183,7 @@ /obj/item/stack var/singular_name - var/amount = 1.0 + var/amount = 1 var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount /obj/item/stack/rods @@ -1263,13 +1263,6 @@ icon_state = "sheet-cloth" origin_tech = "materials=2" -/obj/item/stack/sheet/leather - name = "leather" - desc = "The by-product of monkey farming." - singular_name = "leather piece" - icon_state = "sheet-leather" - origin_tech = "materials=2" - /obj/item/stack/sheet/metal name = "metal" diff --git a/code/defines/tanning/leather.dm b/code/defines/tanning/leather.dm new file mode 100644 index 00000000000..cb55d762c09 --- /dev/null +++ b/code/defines/tanning/leather.dm @@ -0,0 +1,78 @@ +/obj/item/stack/sheet/animalhide/human + name = "human skin" + desc = "The by-product of human farming." + singular_name = "human skin piece" + icon_state = "sheet-hide" + origin_tech = "" + +/obj/item/stack/sheet/hairlesshide + name = "hairless hide" + desc = "This hide was stripped of it's hair, but still needs tanning." + singular_name = "hairless hide piece" + icon_state = "sheet-hairlesshide" + origin_tech = "" + +/obj/item/stack/sheet/wetleather + name = "wet leather" + desc = "This leather has been cleaned but still needs to be dried." + singular_name = "wet leather piece" + icon_state = "sheet-wetleather" + origin_tech = "" + var/wetness = 30 //Reduced when exposed to high temperautres + var/drying_threshold_temperature = 500 //Kelvin to start drying + +/obj/item/stack/sheet/leather + name = "leather" + desc = "The by-product of mob grinding." + singular_name = "leather piece" + icon_state = "sheet-leather" + origin_tech = "materials=2" + + + +//Step one - dehairing. + +/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob) + if( istype(W, /obj/item/weapon/kitchenknife) || \ + istype(W, /obj/item/weapon/kitchen/utensil/knife) || \ + istype(W, /obj/item/weapon/twohanded/fireaxe) || \ + istype(W, /obj/item/weapon/hatchet) ) + + //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message) + usr.visible_message("\blue \the [usr] starts cutting hair off \the [src]", "\blue You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh") + if(do_after(user,50)) + usr << "\blue You cut the hair from this [src.singular_name]" + //Try locating an exisitng stack on the tile and add to there if possible + for(var/obj/item/stack/sheet/hairlesshide/HS in usr.loc) + if(HS.amount < 50) + HS.amount++ + src.use(1) + break + //If it gets to here it means it did not find a suitable stack on the tile. + var/obj/item/stack/sheet/hairlesshide/HS = new(usr.loc) + HS.amount = 1 + src.use(1) + else + ..() + + +//Step two - washing..... it's actually in washing machine code. + +//Step three - drying +/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + ..() + if(exposed_temperature >= drying_threshold_temperature) + wetness-- + if(wetness == 0) + //Try locating an exisitng stack on the tile and add to there if possible + for(var/obj/item/stack/sheet/leather/HS in src.loc) + if(HS.amount < 50) + HS.amount++ + src.use(1) + wetness = initial(wetness) + break + //If it gets to here it means it did not find a suitable stack on the tile. + var/obj/item/stack/sheet/leather/HS = new(src.loc) + HS.amount = 1 + wetness = initial(wetness) + src.use(1) \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index df925f64b88..c49911dbf18 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -376,8 +376,8 @@ WELDINGTOOOL /obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob) if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable))) - M.visible_message("You cut \the [M]'s restraints with \the [src]!",\ - "\The [usr] cuts \the [M]'s restraints with \the [src]!",\ + usr.visible_message("\The [usr] cuts \the [M]'s restraints with \the [src]!",\ + "You cut \the [M]'s restraints with \the [src]!",\ "You hear cable being cut.") M.handcuffed = null M.update_clothing() diff --git a/code/game/objects/stacks/stack.dm b/code/game/objects/stacks/stack.dm index 7eb1063c89d..1a8ed78d7c0 100644 --- a/code/game/objects/stacks/stack.dm +++ b/code/game/objects/stacks/stack.dm @@ -28,7 +28,8 @@ if (src.amount<=0) var/oldsrc = src src = null //dont kill proc after del() - usr.before_take_item(oldsrc) + if(usr) + usr.before_take_item(oldsrc) del(oldsrc) return diff --git a/code/game/objects/washing_machine.dm b/code/game/objects/washing_machine.dm index 327d2690e02..8f009513fa6 100644 --- a/code/game/objects/washing_machine.dm +++ b/code/game/objects/washing_machine.dm @@ -40,6 +40,13 @@ for(var/atom/A in contents) A.clean_blood() + //Tanning! + for(var/obj/item/stack/sheet/hairlesshide/HH in contents) + var/obj/item/stack/sheet/wetleather/WL = new(src) + WL.amount = HH.amount + del(HH) + + if(crayon) var/color if(istype(crayon,/obj/item/toy/crayon)) @@ -180,7 +187,14 @@ state = 3 else ..() - else if(istype(W,/obj/item/clothing/under) || istype(W,/obj/item/clothing/mask) || istype(W,/obj/item/clothing/head) || istype(W,/obj/item/clothing/gloves) || istype(W,/obj/item/clothing/shoes) || istype(W,/obj/item/clothing/suit) || istype(W,/obj/item/weapon/bedsheet)) + else if(istype(W,/obj/item/stack/sheet/hairlesshide) || \ + istype(W,/obj/item/clothing/under) || \ + istype(W,/obj/item/clothing/mask) || \ + istype(W,/obj/item/clothing/head) || \ + istype(W,/obj/item/clothing/gloves) || \ + istype(W,/obj/item/clothing/shoes) || \ + istype(W,/obj/item/clothing/suit) || \ + istype(W,/obj/item/weapon/bedsheet)) //YES, it's hardcoded... saves a var/can_be_washed for every single clothing item. if ( istype(W,/obj/item/clothing/suit/space ) ) diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 7b28bb4d2ea..bcad12378d6 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 84f3eeccd55..94d7f322cb0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -25,6 +25,7 @@ #define FILE_DIR "code/defines/obj" #define FILE_DIR "code/defines/obj/clothing" #define FILE_DIR "code/defines/procs" +#define FILE_DIR "code/defines/tanning" #define FILE_DIR "code/FEA" #define FILE_DIR "code/game" #define FILE_DIR "code/game/area" @@ -177,9 +178,11 @@ #define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/Testing" #define FILE_DIR "icons/turf" +#define FILE_DIR "icons/vehicles" #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" +#define FILE_DIR "maps/backup" #define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" @@ -341,6 +344,7 @@ #include "code\defines\procs\statistics.dm" #include "code\defines\procs\syndicate_name.dm" #include "code\defines\procs\time_stamp.dm" +#include "code\defines\tanning\leather.dm" #include "code\FEA\FEA_airgroup.dm" #include "code\FEA\FEA_fire.dm" #include "code\FEA\FEA_gas_mixture.dm"