FestiveMap 2021
@@ -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
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
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"
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
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"
|
||||
|
After Width: | Height: | Size: 707 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 506 B |
|
After Width: | Height: | Size: 444 B |
@@ -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
|
||||
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
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
|
||||