Plungers and Some Recipe Restoration

This commit is contained in:
Captain277
2022-02-17 19:20:21 -08:00
parent 8d2b6087a0
commit 09cfe7fe8f
16 changed files with 183 additions and 4 deletions

View File

@@ -2,16 +2,14 @@
//Large Objects//
/////////////////
/* There's not really a use for this, currently?
/datum/crafting_recipe/plunger
name = "Plunger"
result = /obj/item/plunger
time = 1
reqs = list(/obj/item/stack/material/plastic = 1,
/obj/item/stack/material/mineral/wood = 1)
/obj/item/stack/material/wood = 1)
category = CAT_MISCELLANEOUS
subcategory = CAT_TOOL
*/
/datum/crafting_recipe/showercurtain
name = "Shower Curtains"
@@ -659,3 +657,34 @@
/obj/item/clothing/under/rank/security = 1)
subcategory = CAT_FURNITURE
category = CAT_MISCELLANEOUS
//Double Air Tanks
/datum/crafting_recipe/double_tank_oxygen
name = "Double Emergency Oxygen Tank"
result = /obj/item/tank/emergency/oxygen/double
time = 30
reqs = list(/obj/item/tank/emergency/oxygen = 2,
/obj/item/duct_tape_piece = 5)
category = CAT_MISCELLANEOUS
subcategory = CAT_MISCELLANEOUS
tools = list(TOOL_WRENCH, TOOL_WELDER)
/datum/crafting_recipe/double_tank_phoron
name = "Double Emergency Phoron Tank"
result = /obj/item/tank/emergency/phoron/double
time = 30
reqs = list(/obj/item/tank/emergency/phoron = 2,
/obj/item/duct_tape_piece = 5)
category = CAT_MISCELLANEOUS
subcategory = CAT_MISCELLANEOUS
tools = list(TOOL_WRENCH, TOOL_WELDER)
/datum/crafting_recipe/double_tank_nitrogen
name = "Double Emergency Nitrogen Tank"
result = /obj/item/tank/emergency/nitrogen/double
time = 30
reqs = list(/obj/item/tank/emergency/nitrogen = 2,
/obj/item/duct_tape_piece = 5)
category = CAT_MISCELLANEOUS
subcategory = CAT_MISCELLANEOUS
tools = list(TOOL_WRENCH, TOOL_WELDER)

View File

@@ -151,3 +151,8 @@
icon_state = "punctured"
drop_sound = 'sound/items/drop/soda.ogg'
pickup_sound = 'sound/items/pickup/soda.ogg'
/obj/item/trash/broken_arrow
name = "\improper broken arrow"
desc = "This arrow shaft shattered under the stress of impact. It's useless."
icon_state = "brokenarrow"

View File

@@ -221,3 +221,6 @@
materials_list += matter[i]
. += "<u>It is made out of [materials_list]</u>."
return
/obj/proc/plunger_act(obj/item/plunger/P, mob/living/user, reinforced)
return

View File

@@ -520,3 +520,85 @@
return 1
else
return ..()
/obj/item/plunger
name = "plunger"
desc = "It's a plunger, for plunging."
icon = 'icons/obj/watercloset.dmi'
icon_state = "plunger"
slot_flags = SLOT_MASK
var/plunge_mod = 1 //time*plunge_mod = total time we take to plunge an object
var/reinforced = FALSE //whether we do heavy duty stuff like geysers
/obj/item/plunger/attack(obj/O, mob/living/user)
if(!O.plunger_act(src, user, reinforced))
return ..()
/obj/item/plunger/throw_impact(atom/hit_atom, mob/living/carbon/human/target, target_zone)
. = ..()
if(target_zone != BP_HEAD)
return
if(iscarbon(hit_atom))
var/mob/living/carbon/H = hit_atom
if(!H.wear_mask)
H.equip_to_slot_if_possible(src, SLOT_MASK)
H.visible_message("<span class='warning'>The plunger slams into [H]'s face!</span>", "<span class='warning'>The plunger suctions to your face!</span>")
/obj/item/plunger/reinforced
name = "reinforced plunger"
desc = "It's an Mk7 Reinforced Plunger, for heavy duty plunging."
icon_state = "reinforced_plunger"
reinforced = TRUE
plunge_mod = 0.8
/* Nooooope, not yet.
/obj/structure/geyser
name = "geyser"
icon = 'icons/obj/lavaland/terrain.dmi'
icon_state = "geyser"
anchored = TRUE
var/erupting_state = null //set to null to get it greyscaled from "[icon_state]_soup". Not very usable with the whole random thing, but more types can be added if you change the spawn prob
var/activated = FALSE //whether we are active and generating chems
var/reagent_id = /datum/reagent/oil
var/potency = 2 //how much reagents we add every process (2 seconds)
var/max_volume = 500
var/start_volume = 50
/obj/structure/geyser/proc/start_chemming()
activated = TRUE
create_reagents(max_volume, DRAINABLE)
reagents.add_reagent(reagent_id, start_volume)
START_PROCESSING(SSfluids, src) //It's main function is to be plumbed, so use SSfluids
if(erupting_state)
icon_state = erupting_state
else
var/mutable_appearance/I = mutable_appearance('icons/obj/lavaland/terrain.dmi', "[icon_state]_soup")
I.color = reagents.get_color()
add_overlay(I)
/obj/structure/geyser/process()
if(activated && reagents.total_volume <= reagents.maximum_volume) //this is also evaluated in add_reagent, but from my understanding proc calls are expensive
reagents.add_reagent(reagent_id, potency)
/obj/structure/geyser/plunger_act(obj/item/plunger/P, mob/living/user, _reinforced)
if(!_reinforced)
to_chat(user, "<span class='warning'>The [P.name] isn't strong enough!</span>")
return
if(activated)
to_chat(user, "<span class'warning'>The [name] is already active!</span>")
return
to_chat(user, "<span class='notice'>You start vigorously plunging [src]!</span>")
if(do_after(user, 50 * P.plunge_mod, target = src) && !activated)
start_chemming()
/obj/structure/geyser/random
erupting_state = null
var/list/options = list(/datum/reagent/clf3 = 10, /datum/reagent/water/hollowwater = 10, /datum/reagent/medicine/omnizine/protozine = 6, /datum/reagent/wittel = 1)
/obj/structure/geyser/random/Initialize()
. = ..()
reagent_id = pickweight(options)
*/

View File

@@ -306,6 +306,7 @@
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, 5, 10, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("shrine seal", /obj/structure/shrine_seal, 2, time = 5 SECONDS)
recipes += new/datum/stack_recipe("cloth rag", /obj/item/reagent_containers/glass/rag, 1, time = 2 SECONDS)
recipes += new/datum/stack_recipe("woven string", /obj/item/weaponcrafting/string, 1, time = 10)
/datum/material/resin/generate_recipes()
recipes = list()
@@ -388,7 +389,6 @@
/datum/material/durasteel/generate_recipes()
..()
recipes += new/datum/stack_recipe("durasteel floor tile", /obj/item/stack/tile/durasteel, 1, 4, 20)
recipes += new/datum/stack_recipe("durastring", /obj/item/weaponcrafting/string, 1, time = 10)
/datum/material/brass/generate_recipes()
..()

View File

@@ -558,3 +558,10 @@
desc = "An arrow made of wood, tipped with bronze. The tip is dense enough to provide some armor penetration."
icon_state = "bronzearrow"
projectile_type = /obj/item/projectile/bullet/reusable/arrow/bronze
//Plunger
/obj/item/ammo_casing/arrow/plunger
name = "plunger"
desc = "It's a plunger, for plunging."
icon_state = "plunger"
projectile_type = /obj/item/projectile/bullet/reusable/plunger

View File

@@ -1,12 +1,20 @@
//Note: So I tried to make it so arrows can shatter on impact, but the code doesn't like that, and ignores the drop chance entirely. Slate this for review.
/obj/item/projectile/bullet/reusable
name = "reusable bullet"
desc = "How do you even reuse a bullet?"
var/ammo_type = /obj/item/ammo_casing/arrow
var/dropped = FALSE
//var/fragile = FALSE
//var/durable = FALSE
//var/shattered = 0
//var/broken_type = null
/obj/item/projectile/bullet/reusable/on_hit(atom/target, blocked = FALSE)
. = ..()
handle_drop()
//handle_shatter()
/obj/item/projectile/bullet/reusable/on_range()
handle_drop()
@@ -17,6 +25,33 @@
var/turf/T = get_turf(src)
new ammo_type(T)
dropped = TRUE
/*
else
var/turf/T = get_turf(src)
new broken_type(T)
dropped = TRUE
/obj/item/projectile/bullet/reusable/proc/handle_shatter()
if(fragile)
switch(rand(1,100))
if(1 to 50)
src.shattered = 1
if(31 to 100)
return
if(durable)
switch(rand(1,100))
if(1 to 5)
src.shattered = 1
if(6 to 100)
return
else
switch(rand(1,100))
if(1 to 25)
src.shattered = 1
if(16 to 100)
return
return
*/
//Arrows
/obj/item/projectile/bullet/reusable/arrow
@@ -25,6 +60,7 @@
damage = 15
icon_state = "arrow"
ammo_type = /obj/item/ammo_casing/arrow/wood
//broken_type = /obj/item/trash/broken_arrow
/obj/item/projectile/bullet/reusable/arrow/ash
name = "ashen arrow"
@@ -44,3 +80,20 @@
desc = "Bronze tipped arrow."
armor_penetration = 30
ammo_type = /obj/item/ammo_casing/arrow/bronze
//Plunger
/obj/item/projectile/bullet/reusable/plunger
name = "plunger"
desc = "It's a plunger, for plunging."
damage = 15
icon_state = "plunger"
ammo_type = /obj/item/ammo_casing/arrow/plunger
/obj/item/projectile/bullet/reusable/plunger/on_hit(atom/hit_atom)
. = ..()
var/mob/living/carbon/H = hit_atom
var/obj/item/plunger/P
if(!H.wear_mask)
H.equip_to_slot_if_possible(P, SLOT_MASK)
else
handle_drop()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 277 KiB

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB