mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-23 05:06:50 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into food2021
This commit is contained in:
@@ -172,7 +172,7 @@ var/syndicate_code_response//Code response for traitors.
|
||||
|
||||
var/safety[] = list(1,2,3)//Tells the proc which options to remove later on.
|
||||
var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation")
|
||||
var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine")
|
||||
var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","redwine","moonshine")
|
||||
var/locations[] = teleportlocs.len ? teleportlocs : drinks//if null, defaults to drinks instead.
|
||||
|
||||
var/names[] = list()
|
||||
|
||||
@@ -15,14 +15,13 @@
|
||||
return FALSE // should stop you from dragging through windows
|
||||
return TRUE
|
||||
|
||||
/atom/MouseDrop(atom/over)
|
||||
if(!usr || !over) return
|
||||
if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows
|
||||
/atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params)
|
||||
if(!usr || !over)
|
||||
return
|
||||
if(!Adjacent(usr) || !over.Adjacent(usr))
|
||||
return // should stop you from dragging through windows
|
||||
|
||||
spawn(0)
|
||||
over.MouseDrop_T(src,usr)
|
||||
return
|
||||
INVOKE_ASYNC(over, /atom/.proc/MouseDrop_T, src, usr, src_location, over_location, src_control, over_control, params)
|
||||
|
||||
// recieve a mousedrop
|
||||
/atom/proc/MouseDrop_T(atom/dropping, mob/user)
|
||||
return
|
||||
/atom/proc/MouseDrop_T(atom/dropping, mob/user, src_location, over_location, src_control, over_control, params)
|
||||
return
|
||||
@@ -70,6 +70,7 @@ var/datum/antagonist/raider/raiders
|
||||
/obj/item/weapon/gun/energy/mindflayer,
|
||||
/obj/item/weapon/gun/energy/toxgun,
|
||||
/obj/item/weapon/gun/energy/stunrevolver,
|
||||
/obj/item/weapon/gun/energy/stunrevolver/vintage,
|
||||
/obj/item/weapon/gun/energy/ionrifle,
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/weapon/gun/energy/crossbow/largecrossbow,
|
||||
|
||||
@@ -56,7 +56,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
*/
|
||||
// Loop through all linked machines and send the signal or copy.
|
||||
for(var/obj/machinery/telecomms/machine in links)
|
||||
if(filter && !istype( machine, text2path(filter) ))
|
||||
if(filter && !istype(machine, filter))
|
||||
continue
|
||||
if(!machine.on)
|
||||
continue
|
||||
@@ -288,9 +288,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
//Remove the level and then start adding levels that it is being broadcasted in.
|
||||
signal.data["level"] = list()
|
||||
|
||||
var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub") // ideally relay the copied information to relays
|
||||
var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) // ideally relay the copied information to relays
|
||||
if(!can_send)
|
||||
relay_information(signal, "/obj/machinery/telecomms/bus") // Send it to a bus instead, if it's linked to one
|
||||
relay_information(signal, /obj/machinery/telecomms/bus) // Send it to a bus instead, if it's linked to one
|
||||
|
||||
/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal)
|
||||
// If it's a direct message from a bluespace radio, we eat it and convert it into a subspace signal locally
|
||||
@@ -355,11 +355,11 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
if(is_freq_listening(signal))
|
||||
if(istype(machine_from, /obj/machinery/telecomms/receiver))
|
||||
//If the signal is compressed, send it to the bus.
|
||||
relay_information(signal, "/obj/machinery/telecomms/bus", 1) // ideally relay the copied information to bus units
|
||||
relay_information(signal, /obj/machinery/telecomms/bus, 1) // ideally relay the copied information to bus units
|
||||
else
|
||||
// Get a list of relays that we're linked to, then send the signal to their levels.
|
||||
relay_information(signal, "/obj/machinery/telecomms/relay", 1)
|
||||
relay_information(signal, "/obj/machinery/telecomms/broadcaster", 1) // Send it to a broadcaster.
|
||||
relay_information(signal, /obj/machinery/telecomms/relay, 1)
|
||||
relay_information(signal, /obj/machinery/telecomms/broadcaster, 1) // Send it to a broadcaster.
|
||||
|
||||
|
||||
/*
|
||||
@@ -457,7 +457,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
|
||||
if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it
|
||||
// send to one linked processor unit
|
||||
var/send_to_processor = relay_information(signal, "/obj/machinery/telecomms/processor")
|
||||
var/send_to_processor = relay_information(signal, /obj/machinery/telecomms/processor)
|
||||
|
||||
if(send_to_processor)
|
||||
return
|
||||
@@ -466,7 +466,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
src.receive_information(signal, src)
|
||||
|
||||
// Try sending it!
|
||||
var/list/try_send = list("/obj/machinery/telecomms/server", "/obj/machinery/telecomms/hub", "/obj/machinery/telecomms/broadcaster", "/obj/machinery/telecomms/bus")
|
||||
var/list/try_send = list(/obj/machinery/telecomms/server, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus)
|
||||
var/i = 0
|
||||
for(var/send in try_send)
|
||||
if(i)
|
||||
@@ -517,7 +517,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
relay_direct_information(signal, machine_from) // send the signal back to the machine
|
||||
else // no bus detected - send the signal to servers instead
|
||||
signal.data["slow"] += rand(5, 10) // slow the signal down
|
||||
relay_information(signal, "/obj/machinery/telecomms/server")
|
||||
relay_information(signal, /obj/machinery/telecomms/server)
|
||||
|
||||
|
||||
/*
|
||||
@@ -643,9 +643,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
if(Compiler && autoruncode)
|
||||
Compiler.Run(signal) // execute the code
|
||||
|
||||
var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub")
|
||||
var/can_send = relay_information(signal, /obj/machinery/telecomms/hub)
|
||||
if(!can_send)
|
||||
relay_information(signal, "/obj/machinery/telecomms/broadcaster")
|
||||
relay_information(signal, /obj/machinery/telecomms/broadcaster)
|
||||
|
||||
|
||||
/obj/machinery/telecomms/server/proc/setcode(var/t)
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -143,7 +143,7 @@ var/list/flooring_types
|
||||
/decl/flooring/grass/sif // Subtype for Sif's grass.
|
||||
name = "growth"
|
||||
desc = "A natural moss that has adapted to the sheer cold climate."
|
||||
flags = TURF_REMOVE_SHOVEL
|
||||
flags = 0
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_base = "grass_sif"
|
||||
build_type = /obj/item/stack/tile/grass/sif
|
||||
@@ -152,7 +152,7 @@ var/list/flooring_types
|
||||
/decl/flooring/grass/sif/forest
|
||||
name = "thick growth"
|
||||
desc = "A natural moss that has adapted to the sheer cold climate."
|
||||
flags = TURF_REMOVE_SHOVEL
|
||||
flags = 0
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_base = "grass_sif_dark"
|
||||
build_type = /obj/item/stack/tile/grass/sif/forest
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
icon_state = "dirt-dark"
|
||||
edge_blending_priority = 2
|
||||
turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||
initial_flooring = /decl/flooring/dirt
|
||||
initial_flooring = /decl/flooring/dirt
|
||||
can_dig = TRUE
|
||||
|
||||
@@ -7,6 +7,7 @@ var/list/grass_types = list(
|
||||
icon_state = "grass0"
|
||||
edge_blending_priority = 4
|
||||
initial_flooring = /decl/flooring/grass
|
||||
can_dig = TRUE
|
||||
turf_layers = list(
|
||||
/turf/simulated/floor/outdoors/rocks,
|
||||
/turf/simulated/floor/outdoors/dirt
|
||||
@@ -42,7 +43,6 @@ var/list/grass_types = list(
|
||||
var/tree_chance = 2
|
||||
/*
|
||||
animal_chance = 0.5
|
||||
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/animal/sif/diyaab = 10,
|
||||
/mob/living/simple_mob/animal/sif/glitterfly = 2,
|
||||
@@ -94,4 +94,4 @@ var/list/grass_types = list(
|
||||
/obj/structure/flora/sif/frostbelle = 1,
|
||||
/obj/structure/flora/sif/eyes = 5,
|
||||
/obj/structure/flora/sif/tendrils = 30
|
||||
)
|
||||
)
|
||||
@@ -24,6 +24,42 @@ var/list/turf_edge_cache = list()
|
||||
|
||||
// When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works.
|
||||
var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||
var/can_dig = FALSE
|
||||
var/loot_count
|
||||
|
||||
/turf/simulated/floor/outdoors/proc/get_loot_type()
|
||||
if(loot_count && prob(60))
|
||||
return pick( \
|
||||
12;/obj/item/weapon/reagent_containers/food/snacks/worm, \
|
||||
1;/obj/item/weapon/material/knife/machete/hatchet/stone \
|
||||
)
|
||||
|
||||
/turf/simulated/floor/outdoors/Initialize(mapload)
|
||||
. = ..()
|
||||
if(can_dig && prob(33))
|
||||
loot_count = rand(1,3)
|
||||
|
||||
/turf/simulated/floor/outdoors/attackby(obj/item/C, mob/user)
|
||||
|
||||
if(can_dig && istype(C, /obj/item/weapon/shovel))
|
||||
to_chat(user, SPAN_NOTICE("\The [user] begins digging into \the [src] with \the [C]."))
|
||||
var/delay = (3 SECONDS * C.toolspeed)
|
||||
user.setClickCooldown(delay)
|
||||
if(do_after(user, delay, src))
|
||||
if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil) in contents))
|
||||
var/obj/machinery/portable_atmospherics/hydroponics/soil/soil = new(src)
|
||||
user.visible_message(SPAN_NOTICE("\The [src] digs \a [soil] into \the [src]."))
|
||||
else
|
||||
var/loot_type = get_loot_type()
|
||||
if(loot_type)
|
||||
loot_count--
|
||||
var/obj/item/loot = new loot_type(src)
|
||||
to_chat(user, SPAN_NOTICE("You dug up \a [loot]!"))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("You didn't find anything of note in \the [src]."))
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/floor/Initialize(mapload)
|
||||
if(is_outdoors())
|
||||
@@ -80,6 +116,7 @@ var/list/turf_edge_cache = list()
|
||||
icon_state = "mud_dark"
|
||||
edge_blending_priority = 3
|
||||
initial_flooring = /decl/flooring/mud
|
||||
can_dig = TRUE
|
||||
|
||||
/turf/simulated/floor/outdoors/rocks
|
||||
name = "rocks"
|
||||
|
||||
@@ -1,15 +1,7 @@
|
||||
// this code here enables people to dig up worms from certain tiles.
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/attackby(obj/item/weapon/S as obj, mob/user as mob)
|
||||
if(istype(S, /obj/item/weapon/shovel))
|
||||
to_chat(user, "<span class='notice'>You begin to dig in \the [src] with your [S].</span>")
|
||||
if(do_after(user, 4 SECONDS * S.toolspeed))
|
||||
to_chat(user, "<span class='notice'>\The [src] has been dug up, a worm pops from the ground.</span>")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/worm(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You decide to not finish digging in \the [src].</span>")
|
||||
else if(istype(S, /obj/item/stack/tile/floor))
|
||||
if(istype(S, /obj/item/stack/tile/floor))
|
||||
ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE)
|
||||
return
|
||||
else
|
||||
..()
|
||||
. = ..()
|
||||
@@ -9,6 +9,7 @@
|
||||
/datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S)
|
||||
S["lastchangelog"] >> pref.lastchangelog
|
||||
S["lastnews"] >> pref.lastnews
|
||||
S["lastlorenews"] >> pref.lastlorenews
|
||||
S["default_slot"] >> pref.default_slot
|
||||
S["preferences"] >> pref.preferences_enabled
|
||||
S["preferences_disabled"] >> pref.preferences_disabled
|
||||
@@ -16,6 +17,7 @@
|
||||
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
|
||||
S["lastchangelog"] << pref.lastchangelog
|
||||
S["lastnews"] << pref.lastnews
|
||||
S["lastlorenews"] << pref.lastlorenews
|
||||
S["default_slot"] << pref.default_slot
|
||||
S["preferences"] << pref.preferences_enabled
|
||||
S["preferences_disabled"] << pref.preferences_disabled
|
||||
|
||||
@@ -115,7 +115,7 @@ var/list/_client_preferences_by_type
|
||||
key = "SOUND_AIRPUMP"
|
||||
enabled_description = "Audible"
|
||||
disabled_description = "Silent"
|
||||
|
||||
|
||||
/datum/client_preference/old_door_sounds
|
||||
description ="Old Door Sounds"
|
||||
key = "SOUND_OLDDOORS"
|
||||
@@ -253,6 +253,12 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
|
||||
/datum/client_preference/radio_sounds
|
||||
description = "Radio Sounds"
|
||||
key = "RADIO_SOUNDS"
|
||||
enabled_description = "On"
|
||||
disabled_description = "Off"
|
||||
|
||||
/datum/client_preference/runechat_mob
|
||||
description = "Runechat (Mobs)"
|
||||
key = "RUNECHAT_MOB"
|
||||
@@ -270,13 +276,13 @@ var/list/_client_preferences_by_type
|
||||
key = "RUNECHAT_BORDER"
|
||||
enabled_description = "Show"
|
||||
disabled_description = "Hide"
|
||||
enabled_by_default = FALSE
|
||||
enabled_by_default = TRUE
|
||||
|
||||
/datum/client_preference/runechat_long_messages
|
||||
description = "Runechat Message Length"
|
||||
key = "RUNECHAT_LONG"
|
||||
enabled_description = "ERP KING"
|
||||
disabled_description = "Normie"
|
||||
enabled_description = "Long"
|
||||
disabled_description = "Short"
|
||||
enabled_by_default = FALSE
|
||||
|
||||
/datum/client_preference/status_indicators/toggled(mob/preference_mob, enabled)
|
||||
@@ -285,6 +291,13 @@ var/list/_client_preferences_by_type
|
||||
var/datum/plane_holder/PH = preference_mob.plane_holder
|
||||
PH.set_vis(VIS_STATUS, enabled)
|
||||
|
||||
/datum/client_preference/show_lore_news
|
||||
description = "Lore News Popup"
|
||||
key = "NEWS_POPUP"
|
||||
enabled_by_default = TRUE
|
||||
enabled_description = "Popup New On Login"
|
||||
disabled_description = "Do Nothing"
|
||||
|
||||
/********************
|
||||
* Staff Preferences *
|
||||
********************/
|
||||
|
||||
@@ -203,6 +203,10 @@
|
||||
display_name = "hat, tophat"
|
||||
path = /obj/item/clothing/head/that
|
||||
|
||||
/datum/gear/head/panama
|
||||
display_name = "hat, panama"
|
||||
path = /obj/item/clothing/head/panama
|
||||
|
||||
/datum/gear/head/wig/philosopher
|
||||
display_name = "natural philosopher's wig"
|
||||
path = /obj/item/clothing/head/philosopher_wig
|
||||
|
||||
@@ -559,6 +559,18 @@
|
||||
display_name = "department jacket, medical"
|
||||
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/light_jacket
|
||||
display_name = "light jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/light_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/light_jacket/New()
|
||||
..()
|
||||
var/list/jacket = list(
|
||||
"grey light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket,
|
||||
"dark blue light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket/blue
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(jacket)
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat
|
||||
display_name = "peacoat"
|
||||
path = /obj/item/clothing/suit/storage/toggle/peacoat
|
||||
|
||||
@@ -57,6 +57,22 @@
|
||||
jumpclothes[initial(jumps.name)] = jumps
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes))
|
||||
|
||||
/datum/gear/uniform/qipao
|
||||
display_name = "qipao"
|
||||
path = /obj/item/clothing/under/qipao
|
||||
|
||||
/datum/gear/uniform/qipao/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/uniform/qipao2
|
||||
display_name = "qipao, slim"
|
||||
path = /obj/item/clothing/under/qipao2
|
||||
|
||||
/datum/gear/uniform/qipao2/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
display_name = "skirt selection"
|
||||
path = /obj/item/clothing/under/skirt
|
||||
|
||||
@@ -677,3 +677,14 @@
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
cost = 4
|
||||
|
||||
/datum/gear/shoes/teshwrap
|
||||
display_name = "Teshari legwraps"
|
||||
path = /obj/item/clothing/shoes/footwraps/teshari
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
cost = 1
|
||||
|
||||
/datum/gear/shoes/teshwrap/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -139,6 +139,7 @@ var/list/preferences_datums = list()
|
||||
var/datum/browser/panel
|
||||
|
||||
var/lastnews // Hash of last seen lobby news content.
|
||||
var/lastlorenews //ID of last seen lore news article.
|
||||
|
||||
var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel.
|
||||
var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","TAirPumpNoise")
|
||||
|
||||
|
||||
/client/verb/toggle_old_door_sounds()
|
||||
set name = "Toggle Old Door Sounds"
|
||||
set category = "Preferences"
|
||||
@@ -253,7 +253,7 @@
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","TOldDoorSounds")
|
||||
|
||||
|
||||
/client/verb/toggle_department_door_sounds()
|
||||
set name = "Toggle Department Door Sounds"
|
||||
set category = "Preferences"
|
||||
@@ -378,6 +378,19 @@
|
||||
feedback_add_details("admin_verb","TStatusIndicators")
|
||||
|
||||
|
||||
/client/verb/toggle_radio_sounds()
|
||||
set name = "Toggle Radio Sounds"
|
||||
set category = "Preferences"
|
||||
set desc = "Enable/Disable hearing a sound when somebody speaks over your headset."
|
||||
|
||||
var/pref_path = /datum/client_preference/radio_sounds
|
||||
toggle_preference(pref_path)
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/radio_sounds)) ? "hear" : "not hear"] radio sounds.")
|
||||
|
||||
feedback_add_details("admin_verb","TRadioSounds")
|
||||
|
||||
// Not attached to a pref datum because those are strict binary toggles
|
||||
/client/verb/toggle_examine_mode()
|
||||
set name = "Toggle Examine Mode"
|
||||
|
||||
@@ -103,6 +103,11 @@
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/panama
|
||||
name = "panama hat"
|
||||
icon_state = "panama"
|
||||
desc = "Columbian Pure."
|
||||
|
||||
/obj/item/clothing/head/redcoat
|
||||
name = "redcoat's hat"
|
||||
icon_state = "redcoat"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
/obj/item/clothing/shoes/footwraps/teshari
|
||||
name = "Teshari legwraps"
|
||||
desc = "Traditional Teshari footwear, consisting of a cloth wrapping to cover the foot and lower leg."
|
||||
icon = 'icons/obj/clothing/species/teshari/shoes.dmi'
|
||||
icon_state = "teshwrap"
|
||||
item_state = "teshwrap"
|
||||
shoes_under_pants = 1 //these are thin and wrapped around the leg, clothing would go over it
|
||||
species_restricted = list(SPECIES_TESHARI)
|
||||
@@ -715,6 +715,19 @@
|
||||
item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket")
|
||||
flags_inv = HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/light_jacket
|
||||
name = "grey light jacket"
|
||||
desc = "A light, cozy jacket. Now in grey."
|
||||
icon_state = "grey_dep_jacket"
|
||||
item_state_slots = list(slot_r_hand_str = "grey_dep_jacket", slot_l_hand_str = "grey_dep_jacket")
|
||||
flags_inv = HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/light_jacket/blue
|
||||
name = "dark blue light jacket"
|
||||
desc = "A light, cozy jacket. Now in dark blue."
|
||||
icon_state = "blue_dep_jacket"
|
||||
item_state_slots = list(slot_r_hand_str = "blue_dep_jacket", slot_l_hand_str = "blue_dep_jacket")
|
||||
|
||||
/*
|
||||
* Track Jackets
|
||||
*/
|
||||
|
||||
@@ -813,6 +813,18 @@ Uniforms and such
|
||||
desc = "It is a dark blue cheongsam dress."
|
||||
icon_state = "cheongsam-darkblue"
|
||||
|
||||
/obj/item/clothing/under/qipao
|
||||
name = "qipao"
|
||||
desc = "A traditional Chinese women's garment, typically made from silk."
|
||||
icon_state = "qipao"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/qipao2
|
||||
name = "slim qipao"
|
||||
desc = "A traditional Chinese women's garment, typically made from silk. This one is fairly slim."
|
||||
icon_state = "qipao2"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/blazer
|
||||
name = "blue blazer"
|
||||
desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie."
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
emagged = 0 //Ignores if somebody doesn't have card access to that machine.
|
||||
var/seconds_electrified = 0 //Shock customers like an airlock.
|
||||
var/shoot_inventory = 0 //Fire items at customers! We're broken!
|
||||
var/shoot_inventory_chance = 1
|
||||
|
||||
var/scan_id = 1
|
||||
var/obj/item/weapon/coin/coin
|
||||
@@ -662,7 +663,7 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
speak(slogan)
|
||||
last_slogan = world.time
|
||||
|
||||
if(shoot_inventory && prob(2))
|
||||
if(shoot_inventory && prob(shoot_inventory_chance))
|
||||
throw_item()
|
||||
|
||||
return
|
||||
@@ -702,20 +703,20 @@ GLOBAL_LIST_EMPTY(vending_products)
|
||||
|
||||
//Somebody cut an important wire and now we're following a new definition of "pitch."
|
||||
/obj/machinery/vending/proc/throw_item()
|
||||
var/obj/throw_item = null
|
||||
var/obj/item/throw_item = null
|
||||
var/mob/living/target = locate() in view(7,src)
|
||||
if(!target)
|
||||
return 0
|
||||
|
||||
for(var/datum/stored_item/vending_product/R in product_records)
|
||||
for(var/datum/stored_item/vending_product/R in shuffle(product_records))
|
||||
throw_item = R.get_product(loc)
|
||||
if(!throw_item)
|
||||
continue
|
||||
break
|
||||
if(!throw_item)
|
||||
return 0
|
||||
spawn(0)
|
||||
throw_item.throw_at(target, 16, 3, src)
|
||||
return FALSE
|
||||
throw_item.vendor_action(src)
|
||||
INVOKE_ASYNC(throw_item, /atom/movable.proc/throw_at, target, rand(3, 10), rand(1, 3), src)
|
||||
visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -843,23 +843,18 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 3)
|
||||
reagents.add_reagent(toxin_type, toxin_amount)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
desc = "A fillet of sivian fish meat."
|
||||
filling_color = "#2c2cff"
|
||||
color = "#2c2cff"
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
toxin_type = "murk_protein"
|
||||
reagents.add_reagent("seafood", 3)
|
||||
if(toxin_type && toxin_amount)
|
||||
reagents.add_reagent(toxin_type, toxin_amount)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
|
||||
desc = "A fillet of fish meat."
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 1
|
||||
toxin_type = null
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
desc = "A fillet of sivian fish meat."
|
||||
filling_color = "#2c2cff"
|
||||
color = "#2c2cff"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
|
||||
name = "Fish Fingers"
|
||||
@@ -871,7 +866,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 4)
|
||||
reagents.add_reagent("seafood", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/zestfish
|
||||
name = "Zesty Fish"
|
||||
@@ -883,11 +878,11 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/zestfish/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 4)
|
||||
reagents.add_reagent("seafood", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||
name = "huge mushroom slice"
|
||||
desc = "A slice from a huge mushroom."
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice
|
||||
name = "mushroom slice"
|
||||
desc = "A slice of mushroom."
|
||||
icon_state = "hugemushroomslice"
|
||||
filling_color = "#E0D7C5"
|
||||
center_of_mass = list("x"=17, "y"=16)
|
||||
@@ -895,7 +890,7 @@
|
||||
nutriment_desc = list("raw" = 2, "mushroom" = 2)
|
||||
bitesize = 6
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/Initialize()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("psilocybin", 3)
|
||||
|
||||
@@ -3601,19 +3596,6 @@
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("bread" = 3)
|
||||
|
||||
// potato + knife = raw sticks
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
|
||||
if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You cut the potato.</span>")
|
||||
qdel(src)
|
||||
else if(seed && seed.kitchen_tag && seed.kitchen_tag == "sunflower" && istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You remove the seeds from the flower, slightly damaging them.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsticks
|
||||
name = "raw potato sticks"
|
||||
desc = "Raw fries, not very tasty."
|
||||
@@ -4002,7 +3984,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormsickly/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 10)
|
||||
reagents.add_reagent("fishbait", 9)
|
||||
reagents.add_reagent("protein", 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/worm
|
||||
name = "strange worm"
|
||||
@@ -4015,7 +3998,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/worm/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 20)
|
||||
reagents.add_reagent("fishbait", 15)
|
||||
reagents.add_reagent("protein", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe
|
||||
name = "deluxe worm"
|
||||
@@ -4028,7 +4012,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 40)
|
||||
reagents.add_reagent("fishbait", 30)
|
||||
reagents.add_reagent("protein", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/siffruit
|
||||
name = "pulsing fruit"
|
||||
|
||||
@@ -339,7 +339,7 @@ I said no!
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/caramelapple
|
||||
|
||||
/datum/recipe/twobread
|
||||
reagents = list("wine" = 5)
|
||||
reagents = list("redwine" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
|
||||
@@ -790,7 +790,7 @@ I said no!
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries
|
||||
|
||||
/datum/recipe/risotto
|
||||
reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1)
|
||||
reagents = list("redwine" = 5, "rice" = 10, "spacespice" = 1)
|
||||
fruit = list("mushroom" = 1)
|
||||
reagent_mix = RECIPE_REAGENT_REPLACE //Get that rice and wine outta here
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/risotto
|
||||
|
||||
@@ -191,13 +191,17 @@
|
||||
pocell.charge = pocell.maxcharge
|
||||
qdel(src)
|
||||
return
|
||||
else if(W.sharp)
|
||||
|
||||
if(W.sharp)
|
||||
|
||||
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
|
||||
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
|
||||
new /obj/item/clothing/head/pumpkinhead (user.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else if(seed.chems)
|
||||
|
||||
if(seed.chems)
|
||||
|
||||
if(W.sharp && W.edge && !isnull(seed.chems["woodpulp"]))
|
||||
user.show_message("<span class='notice'>You make planks out of \the [src]!</span>", 1)
|
||||
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
|
||||
@@ -215,36 +219,49 @@
|
||||
to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.")
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["potato"]))
|
||||
|
||||
if(seed.kitchen_tag == "sunflower")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
|
||||
to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them."))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(seed.kitchen_tag == "potato" || !isnull(seed.chems["potato"]))
|
||||
to_chat(user, "You slice \the [src] into sticks.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["carrotjuice"]))
|
||||
|
||||
if(!isnull(seed.chems["carrotjuice"]))
|
||||
to_chat(user, "You slice \the [src] into sticks.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["pineapplejuice"]))
|
||||
|
||||
if(!isnull(seed.chems["pineapplejuice"]))
|
||||
to_chat(user, "You slice \the [src] into rings.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["soymilk"]))
|
||||
|
||||
if(!isnull(seed.chems["soymilk"]))
|
||||
to_chat(user, "You roughly chop up \the [src].")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(seed.get_trait(TRAIT_FLESH_COLOUR))
|
||||
|
||||
if(seed.get_trait(TRAIT_FLESH_COLOUR))
|
||||
to_chat(user, "You slice up \the [src].")
|
||||
var/slices = rand(3,5)
|
||||
var/reagents_to_transfer = round(reagents.total_volume/slices)
|
||||
for(var/i=1; i<=slices; i++)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed)
|
||||
if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer)
|
||||
if(reagents_to_transfer)
|
||||
reagents.trans_to_obj(F,reagents_to_transfer)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
. = ..()
|
||||
|
||||
@@ -3,6 +3,3 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
|
||||
plantname = "ambrosiadeus"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
|
||||
plantname = "sifbulb"
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif
|
||||
var/seeds = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/Initialize(mapload, planttype) // Wild Sifplants have some seeds you can extract with a knife.
|
||||
. = ..()
|
||||
seeds = rand(1, 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/examine(mob/user)
|
||||
. = ..()
|
||||
if(seeds)
|
||||
to_chat(user, SPAN_NOTICE("You can see [seeds] seed\s in \the [src]. You might be able to extract them with a sharp object."))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(seed && W.sharp && seeds > 0)
|
||||
var/take_seeds = min(seeds, rand(1,2))
|
||||
seeds -= take_seeds
|
||||
to_chat(user, SPAN_NOTICE("You stick \the [W] into \the [src] and lever out [take_seeds] seed\s."))
|
||||
for(var/i = 1 to take_seeds)
|
||||
new /obj/item/seeds(get_turf(src), seed.name)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod
|
||||
plantname = "sifbulb"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback
|
||||
plantname = "wabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback
|
||||
plantname = "blackwabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback
|
||||
plantname = "wildwabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs
|
||||
plantname = "eyebulbs"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs
|
||||
plantname = "cavebulbs"
|
||||
@@ -13,7 +13,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
var/datum/seed/seed
|
||||
var/modified = 0
|
||||
|
||||
/obj/item/seeds/Initialize()
|
||||
/obj/item/seeds/Initialize(var/ml, var/_seed_type)
|
||||
if(_seed_type in plant_controller.seeds)
|
||||
seed_type = _seed_type
|
||||
update_seed()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -43,41 +43,46 @@
|
||||
..()
|
||||
wires = new(src)
|
||||
if(!contraband_seeds.len)
|
||||
contraband_seeds = pick(list(
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/greengrapeseed = 3,
|
||||
/obj/item/seeds/reishimycelium = 2,
|
||||
/obj/item/seeds/bloodtomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/plastiseed = 3,
|
||||
/obj/item/seeds/kudzuseed = 2,
|
||||
/obj/item/seeds/rose/blood = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/amanitamycelium = 3,
|
||||
/obj/item/seeds/libertymycelium = 2,
|
||||
/obj/item/seeds/glowshroom = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/glowberryseed = 3,
|
||||
/obj/item/seeds/icepepperseed = 2,
|
||||
/obj/item/seeds/bluetomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/durian = 2,
|
||||
/obj/item/seeds/ambrosiadeusseed = 1,
|
||||
/obj/item/seeds/killertomatoseed = 1
|
||||
),
|
||||
list(
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/random = 6
|
||||
)
|
||||
))
|
||||
contraband_seeds = pick( /// Some form of ambrosia in all lists.
|
||||
prob(30);list( /// General produce
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/greengrapeseed = 3,
|
||||
/obj/item/seeds/icepepperseed = 2,
|
||||
/obj/item/seeds/kudzuseed = 1
|
||||
),
|
||||
prob(30);list( ///Mushroom batch
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 1,
|
||||
/obj/item/seeds/glowberryseed = 2,
|
||||
/obj/item/seeds/libertymycelium = 1,
|
||||
/obj/item/seeds/reishimycelium = 2,
|
||||
/obj/item/seeds/sporemycelium = 1
|
||||
),
|
||||
prob(15);list( /// Survivalist
|
||||
/obj/item/seeds/ambrosiadeusseed = 2,
|
||||
/obj/item/seeds/redtowermycelium = 2,
|
||||
/obj/item/seeds/vale = 2,
|
||||
/obj/item/seeds/siflettuce = 2
|
||||
),
|
||||
prob(20);list( /// Cold plants
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 2,
|
||||
/obj/item/seeds/thaadra = 2,
|
||||
/obj/item/seeds/icepepperseed = 2,
|
||||
/obj/item/seeds/siflettuce = 1
|
||||
),
|
||||
prob(10);list( ///Poison party
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/surik = 1,
|
||||
/obj/item/seeds/telriis = 1,
|
||||
/obj/item/seeds/nettleseed = 2,
|
||||
/obj/item/seeds/poisonberryseed = 1
|
||||
),
|
||||
prob(5);list( /// Extra poison party!
|
||||
/obj/item/seeds/ambrosiainfernusseed = 1,
|
||||
/obj/item/seeds/amauri = 1,
|
||||
/obj/item/seeds/surik = 1,
|
||||
/obj/item/seeds/deathberryseed = 1 /// Very ow.
|
||||
)
|
||||
)
|
||||
return
|
||||
|
||||
/obj/machinery/seed_storage/process()
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/datum/seed/apple/sif
|
||||
name = "sifbulb"
|
||||
seed_name = "sivian tree"
|
||||
seed_name = "sivian pod"
|
||||
display_name = "sivian pod"
|
||||
kitchen_tag = "apple"
|
||||
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
|
||||
|
||||
@@ -22,6 +22,16 @@
|
||||
/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass()
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/shovel) && user.a_intent == I_HURT)
|
||||
user.visible_message(SPAN_NOTICE("\The [user] begins filling in \the [src]."))
|
||||
if(do_after(user, 3 SECONDS) && !QDELETED(src))
|
||||
user.visible_message(SPAN_NOTICE("\The [user] fills in \the [src]."))
|
||||
qdel(src)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
|
||||
// Holder for vine plants.
|
||||
// Icons for plants are generated as overlays, so setting it to invisible wouldn't work.
|
||||
// Hence using a blank icon.
|
||||
|
||||
@@ -112,6 +112,12 @@
|
||||
/datum/lore/codex/page/about_news,
|
||||
)
|
||||
|
||||
var/newsindex
|
||||
|
||||
/datum/lore/codex/category/main_news/New()
|
||||
..()
|
||||
newsindex = LAZYLEN(children)
|
||||
|
||||
/datum/lore/codex/page/about_news
|
||||
name = "About the Publisher"
|
||||
data = "The <i>Daedalus Pocket Newscaster</i> is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("shovel", /obj/item/weapon/shovel/wood, 2, time = 10, on_floor = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/wood/sif
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
|
||||
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
|
||||
var/scraped = 0
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS, user))
|
||||
//Try locating an exisitng stack on the tile and add to there if possible
|
||||
var/obj/item/stack/hairlesshide/H = null
|
||||
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
|
||||
|
||||
@@ -128,6 +128,26 @@
|
||||
edge = 1
|
||||
var/digspeed = 40
|
||||
|
||||
/obj/item/weapon/shovel/wood
|
||||
icon_state = "whiteshovel"
|
||||
item_state = "whiteshovel"
|
||||
var/datum/material/material
|
||||
|
||||
/obj/item/weapon/shovel/wood/Initialize(var/ml, var/_mat)
|
||||
. = ..()
|
||||
material = get_material_by_name(_mat)
|
||||
if(!istype(material))
|
||||
material = null
|
||||
else
|
||||
name = "[material.display_name] shovel"
|
||||
matter = list("[material.name]" = 50)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/shovel/wood/update_icon()
|
||||
. = ..()
|
||||
color = material ? material.icon_colour : initial(color)
|
||||
alpha = min(max(255 * material.opacity, 80), 255)
|
||||
|
||||
/obj/item/weapon/shovel/spade
|
||||
name = "spade"
|
||||
desc = "A small tool for digging and moving dirt."
|
||||
|
||||
@@ -6,24 +6,25 @@ var/list/mining_overlay_cache = list()
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock-dark"
|
||||
density = 1
|
||||
|
||||
|
||||
/turf/simulated/mineral //wall piece
|
||||
name = "rock"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock"
|
||||
var/rock_side_icon_state = "rock_side"
|
||||
var/sand_icon_state = "asteroid"
|
||||
var/rock_icon_state = "rock"
|
||||
var/random_icon = 0
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = T0C
|
||||
|
||||
can_dirty = FALSE
|
||||
|
||||
var/floor_name = "sand"
|
||||
var/rock_side_icon_state = "rock_side"
|
||||
var/sand_icon_state = "asteroid"
|
||||
var/rock_icon_state = "rock"
|
||||
var/random_icon = 0
|
||||
|
||||
var/ore/mineral
|
||||
var/sand_dug
|
||||
var/mined_ore = 0
|
||||
@@ -65,6 +66,10 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
has_resources = 1
|
||||
|
||||
/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors)
|
||||
clear_ore_effects()
|
||||
. = ..()
|
||||
|
||||
// Alternative rock wall sprites.
|
||||
/turf/simulated/mineral/light
|
||||
icon_state = "rock-light"
|
||||
@@ -109,6 +114,14 @@ var/list/mining_overlay_cache = list()
|
||||
blocks_air = 0
|
||||
can_build_into_floor = TRUE
|
||||
|
||||
/turf/simulated/mineral/floor/mud
|
||||
icon_state = "mud"
|
||||
sand_icon_state = "mud"
|
||||
|
||||
/turf/simulated/mineral/floor/dirt
|
||||
icon_state = "dirt"
|
||||
sand_icon_state = "dirt"
|
||||
|
||||
//Alternative sand floor sprite.
|
||||
/turf/simulated/mineral/floor/light
|
||||
icon_state = "sand-light"
|
||||
@@ -140,6 +153,7 @@ var/list/mining_overlay_cache = list()
|
||||
opacity = 0
|
||||
blocks_air = 0
|
||||
can_build_into_floor = TRUE
|
||||
clear_ore_effects()
|
||||
update_general()
|
||||
|
||||
/turf/simulated/mineral/proc/make_wall()
|
||||
@@ -223,7 +237,7 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
//We are a sand floor
|
||||
else
|
||||
name = "sand"
|
||||
name = floor_name
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
icon_state = sand_icon_state
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ var/list/slot_equipment_priority = list( \
|
||||
/mob/proc/equip_voidsuit_to_slot_or_del_with_refit(obj/item/clothing/suit/space/void/W as obj, slot, species = SPECIES_HUMAN)
|
||||
W.refit_for_species(species)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
|
||||
|
||||
/mob/proc/equip_voidhelm_to_slot_or_del_with_refit(obj/item/clothing/head/helmet/space/void/W as obj, slot, species = SPECIES_HUMAN)
|
||||
W.refit_for_species(species)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
data["replaces_nutriment"] = replaces_nutriment
|
||||
data["collects_produce"] = collects_produce
|
||||
data["removes_dead"] = removes_dead
|
||||
|
||||
|
||||
return data
|
||||
|
||||
|
||||
@@ -83,22 +83,22 @@
|
||||
/mob/living/bot/farmbot/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
|
||||
add_fingerprint(usr)
|
||||
|
||||
switch(action)
|
||||
if("power")
|
||||
if(!access_scanner.allowed(src))
|
||||
if(!access_scanner.allowed(usr))
|
||||
return FALSE
|
||||
if(on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
. = TRUE
|
||||
|
||||
|
||||
if(locked)
|
||||
return TRUE
|
||||
|
||||
|
||||
switch(action)
|
||||
if("water")
|
||||
waters_trays = !waters_trays
|
||||
|
||||
@@ -249,13 +249,13 @@
|
||||
cold_discomfort_level = 215
|
||||
|
||||
has_organ = list( //No appendix.
|
||||
O_HEART = /obj/item/organ/internal/heart,
|
||||
O_HEART = /obj/item/organ/internal/heart/tajaran,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_VOICE = /obj/item/organ/internal/voicebox,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
O_EYES = /obj/item/organ/internal/eyes,
|
||||
O_EYES = /obj/item/organ/internal/eyes/tajaran,
|
||||
O_STOMACH = /obj/item/organ/internal/stomach,
|
||||
O_INTESTINE = /obj/item/organ/internal/intestine
|
||||
)
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
if(istype(H.w_uniform, /obj/item/clothing/under))
|
||||
suit = H.w_uniform
|
||||
|
||||
|
||||
|
||||
var/list/slots = list()
|
||||
for(var/entry in H.species.hud.gear)
|
||||
var/list/slot_ref = H.species.hud.gear[entry]
|
||||
@@ -316,7 +316,7 @@
|
||||
)))
|
||||
data["slots"] = slots
|
||||
|
||||
|
||||
|
||||
var/list/specialSlots = list()
|
||||
if(H.species.hud.has_hands)
|
||||
specialSlots.Add(list(list(
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/icebass
|
||||
name = "Sivian Fauna - Glitter Bass"
|
||||
@@ -156,7 +156,7 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
var/max_red = 150
|
||||
var/min_red = 50
|
||||
@@ -245,7 +245,7 @@
|
||||
|
||||
var/image/head_image
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
|
||||
. = ..()
|
||||
@@ -292,7 +292,7 @@
|
||||
|
||||
has_eye_glow = TRUE
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/murkin
|
||||
name = "Sivian Fauna - Murkfish"
|
||||
@@ -319,4 +319,4 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
icon_living = "mouse_[body_color]"
|
||||
icon_dead = "mouse_[body_color]_dead"
|
||||
icon_rest = "mouse_[body_color]_sleep"
|
||||
desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
if (body_color != "rat")
|
||||
desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/Crossed(atom/movable/AM as mob|obj)
|
||||
if(AM.is_incorporeal())
|
||||
@@ -106,6 +107,8 @@
|
||||
|
||||
/mob/living/simple_mob/animal/passive/mouse/rat
|
||||
name = "rat"
|
||||
tt_desc = "E Rattus rattus"
|
||||
desc = "A large rodent, often seen hiding in maintenance areas and making a nuisance of itself."
|
||||
body_color = "rat"
|
||||
icon_state = "mouse_rat"
|
||||
maxHealth = 20
|
||||
|
||||
@@ -72,12 +72,20 @@
|
||||
output += "<p>[href(src, list("give_feedback" = 1), "Give Feedback")]</p>"
|
||||
|
||||
if(GLOB.news_data.station_newspaper)
|
||||
output += "<a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News</A>"
|
||||
if(client.prefs.lastlorenews == GLOB.news_data.newsindex)
|
||||
output += "<p><a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News</A></p>"
|
||||
else
|
||||
output += "<p><b><a href='byond://?src=\ref[src];open_station_news=1'>Show [using_map.station_name] News (NEW!)</A></b></p>"
|
||||
|
||||
output += "</div>"
|
||||
|
||||
if(GLOB.news_data.station_newspaper && !client.seen_news)
|
||||
if (client.prefs.lastlorenews == GLOB.news_data.newsindex)
|
||||
client.seen_news = 1
|
||||
|
||||
if(GLOB.news_data.station_newspaper && !client.seen_news && client.is_preference_enabled(/datum/client_preference/show_lore_news))
|
||||
show_latest_news(GLOB.news_data.station_newspaper)
|
||||
client.prefs.lastlorenews = GLOB.news_data.newsindex
|
||||
SScharacter_setup.queue_preferences_save(client.prefs)
|
||||
|
||||
panel = new(src, "Welcome","Welcome", 500, 480, src)
|
||||
panel.set_window_options("can_close=0")
|
||||
|
||||
@@ -1679,159 +1679,223 @@ shaved
|
||||
///////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/sprite_accessory/hair/una_spines_long
|
||||
//Unathi Head-Bits
|
||||
|
||||
/datum/sprite_accessory/hair/una
|
||||
name = "Long Unathi Spines"
|
||||
icon_state = "soghun_longspines"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_spines_short
|
||||
/datum/sprite_accessory/hair/una/spines_short
|
||||
name = "Short Unathi Spines"
|
||||
icon_state = "soghun_shortspines"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_frills_long
|
||||
/datum/sprite_accessory/hair/una/frills_long
|
||||
name = "Long Unathi Frills"
|
||||
icon_state = "soghun_longfrills"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_frills_short
|
||||
/datum/sprite_accessory/hair/una/frills_short
|
||||
name = "Short Unathi Frills"
|
||||
icon_state = "soghun_shortfrills"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_horns
|
||||
/datum/sprite_accessory/hair/una/horns
|
||||
name = "Unathi Horns"
|
||||
icon_state = "soghun_horns"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_bighorns
|
||||
/datum/sprite_accessory/hair/una/bighorns
|
||||
name = "Unathi Big Horns"
|
||||
icon_state = "unathi_bighorn"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_smallhorns
|
||||
/datum/sprite_accessory/hair/una/smallhorns
|
||||
name = "Unathi Small Horns"
|
||||
icon_state = "unathi_smallhorn"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_ramhorns
|
||||
/datum/sprite_accessory/hair/una/ramhorns
|
||||
name = "Unathi Ram Horns"
|
||||
icon_state = "unathi_ramhorn"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/hair/una_sidefrills
|
||||
/datum/sprite_accessory/hair/una/sidefrills
|
||||
name = "Unathi Side Frills"
|
||||
icon_state = "unathi_sidefrills"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
//Skrell 'hairstyles'
|
||||
/datum/sprite_accessory/hair/skr_tentacle_veryshort
|
||||
name = "Skrell Short Tentacles"
|
||||
icon_state = "skrell_hair_short"
|
||||
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/hair/skr_tentacle_short
|
||||
/datum/sprite_accessory/hair/skr
|
||||
name = "Skrell Average Tentacles"
|
||||
icon_state = "skrell_hair_average"
|
||||
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/hair/skr_tentacle_average
|
||||
/datum/sprite_accessory/hair/skr/tentacle_veryshort
|
||||
name = "Skrell Short Tentacles"
|
||||
icon_state = "skrell_hair_short"
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/hair/skr/tentacle_average
|
||||
name = "Skrell Long Tentacles"
|
||||
icon_state = "skrell_hair_long"
|
||||
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/hair/skr_tentacle_verylong
|
||||
/datum/sprite_accessory/hair/skr/tentacle_verylong
|
||||
name = "Skrell Very Long Tentacles"
|
||||
icon_state = "skrell_hair_verylong"
|
||||
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
//Tajaran hairstyles
|
||||
/datum/sprite_accessory/hair/taj_ears
|
||||
/datum/sprite_accessory/hair/taj
|
||||
name = "Tajaran Ears"
|
||||
icon_state = "ears_plain"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_clean
|
||||
name = "Tajaran Clean"
|
||||
icon_state = "hair_clean"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_bangs
|
||||
/datum/sprite_accessory/hair/taj/bangs
|
||||
name = "Tajaran Bangs"
|
||||
icon_state = "hair_bangs"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj/bangs_alt
|
||||
name = "Tajaran Bangs (Alt)"
|
||||
icon_state = "hair_bangs_alt"
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_braid
|
||||
/datum/sprite_accessory/hair/taj/short_fringe
|
||||
name = "Tajaran Short Fringe"
|
||||
icon_state = "hair_shortfringe"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/braid
|
||||
name = "Tajaran Braid"
|
||||
icon_state = "hair_tbraid"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_shaggy
|
||||
/datum/sprite_accessory/hair/taj/clean
|
||||
name = "Tajaran Clean"
|
||||
icon_state = "hair_clean"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/gman
|
||||
name = "Tajaran G-Man"
|
||||
icon_state = "hair_gman"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/greaser
|
||||
name = "Tajaran Greaser"
|
||||
icon_state = "hair_greaser"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/bun
|
||||
name = "Tajaran Bun"
|
||||
icon_state = "hair_tajbun"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/bunsmall
|
||||
name = "Tajaran Bun (Small)"
|
||||
icon_state = "hair_tajsmallbun"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/bunlow
|
||||
name = "Tajaran Bun (Low)"
|
||||
icon_state = "hair_tajbunlow"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/bunlowsmall
|
||||
name = "Tajaran Bun (Low, Small)"
|
||||
icon_state = "hair_tajbunlowsmall"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/_wedge
|
||||
name = "Tajaran Wedge"
|
||||
icon_state = "hair_wedge"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shaggy
|
||||
name = "Tajaran Shaggy"
|
||||
icon_state = "hair_shaggy"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_mohawk
|
||||
/datum/sprite_accessory/hair/taj/mohawk
|
||||
name = "Tajaran Mohawk"
|
||||
icon_state = "hair_mohawk"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_plait
|
||||
/datum/sprite_accessory/hair/taj/plait
|
||||
name = "Tajaran Plait"
|
||||
icon_state = "hair_plait"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_straight
|
||||
/datum/sprite_accessory/hair/taj/_sidepony
|
||||
name = "Tajaran Side Ponytail"
|
||||
icon_state = "hair_sidepony"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/straight
|
||||
name = "Tajaran Straight"
|
||||
icon_state = "hair_straight"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_long
|
||||
/datum/sprite_accessory/hair/taj/long
|
||||
name = "Tajaran Long"
|
||||
icon_state = "hair_long"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_rattail
|
||||
/datum/sprite_accessory/hair/taj/tresses
|
||||
name = "Tajaran Tresses"
|
||||
icon_state = "hair_tresses"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shoulderparted
|
||||
name = "Tajaran Shoulder Parted"
|
||||
icon_state = "hair_shoulderparted"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shoulderpartedsmall
|
||||
name = "Tajaran Shoulder Parted (Small)"
|
||||
icon_state = "hair_shoulderpartedsmall"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shoulderpartedlong
|
||||
name = "Tajaran Shoulder Parted (Long)"
|
||||
icon_state = "hair_shoulderpartedlong"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/sidepartedleft
|
||||
name = "Tajaran Side Parted (Left)"
|
||||
icon_state = "hair_sidepartedleft"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/sidepartedright
|
||||
name = "Tajaran Side Parted (Right)"
|
||||
icon_state = "hair_sidepartedright"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shoulderlength
|
||||
name = "Tajaran Shoulder Length"
|
||||
icon_state = "hair_shoulderlength"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/shoulderlengthalt
|
||||
name = "Tajaran Shoulder Length (Alt)"
|
||||
icon_state = "hair_shoulderlengthalt"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/cascading
|
||||
name = "Tajaran Cascading"
|
||||
icon_state = "hair_cascading"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/cascadingalt
|
||||
name = "Tajaran Cascading (Alt)"
|
||||
icon_state = "hair_cascadingalt"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/rattail
|
||||
name = "Tajaran Rat Tail"
|
||||
icon_state = "hair_rattail"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_spiky
|
||||
/datum/sprite_accessory/hair/taj/spiky
|
||||
name = "Tajaran Spiky"
|
||||
icon_state = "hair_tajspiky"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_messy
|
||||
/datum/sprite_accessory/hair/taj/fringeup
|
||||
name = "Tajaran Fringe Spike"
|
||||
icon_state = "hair_fringeup"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/messy
|
||||
name = "Tajaran Messy"
|
||||
icon_state = "hair_messy"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_curls
|
||||
/datum/sprite_accessory/hair/taj/curls
|
||||
name = "Tajaran Curly"
|
||||
icon_state = "hair_curly"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_wife
|
||||
/datum/sprite_accessory/hair/taj/curlsalt
|
||||
name = "Tajaran Curly, alt"
|
||||
icon_state = "hair_curlyalt"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/mane
|
||||
name = "Tajaran Mane"
|
||||
icon_state = "hair_mane"
|
||||
|
||||
/datum/sprite_accessory/hair/taj/wife
|
||||
name = "Tajaran Housewife"
|
||||
icon_state = "hair_wife"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_victory
|
||||
/datum/sprite_accessory/hair/taj/victory
|
||||
name = "Tajaran Victory Curls"
|
||||
icon_state = "hair_victory"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_bob
|
||||
/datum/sprite_accessory/hair/taj/bob
|
||||
name = "Tajaran Bob"
|
||||
icon_state = "hair_tbob"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/hair/taj_ears_fingercurl
|
||||
/datum/sprite_accessory/hair/taj/fingercurl
|
||||
name = "Tajaran Finger Curls"
|
||||
icon_state = "hair_fingerwave"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
//Teshari things
|
||||
/datum/sprite_accessory/hair/teshari
|
||||
@@ -1891,8 +1955,6 @@ shaved
|
||||
name = "Teshari Mushroom"
|
||||
icon_state = "teshari_mushroom"
|
||||
|
||||
//Tesh things ported from Ark Station
|
||||
|
||||
/datum/sprite_accessory/hair/teshari/twies
|
||||
name = "Teshari Twies"
|
||||
icon_state = "teshari_twies"
|
||||
@@ -1914,102 +1976,89 @@ shaved
|
||||
icon_state = "teshari_fluffymohawk"
|
||||
|
||||
// Vox things
|
||||
/datum/sprite_accessory/hair/vox_braid_long
|
||||
/datum/sprite_accessory/hair/vox
|
||||
name = "Long Vox braid"
|
||||
icon_state = "vox_longbraid"
|
||||
species_allowed = list(SPECIES_VOX)
|
||||
|
||||
/datum/sprite_accessory/hair/vox_braid_short
|
||||
/datum/sprite_accessory/hair/vox/braid_short
|
||||
name = "Short Vox Braid"
|
||||
icon_state = "vox_shortbraid"
|
||||
species_allowed = list(SPECIES_VOX)
|
||||
|
||||
/datum/sprite_accessory/hair/vox_quills_short
|
||||
/datum/sprite_accessory/hair/vox/quills_short
|
||||
name = "Short Vox Quills"
|
||||
icon_state = "vox_shortquills"
|
||||
species_allowed = list(SPECIES_VOX)
|
||||
|
||||
/datum/sprite_accessory/hair/vox_quills_kingly
|
||||
/datum/sprite_accessory/hair/vox/quills_kingly
|
||||
name = "Kingly Vox Quills"
|
||||
icon_state = "vox_kingly"
|
||||
species_allowed = list(SPECIES_VOX)
|
||||
|
||||
/datum/sprite_accessory/hair/vox_quills_mohawk
|
||||
/datum/sprite_accessory/hair/vox/quills_mohawk
|
||||
name = "Quill Mohawk"
|
||||
icon_state = "vox_mohawk"
|
||||
species_allowed = list(SPECIES_VOX)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_sideburns
|
||||
//Tajaran Facial Hair
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj
|
||||
name = "Tajaran Sideburns"
|
||||
icon_state = "facial_sideburns"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_mutton
|
||||
/datum/sprite_accessory/facial_hair/taj/mutton
|
||||
name = "Tajaran Mutton"
|
||||
icon_state = "facial_mutton"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_pencilstache
|
||||
/datum/sprite_accessory/facial_hair/taj/pencilstache
|
||||
name = "Tajaran Pencilstache"
|
||||
icon_state = "facial_pencilstache"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_moustache
|
||||
/datum/sprite_accessory/facial_hair/taj/moustache
|
||||
name = "Tajaran Moustache"
|
||||
icon_state = "facial_moustache"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_goatee
|
||||
/datum/sprite_accessory/facial_hair/taj/goatee
|
||||
name = "Tajaran Goatee"
|
||||
icon_state = "facial_goatee"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/taj_smallstache
|
||||
/datum/sprite_accessory/facial_hair/taj/smallstache
|
||||
name = "Tajaran Smallsatche"
|
||||
icon_state = "facial_smallstache"
|
||||
species_allowed = list(SPECIES_TAJ)
|
||||
|
||||
//unathi horn beards and the like
|
||||
|
||||
/datum/sprite_accessory/facial_hair/una_chinhorn
|
||||
/datum/sprite_accessory/facial_hair/una
|
||||
name = "Unathi Chin Horn"
|
||||
icon_state = "facial_chinhorns"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/una_hornadorns
|
||||
/datum/sprite_accessory/facial_hair/una/hornadorns
|
||||
name = "Unathi Horn Adorns"
|
||||
icon_state = "facial_hornadorns"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/una_spinespikes
|
||||
/datum/sprite_accessory/facial_hair/una/spinespikes
|
||||
name = "Unathi Spine Spikes"
|
||||
icon_state = "facial_spikes"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
/datum/sprite_accessory/facial_hair/una_dorsalfrill
|
||||
/datum/sprite_accessory/facial_hair/una/dorsalfrill
|
||||
name = "Unathi Dorsal Frill"
|
||||
icon_state = "facial_dorsalfrill"
|
||||
species_allowed = list(SPECIES_UNATHI)
|
||||
|
||||
|
||||
//Teshari things
|
||||
/datum/sprite_accessory/facial_hair/teshari_beard
|
||||
//Teshari face things
|
||||
/datum/sprite_accessory/facial_hair/teshari
|
||||
name = "Teshari Beard"
|
||||
icon_state = "teshari_chin"
|
||||
species_allowed = list(SPECIES_TESHARI)
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/facial_hair/teshari_scraggly
|
||||
/datum/sprite_accessory/facial_hair/teshari/scraggly
|
||||
name = "Teshari Scraggly"
|
||||
icon_state = "teshari_scraggly"
|
||||
species_allowed = list(SPECIES_TESHARI)
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/facial_hair/teshari_chops
|
||||
|
||||
/datum/sprite_accessory/facial_hair/teshari/chops
|
||||
name = "Teshari Chops"
|
||||
icon_state = "teshari_gap"
|
||||
species_allowed = list(SPECIES_TESHARI)
|
||||
gender = NEUTER
|
||||
|
||||
/*
|
||||
////////////////////////////
|
||||
|
||||
@@ -344,13 +344,43 @@
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/ears/elfs2
|
||||
name = "pointed ears"
|
||||
desc = ""
|
||||
icon_state = "ears_pointy"
|
||||
do_colouration = 1
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/ears/elfs
|
||||
name = "elven ears"
|
||||
name = "pointed ears (tall)"
|
||||
desc = ""
|
||||
icon_state = "elfs"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/ears/elfs3
|
||||
name = "pointed ears (down)"
|
||||
desc = ""
|
||||
icon_state = "ears_pointy_down"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/ears/elfs4
|
||||
name = "pointed ears (long)"
|
||||
desc = ""
|
||||
icon_state = "ears_pointy_long"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/ears/elfs5
|
||||
name = "pointed ears (long, down)"
|
||||
desc = ""
|
||||
icon_state = "ears_pointy_long_down"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
|
||||
|
||||
/datum/sprite_accessory/ears/sleek
|
||||
|
||||
@@ -7,6 +7,7 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new)
|
||||
/datum/lore/news
|
||||
var/datum/feed_channel/station_newspaper
|
||||
var/datum/lore/codex/category/main_news/news_codex = new()
|
||||
var/newsindex
|
||||
|
||||
/datum/lore/news/New()
|
||||
..()
|
||||
@@ -17,6 +18,10 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new)
|
||||
break
|
||||
spawn(300) // Yes, again.
|
||||
fill_codex_news()
|
||||
if (!news_codex.newsindex)
|
||||
return
|
||||
else
|
||||
newsindex = news_codex.newsindex
|
||||
|
||||
/datum/lore/news/proc/fill_codex_news()
|
||||
if(!news_network)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
/obj/item/organ/internal/eyes/tajaran
|
||||
icon_state = "tajaran_eyes"
|
||||
|
||||
/obj/item/organ/internal/heart/tajaran
|
||||
icon_state = "tajaran_heart-on"
|
||||
dead_icon = "tajaran_heart-off"
|
||||
|
||||
@@ -30,17 +30,6 @@
|
||||
charge_cost = 800
|
||||
recharge_time = 0.5 SECONDS
|
||||
|
||||
/obj/item/weapon/gun/energy/stunrevolver
|
||||
name = "stun revolver"
|
||||
desc = "A LAEP20 Aktzin. Designed and produced by Lawson Arms under the wing of Hephaestus, several TSCs have been trying to get a hold of the blueprints for half a decade."
|
||||
description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \
|
||||
The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, and the company has been particularly litigious towards any attempted imitators."
|
||||
icon_state = "stunrevolver"
|
||||
item_state = "stunrevolver"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
projectile_type = /obj/item/projectile/energy/electrode/strong
|
||||
charge_cost = 300
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow
|
||||
name = "mini energy-crossbow"
|
||||
desc = "A weapon favored by many mercenary stealth specialists."
|
||||
@@ -80,4 +69,45 @@
|
||||
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3)
|
||||
fire_delay = 20
|
||||
charge_cost = 600
|
||||
projectile_type = /obj/item/projectile/energy/plasmastun
|
||||
projectile_type = /obj/item/projectile/energy/plasmastun
|
||||
|
||||
//Stun Revolvers
|
||||
|
||||
/obj/item/weapon/gun/energy/stunrevolver
|
||||
name = "stun revolver"
|
||||
desc = "A LAEP20 Aktzin. Designed and produced by Lawson Arms under the wing of Hephaestus, \
|
||||
several TSCs have been trying to get a hold of the blueprints for half a decade."
|
||||
description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, \
|
||||
often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \
|
||||
The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, \
|
||||
and the company has been particularly litigious towards any attempted imitators."
|
||||
icon_state = "stunrevolver"
|
||||
item_state = "stunrevolver"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
projectile_type = /obj/item/projectile/energy/electrode/strong
|
||||
charge_cost = 300
|
||||
|
||||
/obj/item/weapon/gun/energy/stunrevolver/vintage
|
||||
name = "vintage stun revolver"
|
||||
desc = "An older model stun revolver that is still in service across the frontier."
|
||||
description_fluff = "The LTX1020 Bolter, a Firefly Co. staple from when the company was in its hayday. \
|
||||
While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \
|
||||
across the frontier as anything from collectors items to surplus equipment. The LTX1020 falls under \
|
||||
the latter category. Several companies have been known to use the base tech within the Bolter to create \
|
||||
their own variants of the Stun Revolver."
|
||||
icon_state = "vinstunrevolver"
|
||||
item_state = "stunrevolver"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
|
||||
/obj/item/weapon/gun/energy/stunrevolver/snubnose
|
||||
name = "snub stun revolver"
|
||||
desc = "A snub nose stun revolver sporting a rather elegant look."
|
||||
description_fluff = "The LTX1010 Stubby, a Firefly Co. staple from when the company was in its hayday. \
|
||||
While Firefly Co. has sadly been dissmantled due to bankruptcy, their iconic weapons can still be found \
|
||||
across the frontier as anything from collectors items to surplus equipment. The LTX1010 falls under \
|
||||
the latter category. Gangsters and other gentlemanly criminals alike use the Stubby as a means of policing \
|
||||
within their ranks."
|
||||
icon_state = "snubstunrevolver"
|
||||
item_state = "stunrevolver"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
@@ -1,7 +1,8 @@
|
||||
// For all intents and purposes, these work exactly the same as pump shotguns. It's unnecessary to make their own procs for them.
|
||||
|
||||
////////Base Rifle////////
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle
|
||||
name = "bolt action rifle"
|
||||
name = "bolt-action rifle"
|
||||
desc = "The Hedberg-Hammarstrom Volsung is a modern interpretation of an almost ancient weapon design. The model is popular among hunters and collectors due to its reliability. Uses 7.62mm rounds."
|
||||
description_fluff = "Sif’s largest home-grown firearms manufacturer, the Hedberg-Hammarstrom company offers a range of high-quality, high-cost hunting rifles and shotguns designed with the Sivian wilderness - and its wildlife - in mind. \
|
||||
The company operates just one production plant in Kalmar, but their weapons have found popularity on garden worlds as far afield as the Tajaran homeworld due to their excellent build quality, precision, and stopping power."
|
||||
@@ -14,20 +15,25 @@
|
||||
ammo_type = /obj/item/ammo_casing/a762
|
||||
load_method = SINGLE_CASING|SPEEDLOADER
|
||||
action_sound = 'sound/weapons/riflebolt.ogg'
|
||||
pump_animation = null
|
||||
pump_animation = "boltaction-cycling"
|
||||
|
||||
////////Practice Rifle////////
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice // For target practice
|
||||
name = "practice bolt-action rifle"
|
||||
icon_state = "boltaction_practice"
|
||||
desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
|
||||
ammo_type = /obj/item/ammo_casing/a762/practice
|
||||
pump_animation = "boltaction_practice-cycling"
|
||||
|
||||
////////Ceremonial Rifle////////
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial
|
||||
name = "ceremonial bolt-action rifle"
|
||||
desc = "A bolt-action rifle with a heavy, high-quality wood stock that has a beautiful finish. Clearly not intended to be used in combat. Uses 7.62mm rounds."
|
||||
icon_state = "boltaction_c"
|
||||
item_state = "boltaction_c"
|
||||
icon_state = "ceremonial_rifle"
|
||||
ammo_type = /obj/item/ammo_casing/a762/blank
|
||||
pump_animation = "ceremonial_rifle-cycling"
|
||||
|
||||
// Stole hacky terrible code from doublebarrel shotgun. -Spades
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
if(istype(A, /obj/item/weapon/surgical/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter) && w_class != ITEMSIZE_NORMAL)
|
||||
to_chat(user, "<span class='notice'>You begin to shorten the barrel and stock of \the [src].</span>")
|
||||
@@ -37,7 +43,7 @@
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>", "<span class='danger'>The rifle goes off in your face!</span>")
|
||||
return
|
||||
if(do_after(user, 30))
|
||||
icon_state = "sawnrifle"
|
||||
icon_state = "sawn_rifle"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
recoil = 2 // Owch
|
||||
accuracy = -15 // You know damn well why.
|
||||
@@ -46,11 +52,14 @@
|
||||
slot_flags |= (SLOT_BELT|SLOT_HOLSTER) //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - or in a holster, why not.
|
||||
name = "sawn-off rifle"
|
||||
desc = "The firepower of a rifle, now the size of a pistol, with an effective combat range of about three feet. Uses 7.62mm rounds."
|
||||
pump_animation = "sawn_rifle-cycling"
|
||||
to_chat(user, "<span class='warning'>You shorten the barrel and stock of \the [src]!</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
//Lever actions are the same thing, but bigger.
|
||||
|
||||
////////Standard Lever Action Rifle////////
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
|
||||
name = "lever-action rifle"
|
||||
desc = "The Hedberg-Hammarstrom Edda is the latest version of an almost ancient weapon design from the 19th century, popular with some due to its simplistic design. This one uses a lever-action to move new rounds into the chamber. Uses 7.62mm rounds."
|
||||
@@ -61,10 +70,12 @@
|
||||
max_shells = 5
|
||||
caliber = "7.62mm"
|
||||
load_method = SINGLE_CASING
|
||||
pump_animation = "leveraction-cycling"
|
||||
|
||||
////////Vintage Lever Action Rifle////////
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/vintage
|
||||
name = "vintage repeater"
|
||||
desc = "An iconic manually operated lever action rifle, offering adequate stopping power due to it's still powerful cartridge while at the same time having a rather respectable firing rate due to it's mechanism. It is very probable this is a replica instead of a museum piece, but rifles of this pattern still see usage as colonist guns in some far off regions. Uses 7.62mm rounds."
|
||||
item_state = "levercarabine" // That isn't how carbine is spelled ya knob! :U
|
||||
icon_state = "levercarabine"
|
||||
pump_animation = "levercarabine-cycling"
|
||||
item_state = "levercarbine"
|
||||
icon_state = "levercarbine"
|
||||
pump_animation = "levercarbine-cycling"
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
|
||||
//Bastard child of a revolver and a semi-auto rifle.
|
||||
|
||||
//Standard Revolving Rifle
|
||||
/obj/item/weapon/gun/projectile/revolvingrifle
|
||||
name = "revolving rifle"
|
||||
desc = "The Gungnir is a novel, antique idea brought into the modern era by Hedberg-Hammarstrom. The semi-automatic revolving mechanism offers no real advantage, but some colonists swear by it. Uses .44 magnum revolver rounds."
|
||||
@@ -31,7 +33,7 @@
|
||||
The company operates just one production plant in Kalmar, but their weapons have found popularity on garden worlds as far afield as the Tajaran homeworld due to their excellent build quality, \
|
||||
precision, and stopping power."
|
||||
icon_state = "revolvingrifle"
|
||||
item_state = "boltaction"
|
||||
item_state = "rifle"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
caliber = ".44"
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
|
||||
@@ -41,8 +43,9 @@
|
||||
max_shells = 6
|
||||
ammo_type = /obj/item/ammo_casing/a44/rifle
|
||||
|
||||
/obj/item/weapon/gun/projectile/revolvingrifle/update_icon()
|
||||
if(ammo_magazine)
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-e"
|
||||
//Vintage Revolving Rifle
|
||||
/obj/item/weapon/gun/projectile/revolvingrifle/vintage
|
||||
name = "vintage revolving rifle"
|
||||
desc = "The Willhem is the Gungir's older cousin by Hedberg-Hammarstrom, the perfect collector piece. The semi-automatic revolving mechanism offers no real advantage, but some colonists swear by it. Uses .44 magnum revolver rounds."
|
||||
icon_state = "vintagerevolvingrifle"
|
||||
|
||||
|
||||
@@ -24,6 +24,9 @@ var/global/list/map_count = list()
|
||||
var/floor_type = /turf/simulated/floor
|
||||
var/target_turf_type
|
||||
|
||||
var/skip_dense = FALSE
|
||||
var/keep_outside = FALSE
|
||||
|
||||
// Storage for the final iteration of the map.
|
||||
var/list/map = list() // Actual map.
|
||||
|
||||
@@ -61,11 +64,16 @@ var/global/list/map_count = list()
|
||||
rand_seed(seed)
|
||||
priority_process = 1
|
||||
|
||||
var/failed = FALSE
|
||||
for(var/i = 0;i<max_attempts;i++)
|
||||
if(generate())
|
||||
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
return
|
||||
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
|
||||
if(!generate())
|
||||
failed = TRUE
|
||||
|
||||
if(!do_not_announce)
|
||||
if(!failed)
|
||||
admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
else
|
||||
admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
|
||||
|
||||
/datum/random_map/proc/get_map_cell(var/x,var/y)
|
||||
if(!map)
|
||||
@@ -162,11 +170,11 @@ var/global/list/map_count = list()
|
||||
if(!current_cell)
|
||||
return 0
|
||||
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
|
||||
if(!T || (target_turf_type && !istype(T,target_turf_type)))
|
||||
if(!T || (skip_dense && T.density) || (target_turf_type && !istype(T,target_turf_type)))
|
||||
return 0
|
||||
var/newpath = get_appropriate_path(map[current_cell])
|
||||
if(newpath)
|
||||
T.ChangeTurf(newpath)
|
||||
T.ChangeTurf(newpath, preserve_outdoors = keep_outside)
|
||||
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
|
||||
return T
|
||||
|
||||
|
||||
@@ -399,7 +399,7 @@
|
||||
name = "Singulo"
|
||||
id = "singulo"
|
||||
result = "singulo"
|
||||
required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
|
||||
required_reagents = list("vodka" = 5, "radium" = 1, "redwine" = 5)
|
||||
result_amount = 10
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/alliescocktail
|
||||
@@ -505,14 +505,14 @@
|
||||
name = "Acid Spit"
|
||||
id = "acidspit"
|
||||
result = "acidspit"
|
||||
required_reagents = list("sacid" = 1, "wine" = 5)
|
||||
required_reagents = list("sacid" = 1, "redwine" = 5)
|
||||
result_amount = 6
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/amasec
|
||||
name = "Amasec"
|
||||
id = "amasec"
|
||||
result = "amasec"
|
||||
required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
|
||||
required_reagents = list("iron" = 1, "redwine" = 5, "vodka" = 5)
|
||||
result_amount = 10
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/changelingsting
|
||||
@@ -661,7 +661,7 @@
|
||||
name = "Melon Spritzer"
|
||||
id = "melonspritzer"
|
||||
result = "melonspritzer"
|
||||
required_reagents = list("watermelonjuice" = 2, "wine" = 2, "applejuice" = 1, "limejuice" = 1)
|
||||
required_reagents = list("watermelonjuice" = 2, "redwine" = 2, "applejuice" = 1, "limejuice" = 1)
|
||||
result_amount = 6
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/fauxfizz
|
||||
@@ -915,7 +915,7 @@
|
||||
name = "Wine brandy"
|
||||
id = "winebrandy"
|
||||
result = "winebrandy"
|
||||
required_reagents = list("wine" = 10)
|
||||
required_reagents = list("redwine" = 10)
|
||||
catalysts = list("enzyme" = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
|
||||
result_amount = 5
|
||||
|
||||
@@ -937,7 +937,7 @@
|
||||
name = "Vesper"
|
||||
id = "vesper"
|
||||
result = "vesper"
|
||||
required_reagents = list("gin" = 3, "vodka" = 1, "wine" = 1)
|
||||
required_reagents = list("gin" = 3, "vodka" = 1, "redwine" = 1)
|
||||
result_amount = 4
|
||||
|
||||
/decl/chemical_reaction/instant/drinks/rotgut
|
||||
|
||||
@@ -1105,14 +1105,12 @@
|
||||
name = "Neutralize Carpotoxin"
|
||||
id = "carpotoxin_neutral"
|
||||
result = "protein"
|
||||
required_reagents = list("radium" = 1, "carpotoxin" = 1, "sifsap" = 1)
|
||||
catalysts = list("sifsap" = 10)
|
||||
result_amount = 2
|
||||
required_reagents = list("enzyme" = 1, "carpotoxin" = 1, "sifsap" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/neutralize_spidertoxin
|
||||
name = "Neutralize Spidertoxin"
|
||||
id = "spidertoxin_neutral"
|
||||
result = "protein"
|
||||
required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1)
|
||||
catalysts = list("sifsap" = 10)
|
||||
result_amount = 2
|
||||
required_reagents = list("enzyme" = 1, "spidertoxin" = 1, "sifsap" = 1)
|
||||
result_amount = 1
|
||||
@@ -155,6 +155,7 @@
|
||||
"milk",
|
||||
"mint",
|
||||
"orangejuice",
|
||||
"redwine",
|
||||
"rum",
|
||||
"sake",
|
||||
"sodawater",
|
||||
@@ -172,8 +173,7 @@
|
||||
"vodka",
|
||||
"water",
|
||||
"watermelonjuice",
|
||||
"whiskey",
|
||||
"wine")
|
||||
"whiskey")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
|
||||
return
|
||||
|
||||
@@ -297,13 +297,6 @@
|
||||
color = "#FFFFAA"
|
||||
allergen_type = ALLERGEN_EGGS //Eggs contain egg
|
||||
|
||||
/datum/reagent/nutriment/protein/murk
|
||||
name = "murkfin protein"
|
||||
id = "murk_protein"
|
||||
taste_description = "mud"
|
||||
color = "#664330"
|
||||
allergen_type = ALLERGEN_FISH //Murkfin is fish
|
||||
|
||||
/datum/reagent/nutriment/honey
|
||||
name = "Honey"
|
||||
id = "honey"
|
||||
|
||||
@@ -627,10 +627,11 @@
|
||||
M.adjustToxLoss(2 * removed)
|
||||
M.adjustCloneLoss(2 * removed)
|
||||
|
||||
/datum/reagent/fishbait
|
||||
/datum/reagent/nutriment/fishbait
|
||||
name = "Fish Bait"
|
||||
id = "fishbait"
|
||||
description = "A natural slurry that particularily appeals to fish."
|
||||
taste_description = "earthy"
|
||||
taste_description = "slimy dirt"
|
||||
reagent_state = LIQUID
|
||||
color = "#62764E"
|
||||
color = "#62764E"
|
||||
nutriment_factor = 15
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
/datum/reagent/toxin/neurotoxic_protein
|
||||
name = "toxic protein"
|
||||
id = "neurotoxic_protein"
|
||||
description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
|
||||
description = "A weak neurotoxic chemical."
|
||||
taste_description = "fish"
|
||||
reagent_state = LIQUID
|
||||
color = "#005555"
|
||||
|
||||
@@ -70,6 +70,13 @@
|
||||
build_path = /obj/item/weapon/gun/energy/floragun
|
||||
sort_string = "MAAAG"
|
||||
|
||||
/datum/design/item/weapon/energy/vinstunrevolver
|
||||
id = "vinstunrevolver"
|
||||
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
|
||||
materials = list(MAT_STEEL = 4000)
|
||||
build_path = /obj/item/weapon/gun/energy/stunrevolver/vintage
|
||||
sort_string = "MAAAH"
|
||||
|
||||
// Ballistic weapons
|
||||
|
||||
/datum/design/item/weapon/ballistic/AssembleDesignName()
|
||||
|
||||
@@ -202,8 +202,8 @@ research holder datum.
|
||||
id = TECH_DATA
|
||||
|
||||
/datum/tech/syndicate
|
||||
name = "Illegal Technologies Research"
|
||||
desc = "The study of technologies that violate standard government regulations."
|
||||
name = "Transgressive Technologies Research"
|
||||
desc = "The study of technologies that sit on the very boundaries of legality and ethics."
|
||||
id = TECH_ILLEGAL
|
||||
level = 0
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
newsign.data["vmask"] = 0
|
||||
newsign.data["level"] = list()
|
||||
|
||||
var/pass = S.relay_information(newsign, "/obj/machinery/telecomms/hub")
|
||||
var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub)
|
||||
if(!pass)
|
||||
S.relay_information(newsign, "/obj/machinery/telecomms/broadcaster") // send this simple message to broadcasters
|
||||
S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this simple message to broadcasters
|
||||
|
||||
|
||||
@@ -473,11 +473,9 @@
|
||||
if(clean_name)
|
||||
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Confirmation","Cancel","Ok")
|
||||
if(okay == "Ok")
|
||||
new_name = clean_name
|
||||
|
||||
new_name = sanitizeName(new_name, allow_numbers = TRUE)
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
return
|
||||
|
||||
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
|
||||
@@ -60,14 +60,30 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob)
|
||||
/obj/structure/table/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params)
|
||||
if(ismob(O.loc)) //If placing an item
|
||||
if(!isitem(O) || user.get_active_hand() != O)
|
||||
return ..()
|
||||
if(isrobot(user))
|
||||
return
|
||||
user.drop_item()
|
||||
if(O.loc != src.loc)
|
||||
step(O, get_dir(O, src))
|
||||
|
||||
if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
|
||||
return ..()
|
||||
if(isrobot(user))
|
||||
return
|
||||
user.unEquip(O, 0, src.loc)
|
||||
return
|
||||
else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop
|
||||
var/obj/item/I = O
|
||||
if(I.anchored)
|
||||
return
|
||||
|
||||
if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated()))
|
||||
if(O.w_class <= user.can_pull_size)
|
||||
O.forceMove(loc)
|
||||
auto_align(I, params, TRUE)
|
||||
else
|
||||
to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!"))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/hit_modifier, var/click_parameters)
|
||||
@@ -159,7 +175,7 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
|
||||
|
||||
/obj/item/var/list/center_of_mass = list("x" = 16,"y" = 16)
|
||||
|
||||
/obj/structure/table/proc/auto_align(obj/item/W, click_parameters)
|
||||
/obj/structure/table/proc/auto_align(obj/item/W, click_parameters, var/animate = FALSE)
|
||||
if(!W.center_of_mass)
|
||||
W.randpixel_xy()
|
||||
return
|
||||
@@ -176,8 +192,16 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen
|
||||
var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
|
||||
var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
|
||||
|
||||
W.pixel_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"]
|
||||
W.pixel_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"]
|
||||
var/target_x = (CELLSIZE * (cell_x + 0.5)) - W.center_of_mass["x"]
|
||||
var/target_y = (CELLSIZE * (cell_y + 0.5)) - W.center_of_mass["y"]
|
||||
if(animate)
|
||||
var/dist_x = abs(W.pixel_x - target_x)
|
||||
var/dist_y = abs(W.pixel_y - target_y)
|
||||
var/dist = sqrt((dist_x*dist_x)+(dist_y*dist_y))
|
||||
animate(W, pixel_x=target_x, pixel_y=target_y,time=dist*0.5)
|
||||
else
|
||||
W.pixel_x = target_x
|
||||
W.pixel_y = target_y
|
||||
|
||||
#undef CELLS
|
||||
#undef CELLSIZE
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 233 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user