diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 393ff3886d..f5611afcd4 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -10,65 +10,72 @@
density = TRUE
pixel_x = -16
layer = FLY_LAYER
- var/cut = FALSE
var/log_amount = 10
/obj/structure/flora/tree/attackby(obj/item/W, mob/user, params)
- if(!cut && log_amount && (!(flags_1 & NODECONSTRUCT_1)))
+ 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("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.")
- if(do_after(user, 1000/W.force, target = user)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
- if(cut)
- return
+ 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("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
- icon = 'icons/obj/flora/pinetrees.dmi'
- icon_state = "tree_stump"
- density = FALSE
- pixel_x = -16
- name += " stump"
- cut = TRUE
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()
- icon_state = "pine_[rand(1, 3)]"
. = ..()
+ 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"
- var/gifts_under_tree = FALSE
+ 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/list/ckeys_that_took = list()
-/obj/structure/flora/tree/pine/xmas/attack_hand(mob/living/user)
- if(!gifts_under_tree)
- return
+/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user)
if(!user.ckey)
return
+
if(ckeys_that_took[user.ckey])
- to_chat(user, "You already took your gift.")
+ to_chat(user, "There are no presents with your name on.")
return
to_chat(user, "After a bit of rummaging, you locate a gift with your name on it!")
ckeys_that_took[user.ckey] = TRUE
- var/obj/item/a_gift/anything/A = new
- user.put_in_hands(A)
-
-/obj/structure/flora/tree/pine/xmas/Initialize()
- . = ..()
- icon_state = "pine_c"
+ var/obj/item/G = new gift_type(src)
+ user.put_in_hands(G)
/obj/structure/flora/tree/dead
icon = 'icons/obj/flora/deadtrees.dmi'
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 956a214009..040e4209fb 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -1,27 +1,3 @@
-//this is an example of a possible round-start event
-/datum/round_event_control/presents
- name = "Presents under Trees (Christmas)"
- holidayID = CHRISTMAS
- typepath = /datum/round_event/presents
- weight = -1 //forces it to be called, regardless of weight
- max_occurrences = 1
- earliest_start = 0
-
-/datum/round_event/presents/start()
- for(var/obj/structure/flora/tree/pine/xmas/xmas in world)
- if(!(xmas.z in GLOB.station_z_levels))
- continue
- xmas.icon_state = "pinepresents"
- xmas.gifts_under_tree = TRUE
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
- Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
- for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
- Monitor.icon_state = "entertainment_xmas"
-
-/datum/round_event/presents/announce(fake)
- priority_announce("Ho Ho Ho, Merry Xmas!", "Unknown Transmission")
-
-
/obj/item/toy/xmas_cracker
name = "xmas cracker"
icon = 'icons/obj/christmas.dmi'
@@ -65,17 +41,21 @@
/obj/effect/landmark/xmastree
name = "christmas tree spawner"
- var/tree = /obj/structure/flora/tree/pine/xmas
+ var/festive_tree = /obj/structure/flora/tree/pine/xmas
+ var/christmas_tree = /obj/structure/flora/tree/pine/xmas/presents
/obj/effect/landmark/xmastree/Initialize(mapload)
..()
- if(FESTIVE_SEASON in SSevents.holidays)
- new tree(get_turf(src))
+ if((CHRISTMAS in SSevents.holidays) && christmas_tree)
+ new christmas_tree(get_turf(src))
+ else if((FESTIVE_SEASON in SSevents.holidays) && festive_tree)
+ new festive_tree(get_turf(src))
return INITIALIZE_HINT_QDEL
/obj/effect/landmark/xmastree/rdrod
name = "festivus pole spawner"
- tree = /obj/structure/festivus
+ festive_tree = /obj/structure/festivus
+ christmas_tree = null
/datum/round_event_control/santa
name = "Santa is coming to town! (Christmas)"
@@ -92,7 +72,7 @@
priority_announce("Santa is coming to town!", "Unknown Transmission")
/datum/round_event/santa/start()
- var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be santa?", poll_time=150)
+ var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150)
if(LAZYLEN(candidates))
var/mob/dead/observer/Z = pick(candidates)
santa = new /mob/living/carbon/human(pick(GLOB.blobstart))
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 1177e889db..f4734d9506 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -403,6 +403,17 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and
/datum/holiday/xmas/greet()
return "Have a merry Christmas!"
+/datum/holiday/xmas/celebrate()
+ SSticker.OnRoundstart(CALLBACK(src, .proc/roundstart_celebrate))
+
+/datum/holiday/xmas/proc/roundstart_celebrate()
+ for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
+ Monitor.icon_state = "entertainment_xmas"
+
+ for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
+ Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
+
+
/datum/holiday/festive_season
name = FESTIVE_SEASON
begin_day = 1