Merge pull request #129 from Azarak/botanystuff

Adds in lots of botany stuff - 3d orange, fairygrass, new bioluminescence, bamboo, cherry bulbs, COCONUTs+
This commit is contained in:
quotefox
2019-12-12 01:42:55 +00:00
committed by GitHub
32 changed files with 743 additions and 15 deletions
+198
View File
@@ -861,3 +861,201 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(reagents && reagents.total_volume)
hand_reagents()
///////////////
/////BONGS/////
///////////////
/obj/item/bong
name = "bong"
desc = "A water bong used for smoking dried plants."
icon = 'icons/obj/bongs.dmi'
icon_state = null
item_state = null
w_class = WEIGHT_CLASS_NORMAL
light_color = "#FFCC66"
var/icon_off = "bong"
var/icon_on = "bong_lit"
var/chem_volume = 100
var/last_used_time //for cooldown
var/firecharges = 0 //used for counting how many hits can be taken before the flame goes out
var/list/list_reagents = list() //For the base reagents bongs could get
/obj/item/bong/Initialize()
. = ..()
create_reagents(chem_volume, NO_REACT) // so it doesn't react until you light it
reagents.add_reagent_list(list_reagents)
icon_state = icon_off
/obj/item/bong/attackby(obj/item/O, mob/user, params)
. = ..()
//If we're using a dried plant..
if(istype(O,/obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/DP = O
if (DP.dry)
//Nothing if our bong is full
if (reagents.holder_full())
user.show_message("<span class='notice'>The bowl is full!</span>", 1)
return
//Transfer reagents and remove the plant
user.show_message("<span class='notice'>You stuff the [DP] into the [src]'s bowl.</span>", 1)
DP.reagents.trans_to(src, 100)
qdel(DP)
return
else
user.show_message("<span class='warning'>[DP] must be dried first!</span>", 1)
return
if (O.heat > 500)
if (reagents && reagents.total_volume) //if there's stuff in the bong
var/lighting_text = O.ignition_effect(src, user)
if(lighting_text)
//Logic regarding igniting it on
if (firecharges == 0)
user.show_message("<span class='notice'>You light the [src] with the [O]!</span>", 1)
bongturnon()
else
user.show_message("<span class='notice'>You rekindle [src]'s flame with the [O]!</span>", 1)
firecharges = 1
return
else
user.show_message("<span warning='notice'>There's nothing to light up in the bowl.</span>", 1)
return
/obj/item/bong/CtrlShiftClick(mob/user) //empty reagents on alt click
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
if (reagents && reagents.total_volume)
user.show_message("<span class='notice'>You empty the [src].</span>", 1)
reagents.clear_reagents()
if(firecharges)
firecharges = 0
bongturnoff()
else
user.show_message("<span class='notice'>The [src] is already empty.</span>", 1)
/obj/item/bong/AltClick(mob/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
if(firecharges)
firecharges = 0
bongturnoff()
user.show_message("<span class='notice'>You quench the flame.</span>", 1)
/obj/item/bong/examine(mob/user)
..()
if(!reagents.total_volume)
to_chat(user, "<span class='notice'>The bowl is empty.</span>")
else if (reagents.total_volume > 80)
to_chat(user, "<span class='notice'>The bowl is filled to the brim.</span>")
else if (reagents.total_volume > 40)
to_chat(user, "<span class='notice'>The bowl has plenty weed in it.</span>")
else
to_chat(user, "<span class='notice'>The bowl has some weed in it.</span>")
to_chat(user, "<span class='notice'>Ctrl+Shift-click to empty.</span>")
to_chat(user, "<span class='notice'>Alt-click to extinguish.</span>")
/obj/item/bong/ignition_effect(atom/A, mob/user)
if(firecharges)
. = "<span class='notice'>[user] lights [A] off of the [src].</span>"
else
. = ""
/obj/item/bong/attack(mob/living/carbon/M, mob/living/carbon/user, obj/target)
//if it's lit up, some stuff in the bowl and the user is a target, and we're not on cooldown
if (!reagents)
return
if (M ==! user)
return
if(user.is_mouth_covered(head_only = 1))
to_chat(user, "<span class='warning'>Remove your headgear first.</span>")
return
if(user.is_mouth_covered(mask_only = 1))
to_chat(user, "<span class='warning'>Remove your mask first.</span>")
return
if (!reagents.total_volume)
to_chat(user, "<span class='warning'>There's nothing in the bowl.</span>")
return
if (!firecharges)
to_chat(user, "<span class='warning'>You have to light it up first.</span>")
return
if (last_used_time + 30 < world.time)
var/hit_strength
var/noise
var/hittext = ""
//if the intent is help then you take a small hit, else a big one
if (user.a_intent == INTENT_HARM)
hit_strength = 2
noise = 100
hittext = "big hit"
else
hit_strength = 1
noise = 70
hittext = "hit"
//bubbling sound
playsound(user.loc,'sound/effects/bonghit.ogg', noise, 1)
last_used_time = world.time
//message
user.visible_message("<span class='notice'>[user] begins to take a "+ hittext +" from the [src]!</span>", \
"<span class='notice'>You begin to take a "+ hittext +" from [src].</span>")
//we take a hit here, after an uninterrupted delay
if(do_after(user, 25, target = user))
if (reagents && reagents.total_volume)
var/fraction = 12 * hit_strength
var/datum/effect_system/smoke_spread/chem/smoke_machine/s = new
s.set_up(reagents, hit_strength, 18, user.loc)
s.start()
reagents.reaction(user, INGEST, fraction)
if(!reagents.trans_to(user, fraction))
reagents.remove_any(fraction)
if (hit_strength == 2 && prob(15))
user.emote("cough")
user.adjustOxyLoss(15)
//playsound(user.loc, 'sound/effects/smoke.ogg', 10, 1, -3)
user.visible_message("<span class='notice'>[user] takes a "+ hittext +" from the [src]!</span>", \
"<span class='notice'>You take a "+ hittext +" from [src].</span>")
firecharges = firecharges - 1
if (firecharges == 0)
bongturnoff()
if (!reagents.total_volume)
firecharges = 0
bongturnoff()
/obj/item/bong/proc/bongturnon()
icon_state = icon_on
set_light(3, 0.8)
/obj/item/bong/proc/bongturnoff()
icon_state = icon_off
set_light(0, 0.0)
/obj/item/bong/coconut
name = "coconut bong"
icon_off = "coconut_bong"
icon_on = "coconut_bong_lit"
desc = "A water bong used for smoking dried plants. This one's made out of a coconut and some bamboo"
@@ -235,6 +235,34 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
/obj/item/stack/sheet/mineral/wood/fifty
amount = 50
/*
* Bamboo
*/
GLOBAL_LIST_INIT(bamboo_recipes, list ( \
new/datum/stack_recipe("punji sticks trap", /obj/structure/punji_sticks, 10, time = 160, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("blow gun", /obj/item/gun/syringe/blowgun, 10, time = 70), \
))
/obj/item/stack/sheet/mineral/bamboo
name = "bamboo cuttings"
desc = "Finely cut bamboo sticks."
singular_name = "cut bamboo"
icon_state = "sheet-bamboo"
item_state = "sheet-bamboo"
icon = 'icons/obj/stack_objects.dmi'
sheettype = "bamboo"
throwforce = 15
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
resistance_flags = FLAMMABLE
merge_type = /obj/item/stack/sheet/mineral/bamboo
grind_results = list("carbon" = 5)
/obj/item/stack/sheet/mineral/bamboo/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.bamboo_recipes
return ..()
/*
* Cloth
*/
@@ -73,6 +73,15 @@
turf_type = /turf/open/floor/grass
resistance_flags = FLAMMABLE
//Fairygrass
/obj/item/stack/tile/fairygrass
name = "fairygrass tile"
singular_name = "fairygrass floor tile"
desc = "A patch of odd, glowing blue grass."
icon_state = "tile_fairygrass"
item_state = "tile-fairygrass"
turf_type = /turf/open/floor/grass/fairy
resistance_flags = FLAMMABLE
//Wood
/obj/item/stack/tile/wood