FestiveMap 2021

This commit is contained in:
keronshb
2021-11-20 12:04:35 -05:00
parent 4ec0de352c
commit af83fb9611
53 changed files with 125728 additions and 77 deletions
@@ -0,0 +1,60 @@
//Festive Light Poles
/obj/structure/streetdecor/lamp
name = "lamp pole"
desc = "A metal pole with latern. Very effective at lighting up the cold streets on a breezy night."
layer = 4
density = TRUE
anchored = TRUE
light_power = 1.4
light_range = 15
light_color = "#ffffdd"
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "lamp_post"
max_integrity = 9999999
/obj/structure/streetdecor/lampfestive
name = "festive lamp pole"
desc = "A metal pole with latern and christmas decorations. Very effective at warming up the spirits of people."
layer = 4
density = TRUE
anchored = TRUE
light_power = 1.6
light_range = 15
light_color = "#ffffdd"
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "lamp_post_festive"
max_integrity = 9999999
/obj/structure/streetdecor/wreathpole
name = "wreath pole"
desc = "A metal pole with a fancy wreath."
layer = 4
density = TRUE
anchored = TRUE
icon = 'modular_citadel/code/modules/festive/32x64icons.dmi'
icon_state = "wreath_post"
/obj/structure/streetdecor/welcomesign
name = "Welcome sign"
desc = "A tartan trapped sign welcoming you to Nova Edina."
layer = 4
density = TRUE
anchored = TRUE
icon = 'modular_citadel/code/modules/festive/city_sign.dmi'
icon_state = "sign"
/obj/structure/streetdecor/bigtree
name = "Big festive tree"
desc = "Big tree. Big heck. Big festive cheer!"
layer = 4
density = TRUE
anchored = TRUE
light_power = 2
light_range = 30
light_color = "#ffeeab"
icon = 'modular_citadel/code/modules/festive/bigtree.dmi'
icon_state = "bigtree"
max_integrity = 9999999
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,53 @@
/obj/effect/decal/festive
name = "Festive item!"
desc = "It fills you with holiday cheer."
icon = 'modular_citadel/code/modules/festive/festive_objects.dmi'
icon_state = "holly"
plane = -5 //makes the graffiti visible over a wall. I think
/obj/effect/decal/festive/holly
name = "Holly"
desc = "A prickly, yet cheerful flora laden with ripe berries of festive joy."
/obj/effect/decal/festive/fairylights
name = "Fairy lights"
desc = "A strand of smol glowing lights, almost as if the lights themselves were faries."
icon_state = "y_fairylights"
light_power = 1.6
light_range = 3
light_color = "#ffeeab"
/obj/effect/decal/festive/mistletoe
name = "Mistletoe"
desc = "A plant that causes 2 victims underneath to engage in a smooch!"
icon_state = "mistletoe"
/obj/effect/decal/festive/christmas_reef
name = "Christmas reef"
desc = "A ring reef of festive plants."
icon_state = "christmas_reef"
/obj/effect/decal/festive/green_stockings
name = "Green stockings"
desc = "3 wee booties out on a row, hoping for presents from the fat man's tow."
icon_state = "green_stockings"
/obj/effect/decal/festive/red_stockings
name = "Red stockings"
desc = "Santa seems to enjoy socks a lot, huh."
icon_state = "red_stockings"
/obj/effect/decal/festive/large_red_stocking
name = "Large red stocking"
desc = "A big hecking chonker of a sock, a braisen display of greed, or simply the sock of a large man?"
icon_state = "large_red_stocking"
/obj/effect/decal/festive/large_green_stocking
name = "Large green stocking"
desc = "They say his sock grew 3 sizes that day."
icon_state = "large_green_stocking"
/obj/effect/decal/festive/christmas_ivy_string
name = "Festive ivy"
desc = "In a recent study performed by the local university, it was found that ivy doesn't grow to live and thrive, but instead to spread festive cheer. You cannot help but feel the holiday spirit wrangle around you fantastically." //I am super tired and I wordswordswords
icon_state = "christmas_ivy_string"
@@ -0,0 +1,7 @@
/obj/item/paper/fluff/festive/note_for_qm
name = "To the Quartermaster(s)"
info = "Seeing as this is an event for employees spanning the entire sector, it's possible you may not be the only Quartermaster present today and you'll have to share this office should that be the case. Fortunately, you shouldn't need to share a locker - you shall find some additional lockers with quartermaster access in your department's locker room. Should you require additional lockers however, you will need to contact Central Command directly.<br>Additionally, the successful capture of a Syndicate freighter has left us with a surplus of Donksoft weaponry. Considering they pose far less of a concern than their real counterparts, your department has been put in charge of their distribution. Just be sure not to keep them all for yourself - 'tis the season of giving, after all.<br>- Administrator Roux"
/obj/item/paper/fluff/festive/note_for_chap
name = "A letter to the Chaplain"
info = "Chaplain,<br>You might not be alone in your duties today. Seeing as these are special circumstances, you will find additional supplies with which to arm your fellow clergymen.<br>Do we expect you to need to use what's inside? Thankfully, no. Alas, should malicious occult forces strike, we want your compatriots to be equipped to face them.<br>At the very least, don't just give these out to anyone. Every time I see an assistant running around with a holy 'sord', I can feel my insides crumble...<br>Soulstone Obelisk<br>Department of Higher Dimensional Affairs"
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,26 @@
//How to use:
//Set the name of off the the objects you want controlled by 1 button to the same name
//Set the tar_name of this to the same name
//Press the button in game.
/obj/machinery/button/privacy
name = "Privacy toggle"
var/tar_name
var/tint_objs = list()
/obj/machinery/button/privacy/setup_device()
if(!device)
for(var/obj/O in get_area(src))
if(O.name == tar_name)
tint_objs += O
..()
/obj/machinery/button/privacy/attack_hand(mob/user)
.=..()
for(var/obj/O in tint_objs)
if(O.opacity)
O.color = "#919191"
O.opacity = 0
else
O.opacity = 1
O.color = "#000000"
Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,114 @@
/obj/vehicle/sealed/vectorcraft/rideable/Initialize()
. = ..()
/obj/vehicle/sealed/vectorcraft/rideable/post_unbuckle_mob(mob/living/M)
remove_occupant(M)
M.pixel_x = 0
M.pixel_y = 0
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/post_buckle_mob(mob/living/M)
add_occupant(M)
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/move_car()
.=..()
driver.pixel_x = pixel_x
driver.pixel_y = pixel_y
driver.forceMove(src.loc)
driver.setDir(dir)
/obj/vehicle/sealed/vectorcraft/rideable/mob_enter(mob/living/M)
if(!istype(M))
return FALSE
M.visible_message("<span class='notice'>[M] climbs into \the [src]!</span>")
M.forceMove(src.loc)
add_occupant(M)
if(!driver)
driver = M
if(gear != "auto")
gear = driver.a_intent
start_engine()
driver.pixel_x = pixel_x
driver.pixel_y = pixel_y
return TRUE
/obj/vehicle/sealed/vectorcraft/rideable/mob_exit(mob/living/M)
.=..()
driver.pixel_x = 0
driver.pixel_y = 0
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair
name = "Hoverchair"
desc = "A chair with big hoverpads. It looks like you can move in this on your own."
icon = 'icons/obj/vehicles.dmi'
icon_state = "wheelchair"
layer = OBJ_LAYER
max_integrity = 100
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
canmove = TRUE
density = FALSE //Thought I couldn't fix this one easily, phew
max_acceleration = 1.5
accel_step = 0.5
acceleration = 0.35
max_deceleration = 1
max_velocity = 20
boost_power = 15
gear = "auto"
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, .proc/can_user_rotate),CALLBACK(src, .proc/can_be_rotated),null)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/Destroy()
if(has_buckled_mobs())
var/mob/living/carbon/H = buckled_mobs[1]
unbuckle_mob(H)
return ..()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/move_car()
. = ..()
cut_overlays()
playsound(src, 'sound/effects/roll.ogg', 75, 1)
if(has_buckled_mobs())
handle_rotation_overlayed()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/post_buckle_mob(mob/living/user)
. = ..()
handle_rotation_overlayed()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/post_unbuckle_mob()
. = ..()
cut_overlays()
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/setDir(newdir)
..()
handle_rotation(newdir)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/handle_rotation(direction)
if(has_buckled_mobs())
handle_rotation_overlayed()
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
buckled_mob.setDir(direction)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/handle_rotation_overlayed()
cut_overlays()
var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir)
add_overlay(V)
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/can_be_rotated(mob/living/user)
return TRUE
/obj/vehicle/sealed/vectorcraft/rideable/wheelchair/proc/can_user_rotate(mob/living/user)
var/mob/living/L = driver
if(istype(L))
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return FALSE
if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
return TRUE
return FALSE
Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

@@ -27,9 +27,21 @@
var/gear
var/boost_cooldown
//Changes for custom
var/i_m_acell
var/i_m_decell
var/i_boost
var/i_acell
var/mob/living/carbon/human/driver
/obj/vehicle/sealed/vectorcraft/Initialize()
..()
i_m_acell = max_acceleration
i_m_decell = max_deceleration
i_boost = boost_power
i_acell = acceleration
/obj/vehicle/sealed/vectorcraft/mob_enter(mob/living/M)
if(!driver)
driver = M
@@ -0,0 +1,147 @@
/obj/vehicle/sealed/vectorcraft/boot
name = "Hovertruck"
desc = "An all-terrain vehicle built for traversing rough terrain with ease. This one comes equipt with a sizeable boot that can store up to 3 items!"
icon_state = "truck"
max_integrity = 200
var/obj/structure/boot = list()//Trunkspace of craft
var/boot_size = 3
max_acceleration = 3
accel_step = 0.15
acceleration = 0.3
max_deceleration = 5
max_velocity = 80
boost_power = 20
enginesound_delay = 0
var/static/radial_heal = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_heal")
var/static/radial_eject_car = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_car")
var/static/radial_eject_key = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_key")
var/static/radial_eject_boot = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_boot")
/obj/vehicle/sealed/vectorcraft/boot/MouseDrop_T(atom/dropping, mob/user)
if(istype(dropping, /obj/))
if(LAZYLEN(boot) < boot_size)
boot += dropping
to_chat(user, "<span class='notice'>You add the [dropping] to the [src]'s boot!</span>")
return TRUE
if(iscarbon(dropping))
var/mob/living/carbon/M = dropping
mob_try_enter(M)
to_chat(user, "<span class='notice'>You put [M] into the [src]!</span>")
return TRUE
/obj/vehicle/sealed/vectorcraft/boot/proc/eject_boot()
for(var/obj/o in boot)
o.forceMove(drop_location())
/obj/vehicle/sealed/vectorcraft/boot/ambulance //weewoos have to go fast
name = "Ambulance"
var/obj/machinery/sleeper/Sl
max_acceleration = 3
accel_step = 0.15
acceleration = 0.3
max_deceleration = 5
max_velocity = 100
boost_power = 25
enginesound_delay = 0
icon_state = "ambutruck"
var/weewoo = FALSE
var/weewoocount = 0
/obj/vehicle/sealed/vectorcraft/boot/ambulance/Initialize()
. = ..()
Sl = new /obj/machinery/sleeper
/obj/vehicle/sealed/vectorcraft/boot/ambulance/process()
..()
if(weewoo)
weewoo()
/obj/vehicle/sealed/vectorcraft/boot/ambulance/MouseDrop_T(mob/living/L, mob/user)
if(isliving(L))
Sl.close_machine(L)
to_chat(user, "<span class='notice'>You put [L] into the [src]'s emergency sleeper!</span>")
return TRUE
..()
/obj/vehicle/sealed/vectorcraft/boot/ambulance/proc/weewoo()
if(weewoocount>10)
weewoocount = 0
return
weewoo++
/obj/vehicle/sealed/vectorcraft/boot/ambulance/ui_interact(mob/user) // taken from the microwave/grinder
. = ..()
var/list/options = list()
if(isAI(user))
options["radial_eject_car"] = radial_eject_car
else
if(vector["y"] == 0 && vector["x"] == 0)
options["radial_eject_car"] = radial_eject_car
if(Sl.occupant)
options["radial_heal"] = radial_heal
if(inserted_key)
if(!driver)
options["radial_eject_key"] = radial_eject_key
if(length(boot))
options["radial_eject_boot"] = radial_eject_boot
var/choice
if(length(options) < 1)
return
if(length(options) == 1)
for(var/key in options)
choice = key
else
choice = show_radial_menu(user, src, options, require_near = !issilicon(user))
// post choice verification
if(isAI(user) || !user.canUseTopic(src, !issilicon(user)))
return
switch(choice)
if("eject_car")
if(driver)
remove_occupant(driver)
else
for(var/mob/m in occupants)
remove_occupant(m)
if("radial_heal")
Sl.ui_interact(user)
if("eject_key")
to_chat(user, "<span class='notice'>You remove \the [inserted_key] from \the [src].</span>")
inserted_key.forceMove(drop_location())
user.put_in_hands(inserted_key)
inserted_key = null
if("eject_boot")
eject_boot(user)
/obj/vehicle/sealed/vectorcraft/boot/ambulance/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/sleeper_buffer))
var/obj/item/reagent_containers/sleeper_buffer/SB = I
if((SB.reagents.total_volume + Sl.reagents.total_volume) < Sl.reagents.maximum_volume)
SB.reagents.trans_to(Sl.reagents, SB.reagents.total_volume)
visible_message("[user] places the [SB] into the [src].")
qdel(SB)
return
else
SB.reagents.trans_to(Sl.reagents, SB.reagents.total_volume)
visible_message("[user] adds as much as they can to the [src] from the [SB].")
return
if(istype(I, /obj/item/reagent_containers))
var/obj/item/reagent_containers/RC = I
if(RC.reagents.total_volume == 0)
to_chat(user, "<span class='notice'>The [I] is empty!</span>")
for(var/datum/reagent/R in RC.reagents.reagent_list)
if((obj_flags & EMAGGED) || (allowed(usr)))
break
if(!istype(R, /datum/reagent/medicine))
visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"")
return
RC.reagents.trans_to(Sl.reagents, 1000)
visible_message("[user] adds as much as they can to the [src] from the [I].")
return