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

This commit is contained in:
Neerti
2021-09-02 19:41:21 -04:00
175 changed files with 1930 additions and 630 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
+8 -4
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.
@@ -347,9 +347,9 @@
if(user.pulling == src) user.stop_pulling()
if((slot_flags & slot))
if(equip_sound)
playsound(src, equip_sound, 30)
playsound(src, equip_sound, 20)
else
playsound(src, drop_sound, 30)
playsound(src, drop_sound, 20)
else if(slot == slot_l_hand || slot == slot_r_hand)
playsound(src, pickup_sound, 20, preference = /datum/client_preference/pickup_sounds)
return
@@ -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', 20, 1, 1, preference = /datum/client_preference/radio_sounds)
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', 20, 1, 1, preference = /datum/client_preference/radio_sounds)
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)
@@ -84,6 +84,13 @@
to_chat(user, SPAN_WARNING("You don't have anything on \the [src].")) //if we have help intent and no food scooped up DON'T STAB OURSELVES WITH THE FORK
return
/obj/item/weapon/material/kitchen/utensil/on_rag_wipe()
. = ..()
if(reagents.total_volume > 0)
reagents.clear_reagents()
cut_overlays()
return
/obj/item/weapon/material/kitchen/utensil/fork
name = "fork"
desc = "It's a fork. Sure is pointy."
@@ -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."
+5 -5
View File
@@ -1,8 +1,8 @@
/obj/random
name = "random object"
desc = "This item type is used to spawn random objects at round-start"
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
icon = 'icons/misc/random_spawners.dmi'
icon_state = "generic"
var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything
var/drop_get_turf = TRUE
@@ -80,7 +80,7 @@ var/list/random_useful_
/obj/random/single
name = "randomly spawned object"
desc = "This item type is used to randomly spawn a given object at round-start"
icon_state = "x3"
icon_state = "generic"
var/spawn_object = null
/obj/random/single/item_to_spawn()
@@ -104,8 +104,8 @@ var/list/multi_point_spawns
/obj/random_multi
name = "random object spawn point"
desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected."
icon = 'icons/misc/mark.dmi'
icon_state = "x3"
icon = 'icons/misc/random_spawners.dmi'
icon_state = "generic_3"
invisibility = INVISIBILITY_MAXIMUM
var/id // Group id
var/weight // Probability weight for this spawn point
+65 -57
View File
@@ -1,8 +1,7 @@
/obj/random/gun/random
name = "Random Weapon"
desc = "This is a random energy or ballistic weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "energystun100"
icon_state = "gun"
/obj/random/gun/random/item_to_spawn()
return pick(prob(5);/obj/random/energy,
@@ -10,9 +9,8 @@
/obj/random/energy
name = "Random Energy Weapon"
desc = "This is a random weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
desc = "This is a random energy weapon."
icon_state = "gun_energy"
/obj/random/energy/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/energy/laser,
@@ -28,17 +26,34 @@
prob(2);/obj/item/weapon/gun/energy/ionrifle,
prob(2);/obj/item/weapon/gun/energy/ionrifle/pistol,
prob(3);/obj/item/weapon/gun/energy/toxgun,
prob(4);/obj/item/weapon/gun/energy/taser,
prob(3);/obj/item/weapon/gun/energy/taser,
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
prob(4);/obj/item/weapon/gun/energy/stunrevolver,
prob(3);/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/highend
name = "Random Energy Weapon"
desc = "This is a random, actually good energy weapon."
icon_state = "gun_energy_2"
/obj/random/energy/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/energy/laser,
prob(3);/obj/item/weapon/gun/energy/laser/sleek,
prob(4);/obj/item/weapon/gun/energy/gun,
prob(3);/obj/item/weapon/gun/energy/gun/burst,
prob(1);/obj/item/weapon/gun/energy/gun/nuclear,
prob(2);/obj/item/weapon/gun/energy/retro,
prob(2);/obj/item/weapon/gun/energy/lasercannon,
prob(3);/obj/item/weapon/gun/energy/xray,
prob(1);/obj/item/weapon/gun/energy/sniperrifle,
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
prob(3);/obj/item/weapon/gun/energy/gun/compact)
/obj/random/energy/sec
name = "Random Security Energy Weapon"
desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
icon_state = "gun_energy"
/obj/random/energy/sec/item_to_spawn()
return pick(prob(2);/obj/item/weapon/gun/energy/laser,
@@ -47,8 +62,7 @@
/obj/random/projectile
name = "Random Projectile Weapon"
desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun"
/obj/random/projectile/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/automatic/wt550,
@@ -89,8 +103,7 @@
/obj/random/projectile/sec
name = "Random Security Projectile Weapon"
desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_shotgun"
/obj/random/projectile/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
@@ -98,10 +111,9 @@
prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
/obj/random/projectile/shotgun
name = "Random Projectile Weapon"
desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "shotgun"
name = "Random Shotgun"
desc = "This is a random shotgun-type weapon."
icon_state = "gun_shotgun"
/obj/random/projectile/item_to_spawn()
return pick(prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
@@ -113,7 +125,7 @@
name = "Random Handgun"
desc = "This is a random sidearm."
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
icon_state = "gun"
/obj/random/handgun/item_to_spawn()
return pick(prob(4);/obj/item/weapon/gun/projectile/sec,
@@ -130,8 +142,7 @@
/obj/random/handgun/sec
name = "Random Security Handgun"
desc = "This is a random security sidearm."
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
icon_state = "gun"
/obj/random/handgun/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
@@ -140,8 +151,7 @@
/obj/random/ammo
name = "Random Ammunition"
desc = "This is random security ammunition."
icon = 'icons/obj/ammo.dmi'
icon_state = "45-10"
icon_state = "ammo"
/obj/random/ammo/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
@@ -157,8 +167,7 @@
/obj/random/grenade
name = "Random Grenade"
desc = "This is random thrown grenades (no C4/etc.)."
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
icon_state = "grenade_2"
/obj/random/grenade/item_to_spawn()
return pick( prob(15);/obj/item/weapon/grenade/concussion,
@@ -179,11 +188,24 @@
prob(15);/obj/item/weapon/grenade/smokebomb
)
/obj/random/grenade/lethal
name = "Random Grenade"
desc = "This is random thrown grenade that hurts a lot."
icon_state = "grenade_3"
/obj/random/grenade/lethal/item_to_spawn()
return pick( prob(15);/obj/item/weapon/grenade/concussion,
prob(5);/obj/item/weapon/grenade/empgrenade,
prob(2);/obj/item/weapon/grenade/chem_grenade/incendiary,
prob(5);/obj/item/weapon/grenade/explosive,
prob(10);/obj/item/weapon/grenade/explosive/mini,
prob(2);/obj/item/weapon/grenade/explosive/frag
)
/obj/random/grenade/less_lethal
name = "Random Security Grenade"
desc = "This is a random thrown grenade that shouldn't kill anyone."
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
icon_state = "grenade"
/obj/random/grenade/less_lethal/item_to_spawn()
return pick( prob(20);/obj/item/weapon/grenade/concussion,
@@ -199,8 +221,7 @@
/obj/random/grenade/box
name = "Random Grenade Box"
desc = "This is a random box of grenades. Not to be mistaken for a box of random grenades. Or a grenade of random boxes - but that would just be silly."
icon = 'icons/obj/grenade.dmi'
icon_state = "clusterbang_segment"
icon_state = "grenade_box"
/obj/random/grenade/box/item_to_spawn()
return pick( prob(20);/obj/item/weapon/storage/box/flashbangs,
@@ -215,9 +236,9 @@
/obj/random/projectile/random
name = "Random Projectile Weapon"
desc = "This is a random weapon."
desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_2"
/obj/random/projectile/random/item_to_spawn()
return pick(prob(3);/obj/random/multiple/gun/projectile/handgun,
@@ -228,8 +249,7 @@
/obj/random/multiple/gun/projectile/smg
name = "random smg projectile gun"
desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi'
icon_state = "saber"
icon_state = "gun_auto"
/obj/random/multiple/gun/projectile/smg/item_to_spawn()
return pick(
@@ -267,8 +287,7 @@
/obj/random/multiple/gun/projectile/rifle
name = "random rifle projectile gun"
desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi'
icon_state = "carbine"
icon_state = "gun_rifle"
//Concerns about the bullpup, but currently seems to be only a slightly stronger z8. But we shall see.
@@ -319,8 +338,7 @@
/obj/random/multiple/gun/projectile/handgun
name = "random handgun projectile gun"
desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun"
/obj/random/multiple/gun/projectile/handgun/item_to_spawn()
return pick(
@@ -451,8 +469,7 @@
/obj/random/multiple/gun/projectile/shotgun
name = "random shotgun projectile gun"
desc = "Loot for PoIs."
icon = 'icons/obj/gun.dmi'
icon_state = "shotgun"
icon_state = "gun_shotgun"
/obj/random/multiple/gun/projectile/shotgun/item_to_spawn()
return pick(
@@ -485,7 +502,7 @@
name = "broken gun spawner"
desc = "Spawns a random broken gun, or rarely a fully functional one."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_gun/item_to_spawn()
return pickweight(list(
@@ -503,8 +520,7 @@
/obj/random/projectile/scrapped_shotgun
name = "broken shotgun spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "shotgun"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_shotgun/item_to_spawn()
return pickweight(list(
@@ -517,8 +533,7 @@
/obj/random/projectile/scrapped_smg
name = "broken smg spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_smg/item_to_spawn()
return pickweight(list(
@@ -529,8 +544,7 @@
/obj/random/projectile/scrapped_pistol
name = "broken pistol spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_pistol/item_to_spawn()
return pickweight(list(
@@ -541,8 +555,7 @@
/obj/random/projectile/scrapped_laser
name = "broken laser spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_laser/item_to_spawn()
return pickweight(list(
@@ -555,8 +568,7 @@
/obj/random/projectile/scrapped_ionrifle
name = "broken ionrifle spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_ionrifle/item_to_spawn()
return pickweight(list(
@@ -567,8 +579,7 @@
/obj/random/projectile/scrapped_bulldog
name = "broken z8 spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_bulldog/item_to_spawn()
return pickweight(list(
@@ -579,8 +590,7 @@
/obj/random/projectile/scrapped_flechette
name = "broken flechette spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_flechette/item_to_spawn()
return pickweight(list(
@@ -591,8 +601,7 @@
/obj/random/projectile/scrapped_grenadelauncher
name = "broken grenadelauncher spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_grenadelauncher/item_to_spawn()
return pickweight(list(
@@ -603,8 +612,7 @@
/obj/random/projectile/scrapped_dartgun
name = "broken dartgun spawner"
desc = "Loot for PoIs, or their mobs."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
icon_state = "gun_scrap"
/obj/random/projectile/scrapped_dartgun/item_to_spawn()
return pickweight(list(
+4 -14
View File
@@ -1,8 +1,6 @@
/obj/random/maintenance //Clutter and loot for maintenance and away missions
name = "random maintenance item"
desc = "This is a random maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/item_to_spawn()
return pick(prob(300);/obj/random/tech_supply,
@@ -25,8 +23,6 @@ Individual items to add to the maintenance list should go here, if you add
something, make sure it's not in one of the other lists.*/
name = "random clean maintenance item"
desc = "This is a random clean maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/clean/item_to_spawn()
return pick(prob(10);/obj/random/contraband,
@@ -112,8 +108,7 @@ something, make sure it's not in one of the other lists.*/
/*Maintenance loot list. This one is for around security areas*/
name = "random security maintenance item"
desc = "This is a random security maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
icon_state = "security"
/obj/random/maintenance/security/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
@@ -169,8 +164,7 @@ something, make sure it's not in one of the other lists.*/
/*Maintenance loot list. This one is for around medical areas*/
name = "random medical maintenance item"
desc = "This is a random medical maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
icon_state = "medical"
/obj/random/maintenance/medical/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
@@ -209,8 +203,7 @@ something, make sure it's not in one of the other lists.*/
/*Maintenance loot list. This one is for around medical areas*/
name = "random engineering maintenance item"
desc = "This is a random engineering maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
icon_state = "tool"
/obj/random/maintenance/engineering/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
@@ -247,8 +240,7 @@ something, make sure it's not in one of the other lists.*/
/*Maintenance loot list. This one is for around medical areas*/
name = "random research maintenance item"
desc = "This is a random research maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
icon_state = "science"
/obj/random/maintenance/research/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
@@ -279,8 +271,6 @@ something, make sure it's not in one of the other lists.*/
/*Maintenance loot list. This one is for around cargo areas*/
name = "random cargo maintenance item"
desc = "This is a random cargo maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/cargo/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
+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."
+1 -6
View File
@@ -1,8 +1,7 @@
/obj/random/mech
name = "random mech"
desc = "This is a random single mech."
icon = 'icons/mecha/mecha.dmi'
icon_state = "old_durand"
icon_state = "mecha"
drop_get_turf = FALSE
//This list includes the phazon, gorilla and mauler. You might want to use something else if balance is a concern.
@@ -25,8 +24,6 @@
/obj/random/mech/weaker
name = "random mech"
desc = "This is a random single mech. Those are less potent and more common."
icon = 'icons/mecha/mecha.dmi'
icon_state = "old_durand"
drop_get_turf = FALSE
/obj/random/mech/weaker/item_to_spawn()
@@ -42,8 +39,6 @@
/obj/random/mech/old
name = "random mech"
desc = "This is a random single old mech."
icon = 'icons/mecha/mecha.dmi'
icon_state = "old_durand"
drop_get_turf = FALSE
//Note that all of those are worn out and have slightly less maximal health than the standard.
+21 -39
View File
@@ -6,8 +6,7 @@
/obj/random/tool
name = "random tool"
desc = "This is a random tool"
icon = 'icons/obj/tools.dmi'
icon_state = "welder"
icon_state = "tool"
/obj/random/tool/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver,
@@ -22,7 +21,7 @@
/obj/random/tool/powermaint
name = "random powertool"
desc = "This is a random rare powertool for maintenance"
icon_state = "jaws_pry"
icon_state = "tool_2"
/obj/random/tool/powermaint/item_to_spawn()
return pick(prob(320);/obj/random/tool,
@@ -34,7 +33,7 @@
/obj/random/tool/power
name = "random powertool"
desc = "This is a random powertool"
icon_state = "jaws_pry"
icon_state = "tool_2"
/obj/random/tool/power/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver/power,
@@ -45,8 +44,7 @@
/obj/random/tool/alien
name = "random alien tool"
desc = "This is a random tool"
icon = 'icons/obj/abductor.dmi'
icon_state = "welder"
icon_state = "tool_3"
/obj/random/tool/alien/item_to_spawn()
return pick(/obj/item/weapon/tool/screwdriver/alien,
@@ -60,8 +58,7 @@
/obj/random/technology_scanner
name = "random scanner"
desc = "This is a random technology scanner."
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
icon_state = "tech"
/obj/random/technology_scanner/item_to_spawn()
return pick(prob(5);/obj/item/device/t_scanner,
@@ -71,7 +68,6 @@
/obj/random/powercell
name = "random powercell"
desc = "This is a random powercell."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
/obj/random/powercell/item_to_spawn()
@@ -85,8 +81,7 @@
/obj/random/bomb_supply
name = "bomb supply"
desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
icon_state = "tech"
/obj/random/bomb_supply/item_to_spawn()
return pick(/obj/item/device/assembly/igniter,
@@ -99,8 +94,7 @@
/obj/random/toolbox
name = "random toolbox"
desc = "This is a random toolbox."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
icon_state = "toolbox"
/obj/random/toolbox/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
@@ -111,8 +105,7 @@
/obj/random/smes_coil
name = "random smes coil"
desc = "This is a random smes coil."
icon = 'icons/obj/power.dmi'
icon_state = "smes"
icon_state = "cell_2"
/obj/random/smes_coil/item_to_spawn()
return pick(prob(4);/obj/item/weapon/smes_coil,
@@ -122,8 +115,7 @@
/obj/random/pacman
name = "random portable generator"
desc = "This is a random portable generator."
icon = 'icons/obj/power.dmi'
icon_state = "portgen0"
icon_state = "cell_3"
/obj/random/pacman/item_to_spawn()
return pick(prob(6);/obj/machinery/power/port_gen/pacman,
@@ -133,8 +125,7 @@
/obj/random/tech_supply
name = "random tech supply"
desc = "This is a random piece of technology supplies."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
icon_state = "tech"
spawn_nothing_percentage = 25
/obj/random/tech_supply/item_to_spawn()
@@ -161,8 +152,7 @@
/obj/random/tech_supply/component
name = "random tech component"
desc = "This is a random machine component."
icon = 'icons/obj/items.dmi'
icon_state = "portable_analyzer"
icon_state = "tech"
/obj/random/tech_supply/component/item_to_spawn()
return pick(prob(3);/obj/item/weapon/stock_parts/gear,
@@ -188,8 +178,7 @@
/obj/random/medical
name = "Random Medicine"
desc = "This is a random medical item."
icon = 'icons/obj/stacks.dmi'
icon_state = "traumakit"
icon_state = "medical"
/obj/random/medical/item_to_spawn()
return pick(prob(21);/obj/random/medical/lite,
@@ -208,8 +197,7 @@
/obj/random/medical/pillbottle
name = "Random Pill Bottle"
desc = "This is a random pill bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "pill_canister"
icon_state = "pillbottle"
/obj/random/medical/pillbottle/item_to_spawn()
return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
@@ -221,8 +209,7 @@
/obj/random/medical/lite
name = "Random Medicine"
desc = "This is a random simple medical item."
icon = 'icons/obj/items.dmi'
icon_state = "brutepack"
icon_state = "medical"
spawn_nothing_percentage = 25
/obj/random/medical/lite/item_to_spawn()
@@ -240,8 +227,7 @@
/obj/random/firstaid
name = "Random First Aid Kit"
desc = "This is a random first aid kit."
icon = 'icons/obj/storage.dmi'
icon_state = "firstaid"
icon_state = "medicalkit"
/obj/random/firstaid/item_to_spawn()
return pick(prob(10);/obj/item/weapon/storage/firstaid/regular,
@@ -254,8 +240,7 @@
/obj/random/contraband
name = "Random Illegal Item"
desc = "Hot Stuff."
icon = 'icons/obj/items.dmi'
icon_state = "purplecomb"
icon_state = "sus"
spawn_nothing_percentage = 50
/obj/random/contraband/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
@@ -504,8 +489,7 @@
/obj/random/material //Random materials for building stuff
name = "random material"
desc = "This is a random material."
icon = 'icons/obj/stacks.dmi'
icon_state = "sheet-metal_2"
icon_state = "material"
/obj/random/material/item_to_spawn()
return pick(/obj/item/stack/material/steel{amount = 10},
@@ -523,8 +507,7 @@
/obj/random/material/refined //Random materials for building stuff
name = "random refined material"
desc = "This is a random refined metal."
icon = 'icons/obj/stacks.dmi'
icon_state = "sheet-adamantine_3"
icon_state = "material_2"
/obj/random/material/refined/item_to_spawn()
return pick(/obj/item/stack/material/steel{amount = 10},
@@ -554,8 +537,7 @@
/obj/random/material/precious //Precious metals, go figure
name = "random precious metal"
desc = "This is a small stack of a random precious metal."
icon = 'icons/obj/stacks.dmi'
icon_state = "sheet-gold_2"
icon_state = "material_3"
/obj/random/material/precious/item_to_spawn()
return pick(/obj/item/stack/material/gold{amount = 5},
@@ -774,8 +756,7 @@
/obj/random/janusmodule
name = "random janus circuit"
desc = "A random (possibly broken) Janus module."
icon = 'icons/obj/abductor.dmi'
icon_state = "circuit_damaged"
icon_state = "tech_2"
/obj/random/janusmodule/item_to_spawn()
return pick(subtypesof(/obj/item/weapon/circuitboard/mecha/imperion))
@@ -950,3 +931,4 @@
prob(3);/obj/item/clothing/accessory/poncho/thermal/green,
prob(3);/obj/item/clothing/accessory/poncho/thermal/purple,
prob(3);/obj/item/clothing/accessory/poncho/thermal/blue)
+50 -10
View File
@@ -5,8 +5,7 @@
/obj/random/mob
name = "Random Animal"
desc = "This is a random animal."
icon = 'icons/mob/animal.dmi'
icon_state = "chicken_white"
icon_state = "animal"
var/overwrite_hostility = 0
@@ -68,7 +67,7 @@
/obj/random/mob/sif
name = "Random Sif Animal"
desc = "This is a random cold weather animal."
icon_state = "penguin"
icon_state = "animal"
mob_returns_home = 1
mob_wander_distance = 10
@@ -89,7 +88,7 @@
/obj/random/mob/sif/peaceful
name = "Random Peaceful Sif Animal"
desc = "This is a random peaceful cold weather animal."
icon_state = "penguin"
icon_state = "animal_passive"
mob_returns_home = 1
mob_wander_distance = 12
@@ -106,7 +105,7 @@
/obj/random/mob/sif/hostile
name = "Random Hostile Sif Animal"
desc = "This is a random hostile cold weather animal."
icon_state = "frost"
icon_state = "animal_hostile"
/obj/random/mob/sif/hostile/item_to_spawn()
return pick(prob(22);/mob/living/simple_mob/animal/sif/savik,
@@ -169,7 +168,7 @@
/obj/random/mob/robotic
name = "Random Robot Mob"
desc = "This is a random robot."
icon_state = "drone_dead"
icon_state = "robot"
overwrite_hostility = 1
@@ -217,7 +216,7 @@
/obj/random/mob/robotic/hivebot
name = "Random Hivebot"
desc = "This is a random hivebot."
icon_state = "drone3"
icon_state = "robot"
mob_faction = "hivebot"
@@ -237,18 +236,58 @@
name = "Random Mouse"
desc = "This is a random boring maus."
icon_state = "mouse_gray"
spawn_nothing_percentage = 15
/obj/random/mob/mouse/item_to_spawn()
return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white,
prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
prob(30);/mob/living/simple_mob/animal/passive/mouse/rat)
/obj/random/mob/fish
name = "Random Fish"
desc = "This is a random fish found on Sif."
icon_state = "fish"
mob_faction = "fish"
overwrite_hostility = 1
mob_hostile = 0
mob_retaliate = 0
/obj/random/mob/fish/item_to_spawn()
return pick(prob(10);/mob/living/simple_mob/animal/passive/fish/bass,
prob(20);/mob/living/simple_mob/animal/passive/fish/icebass,
prob(20);/mob/living/simple_mob/animal/passive/fish/trout,
prob(20);/mob/living/simple_mob/animal/passive/fish/salmon,
prob(10);/mob/living/simple_mob/animal/passive/fish/pike,
prob(10);/mob/living/simple_mob/animal/passive/fish/perch,
prob(20);/mob/living/simple_mob/animal/passive/fish/murkin,
prob(15);/mob/living/simple_mob/animal/passive/fish/javelin,
prob(20);/mob/living/simple_mob/animal/passive/fish/rockfish,
prob(5);/mob/living/simple_mob/animal/passive/fish/solarfish,
prob(10);/mob/living/simple_mob/animal/passive/crab,
prob(1);/mob/living/simple_mob/animal/sif/hooligan_crab)
/obj/random/mob/bird
name = "Random Bird"
desc = "This is a random wild/feral bird."
icon_state = "bird"
mob_faction = "bird"
/obj/random/mob/bird/item_to_spawn()
return pick(prob(10);/mob/living/simple_mob/animal/passive/bird/black_bird,
prob(10);/mob/living/simple_mob/animal/passive/bird/azure_tit,
prob(20);/mob/living/simple_mob/animal/passive/bird/european_robin,
prob(10);/mob/living/simple_mob/animal/passive/bird/goldcrest,
prob(20);/mob/living/simple_mob/animal/passive/bird/ringneck_dove,
prob(10);/mob/living/simple_mob/animal/space/goose,
prob(5);/mob/living/simple_mob/animal/passive/chicken,
prob(1);/mob/living/simple_mob/animal/passive/penguin)
// Mercs
/obj/random/mob/merc
name = "Random Mercenary"
desc = "This is a random PoI mercenary."
icon_state = "syndicate"
icon_state = "humanoid"
mob_faction = "syndicate"
mob_returns_home = 1
@@ -270,7 +309,7 @@
/obj/random/mob/merc/armored
name = "Random Armored Infantry Merc"
desc = "This is a random PoI exo or robot for mercs."
icon_state = "drone3"
icon_state = "mecha"
/obj/random/mob/merc/armored/item_to_spawn()
return pick(prob(30);/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark,
@@ -327,6 +366,7 @@
/obj/random/mob/multiple/sifmobs
name = "Random Sifmob Pack"
desc = "A pack of random neutral sif mobs."
icon_state = "animal_group"
/obj/random/mob/multiple/sifmobs/item_to_spawn()
return pick(
@@ -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
@@ -3,6 +3,35 @@
desc = "It's a storage unit for athletic wear."
closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/shorts/grey,
/obj/item/clothing/under/shorts/black,
/obj/item/clothing/under/shorts/red,
/obj/item/clothing/under/shorts/blue,
/obj/item/clothing/under/shorts/green,
/obj/item/clothing/under/shorts/white,
/obj/item/clothing/suit/storage/toggle/track,
/obj/item/clothing/suit/storage/toggle/track/blue,
/obj/item/clothing/suit/storage/toggle/track/green,
/obj/item/clothing/suit/storage/toggle/track/red,
/obj/item/clothing/suit/storage/toggle/track/white,
/obj/item/clothing/under/pants/track,
/obj/item/clothing/under/pants/track/blue,
/obj/item/clothing/under/pants/track/green,
/obj/item/clothing/under/pants/track/white,
/obj/item/clothing/under/pants/track/red,
/obj/item/clothing/shoes/athletic = 2,
/obj/item/clothing/shoes/hitops,
/obj/item/clothing/shoes/hitops/red,
/obj/item/clothing/shoes/hitops/black,
/obj/item/clothing/shoes/hitops/blue
)
/obj/structure/closet/athletic_swimwear
name = "athletic wardrobe"
desc = "It's a storage unit for swimwear."
closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/shorts/grey,
/obj/item/clothing/under/shorts/black,
@@ -17,6 +46,9 @@
/obj/item/clothing/under/swimsuit/striped,
/obj/item/clothing/under/swimsuit/white,
/obj/item/clothing/under/swimsuit/earth,
/obj/item/clothing/under/wetsuit,
/obj/item/clothing/under/wetsuit_rec,
/obj/item/clothing/under/wetsuit_skimpy,
/obj/item/clothing/mask/snorkel = 2,
/obj/item/clothing/shoes/swimmingfins = 2)
@@ -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,
@@ -33,6 +33,7 @@
/obj/item/clothing/under/rank/research_director/rdalt,
/obj/item/clothing/under/rank/research_director/dress_rd,
/obj/item/clothing/suit/storage/toggle/labcoat,
/obj/item/clothing/suit/storage/toggle/labcoat/rd,
/obj/item/weapon/cartridge/rd,
/obj/item/clothing/shoes/white,
/obj/item/clothing/shoes/laceup/brown,
@@ -223,6 +223,7 @@
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,
@@ -295,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
@@ -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
@@ -383,6 +383,41 @@
base_icon = "corp_sofacorner"
corner_piece = TRUE
//Metal benches
/obj/structure/bed/chair/sofa/bench
name = "metal bench"
desc = "Almost as comfortable as waiting at a shuttle station for hours on end."
base_icon = "benchmiddle"
icon_state = "benchmiddle"
applies_material_colour = FALSE
color = null
var/padding_color = "#CC0000"
/obj/structure/bed/chair/sofa/bench/Initialize()
. = ..()
var/mutable_appearance/MA
MA = mutable_appearance(icon, icon_state = "o[icon_state]")
// If we're north-facing, metal goes above mob, padding overlay goes below mob.
if((dir & NORTH) && !corner_piece)
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
MA.color = padding_color
add_overlay(MA)
/obj/structure/bed/chair/sofa/bench/left
icon_state = "bench_left"
base_icon = "bench_left"
/obj/structure/bed/chair/sofa/bench/right
icon_state = "bench_right"
base_icon = "bench_right"
/obj/structure/bed/chair/sofa/bench/corner
icon_state = "benchcorner"
base_icon = "benchcorner"
//color variations
/obj/structure/bed/chair/sofa
@@ -517,4 +552,4 @@
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/orange/corner
icon_state = "sofacorner"
icon_state = "sofacorner"