Plungers and Some Recipe Restoration
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
*/
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 277 KiB After Width: | Height: | Size: 277 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
BIN
icons/obj/lavaland/terrain.dmi
Normal file
|
After Width: | Height: | Size: 771 B |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |