Merge branch 'master' of https://github.com/PolarisSS13/Polaris into food2021

This commit is contained in:
Cerebulon
2021-08-27 21:09:46 +01:00
140 changed files with 2807 additions and 311235 deletions
+7
View File
@@ -110,3 +110,10 @@
plane = PLANE_LIGHTING_ABOVE
pixel_x = -32
pixel_y = -32
/obj/effect/overlay/closet_door
anchored = TRUE
plane = FLOAT_PLANE
layer = FLOAT_LAYER
vis_flags = VIS_INHERIT_ID
appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE
+6 -2
View File
@@ -84,7 +84,7 @@
// Works similarly to worn sprite_sheets, except the alternate sprites are used when the clothing/refit_for_species() proc is called.
var/list/sprite_sheets_obj = list()
var/toolspeed = 1.0 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
var/toolspeed = 1 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
var/attackspeed = DEFAULT_ATTACK_COOLDOWN // How long click delay will be when using this, in 1/10ths of a second. Checked in the user's get_attack_speed().
var/reach = 1 // Length of tiles it can reach, 1 is adjacent.
var/addblends // Icon overlay for ADD highlights when applicable.
@@ -925,4 +925,8 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
// Like the above, but used for RPED sorting of parts.
/obj/item/proc/rped_rating()
return get_rating()
return get_rating()
// this gets called when the item gets chucked by the vending machine
/obj/item/proc/vendor_action(var/obj/machinery/vending/V)
return
+1
View File
@@ -26,6 +26,7 @@
closet_appearance = null
open_sound = 'sound/items/zip.ogg'
close_sound = 'sound/items/zip.ogg'
door_anim_time = 0 //Unsupported
var/item_path = /obj/item/bodybag
density = 0
storage_capacity = (MOB_MEDIUM * 2) - 1
@@ -16,7 +16,7 @@
var/obj/item/device/encryptionkey/keyslot2 = null
var/ks1type = null
var/ks2type = null
drop_sound = 'sound/items/drop/component.ogg'
pickup_sound = 'sound/items/pickup/component.ogg'
@@ -62,10 +62,12 @@
/obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0)
if (aiOverride)
playsound(loc, 'sound/effects/radio_common.ogg', 25, 1, 1)
return ..(freq, level)
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
if(H.l_ear == src || H.r_ear == src)
playsound(loc, 'sound/effects/radio_common.ogg', 25, 1, 1)
return ..(freq, level)
return -1
+97
View File
@@ -0,0 +1,97 @@
/obj/item/tabloid
name = "tabloid magazine"
desc = "It's one of those trashy tabloid magazines. It looks pretty out of date."
icon = 'icons/obj/magazine.dmi'
icon_state = "magazine"
var/headline
var/static/list/tabloid_states = icon_states('icons/obj/magazine.dmi')
var/static/list/tabloid_publishers = list(
"\improper Solar Enquirer",
"\improper Stellar Examiner",
"\improper Antares Daily",
"\improper Weekly Galactic News",
"\improper Spiral"
)
var/static/list/tabloid_headlines = list(
"NARCOALGORITHMS: ARE YOUR CHILDREN SAFE?",
"ARE GMO HUMANS POISONOUS IN BED?",
"TOP 10 REASONS WHY OTHER SPECIES ARE A HOAX",
"CENTENNIAL POSITRONIC EXTENDS LIFESPAN WITH 1 SIMPLE TRICK",
"TOP 10 DANGEROUS FOODS WITH CHEMICALS",
"NEW TERRIFYING TEEN TREND: SUN-DIVING",
"HAS YOUR SPOUSE BEEN REPLACED BY AN ALIEN IMPOSTER? STUDIES SUGGEST YES!",
"SPACE CAUSES CANCER: DOCTORS CONFIRM",
"ARE BODY SCANNERS TOO INVASIVE? FIND OUT INSIDE!",
"HAS SCIENCE GONE TOO FAR? LOCAL SCIENTIST DEBUNKS ALIEN THEORY, DECRIES THEM AS TUBE EXPERIMENTS GONE WRONG",
"100 DELICIOUS RECIPES LETHAL TO CARBON-BASED LIFE",
"TOP FIVE SPECIES WE DROVE TO EXTINCTION; NUMBER TWO WILL SHOCK YOU",
"LOCAL MAN HAS SEIZURE AFTER SAYING SKRELLIAN NAME; FORCED ASSIMILATION SOON?",
"RELIGION WAS RIGHT? SHOCK FINDINGS SHOW ALIEN SIMILARITY TO ANIMALS, EXISTENCE OF BOATS",
"TOP TEN REASONS WHY ONLY HUMANS ARE SENTIENT",
"LOCAL UNATHI SYMPATHIZER: 'I really think you should stop with these spacebaiting articles.'",
"DO UNATHI SYMPATHIZERS HATE THE HUMAN RACE?",
"WHICH PLANET HAS THE BEST LOVERS? THIS AND MORE INSIDE!",
"SHE SAID WE SHOULD SEE OTHER PEOPLE, SO I MARRIED A TESHARI PACK: FULL STORY INSIDE",
"LOSE WEIGHT THREE TIMES FASTER WITH THESE LOW-G MANEUVERS!",
"SHOCKING FIGURES REVEAL MORE TEENS DIE TO UNATHI HONOUR DUELS THAN GUN VIOLENCE",
"MY DAUGHTER JOINED A NEURAL COLLECTIVE AND NOW SHE CAN TASTE SPACETIME: FULL STORY INSIDE",
"WERE THE NAZIS PSYCHIC? ONE HISTORIAN TELLS ALL",
"TAJARANS: CUTE AND CUDDLY, OR INFILTRATING THE GOVERNMENT? FIND OUT MORE INSIDE",
"IS THE SOLAR GOVERNMENT CREATING AN AI SUPERINTELLIGENCE NEAR MERCURY? ONE EXPERT REVEALS SHOCKING INSIDER DETAILS!",
"TOP TEN HISTORICAL FIGURES THAT WERE TWO PROMETHEANS IN A TRENCHCOAT",
"ZADDAT: FACT OR FICTION?",
"TOP 10 SECRET AUGMENTS THE GOVERNMENT DOESN'T WANT YOU TO GET",
"ENLARGE YOUR MENTAL FACULTIES WITH THIS 1 WEIRD HAT",
"'HELP, MY SON THINKS HE'S A 20TH CENTURY VID CHARACTER CALLED SPOCK' AND MORE SHOCKING TALES INSIDE",
"18 RADICAL HIP IMPLANTS ALL THE KIDS ARE GETTING!",
"PRESERVED HEAD OF 21ST CENTURY CAPITALIST INSISTS THAT 'DYSON WALL' ONLY SANE SOLUTION TO RIMWARD MALCONTENTS",
"50 SHADES OF GREEN; BESTSELLING MULTISPECIES ROMANCE COMING TO CINEMAS",
"PLUTO: DWARF PLANET, OR SECRET RAMPANT AI FACILITY HELL-BENT ON CORRUPTING YOUR CHILDREN?",
"TOP TEN ANIME ALIENS. NUMBER 3 WILL SICKEN YOU",
"OCTUBER X'RALLBRE EXPOSED; NUDE PHOTOSHOOT LEAKS",
"WAR ON MARS AFTER NAKED MAN WAS FOUND; WERE THE ROMANS RIGHT?",
"REAL ALIENS ARGUE EARTH MOVIES RACIST!",
"HELP! I MARRIED A HEGEMONOUS SWARM INTELLIGENCE AND MY SON THINKS HE'S A ROUTER!",
"POSITRONICS: HUMAN INGENUITY AND GENEROSITY, OR A HORRIBLE MISTAKE? FIND OUT INSIDE!",
"TENTACLES OF TERROR: SKRELL BLACK OPS SEIGE NYX NAVAL DEPOT. SHOCKING PHOTOGRAPHS INSIDE!",
"THE FREE TRADER UNION: NEITHER FREE NOR A UNION. SHOCKING EXPOSE!",
"HAS THE FREE MARKET GONE TOO FAR? LUNA GLITTERPOP STAR AUCTIONS THIRD TESTICLE FOR TRANS-ORBITAL SHIPPING BONDS",
"THEY SAID IT WAS CANCER, BUT I KNEW IT WAS A TINY, SELF-REPLICATING CLONE OF RAY KURZWEIL: FULL STORY INSIDE",
"WHAT HAS TECHNOLOGY DONE? INDUSTRY BILLIONAIRE MARRIES OWN INFORMORPH MIND-COPY",
"REPTILLIAN ICE WARRIORS FROM ANOTHER WORLD LIVE INSIDE YOUR AIR DUCTS: HERE'S HOW TO GET RID OF THEM",
"10 CRITICAL THINGS YOU NEED TO KNOW ABOUT 'DRONEGATE'",
"THEY CALL THEM JUMPGATES BUT I'VE NEVER SEEN THEM JUMP: AN INDUSTRY INSIDER SPEAKS FOR THE FIRST TIME",
"EMERGENT INTELLIGENCES ARE STEALING YOUR BANK DETAILS, FETISHES: FOIL HAT RECIPE INSIDE",
"TIME TRAVELLERS ARE STEALING YOUR WIFI: 5 TIPS FOR DEFEATING HACKERS FROM THE FUTURE",
"'My mother was an alien spy': THIS CELEBRITY REVEAL WILL SHOCK AND AMAZE YOU",
"LUMINARY SCIENTIST SPEAKS: DIABETES IS A HYPERCORP RETROVIRUS!",
"'I REROUTED MY NEURAL CIRCUITRY SO THAT PAIN TASTES OF STRAWBERRIES' AND FIFTEEN OTHER CRAZY ALMACH STORIES",
"JOINING THE NAVY? HERE'S 15 EXPERT TIPS FOR AVOIDING BRAIN PARASITES"
)
/obj/item/tabloid/Initialize()
. = ..()
pixel_x = 5-rand(10)
pixel_x = 5-rand(10)
icon_state = pick(tabloid_states)
headline = pick(tabloid_headlines)
name = pick(tabloid_publishers)
/obj/item/tabloid/examine(mob/user, distance)
. = ..()
if(headline)
to_chat(user, "The headline screams, \"[headline]\"")
/obj/item/tabloid/attack_self(mob/user)
user.visible_message(SPAN_NOTICE("\The [user] leafs idly through \the [src]."))
if(headline)
to_chat(user, "Most of it is the usual tabloid garbage, but the headline story, \"[headline]\", holds your attention for awhile.")
if(tabloid_headlines[headline])
to_chat(user, tabloid_headlines[headline])
else
to_chat(user, "Most of it is the usual tabloid garbage. You find nothing of interest.")
return TRUE
+1
View File
@@ -65,6 +65,7 @@
closet_appearance = null
catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor)
climbable = 0
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/fuel_assembly/deuterium = 6)
+2 -2
View File
@@ -1257,11 +1257,11 @@
icon_state = "therapygreen"
item_state = "egg3" // It's the green egg in items_left/righthand
/obj/structure/plushie/fumo
/obj/item/toy/plushie/fumo
name = "Fumo"
desc = "A plushie of a....?."
icon_state = "fumoplushie"
phrase = "I just don't think about losing."
pokephrase = "I just don't think about losing."
//Toy cult sword
/obj/item/toy/cultsword
@@ -112,3 +112,6 @@
walk(src, null, null)
..()
return
/obj/item/weapon/grenade/vendor_action(var/obj/machinery/vending/V)
activate(V)
@@ -24,6 +24,18 @@
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
/obj/item/weapon/material/knife/machete/hatchet/stone
name = "sharp rock"
desc = "The secret is to bang the rocks together, guys."
force_divisor = 0.2
icon_state = "rock"
item_state = "rock"
attack_verb = list("chopped", "torn", "cut")
/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material)
var/old_name = name
. = ..()
name = old_name
/obj/item/weapon/material/knife/machete/hatchet/unathiknife
name = "duelling knife"
desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude."
@@ -163,6 +163,7 @@
/obj/item/weapon/melee/baton,
/obj/item/weapon/gun/energy/taser,
/obj/item/weapon/gun/energy/stunrevolver,
/obj/item/weapon/gun/energy/stunrevolver/vintage,
/obj/item/weapon/gun/magnetic/railgun/heater/pistol,
/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/flame/lighter,
@@ -49,7 +49,7 @@ var/list/random_weighted_donuts = list(
update_icon()
/obj/item/weapon/storage/box/donut/update_icon()
overlays.Cut()
cut_overlays()
var/x_offset = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents)
var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state)
@@ -31,6 +31,7 @@
prob(4);/obj/item/weapon/gun/energy/taser,
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
prob(4);/obj/item/weapon/gun/energy/stunrevolver,
prob(2);/obj/item/weapon/gun/energy/stunrevolver/vintage,
prob(3);/obj/item/weapon/gun/energy/gun/compact)
/obj/random/energy/sec
+46
View File
@@ -64,6 +64,52 @@
/obj/structure/closet/crate/engineering,
/obj/structure/closet/crate)
/obj/random/vendorall //Fully random selection of consumer vendors
name = "random vending machine"
desc = "This is a random vending machine"
icon = 'icons/obj/vending.dmi'
icon_state = "radren-off"
/obj/random/vendorall/item_to_spawn()
return pick (/obj/machinery/vending/coffee,
/obj/machinery/vending/snack,
/obj/machinery/vending/cola,
/obj/machinery/vending/fitness,
/obj/machinery/vending/cigarette,
/obj/machinery/vending/giftvendor,
/obj/machinery/vending/hotfood,
/obj/machinery/vending/weeb,
/obj/machinery/vending/sol,
/obj/machinery/vending/snix,
/obj/machinery/vending/snlvend,
/obj/machinery/vending/sovietsoda,
/obj/machinery/vending/sovietvend,
/obj/machinery/vending/radren)
/obj/random/vendorfood //Random food vendors for station use
name = "random snack vending machine"
desc = "This is a random food vending machine"
icon = 'icons/obj/vending.dmi'
icon_state = "snack"
/obj/random/vendorfood/item_to_spawn()
return pick (/obj/machinery/vending/snack,
/obj/machinery/vending/weeb,
/obj/machinery/vending/sol,
/obj/machinery/vending/snix,
/obj/machinery/vending/snlvend)
/obj/random/vendordrink //Random drink vendors for station use
name = "random drink vending machine"
desc = "This is a random drink vending machine"
icon = 'icons/obj/vending.dmi'
icon_state = "Cola_Machine"
/obj/random/vendordrink/item_to_spawn() //Not including coffee as it's more specific in usage.
return pick (/obj/machinery/vending/cola,
/obj/machinery/vending/sovietsoda,
/obj/machinery/vending/radren)
/obj/random/obstruction //Large objects to block things off in maintenance
name = "random obstruction"
desc = "This is a random obstruction."
@@ -7,10 +7,10 @@
density = 1
w_class = ITEMSIZE_HUGE
layer = UNDER_JUNK_LAYER
var/opened = 0
var/sealed = 0
var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 100
@@ -35,6 +35,19 @@
var/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
/// Currently animating the door transform
var/is_animating_door = FALSE
/// Length of time (ds) to animate the door transform
var/door_anim_time = 2.0
/// Amount to 'squish' the full width of the door by
var/door_anim_squish = 0.30
/// Virtual angle at which the door is opened to (136 by default, so not a full 180)
var/door_anim_angle = 136
/// Offset for the door hinge location from centerline
var/door_hinge = -6.5
/// Our visual object for the closet door
var/obj/effect/overlay/closet_door/door_obj
/obj/structure/closet/Initialize()
..()
return INITIALIZE_HINT_LATELOAD
@@ -65,6 +78,10 @@
color = null
update_icon()
/obj/structure/closet/Destroy()
. = ..()
qdel_null(door_obj)
/obj/structure/closet/examine(mob/user)
. = ..()
if(Adjacent(user) || isobserver(user))
@@ -133,7 +150,7 @@
playsound(src, open_sound, 15, 1, -3)
if(initial(density))
density = !density
update_icon()
animate_door()
return 1
/obj/structure/closet/proc/close()
@@ -158,7 +175,7 @@
playsound(src, close_sound, 15, 1, -3)
if(initial(density))
density = !density
update_icon()
animate_door(TRUE)
return 1
//Cham Projector Exception
@@ -213,10 +230,11 @@
/obj/structure/closet/proc/toggle(mob/user as mob)
if(is_animating_door)
return
if(!(opened ? close() : open()))
to_chat(user, "<span class='notice'>It won't budge!</span>")
return
update_icon()
// this should probably use dump_contents()
/obj/structure/closet/ex_act(severity)
@@ -480,8 +498,45 @@
spawn(1) qdel(src)
return 1
// Just a generic cabinet for mappers to use
/obj/structure/closet/cabinet
name = "cabinet"
icon = 'icons/obj/closets/bases/cabinet.dmi'
closet_appearance = /decl/closet_appearance/cabinet
/obj/structure/closet/proc/animate_door(closing = FALSE)
if(!door_anim_time)
update_icon()
return
if(!door_obj)
door_obj = new
vis_contents |= door_obj
door_obj.icon = icon
door_obj.icon_state = "door_front"
is_animating_door = TRUE
if(!closing)
update_icon()
var/num_steps = door_anim_time / world.tick_lag
for(var/I in 0 to num_steps)
var/angle = door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps))
var/matrix/M = get_door_transform(angle)
var/door_state = angle >= 90 ? "door_back" : "door_front"
var/door_layer = angle >= 90 ? FLOAT_LAYER : ABOVE_MOB_LAYER
if(I == 0)
door_obj.transform = M
door_obj.icon_state = door_state
door_obj.layer = door_layer
else if(I == 1)
animate(door_obj, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW)
else
animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag)
addtimer(CALLBACK(src,.proc/end_door_animation,closing),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE)
/obj/structure/closet/proc/end_door_animation(closing = FALSE)
is_animating_door = FALSE
if(closing)
// There's not really harm in leaving it on, but, one less atom to send to clients to render when lockers are closed
vis_contents -= door_obj
update_icon()
/obj/structure/closet/proc/get_door_transform(angle)
var/matrix/M = matrix()
M.Translate(-door_hinge, 0)
M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * door_anim_squish, 1, 0))
M.Translate(door_hinge, 0)
return M
@@ -33,6 +33,8 @@
var/icon/closed_locked_welded_icon
var/icon/closed_unlocked_icon
var/icon/closed_unlocked_welded_icon
var/icon/door_front_icon
var/icon/door_back_icon
// Create open icon.
var/icon/new_icon = new
@@ -40,6 +42,8 @@
open_icon.Blend(icon(base_icon, "open"), ICON_OVERLAY)
open_icon.Blend(color, BLEND_ADD)
open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY)
door_back_icon = icon(base_icon, "door_back")
door_back_icon.Blend(color, BLEND_ADD)
if(decal_icon)
for(var/thing in decals)
var/icon/this_decal_icon = icon(decal_icon, "[thing]_open")
@@ -47,6 +51,8 @@
open_icon.Blend(this_decal_icon, ICON_OVERLAY)
// Generate basic closed icons.
door_front_icon = icon(base_icon, "door_front")
door_front_icon.Blend(color, BLEND_ADD)
closed_emagged_icon = icon(base_icon, "base")
if(can_lock)
closed_emagged_icon.Blend(icon(base_icon, "lock"), ICON_OVERLAY)
@@ -56,6 +62,10 @@
var/icon/this_decal_icon = icon(decal_icon, thing)
this_decal_icon.Blend(decals[thing], BLEND_ADD)
closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY)
door_front_icon.Blend(this_decal_icon, ICON_OVERLAY)
door_front_icon.AddAlphaMask(icon(base_icon, "door_front")) // Remove pesky 'more than just door' decals
closed_locked_icon = icon(closed_emagged_icon)
closed_unlocked_icon = icon(closed_emagged_icon)
@@ -90,6 +100,8 @@
new_icon.Insert(closed_locked_welded_icon, "closed_locked_welded")
new_icon.Insert(closed_unlocked_icon, "closed_unlocked")
new_icon.Insert(closed_unlocked_welded_icon, "closed_unlocked_welded")
new_icon.Insert(door_front_icon, "door_front")
new_icon.Insert(door_back_icon, "door_back")
// Set icon!
icon = new_icon
@@ -2,11 +2,12 @@
name = "coffin"
desc = "It's a burial receptacle for the dearly departed."
icon = 'icons/obj/closets/coffin.dmi'
icon_state = "closed_unlocked"
seal_tool = /obj/item/weapon/tool/screwdriver
breakout_sound = 'sound/weapons/tablehit1.ogg'
closet_appearance = null // Special icon for us
door_anim_time = 0 //Unsupported
/* Graves */
/obj/structure/closet/grave
@@ -20,6 +21,7 @@
max_closets = 1
opened = 1
closet_appearance = null // Special icon for us
door_anim_time = 0 //Unsupported
/obj/structure/closet/grave/attack_hand(mob/user as mob)
if(opened)
@@ -1,4 +1,5 @@
/obj/structure/closet/crate/critter
name = "critter crate"
desc = "A crate which can sustain life for a while."
closet_appearance = /decl/closet_appearance/large_crate/critter
closet_appearance = /decl/closet_appearance/large_crate/critter
door_anim_time = 0 //Unsupported
@@ -1,7 +1,9 @@
/obj/structure/closet/cabinet
name = "cabinet"
desc = "Old will forever be in fashion."
icon = 'icons/obj/closets/bases/cabinet.dmi'
closet_appearance = /decl/closet_appearance/cabinet
door_anim_time = 0 //Unsupported
/obj/structure/closet/acloset
name = "strange closet"
@@ -1,6 +1,7 @@
/obj/structure/closet/secure_closet/freezer/kitchen
name = "kitchen cabinet"
req_access = list(access_kitchen)
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/reagent_containers/food/condiment/flour = 7,
@@ -16,6 +17,7 @@
name = "meat fridge"
icon = 'icons/obj/closets/fridge.dmi'
closet_appearance = null
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey = 10)
@@ -25,6 +27,7 @@
name = "refrigerator"
icon = 'icons/obj/closets/fridge.dmi'
closet_appearance = null
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/reagent_containers/food/drinks/milk = 6,
@@ -38,6 +41,7 @@
icon = 'icons/obj/closets/fridge.dmi'
closet_appearance = null
req_access = list(access_heads_vault)
door_anim_time = 0 //Unsupported
starts_with = list(
@@ -227,6 +227,7 @@
wall_mounted = 1
req_access = list(access_medical_equip)
closet_appearance = /decl/closet_appearance/wall/medical
door_anim_time = 0 // Unsupported
/obj/structure/closet/secure_closet/medical_wall/pills
name = "pill cabinet"
@@ -26,6 +26,7 @@
/obj/structure/closet/secure_closet/personal/cabinet
closet_appearance = /decl/closet_appearance/cabinet/secure
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/storage/backpack/satchel/withwallet,
@@ -223,11 +223,13 @@
name = "detective's cabinet"
req_access = list(access_forensics_lockers)
closet_appearance = /decl/closet_appearance/cabinet/secure
door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/clothing/accessory/badge/holo/detective,
/obj/item/clothing/gloves/black,
/obj/item/gunbox,
/obj/item/weapon/gun/energy/stunrevolver/vintage,
/obj/item/weapon/storage/belt/detective,
/obj/item/weapon/storage/box/evidence,
/obj/item/device/radio/headset/headset_sec,
@@ -294,6 +296,5 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
req_access = list(access_security)
closet_appearance = /decl/closet_appearance/wall
density = 1
//too small to put a man in
large = 0
door_anim_time = 0 // Unsupported
large = 0 //too small to put a man in
@@ -6,6 +6,7 @@
density = 1
anchored = 1
health = 0 //destroying the statue kills the mob within
door_anim_time = 0 // Why is this a closet??
var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock
var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils.
var/intialBrute = 0
@@ -43,7 +44,7 @@
qdel(src)
return
START_PROCESSING(SSobj, src)
START_PROCESSING(SSobj, src)
..()
/obj/structure/closet/statue/process()
@@ -186,6 +186,7 @@
anchored = 1
density = 0
wall_mounted = 1
door_anim_time = 0 // Unsupported
starts_with = list(
/obj/item/clothing/suit/fire/firefighter,
@@ -10,6 +10,7 @@
anchored = 1
store_mobs = 0
wall_mounted = 1
door_anim_time = 0 // Unsupported
//spawns 2 sets of breathmask, emergency oxy tank and crowbar
@@ -68,6 +69,7 @@
wall_mounted = 1
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
door_anim_time = 0 // Unsupported
/obj/structure/closet/walllocker_double/north
pixel_y = 32
@@ -108,7 +110,7 @@
/obj/structure/closet/walllocker_double/kitchen/east
pixel_x = 32
dir = EAST
/obj/structure/closet/walllocker_double/medical
name = "Medical Cabinet"
desc = "A wall mounted medical supply cabinet. Probably full of drugs!" //not actually full of drugs, sorry!
@@ -129,7 +131,7 @@
/obj/structure/closet/walllocker_double/medical/east
pixel_x = 32
dir = EAST
/obj/structure/closet/walllocker_double/hydrant
name = "fire-safety closet"
desc = "It's a storage cabinet packed with fire-fighting supplies."
@@ -7,6 +7,7 @@
closet_appearance = /decl/closet_appearance/crate
climbable = 1
dir = 4 //Spawn facing 'forward' by default.
door_anim_time = 0 //Unsupported until appropriate sprites are available
var/points_per_crate = 5
var/rigged = 0
+60 -33
View File
@@ -13,6 +13,7 @@
var/min_x_scale = 0.9
var/min_y_scale = 0.9
var/removal_tool = /obj/item/weapon/shovel
var/harvest_tool = null // The type of item used to harvest the plant.
var/harvest_count = 0
@@ -39,21 +40,34 @@
. = ..()
if(harvest_count < max_harvests)
. += get_harvestable_desc()
if(harvest_tool)
var/obj/item/tool = harvest_tool
. += SPAN_NOTICE("\The [src] can be harvested with \a [initial(tool.name)].")
if(removal_tool)
var/obj/item/tool = removal_tool
. += SPAN_NOTICE("\The [src] can be removed with \a [initial(tool.name)].")
/obj/structure/flora/proc/get_harvestable_desc()
return "<span class='notice'>\The [src] seems to have something hanging from it.</span>"
/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(can_harvest(W))
var/harvest_spawn = pickweight(harvest_loot)
var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
if(!AM)
to_chat(user, "<span class='notice'>You fail to harvest anything from \the [src].</span>")
if(AM)
to_chat(user, SPAN_NOTICE("You harvest \the [AM] from \the [src]."))
else
to_chat(user, "<span class='notice'>You harvest \the [AM] from \the [src].</span>")
return
to_chat(user, SPAN_NOTICE("You fail to harvest anything from \the [src]."))
return
if(removal_tool && istype(W, removal_tool))
to_chat(user, SPAN_WARNING("You start uprooting \the [src]..."))
if(do_after(user, 30))
visible_message(SPAN_NOTICE("\The [user] uproots and discards \the [src]!"))
qdel(src)
return
..(W, user)
@@ -408,19 +422,28 @@
desc = "This is a tiny well lit decorative christmas tree."
icon_state = "plant-xmas"
/obj/structure/flora/mushroom
name = "mushroom"
desc = "Hey, this one seems like a fun guy."
icon_state = "mush1"
icon = 'icons/obj/flora/mushrooms.dmi'
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/mushroomslice = 1)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
/obj/structure/flora/mushroom/Initialize()
. = ..()
icon_state = "mush[rand(1,4)]"
if(prob(50))
adjust_scale(-1, 1)
pixel_x = rand(-4, 4)
/obj/structure/flora/sif
icon = 'icons/obj/flora/sifflora.dmi'
/obj/structure/flora/sif/attack_hand(mob/user)
if (user.a_intent == I_HURT)
if(do_after(user, 5 SECONDS))
user.visible_message("<span class='filter_notice'>\The [user] digs up \the [src.name].", "You dig up \the [src.name].</span>")
qdel(src)
else
user.visible_message("<span class='filter_notice'>\The [user] pokes \the [src.name].", "You poke \the [src.name].</span>")
/datum/category_item/catalogue/flora/subterranean_bulbs
name = "Sivian Flora - Subterranean Bulbs"
name = "Sivian Flora - Cavebulbs"
desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \
known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \
@@ -433,19 +456,22 @@
value = CATALOGUER_REWARD_EASY
/obj/structure/flora/sif/subterranean
name = "subterranean plant"
name = "subterranean bulbs"
desc = "This is a subterranean plant. It's bulbous ends glow faintly."
icon_state = "glowplant"
light_range = 2
light_power = 0.6
light_color = "#FF6633"
catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs)
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs = 1)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
/obj/structure/flora/sif/subterranean/Initialize()
icon_state = "[initial(icon_state)][rand(1,2)]"
. = ..()
/datum/category_item/catalogue/flora/eyebulbs
name = "Sivian Flora - Eyebulbs"
desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \
@@ -454,10 +480,14 @@
value = CATALOGUER_REWARD_EASY
/obj/structure/flora/sif/eyes
name = "mysterious bulbs"
desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
name = "eyebulbs"
desc = "This is a mysterious-looking plant. They kind of look like eyeballs. Creepy."
icon_state = "eyeplant"
catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs = 1)
/obj/structure/flora/sif/eyes/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
@@ -471,20 +501,20 @@
value = CATALOGUER_REWARD_TRIVIAL
/obj/structure/flora/sif/tendrils
name = "stocky tendrils"
name = "wabback tendrils"
desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
icon_state = "grass"
randomize_size = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 1
min_harvests = -4
max_harvests = 3
min_harvests = 0
harvest_loot = list(
/obj/item/seeds/wabback = 15,
/obj/item/seeds/blackwabback = 1,
/obj/item/seeds/wildwabback = 30
)
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback = 15,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback = 1,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback = 30
)
/obj/structure/flora/sif/tendrils/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
@@ -503,26 +533,24 @@
value = CATALOGUER_REWARD_HARD
/obj/structure/flora/sif/frostbelle
name = "gnarly shrub"
name = "frostbelle shrub"
desc = "A stocky plant with fins bearing luminescent veins along its branches."
icon_state = "grass"
icon_state = "frostbelle"
randomize_size = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/frostbelle)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = -4
min_harvests = 0
harvest_loot = list(
/obj/item/weapon/reagent_containers/food/snacks/frostbelle = 1
)
)
var/variantnum = null
/obj/structure/flora/sif/frostbelle/Initialize()
. = ..()
variantnum = rand(1,3)
update_icon()
/obj/structure/flora/sif/frostbelle/update_icon()
@@ -530,7 +558,6 @@
if(max_harvests > 0 && harvest_count < max_harvests)
icon_state = "[initial(icon_state)][variantnum]"
else
icon_state = initial(icon_state)
+3 -3
View File
@@ -271,12 +271,12 @@
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = -4
min_harvests = 0
harvest_loot = list(
/obj/item/weapon/reagent_containers/food/snacks/siffruit = 20,
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod = 5,
/obj/item/seeds/sifbulb = 1
)
)
var/light_shift = 0
@@ -0,0 +1,50 @@
/obj/structure/prop/esoteric
name = "some esoteric thing"
desc = "Perhaps it's of ritual significance?"
icon = 'icons/obj/props/decor.dmi'
/obj/structure/prop/esoteric/nt_pedestal0_old
name = "pedestal"
desc = "A pedestal with a mysterious slot at its center."
icon_state = "nt_pedestal0_old"
/obj/structure/prop/esoteric/nt_pedestal1_old
name = "pedestal"
desc = "A pedestal with some kind of sword slotted securely in the center."
icon_state = "nt_pedestal1_old"
// eye of the protector from Eris
/obj/structure/prop/esoteric/eotp
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "eotp"
// neotheology cruciform reader from Eris
/obj/structure/prop/esoteric/reader
name = "electronic altar"
desc = "It looks like you're meant to scan something here."
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_reader_off"
/obj/structure/prop/esoteric/reader/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_reader_off"
if("on")
icon_state = "nt_reader_on"
if("no_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
if("red_cruciform")
cut_overlay("nt_reader_c_green")
cut_overlay("nt_reader_c_red")
add_overlay("nt_reader_c_red")
if("green_cruciform")
cut_overlay("nt_reader_c_red")
cut_overlay("nt_reader_c_green")
add_overlay("nt_reader_c_green")
if("panel_open")
cut_overlay("nt_reader_panel")
add_overlay("nt_reader_panel")
if("panel_closed")
cut_overlay("nt_reader_panel")
@@ -0,0 +1,7 @@
// fences from TGMC
// You'll need to 'create instances from icon_states' in an editor to use these well
/obj/structure/prop/fence
name = "fence"
desc = "It's a fence! Not much else to say about it."
icon = 'icons/obj/props/decor_fences.dmi'
@@ -0,0 +1,564 @@
/obj/structure/prop/machine
name = "doodad"
desc = "Some kind of machine."
icon = 'icons/obj/props/decor.dmi'
//Eris Bluespace Beacon
/obj/structure/prop/machine/bsb_off
name = "beacon"
icon_state = "bsb_off"
/obj/structure/prop/machine/bsb_on
name = "beacon"
icon_state = "bsb_on"
/obj/structure/prop/machine/biosyphon
icon_state = "biosyphon"
/obj/structure/prop/machine/von_krabin
icon_state = "von_krabin"
/obj/structure/prop/machine/last_shelter
icon_state = "last_shelter"
/obj/structure/prop/machine/complicator
icon_state = "complicator"
/obj/structure/prop/machine/random_radio
name = "radio"
icon_state = "random_radio"
// vatgrowing thing from /tg/
/obj/structure/prop/machine/green_egg
icon_state = "gel_cocoon"
// gravity generator from Eris
/obj/structure/prop/machine/gravygen
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "bigdice"
bound_width = 64
bound_height = 64
// dna vault from /tg/
/obj/structure/prop/dna_vault
icon = 'icons/obj/props/decor96x96.dmi'
icon_state = "vault"
/**
* Possible 'state' options for change_state(state) are:
* off: Looks boring and off
* on: candles lit and stuff
* no_cruciform: No cruciform (the little triangle thing) inserted
* red_cruciform: Red light cruciform inserted
* green_cruciform: Green light cruciform inserted
* panel_open: The panel is open (wiring)
* panel_closed: The panel is closed
*/
/**
* Possible 'state' options for change_state(state) are:
* panel_open: The panel is opened
* panel_closed: The panel is closed
*/
// neotheology cloning biocan from Eris
/obj/structure/prop/machine/nt_biocan
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_biocan"
/obj/structure/prop/nt_biocan/change_state(state)
. = ..()
switch(state)
if("panel_open")
cut_overlay("nt_biocan_panel")
add_overlay("nt_biocan_panel")
if("panel_closed")
cut_overlay("nt_biocan_panel")
/**
* Possible 'state' options for change_state(state) are:
* blue, red, orange, yellow, green, purple: Set that color
* damaged: add damage overlay
* undamaged: remove damage overlay
* broken: become damaged
* plain: undamaged white version, otherwise use a color
*/
// dominator console from /tg/
/obj/structure/prop/dominator
icon = 'icons/obj/props/decor.dmi'
icon_state = "dominator"
/obj/structure/prop/dominator/change_state(state)
. = ..()
switch(state)
if("blue")
icon_state = "dominator-blue"
if("red")
icon_state = "dominator-red"
if("orange")
icon_state = "dominator-orange"
if("yellow")
icon_state = "dominator-yellow"
if("green")
icon_state = "dominator-green"
if("purple")
icon_state = "dominator-purple"
if("damaged")
add_overlay("dom_damage")
if("undamaged")
cut_overlay("dom_damage")
if("broken")
icon_state = "dominator-broken"
if("plain")
icon_state = "dominator"
/obj/structure/prop/dominator/blue
icon_state = "dominator-blue"
/obj/structure/prop/dominator/red
icon_state = "dominator-red"
/obj/structure/prop/dominator/orange
icon_state = "dominator-orange"
/obj/structure/prop/dominator/yellow
icon_state = "dominator-yellow"
/obj/structure/prop/dominator/green
icon_state = "dominator-green"
/obj/structure/prop/dominator/purple
icon_state = "dominator-purple"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Pumping or something
*/
// some neotheology thing from Eris
/obj/structure/prop/machine/solifier
icon_state = "nt_solidifier"
/obj/structure/prop/machine/solifier/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_solidifier"
if("on")
icon_state = "nt_solidifier_on"
/obj/structure/prop/machine/solifier/starts_on
icon_state = "nt_solidifier_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, round
* on: Spinny glowy
*/
// conduit of soul from Eris
/obj/structure/prop/machine/conduit
icon_state = "conduit_off"
/obj/structure/prop/machine/conduit/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "conduit_spin"
flick("conduit_starting", src)
if("off")
icon_state = "conduit_off"
flick("conduit_stopping", src)
/obj/structure/prop/machine/conduit/starts_on
icon_state = "conduit_spin"
/**
* Possible 'state' options for change_state(state) are:
* on: Doing some kinda worky thing
* off: Not doing much of anything
* empty: No blue crystal thingy
* loaded: off but without the animation
*/
// some kinda NT thing from Eris
/obj/structure/prop/machine/core
icon_state = "core_inactive"
/obj/structure/prop/machine/core/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "core_active"
flick("core_warmup", src)
if("off")
icon_state = "core_inactive"
flick("core_shutdown", src)
if("empty")
icon_state = "core_empty"
if("loaded")
icon_state = "core_inactive"
/obj/structure/prop/machine/core/starts_on
icon_state = "core_active"
/**
* Possible 'state' options for change_state(state) are:
* down: In the ground, glowing
* up: Out of the ground, open
*/
// experimental science destructor from /tg/
/obj/structure/prop/machine/tube
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "tube_open"
/obj/structure/prop/machine/tube/change_state(state)
. = ..()
switch(state)
if("down")
icon_state = "tube_on"
flick("tube_down", src)
if("up")
icon_state = "tube_open"
flick("tube_up", src)
/obj/structure/prop/machine/tube/starts_down
icon_state = "tube_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Boring, static
* on: Turny and blinky
*/
// experimental science destructor from /tg/
/obj/structure/prop/machine/comm_tower
icon = 'icons/obj/props/decor.dmi'
icon = 'icons/obj/props/decor96x96.dmi'
icon_state = "comm_tower"
/obj/structure/prop/machine/comm_tower/change_state(state)
. = ..()
switch(state)
if("on")
icon_state = "comm_tower_on"
if("off")
icon_state = "comm_tower"
/obj/structure/prop/machine/comm_tower/starts_on
icon_state = "comm_tower_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Not doing much
* on: Stamping mysterious substances
*/
// sheetizer from /tg/
/obj/structure/prop/machine/stamper
icon = 'icons/obj/props/decor.dmi'
icon_state = "stamper"
/obj/structure/prop/machine/stamper/change_state(state)
. = ..()
switch(state)
if("off")
cut_overlays()
if("on")
add_overlay("stamper_proc")
add_overlay("stamper_but")
/obj/structure/prop/machine/stamper/starts_on
icon_state = "stamper_on"
/obj/structure/prop/machine/stamper/starts_on/Initialize()
add_overlay("stamper_proc")
add_overlay("stamper_but")
/**
* Possible 'state' options for change_state(state) are:
* whole: Not doing much
* broken: Stamping mysterious substances
*/
// alien autopsy thing from TGMC
/obj/structure/prop/machine/alien_tank
icon_state = "tank_larva"
/obj/structure/prop/machine/alien_tank/change_state(state)
. = ..()
switch(state)
if("whole")
icon_state = "tank_larva"
if("broken")
icon_state = "tank_broken"
/obj/structure/prop/machine/alien_tank/starts_broken
icon_state = "tank_broken"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights underneath
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// neotheology optable from Eris
/obj/structure/prop/machine/nt_optable
icon_state = "nt_optable-idle"
/obj/structure/prop/machine/nt_optable/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_optable-idle"
if("active")
icon_state = "nt_optable-active"
if("panel_open")
cut_overlay("nt_optable_panel")
add_overlay("nt_optable_panel")
if("panel_closed")
cut_overlay("nt_optable_panel")
/obj/structure/prop/nt_optable/starts_active
icon_state = "nt_optable-active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// trade beacon from Eris
/obj/structure/prop/machine/tradebeacon
icon_state = "tradebeacon"
/obj/structure/prop/machine/tradebeacon/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon"
if("active")
icon_state = "tradebeacon_active"
if("panel_open")
cut_overlay("tradebeacon_panel")
add_overlay("tradebeacon_panel")
if("panel_closed")
cut_overlay("tradebeacon_panel")
/obj/structure/prop/machine/tradebeacon/starts_active
icon_state = "tradebeacon_active"
/**
* Possible 'state' options for change_state(state) are:
* idle: The default look
* active: Glowy lights in the center
* panel_open: Opened panel (wiring)
* panel_closed: Closed panel
*/
// another trade beacon from Eris
/obj/structure/prop/machine/tradebeacon2
icon_state = "tradebeacon"
/obj/structure/prop/machine/tradebeacon2/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "tradebeacon_sending"
if("active")
icon_state = "tradebeacon_sending_active"
if("panel_open")
cut_overlay("tradebeacon_sending_panel")
add_overlay("tradebeacon_sending_panel")
if("panel_closed")
cut_overlay("tradebeacon_sending_panel")
/obj/structure/prop/machine/tradebeacon2/starts_active
icon_state = "tradebeacon_sending_active"
/**
* Possible 'state' options for change_state(state) are:
* off: Non-spinny
* on: Spinny and floaty
*/
// neotheology decorative(?) obelisk from Eris
/obj/structure/prop/machine/nt_obelisk
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_obelisk"
/obj/structure/prop/machine/nt_obelisk/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "nt_obelisk"
if("on")
icon_state = "nt_obelisk_on"
/obj/structure/prop/machine/nt_obelisk/starts_on
icon_state = "nt_obelisk_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'sorter' from Eris
/obj/structure/prop/machine/sorter
icon = 'icons/obj/props/decor.dmi'
icon_state = "sorter"
/obj/structure/prop/machine/sorter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "sorter"
if("on")
icon_state = "sorter-process"
/obj/structure/prop/machine/sorter/starts_on
icon_state = "sorter-process"
/**
* Possible 'state' options for change_state(state) are:
* off: Inert
* on: Hand destroying machinery
*/
// 'smelter' from Eris
/obj/structure/prop/machine/smelter
icon = 'icons/obj/props/decor.dmi'
icon_state = "smelter"
/obj/structure/prop/machine/smelter/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "smelter"
if("on")
icon_state = "smelter-process"
/obj/structure/prop/machine/smelter/starts_on
icon_state = "smelter-process"
/**
* Possible 'state' options for change_state(state) are:
* idle: Not doing anything, with yellow template exposed
* work: busy doing work
* pause: paused work
*/
// cruciform forge from Eris
/obj/structure/prop/machine/nt_cruciforge
icon = 'icons/obj/props/decor.dmi'
icon_state = "nt_cruciforge"
/obj/structure/prop/machine/nt_cruciforge/change_state(state)
. = ..()
switch(state)
if("idle")
icon_state = "nt_cruciforge"
flick("nt_cruciforge_finish", src) // 8ds
if("work")
icon_state = "nt_cruciforge_work"
flick("nt_cruciforge_start", src) // 8ds
if("pause")
icon_state = "nt_cruciforge_pause"
/obj/structure/prop/machine/nt_cruciforge/starts_working
icon_state = "nt_cruciforge_work"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console1
name = "console"
icon = 'icons/obj/props/decor.dmi'
icon_state = "tgmc_console1"
/obj/structure/prop/machine/tgmc_console1/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console1"
if("on")
icon_state = "tgmc_console1_on"
/obj/structure/prop/machine/tgmc_console1/starts_on
icon_state = "tgmc_console1_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console2
name = "console"
icon_state = "tgmc_console2"
/obj/structure/prop/machine/tgmc_console2/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console2"
if("on")
icon_state = "tgmc_console2_on"
/obj/structure/prop/machine/tgmc_console2/starts_on
icon_state = "tgmc_console2_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console3
name = "console"
icon_state = "tgmc_console3"
/obj/structure/prop/machine/tgmc_console3/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console3"
if("on")
icon_state = "tgmc_console3_on"
/obj/structure/prop/machine/tgmc_console3/starts_on
icon_state = "tgmc_console3_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console4
name = "console"
icon_state = "tgmc_console4"
/obj/structure/prop/machine/tgmc_console4/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console4"
if("on")
icon_state = "tgmc_console4_on"
/obj/structure/prop/machine/tgmc_console4/starts_on
icon_state = "tgmc_console4_on"
/**
* Possible 'state' options for change_state(state) are:
* off: Default, boring
* on: Showing a display/powered up
*/
// A console from TGMC
/obj/structure/prop/machine/tgmc_console5
name = "console"
icon_state = "tgmc_console5"
/obj/structure/prop/machine/tgmc_console5/change_state(state)
. = ..()
switch(state)
if("off")
icon_state = "tgmc_console5"
if("on")
icon_state = "tgmc_console5_on"
/obj/structure/prop/machine/tgmc_console5/starts_on
icon_state = "tgmc_console5_on"
+54 -3
View File
@@ -1,13 +1,26 @@
//The base 'prop' for PoIs or other large junk.
/**
* Decorative items for PoIs etc.
* These are generally sprites ported from other servers, which don't have any unique code.
* They can be used by mappers for decorating their maps. They're mostly here so people who aren't
* rummaging around in the sprites can be aware of some neat sprites they can use.
*
* Obviously you can swipe the sprites for real structures and add code, but please don't add any code
* (beyond decorative things like maybe light) directly to these types or this file!
* Take the icon and state and make your own type under /obj/structure.
*
* Some of these do have a SMIDGE of code to allow a mapper to twirl them through states/animations without
* much effort, but beyond 'visuals logic', I'd rather keep all the logic out of here.
*/
/obj/structure/prop
name = "something"
desc = "My description is broken, bug a developer."
name = "mysterious structure"
desc = "You're not sure what this is."
icon = 'icons/obj/structures.dmi'
icon_state = "safe"
density = TRUE
anchored = TRUE
var/interaction_message = null
var/state
/obj/structure/prop/attack_hand(mob/living/user) // Used to tell the player that this isn't useful for anything.
if(!istype(user))
@@ -16,3 +29,41 @@
return ..()
else
to_chat(user, interaction_message)
/obj/structure/prop/proc/change_state(state)
SHOULD_CALL_PARENT(TRUE)
src.state = state
/// Helper so admins can varedit the state easily.
/obj/structure/prop/vv_edit_var(var_name, var_value)
if(var_name == "state")
change_state(var_value)
//Misc stuff that fits no category
// ship memorial from TGMC
/obj/structure/prop/memorial
name = "engraved wall"
desc = "A finely engraved list on dark stone."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "ship_memorial"
bound_width = 64
/**
*
Notes on change_state
*
* tl;dr "You can varedit 'state' on these to the things in the comments below to get cool animations"
*
* These items have some logic to handle some fun animations on them. Mappers can call the 'change_state(state)' proc
* while referring to the comments here for what states they can use. You'll notice some crazy overlay handling,
* and that's because I don't want to add any vars to these mappers think they can fiddle with, which requires
* more logic than I'm willing to do at the moment. So we get crazy cut/add operations instead.
*
* There's also a VV helper so if you varedit 'state' to these during the game, you can get that to work.
*
* Like, I don't want to add a state machine to decorative objects. You can if you want.
*
*/
+12 -1
View File
@@ -38,4 +38,15 @@
density = FALSE
/obj/structure/prop/rock/small/wateralt
icon_state = "waterrocks2"
icon_state = "waterrocks2"
// bluespace crystal from Eris
/obj/structure/prop/crystal
name = "crystal"
icon = 'icons/obj/props/decor.dmi'
icon_state = "bsc"
/obj/structure/prop/crystal_dust
name = "crystal dust"
icon = 'icons/obj/props/decor.dmi'
icon_state = "bsc_dust"
@@ -0,0 +1,65 @@
//Eris statues
/obj/structure/prop/statue
name = "statue"
desc = "It's art!"
icon = 'icons/obj/props/decor.dmi'
icon_state = "artwork_statue"
/obj/structure/prop/statue/statue1
icon_state = "artwork_statue_1"
/obj/structure/prop/statue/statue2
icon_state = "artwork_statue_2"
/obj/structure/prop/statue/statue3
icon_state = "artwork_statue_3"
/obj/structure/prop/statue/statue4
icon_state = "artwork_statue_4"
/obj/structure/prop/statue/statue5
icon_state = "artwork_statue_5"
//TGMC Ship Mast
/obj/structure/prop/statue/stump_plaque
name = "commemorative stump"
desc = "A wooden stump adorned with a little plaque."
icon = 'icons/obj/props/decor.dmi'
icon_state = "stump"
//World Server statues
/obj/structure/prop/statue
name = "statue"
desc = "A statue."
icon = 'icons/obj/props/decor32x64.dmi'
icon_state = "venus"
/obj/structure/prop/statue/lion
icon_state = "lion"
/obj/structure/prop/statue/angel
icon = 'icons/obj/props/decor.dmi'
icon_state = "angel"
/obj/structure/prop/statue/phoron
name = "phoronic cascade"
desc = "A sculpture made of pure phoron. It is covered in a lacquer that prevents erosion and renders it fireproof. It's safe. Probably."
icon_state = "phoronic"
layer = ABOVE_WINDOW_LAYER
interaction_message = "<span class = 'notice'>Cool to touch and unbelievable smooth. You can almost see your reflection in it.</span>"
/obj/structure/prop/statue/phoron/New()
set_light(2, 3, "#cc66ff")
/obj/structure/prop/statue/pillar
name = "pillar"
desc = "A pillar."
icon_state = "pillar"
/obj/structure/prop/statue/pillar/dark
name = "pillar"
desc = "A dark pillar."
icon_state = "dark_pillar"
@@ -0,0 +1,167 @@
/obj/structure/prop/war
name = "military hardware"
desc = "What is it good for?"
icon = 'icons/obj/props/decor.dmi'
// warheads from TGMC
/obj/structure/prop/war/warhead1
name = "nuclear warhead"
icon_state = "ob_warhead_1"
/obj/structure/prop/war/warhead2
name = "incindiary warhead"
icon_state = "ob_warhead_2"
/obj/structure/prop/war/warhead3
name = "bluespace warhead"
icon_state = "ob_warhead_3"
/obj/structure/prop/war/warhead4
name = "phoron warhead"
icon_state = "ob_warhead_4"
// minirocket pod from TGMC
/obj/structure/prop/war/minirocket_pod
name = "rocket pod"
icon_state = "minirocket_pod"
// sentry console from TGMC
/obj/structure/prop/war/sentry_control
name = "portable sentry gun"
desc = "Needs a dispenser."
icon_state = "tgmc_sentry"
// various weapons from TGMC
/obj/structure/prop/war/tgmc_missile
name = "missile"
desc = "It seems to be some sort of spacecraft-tier ordinance."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "single"
bound_width = 64
/obj/structure/prop/war/tgmc_missile/double
icon_state = "widowmaker"
/obj/structure/prop/war/tgmc_missile/banshee
icon_state = "banshee"
/obj/structure/prop/war/tgmc_missile/keeper
icon_state = "keeper"
/obj/structure/prop/war/tgmc_missile/fatty
icon_state = "fatty"
/obj/structure/prop/war/tgmc_missile/napalm
icon_state = "napalm"
/**
* Possible 'state' options for change_state(state) are:
* empty, single, banshee, keeper, fatty, napalm
*/
// ship weapons from TGMC
/obj/structure/prop/tgmc_missile_rack
name = "missile launcher"
desc = "Some sort of spacecraft-tier missile weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "rocket_pod"
bound_height = 64
/obj/structure/prop/war/tgmc_missile_rack/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "rocket_pod"
if("single")
icon_state = "rocket_pod_loaded"
if("banshee")
icon_state = "rocket_pod_loadedb"
if("keeper")
icon_state = "rocket_pod_loadedk"
if("fatty")
icon_state = "rocket_pod_loadedf"
if("napalm")
icon_state = "rocket_pod_loadedn"
/obj/structure/prop/war/tgmc_missile_rack/single
icon_state = "rocket_pod_loaded"
/obj/structure/prop/war/tgmc_missile_rack/banshee
icon_state = "rocket_pod_loadedb"
/obj/structure/prop/war/tgmc_missile_rack/keeper
icon_state = "rocket_pod_loadedk"
/obj/structure/prop/war/tgmc_missile_rack/fatty
icon_state = "rocket_pod_loadedf"
/obj/structure/prop/war/tgmc_missile_rack/napalm
icon_state = "rocket_pod_loadedn"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_minirockets
name = "rocket pod"
desc = "Some sort of spacecraft-tier rocket weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "minirocket_pod"
bound_height = 64
/obj/structure/prop/war/tgmc_minirockets/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "minirocket_pod"
if("loaded")
icon_state = "minirocket_pod_loaded"
/obj/structure/prop/war/tgmc_minirockets/loaded
icon_state = "minirocket_pod_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_laser
name = "laser cannon"
desc = "Some sort of spacecraft-tier energy weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "laser_beam"
bound_height = 64
/obj/structure/prop/war/tgmc_laser/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "laser_beam"
if("loaded")
icon_state = "laser_beam_loaded"
/obj/structure/prop/war/tgmc_laser/loaded
icon_state = "laser_beam_loaded"
/**
* Possible 'state' options for change_state(state) are:
* empty, loaded, loadedempty
*/
// ship weapons from TGMC
/obj/structure/prop/war/tgmc_30mm
name = "30mm cannon"
desc = "Some sort of spacecraft-tier rotary cannon weapon."
icon = 'icons/obj/props/decor64x64.dmi'
icon_state = "30mm_cannon"
bound_height = 64
/obj/structure/prop/war/tgmc_30mm/change_state(state)
. = ..()
switch(state)
if("empty")
icon_state = "30mm_cannon"
if("loaded")
icon_state = "30mm_cannon_loaded1"
if("loadedempty")
icon_state = "30mm_cannon_loaded0"
/obj/structure/prop/war/tgmc_30mm/loaded
icon_state = "30mm_cannon_loaded1"
/obj/structure/prop/war/tgmc_30mm/loadedempty
icon_state = "30mm_cannon_loaded0"
@@ -126,6 +126,13 @@
playsound(src, W.usesound, 100, 1)
remove_padding()
else if(istype(W, /obj/item/weapon/disk) || (istype(W, /obj/item/toy/plushie)))
user.drop_from_inventory(W, get_turf(src))
W.pixel_x = 10 //make sure they reach the pillow
W.pixel_y = -6
if(istype(W, /obj/item/weapon/disk))
user.visible_message("<span class='notice'>[src] sleeps soundly. Sleep tight, disky.</span>")
else if(istype(W, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = W
var/mob/living/affecting = G.affecting
+1 -1
View File
@@ -41,7 +41,7 @@
update_icon()
/obj/structure/toilet/update_icon()
icon_state = "toilet[initial(icon_state)][open][cistern]"
icon_state = "[initial(icon_state)][open][cistern]"
/obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob)
if(I.is_crowbar())