mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 08:34:23 +00:00
* Christmas code changes 🆑 coiax add: Santa can now examine presents to see what's inside. del: Santa no longer has a mass summon presents spell, because of his new regenerating bag! add: Santa's bag regenerates presents as long as Santa is holding it. balance: You can only find one gift under a christmas tree per round, no matter how many trees you search. balance: Santa's teleport does not announce where he's going. fix: Fixed Santa not having a full head and beard of white hair. fix: Fixed Santa not being genetically white-haired. fix: Fixed Concentrated Barber's Aid not growing extreme amounts of hair. /🆑 The `box` var has been moved down from `/datum/outfit/job` to `/datum/outfit`. Added unlimited christmas tree with presents, for testing. Santa's restriction against opening presents is now done by TRAIT_CANNOT_OPEN_PRESENTS. Santa's ability to see inside presents is done by the TRAIT_PRESENT_VISION, which also determines if Santa's Bag will regenerate presents every 30 to 60 seconds. Santa no longer starts with a breath mask and O2 tank, but instead has an internals box. Santa no longer has a no-access gold ID, he can teleport from room to room! Gifts determine what type is inside them on initialization, rather than when unwrapped. - Reasoning - Unlike last year, there are various possible methods of accessing christmas trees spawners, allowing for an unlimited number of anything presents. Cutting down the presents to one per round regardless of tree count will avoid this. Santa should be able to see what he's giving, because then he can reward the naughty and nice children with different gifts. * Missed a merge * Adds present investigate logs, and visible messages * Use the body+mind checking of mob.has_trait * Less globals, more static vars on types; also event renaming
450 lines
12 KiB
Plaintext
450 lines
12 KiB
Plaintext
/obj/structure/flora
|
|
resistance_flags = FLAMMABLE
|
|
max_integrity = 150
|
|
anchored = TRUE
|
|
|
|
//trees
|
|
/obj/structure/flora/tree
|
|
name = "tree"
|
|
desc = "A large tree."
|
|
density = TRUE
|
|
pixel_x = -16
|
|
layer = FLY_LAYER
|
|
var/log_amount = 10
|
|
|
|
/obj/structure/flora/tree/attackby(obj/item/W, mob/user, params)
|
|
if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
|
|
if(W.sharpness && W.force > 0)
|
|
if(W.hitsound)
|
|
playsound(get_turf(src), W.hitsound, 100, 0, 0)
|
|
user.visible_message("<span class='notice'>[user] begins to cut down [src] with [W].</span>","<span class='notice'>You begin to cut down [src] with [W].</span>", "You hear the sound of sawing.")
|
|
if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
|
|
user.visible_message("<span class='notice'>[user] fells [src] with the [W].</span>","<span class='notice'>You fell [src] with the [W].</span>", "You hear the sound of a tree falling.")
|
|
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
|
|
for(var/i=1 to log_amount)
|
|
new /obj/item/grown/log/tree(get_turf(src))
|
|
|
|
var/obj/structure/flora/stump/S = new(loc)
|
|
S.name = "[name] stump"
|
|
|
|
qdel(src)
|
|
|
|
else
|
|
return ..()
|
|
|
|
/obj/structure/flora/stump
|
|
name = "stump"
|
|
desc = "This represents our promise to the crew, and the station itself, to cut down as many trees as possible." //running naked through the trees
|
|
icon = 'icons/obj/flora/pinetrees.dmi'
|
|
icon_state = "tree_stump"
|
|
density = FALSE
|
|
pixel_x = -16
|
|
|
|
/obj/structure/flora/tree/pine
|
|
name = "pine tree"
|
|
desc = "A coniferous pine tree."
|
|
icon = 'icons/obj/flora/pinetrees.dmi'
|
|
icon_state = "pine_1"
|
|
var/list/icon_states = list("pine_1", "pine_2", "pine_3")
|
|
|
|
/obj/structure/flora/tree/pine/Initialize()
|
|
. = ..()
|
|
|
|
if(islist(icon_states && icon_states.len))
|
|
icon_state = pick(icon_states)
|
|
|
|
/obj/structure/flora/tree/pine/xmas
|
|
name = "xmas tree"
|
|
desc = "A wondrous decorated Christmas tree."
|
|
icon_state = "pine_c"
|
|
icon_states = null
|
|
|
|
/obj/structure/flora/tree/pine/xmas/presents
|
|
icon_state = "pinepresents"
|
|
desc = "A wondrous decorated Christmas tree. It has presents!"
|
|
var/gift_type = /obj/item/a_gift/anything
|
|
var/unlimited = FALSE
|
|
var/static/list/took_presents //shared between all xmas trees
|
|
|
|
/obj/structure/flora/tree/pine/xmas/presents/Initialize()
|
|
. = ..()
|
|
if(!took_presents)
|
|
took_presents = list()
|
|
|
|
/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
return
|
|
if(!user.ckey)
|
|
return
|
|
|
|
if(took_presents[user.ckey] && !unlimited)
|
|
to_chat(user, "<span class='warning'>There are no presents with your name on.</span>")
|
|
return
|
|
to_chat(user, "<span class='warning'>After a bit of rummaging, you locate a gift with your name on it!</span>")
|
|
|
|
if(!unlimited)
|
|
took_presents[user.ckey] = TRUE
|
|
|
|
var/obj/item/G = new gift_type(src)
|
|
user.put_in_hands(G)
|
|
|
|
/obj/structure/flora/tree/pine/xmas/presents/unlimited
|
|
desc = "A wonderous decorated Christmas tree. It has a seemly endless supply of presents!"
|
|
unlimited = TRUE
|
|
|
|
/obj/structure/flora/tree/dead
|
|
icon = 'icons/obj/flora/deadtrees.dmi'
|
|
desc = "A dead tree. How it died, you know not."
|
|
icon_state = "tree_1"
|
|
|
|
/obj/structure/flora/tree/palm
|
|
icon = 'icons/misc/beach2.dmi'
|
|
desc = "A tree straight from the tropics."
|
|
icon_state = "palm1"
|
|
|
|
/obj/structure/flora/tree/palm/Initialize()
|
|
. = ..()
|
|
icon_state = pick("palm1","palm2")
|
|
pixel_x = 0
|
|
|
|
/obj/structure/festivus
|
|
name = "festivus pole"
|
|
icon = 'icons/obj/flora/pinetrees.dmi'
|
|
icon_state = "festivus_pole"
|
|
desc = "During last year's Feats of Strength the Research Director was able to suplex this passing immobile rod into a planter."
|
|
|
|
/obj/structure/festivus/anchored
|
|
name = "suplexed rod"
|
|
desc = "A true feat of strength, almost as good as last year."
|
|
icon_state = "anchored_rod"
|
|
anchored = TRUE
|
|
|
|
/obj/structure/flora/tree/dead/Initialize()
|
|
icon_state = "tree_[rand(1, 6)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/tree/jungle
|
|
name = "tree"
|
|
icon_state = "tree"
|
|
desc = "It's seriously hampering your view of the jungle."
|
|
icon = 'icons/obj/flora/jungletrees.dmi'
|
|
pixel_x = -48
|
|
pixel_y = -20
|
|
|
|
/obj/structure/flora/tree/jungle/Initialize()
|
|
icon_state = "[icon_state][rand(1, 6)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/tree/jungle/small
|
|
pixel_y = 0
|
|
pixel_x = -32
|
|
icon = 'icons/obj/flora/jungletreesmall.dmi'
|
|
|
|
//grass
|
|
/obj/structure/flora/grass
|
|
name = "grass"
|
|
desc = "A patch of overgrown grass."
|
|
icon = 'icons/obj/flora/snowflora.dmi'
|
|
gender = PLURAL //"this is grass" not "this is a grass"
|
|
|
|
/obj/structure/flora/grass/brown
|
|
icon_state = "snowgrass1bb"
|
|
|
|
/obj/structure/flora/grass/brown/Initialize()
|
|
icon_state = "snowgrass[rand(1, 3)]bb"
|
|
. = ..()
|
|
|
|
|
|
/obj/structure/flora/grass/green
|
|
icon_state = "snowgrass1gb"
|
|
|
|
/obj/structure/flora/grass/green/Initialize()
|
|
icon_state = "snowgrass[rand(1, 3)]gb"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/grass/both
|
|
icon_state = "snowgrassall1"
|
|
|
|
/obj/structure/flora/grass/both/Initialize()
|
|
icon_state = "snowgrassall[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
|
|
//bushes
|
|
/obj/structure/flora/bush
|
|
name = "bush"
|
|
desc = "Some type of shrub."
|
|
icon = 'icons/obj/flora/snowflora.dmi'
|
|
icon_state = "snowbush1"
|
|
anchored = TRUE
|
|
|
|
/obj/structure/flora/bush/Initialize()
|
|
icon_state = "snowbush[rand(1, 6)]"
|
|
. = ..()
|
|
|
|
//newbushes
|
|
|
|
/obj/structure/flora/ausbushes
|
|
name = "bush"
|
|
desc = "Some kind of plant."
|
|
icon = 'icons/obj/flora/ausflora.dmi'
|
|
icon_state = "firstbush_1"
|
|
|
|
/obj/structure/flora/ausbushes/Initialize()
|
|
if(icon_state == "firstbush_1")
|
|
icon_state = "firstbush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/reedbush
|
|
icon_state = "reedbush_1"
|
|
|
|
/obj/structure/flora/ausbushes/reedbush/Initialize()
|
|
icon_state = "reedbush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/leafybush
|
|
icon_state = "leafybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/leafybush/Initialize()
|
|
icon_state = "leafybush_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/palebush
|
|
icon_state = "palebush_1"
|
|
|
|
/obj/structure/flora/ausbushes/palebush/Initialize()
|
|
icon_state = "palebush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/stalkybush
|
|
icon_state = "stalkybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/stalkybush/Initialize()
|
|
icon_state = "stalkybush_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/grassybush
|
|
icon_state = "grassybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/grassybush/Initialize()
|
|
icon_state = "grassybush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/fernybush
|
|
icon_state = "fernybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/fernybush/Initialize()
|
|
icon_state = "fernybush_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/sunnybush
|
|
icon_state = "sunnybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/sunnybush/Initialize()
|
|
icon_state = "sunnybush_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/genericbush
|
|
icon_state = "genericbush_1"
|
|
|
|
/obj/structure/flora/ausbushes/genericbush/Initialize()
|
|
icon_state = "genericbush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/pointybush
|
|
icon_state = "pointybush_1"
|
|
|
|
/obj/structure/flora/ausbushes/pointybush/Initialize()
|
|
icon_state = "pointybush_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/lavendergrass
|
|
icon_state = "lavendergrass_1"
|
|
|
|
/obj/structure/flora/ausbushes/lavendergrass/Initialize()
|
|
icon_state = "lavendergrass_[rand(1, 4)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/ywflowers
|
|
icon_state = "ywflowers_1"
|
|
|
|
/obj/structure/flora/ausbushes/ywflowers/Initialize()
|
|
icon_state = "ywflowers_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/brflowers
|
|
icon_state = "brflowers_1"
|
|
|
|
/obj/structure/flora/ausbushes/brflowers/Initialize()
|
|
icon_state = "brflowers_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/ppflowers
|
|
icon_state = "ppflowers_1"
|
|
|
|
/obj/structure/flora/ausbushes/ppflowers/Initialize()
|
|
icon_state = "ppflowers_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/sparsegrass
|
|
icon_state = "sparsegrass_1"
|
|
|
|
/obj/structure/flora/ausbushes/sparsegrass/Initialize()
|
|
icon_state = "sparsegrass_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/ausbushes/fullgrass
|
|
icon_state = "fullgrass_1"
|
|
|
|
/obj/structure/flora/ausbushes/fullgrass/Initialize()
|
|
icon_state = "fullgrass_[rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/item/twohanded/required/kirbyplants
|
|
name = "potted plant"
|
|
icon = 'icons/obj/flora/plants.dmi'
|
|
icon_state = "plant-01"
|
|
desc = "A little bit of nature contained in a pot."
|
|
layer = ABOVE_MOB_LAYER
|
|
w_class = WEIGHT_CLASS_HUGE
|
|
force = 10
|
|
throwforce = 13
|
|
throw_speed = 2
|
|
throw_range = 4
|
|
|
|
|
|
/obj/item/twohanded/required/kirbyplants/equipped(mob/living/user)
|
|
var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user)
|
|
I.copy_overlays(src)
|
|
I.override = 1
|
|
add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I)
|
|
I.layer = ABOVE_MOB_LAYER
|
|
..()
|
|
|
|
/obj/item/twohanded/required/kirbyplants/dropped(mob/living/user)
|
|
..()
|
|
user.remove_alt_appearance("sneaking_mission")
|
|
|
|
/obj/item/twohanded/required/kirbyplants/random
|
|
icon = 'icons/obj/flora/_flora.dmi'
|
|
icon_state = "random_plant"
|
|
var/list/static/states
|
|
|
|
/obj/item/twohanded/required/kirbyplants/random/Initialize()
|
|
. = ..()
|
|
icon = 'icons/obj/flora/plants.dmi'
|
|
if(!states)
|
|
generate_states()
|
|
icon_state = pick(states)
|
|
|
|
/obj/item/twohanded/required/kirbyplants/random/proc/generate_states()
|
|
states = list()
|
|
for(var/i in 1 to 25)
|
|
var/number
|
|
if(i < 10)
|
|
number = "0[i]"
|
|
else
|
|
number = "[i]"
|
|
states += "plant-[number]"
|
|
states += "applebush"
|
|
|
|
|
|
/obj/item/twohanded/required/kirbyplants/dead
|
|
name = "RD's potted plant"
|
|
desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..."
|
|
icon_state = "plant-25"
|
|
|
|
/obj/item/twohanded/required/kirbyplants/photosynthetic
|
|
name = "photosynthetic potted plant"
|
|
desc = "A bioluminescent plant."
|
|
icon_state = "plant-09"
|
|
light_color = "#2cb2e8"
|
|
light_range = 3
|
|
|
|
|
|
//a rock is flora according to where the icon file is
|
|
//and now these defines
|
|
|
|
/obj/structure/flora/rock
|
|
icon_state = "basalt"
|
|
desc = "A volcanic rock. Pioneers used to ride these babies for miles."
|
|
icon = 'icons/obj/flora/rocks.dmi'
|
|
resistance_flags = FIRE_PROOF
|
|
density = TRUE
|
|
|
|
/obj/structure/flora/rock/Initialize()
|
|
. = ..()
|
|
icon_state = "[icon_state][rand(1,3)]"
|
|
|
|
/obj/structure/flora/rock/pile
|
|
icon_state = "lavarocks"
|
|
desc = "A pile of rocks."
|
|
|
|
//Jungle grass
|
|
|
|
/obj/structure/flora/grass/jungle
|
|
name = "jungle grass"
|
|
desc = "Thick alien flora."
|
|
icon = 'icons/obj/flora/jungleflora.dmi'
|
|
icon_state = "grassa"
|
|
|
|
|
|
/obj/structure/flora/grass/jungle/Initialize()
|
|
icon_state = "[icon_state][rand(1, 5)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/grass/jungle/b
|
|
icon_state = "grassb"
|
|
|
|
//Jungle rocks
|
|
|
|
/obj/structure/flora/rock/jungle
|
|
icon_state = "pile of rocks"
|
|
desc = "A pile of rocks."
|
|
icon_state = "rock"
|
|
icon = 'icons/obj/flora/jungleflora.dmi'
|
|
density = FALSE
|
|
|
|
/obj/structure/flora/rock/jungle/Initialize()
|
|
. = ..()
|
|
icon_state = "[initial(icon_state)][rand(1,5)]"
|
|
|
|
|
|
//Jungle bushes
|
|
|
|
/obj/structure/flora/junglebush
|
|
name = "bush"
|
|
desc = "A wild plant that is found in jungles."
|
|
icon = 'icons/obj/flora/jungleflora.dmi'
|
|
icon_state = "busha"
|
|
|
|
/obj/structure/flora/junglebush/Initialize()
|
|
icon_state = "[icon_state][rand(1, 3)]"
|
|
. = ..()
|
|
|
|
/obj/structure/flora/junglebush/b
|
|
icon_state = "bushb"
|
|
|
|
/obj/structure/flora/junglebush/c
|
|
icon_state = "bushc"
|
|
|
|
/obj/structure/flora/junglebush/large
|
|
icon_state = "bush"
|
|
icon = 'icons/obj/flora/largejungleflora.dmi'
|
|
pixel_x = -16
|
|
pixel_y = -12
|
|
layer = ABOVE_ALL_MOB_LAYER
|
|
|
|
/obj/structure/flora/rock/pile/largejungle
|
|
name = "rocks"
|
|
icon_state = "rocks"
|
|
icon = 'icons/obj/flora/largejungleflora.dmi'
|
|
density = FALSE
|
|
pixel_x = -16
|
|
pixel_y = -16
|
|
|
|
/obj/structure/flora/rock/pile/largejungle/Initialize()
|
|
. = ..()
|
|
icon_state = "[initial(icon_state)][rand(1,3)]"
|