Refactors posters to use decls (#8128)

* poster

* Moves decls_repo init forward

* Moves decl_repository init even further forwards
This commit is contained in:
Atermonera
2021-06-18 19:14:49 -07:00
committed by GitHub
parent a1327676d8
commit beaf109060
19 changed files with 356 additions and 410 deletions

View File

@@ -31,10 +31,6 @@ GLOBAL_LIST_EMPTY(closet_appearances)
// Times that players are allowed to respawn ("ckey" = world.time)
GLOBAL_LIST_EMPTY(respawn_timers)
// Posters
var/global/list/poster_designs = list()
var/global/list/NT_poster_designs = list()
// Holomaps
var/global/list/holomap_markers = list()
var/global/list/mapping_units = list()
@@ -212,18 +208,6 @@ var/global/list/string_slot_flags = list(
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
GLOB.whitelisted_species += S.name
//Posters
paths = typesof(/datum/poster) - /datum/poster
paths -= typesof(/datum/poster/nanotrasen)
for(var/T in paths)
var/datum/poster/P = new T
poster_designs += P
paths = typesof(/datum/poster/nanotrasen)
for(var/T in paths)
var/datum/poster/P = new T
NT_poster_designs += P
//Ores
paths = typesof(/ore)-/ore
for(var/oretype in paths)
@@ -235,10 +219,7 @@ var/global/list/string_slot_flags = list(
GLOB.alloy_data += new alloytype()
//Closet appearances
paths = typesof(/decl/closet_appearance)
for(var/T in paths)
var/decl/closet_appearance/app = new T()
GLOB.closet_appearances[T] = app
GLOB.closet_appearances = decls_repository.get_decls_of_type(/decl/closet_appearance)
paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears
for(var/path in paths)

View File

@@ -14,7 +14,7 @@
// III. Thou shalt not write a decl that relies on arguments supplied to New().
// IV. Thou shalt not call Initialize() on a /decl.
var/repository/decls/decls_repository = new()
var/repository/decls/decls_repository // Initialiozed in /datum/global_init/New()
/repository/decls
var/list/fetched_decls

View File

@@ -51,7 +51,7 @@
/obj/item/weapon/reagent_containers/glass/paint/purple,
/obj/item/weapon/reagent_containers/glass/paint/black,
/obj/item/weapon/reagent_containers/glass/paint/white,
/obj/item/weapon/contraband/poster/custom,
/obj/item/poster/custom,
/obj/item/weapon/wrapping_paper = 3
)
cost = 10

View File

@@ -664,9 +664,9 @@
/datum/supply_pack/security/posters
name = "Gear - Morale Posters"
contains = list(
/obj/item/weapon/contraband/poster/nanotrasen = 6
/obj/item/poster/nanotrasen = 6
)
cost = 20
cost = 10
containertype = /obj/structure/closet/crate/secure/nanotrasen
containername = "Morale Posters"
access = access_maint_tunnels

View File

@@ -1,242 +0,0 @@
//########################## CONTRABAND ;3333333333333333333 -Agouri ###################################################
/obj/item/weapon/contraband
name = "contraband item"
desc = "You probably shouldn't be holding this."
icon = 'icons/obj/contraband.dmi'
force = 0
/obj/item/weapon/contraband/poster
name = "rolled-up poster"
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface."
icon_state = "rolled_poster"
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
var/serial_number = null
var/poster_type = /obj/structure/sign/poster
/obj/item/weapon/contraband/poster/New(turf/loc, var/given_serial = 0)
if(!serial_number)
if(given_serial == 0)
serial_number = rand(1, poster_designs.len)
else
serial_number = given_serial
name += " - No. [serial_number]"
..(loc)
//Places the poster on a wall
/obj/item/weapon/contraband/poster/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
if (!adjacent)
return
//must place on a wall and user must not be inside a closet/mecha/whatever
var/turf/W = A
if (!iswall(W) || !isturf(user.loc))
to_chat(user, "<span class='warning'>You can't place this here!</span>")
return
var/placement_dir = get_dir(user, W)
if (!(placement_dir in cardinal))
to_chat(user, "<span class='warning'>You must stand directly in front of the wall you wish to place that on.</span>")
return
//just check if there is a poster on or adjacent to the wall
var/stuff_on_wall = 0
if (locate(/obj/structure/sign/poster) in W)
stuff_on_wall = 1
//crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
for (var/dir in cardinal)
var/turf/T = get_step(W, dir)
if (locate(/obj/structure/sign/poster) in T)
stuff_on_wall = 1
break
if (stuff_on_wall)
to_chat(user, "<span class='notice'>There is already a poster there!</span>")
return
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>") //Looks like it's uncluttered enough. Place the poster.
var/obj/structure/sign/poster/P = new poster_type(user.loc, placement_dir=get_dir(user, W), serial=serial_number, itemtype = src.type)
flick("poster_being_set", P)
//playsound(W, 'sound/items/poster_being_created.ogg', 100, 1) //why the hell does placing a poster make printer sounds?
var/oldsrc = src //get a reference to src so we can delete it after detaching ourselves
src = null
spawn(17)
if(!P) return
if(iswall(W) && user && P.loc == user.loc) //Let's check if everything is still there
to_chat(user, "<span class='notice'>You place the poster!</span>")
else
P.roll_and_drop(P.loc)
qdel(oldsrc) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway
//NT subtype
/obj/item/weapon/contraband/poster/nanotrasen
icon_state = "rolled_poster_nt"
poster_type = /obj/structure/sign/poster/nanotrasen
/obj/item/weapon/contraband/poster/nanotrasen/New(turf/loc, var/given_serial = 0)
if(given_serial == 0)
serial_number = rand(1, NT_poster_designs.len)
else
serial_number = given_serial
..(loc)
//Selectable subtype
/obj/item/weapon/contraband/poster/custom
name = "rolled-up poly-poster"
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
poster_type = /obj/structure/sign/poster/custom
/obj/item/weapon/contraband/poster/custom/New(turf/loc, var/given_serial = 0)
if(given_serial == 0)
serial_number = 1 //Decidedly unrandom
else
serial_number = given_serial
..(loc)
/obj/item/weapon/contraband/poster/custom/verb/select_poster()
set name = "Set Poster type"
set category = "Object"
set desc = "Click to choose a poster to display."
var/mob/M = usr
var/list/options = list()
for(var/datum/poster/posteroption in poster_designs)
options[posteroption.listing_name] = posteroption
var/choice = input(M,"Choose a poster!","Customize Poster") in options
if(src && choice && !M.stat && in_range(M,src))
var serial = poster_designs.Find(options[choice])
serial_number = serial
name = "rolled-up poly-poster - No.[serial]"
to_chat(M, "The poster is now: [choice].")
return 1
//############################## THE ACTUAL DECALS ###########################
/obj/structure/sign/poster
name = "poster"
desc = "A large piece of space-resistant printed paper. "
icon = 'icons/obj/contraband.dmi'
anchored = 1
var/serial_number //Will hold the value of src.loc if nobody initialises it
var/poster_type //So mappers can specify a desired poster
var/ruined = 0
var/roll_type
var/poster_set = FALSE
/obj/structure/sign/poster/New(var/newloc, var/placement_dir=null, var/serial=null, var/itemtype = /obj/item/weapon/contraband/poster)
..(newloc)
if(!serial)
serial = rand(1, poster_designs.len) //use a random serial if none is given
if(!poster_set)
serial_number = serial
var/datum/poster/design = poster_designs[serial_number]
set_poster(design)
if(itemtype || !roll_type)
roll_type = itemtype
switch (placement_dir)
if (NORTH)
pixel_x = 0
pixel_y = 32
if (SOUTH)
pixel_x = 0
pixel_y = -32
if (EAST)
pixel_x = 32
pixel_y = 0
if (WEST)
pixel_x = -32
pixel_y = 0
/obj/structure/sign/poster/Initialize()
. = ..()
if (poster_type)
var/path = text2path(poster_type)
var/datum/poster/design = new path
set_poster(design)
/obj/structure/sign/poster/proc/set_poster(var/datum/poster/design)
name = "[initial(name)] - [design.name]"
desc = "[initial(desc)] [design.desc]"
icon_state = design.icon_state // poster[serial_number]
poster_set = TRUE
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wirecutter())
playsound(src, W.usesound, 100, 1)
if(ruined)
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You carefully remove the poster from the wall.</span>")
roll_and_drop(user.loc)
return
/obj/structure/sign/poster/attack_hand(mob/user as mob)
if(ruined)
return
if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes")
if(ruined || !user.Adjacent(src))
return
visible_message("<span class='warning'>[user] rips [src] in a single, decisive motion!</span>" )
playsound(src, 'sound/items/poster_ripped.ogg', 100, 1)
ruined = 1
icon_state = "poster_ripped"
name = "ripped poster"
desc = "You can't make out anything from the poster's original print. It's ruined."
add_fingerprint(user)
/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc)
var/obj/item/weapon/contraband/poster/P = new roll_type(src, serial_number)
P.loc = newloc
src.loc = P
qdel(src)
/datum/poster
// Name suffix. Poster - [name]
var/name=""
// Description suffix
var/desc=""
var/icon_state=""
var/listing_name=""
// NT poster subtype.
/obj/structure/sign/poster/nanotrasen
roll_type = /obj/item/weapon/contraband/poster/nanotrasen
/obj/structure/sign/poster/nanotrasen/New(var/newloc, var/placement_dir=null, var/serial=null, var/itemtype = /obj/item/weapon/contraband/poster/nanotrasen)
if(!serial)
serial = rand(1, NT_poster_designs.len)
serial_number = serial
var/datum/poster/design = NT_poster_designs[serial_number]
set_poster(design)
..(newloc, placement_dir, serial, itemtype)
//Non-Random Posters
/obj/structure/sign/poster/custom
roll_type = /obj/item/weapon/contraband/poster/custom

View File

@@ -1,346 +1,347 @@
// baystation12 posters
/datum/poster/bay_1
icon_state="bsposter1"
name = "PSA: Unlucky Space Explorer"
desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
listing_name = "PSA - EVA Accidents"
// Base type needs to be defined or template types make random selection wonky
/decl/poster
var/icon_state="bsposter1"
var/name = "PSA: Unlucky Space Explorer"
var/desc = "This grim PSA depicts a skeletal form within a space suit. Thousands die every year as a result of failing to follow EVA safety guidelines."
var/listing_name = "PSA - EVA Accidents"
/datum/poster/bay_2
/decl/poster/bay_2
icon_state="bsposter2"
name = "PSA: Disobedient Drones"
desc = "This PSA depicts the cold, unmoving stare of a particularly advanced AI. Contact information for the Emergent Intelligence Oversight is included."
listing_name = "PSA - Emergent Drones"
/datum/poster/bay_3
/decl/poster/bay_3
icon_state="bsposter3"
name = "PSA: Corporate Espionage"
desc = "This PSA warns of the dangers of trusting your co-workers with sensitive department information. They may be spying for a rival corporation, or worse!"
listing_name = "PSA - Corporate Espionage"
/datum/poster/bay_4
/decl/poster/bay_4
icon_state="bsposter4"
name = "Keep Calm"
desc = "An incredibly vague message, presented in a classic form. Someone has scribbled an O over the A on the poster."
listing_name = "PSA - Keep Calm"
/datum/poster/bay_5
/decl/poster/bay_5
icon_state="bsposter5"
name = "PSA: Saboteurs!"
desc = "A company PSA reminding employees to keep an eye out for suspicious activity, and report it immediately."
listing_name = "PSA - Saboteur"
/datum/poster/bay_6
/decl/poster/bay_6
icon_state="bsposter6"
name = "Eradicator XV"
desc = "An ad for the fifteenth installment in the Eradicator movie franchise, about a violent robotic uprising hellbent on wiping out humanity."
listing_name = "Ad - Eradicator XV"
/datum/poster/bay_7
/decl/poster/bay_7
icon_state="bsposter7"
name = "Wasteland: Battle for Earth"
desc = "This action movie ad shows a couple of ragged post-apocalyptic gunmen, one male and one female, on top of a mound of rubble."
listing_name = "Ad - Battle for Earth"
/datum/poster/bay_8
/decl/poster/bay_8
icon_state="bsposter8"
name = "Pinup Girl Cindy"
desc = "This is a vintage 2450s pin-up of NanoTrasen's PR girl, Cindy, in a particularly feminine pose."
listing_name = "Pin-up - Cindi"
/datum/poster/bay_9
/decl/poster/bay_9
icon_state="bsposter9"
name = "Pinup Girl Amy"
desc = "This pin-up is of Amy, one of NanoTrasen's most popular PR models."
listing_name = "Pin-up - Amy"
/datum/poster/bay_10
/decl/poster/bay_10
icon_state="bsposter10"
name = "Don't Panic"
desc = "This ad for Vey-Medical anxiety pills depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters."
listing_name = "Ad - Don't panic."
/datum/poster/bay_11
/decl/poster/bay_11
icon_state="bsposter11"
name = "Underwater Living"
desc = "This immigration poster encourages you to move to Earth;s premiere underwater city, Atlantis. One bedroom apartments start at half your salary."
listing_name = "Ad - Atlantis"
/datum/poster/bay_12
/decl/poster/bay_12
icon_state="bsposter12"
name = "Beware Rogue AI"
desc = "This ad for the Emergent Intelligence Oversight Recruitment Division depicts a menacing AI and asks if you're a bad enough dude to take it on."
listing_name = "Recruitment - EIO"
/datum/poster/bay_13
/decl/poster/bay_13
icon_state="bsposter13"
name = "Become A User of the Arcane Arts"
desc = "This ad for popular Virtual Reality online game 'Wiz Online' depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image. Incredible graphics!"
listing_name = "Ad - Wiz Online"
/datum/poster/bay_14
/decl/poster/bay_14
icon_state="bsposter14"
name = "Levitating Skull"
desc = "This tacky ad is a portrait of the flying enchanted skull, Bones. Its adventures along with its fabled companion are showing now on a broadcast service near you!"
listing_name = "Ad - Bones Adventures"
/datum/poster/bay_15
/decl/poster/bay_15
icon_state="bsposter15"
name = "Augmented Legend"
desc = "This ad for Ward-Takahashi cybernetic implants shows obviously augmented individual, gazing towards the sky. Is your body augmented?"
listing_name = "Ad - Ward-Takahashi Augments"
/datum/poster/bay_16
/decl/poster/bay_16
icon_state="bsposter16"
name = "Snow Crash"
desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. You think it's an ad for something, but you're not sure what."
listing_name = "Ad - Snow Crash"
/datum/poster/bay_17
/decl/poster/bay_17
icon_state="bsposter17"
name = "Pinup Girl Val"
desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly."
listing_name = "Pin-up - Val"
/datum/poster/bay_18
/decl/poster/bay_18
icon_state="bsposter18"
name = "Derpman, Enforcer of the State"
desc = "An ad for Centauri Provisions donuts. Officer Derpman is here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks."
listing_name = "Ad - Officer Derpman Donuts"
/datum/poster/bay_19
/decl/poster/bay_19
icon_state="bsposter19"
name = "Respect an Unathi"
desc = "This poster depicts a sharply dressed Unathi receiving a prestigious award. It appears to espouse greater co-operation and harmony between humanity and the Unathi."
listing_name = "PSA - Unathi"
/datum/poster/bay_20
/decl/poster/bay_20
icon_state="bsposter20"
name = "Skrell Tourism"
desc = "This tourism poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves."
listing_name = "Ad - Skrellian Tourism"
/datum/poster/bay_21
/decl/poster/bay_21
icon_state="bsposter21"
name = "Join the Fuzz!"
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
listing_name = "Recruitment - NanoTrasen Security - Pinup"
/datum/poster/bay_22
/decl/poster/bay_22
icon_state="bsposter22"
name = "Looking for a career with excitement?"
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
listing_name = "Recruitment - Xenobiology"
/datum/poster/bay_23
/decl/poster/bay_23
icon_state="bsposter23"
name = "Safety first: because electricity doesn't wait!"
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
listing_name = "Safety - Electric Shock"
/datum/poster/bay_24
/decl/poster/bay_24
icon_state="bsposter24"
name = "Responsible medbay habits, No #259"
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
listing_name = "Medical - Clone Disclosure"
/datum/poster/bay_25
/decl/poster/bay_25
icon_state="bsposter25"
name = "Irresponsible medbay habits, No #2"
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
listing_name = "Medical - Sexual Harassment"
/datum/poster/bay_26
/decl/poster/bay_26
icon_state="bsposter26"
name = "The Men We Knew"
desc = "This movie poster depicts a group of soldiers fighting a large mech, it seems to be some kind of movie set during the Hegemony War."
listing_name = "Ad - Men We Knew"
/datum/poster/bay_27
/decl/poster/bay_27
icon_state="bsposter27"
name = "Plastic Sheep Can't Scream"
desc = "This is a movie poster for an upcoming horror movie, featuring a frightening looking robotic creature."
listing_name = "Ad - Plastic Sheep Can't Scream"
/datum/poster/bay_28
/decl/poster/bay_28
icon_state="bsposter28"
name = "The Stars Know Love"
desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic drama."
listing_name = "Ad - The Stars Know Love"
/datum/poster/bay_29
/decl/poster/bay_29
icon_state="bsposter29"
name = "Winter Is Coming"
desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep yourself from freezing this winter!\". Below is the logo of NanoThreads clothing."
listing_name = "Ad - Cold-weather Gear"
/datum/poster/bay_30
/decl/poster/bay_30
icon_state="bsposter30"
name = "Ambrosia Vulgaris"
desc = "It's an ad for getting absolutely shitfaced on psychadelics. Just looking at this poster makes you feel a little bit dizzy. Use responsibly."
listing_name = "Ad - Ambrosia Vulgaris"
/datum/poster/bay_31
/decl/poster/bay_31
icon_state="bsposter31"
name = "Donut Panic"
desc = "This is an advertisement for Donut Panic, the bi-monthly periodical for donut lovers galaxy-wide."
listing_name = "Ad - Donuts Panic"
/datum/poster/bay_32
/decl/poster/bay_32
icon_state="bsposter32"
name = "Eat!"
desc = "A NanoPastures poster depicting a synthmeat hamburger. The poster COMMANDS you to consume the hamburger."
listing_name = "Ad - Hamburger"
/datum/poster/bay_33
/decl/poster/bay_33
icon_state="bsposter33"
name = "Tools, tools, tools!"
desc = "Xion Manufacturing reminds you: Never trust an off-brand tool. "
listing_name = "Ad - Xion Tools"
/datum/poster/bay_34
/decl/poster/bay_34
icon_state="bsposter34"
name = "Power Up!"
desc = "NanoTrasen are leaders in Phoron-based supermatter power! High reward, higher risk!"
listing_name = "Ad - Phoron Power"
/datum/poster/bay_35
/decl/poster/bay_35
icon_state="bsposter35"
name = "Kendrick"
desc = "This is a poster depicting the pet and mascot of the science department, and national corporate ambassador for slime-based science solutions.."
listing_name = "Ad - Slime Science"
/datum/poster/bay_36
/decl/poster/bay_36
icon_state="bsposter36"
name = "Fancy Borg"
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy."
listing_name = "Ad - Borg Fancy A"
/datum/poster/bay_37
/decl/poster/bay_37
icon_state="bsposter37"
name = "Fancier Borg"
desc = "A poster depicting a cyborg dressed to the nines. An ad for cybernetics enthusiast magazine, Borg Fancy. This is even fancier than the other poster."
listing_name = "Ad - Borg Fancy B"
/datum/poster/bay_38
/decl/poster/bay_38
icon_state="bsposter38"
name = "Toaster Love"
desc = "This is a poster of a toaster containing two slices of bread. The word LOVE is written in big pink letters underneath. An ad for a cybernetics 'enthusiast' magazine. "
listing_name = "Ad - Toaster Love"
/datum/poster/bay_39
/decl/poster/bay_39
icon_state="bsposter39"
name = "Responsible medbay habits, No #91"
desc = "A safety poster with a chemist holding a vial. \"Always wear safety gear while handling dangerous chemicals, even if it concerns only small amounts.\""
listing_name = "Safety - Chemicals"
/datum/poster/bay_40
/decl/poster/bay_40
icon_state="bsposter40"
name = "Agreeable work environment"
desc = "This poster depicts a young woman in a stylish dress. \"Try to aim for a pleasant atmosphere in the workspace. A friendly word can do more than forms in triplicate.\""
listing_name = "PSA - Agreeable Work Environment"
/datum/poster/bay_41
/decl/poster/bay_41
icon_state="bsposter41"
name = "Professional work environment"
desc = "A safety poster featuring a green haired woman in a shimmering blue dress. \"As an Internal Affairs Agent, your job is to create a fair and agreeable work environment for the crewmembers, as discreetly and professionally as possible.\""
listing_name = "Recruitment - Internal Affairs"
/datum/poster/bay_42
/decl/poster/bay_42
icon_state="bsposter42"
name = "Engineering pinup"
desc = "This is pin-up poster. A half-naked girl with white hair, toned muscles and stunning blue eyes looks back at you from the poster. Her welding helmet, tattoos and grey jumpsuit hanging around her waist gives a bit of a rugged feel."
listing_name = "Pin-up - Engineer"
/datum/poster/bay_43
/decl/poster/bay_43
icon_state="bsposter43"
name = "Responsible medbay habits, No #3"
desc = "A safety poster with a purple-haired surgeon. She looks a bit cross. \"Let the surgeons do their work. NEVER replace or remove a surgery tool from where the surgeon put it.\""
listing_name = "Safety - Surgical Tools"
/datum/poster/bay_44
/decl/poster/bay_44
icon_state="bsposter44"
name = "Time for a drink?"
desc = "This poster for a brand for \"Tajaran-style\" rum produced by Gilthari Exports depicts a friendly-looking Tajaran holding a tray of drinks."
listing_name = "Ad - Rarkajar Rum"
/datum/poster/bay_45
/decl/poster/bay_45
icon_state="bsposter45"
name = "Responsible engineering habits, No #1"
desc = "A safety poster featuring a blue haired engineer. \"When repairing a machine or construction, always aim for long-term solutions.\""
listing_name = "Safety - No Shortcut Fixes"
/datum/poster/bay_46
/decl/poster/bay_46
icon_state="bsposter46"
name = "Inspirational lawyer"
desc = "An inspirational poster depicting a Skrellian lawyer. He seems to be shouting something, while pointing fiercely to the right. It's an ad for a NanoTrasen subsidiary law firm."
listing_name = "Ad - NanoTrasen Law"
/datum/poster/bay_47
/decl/poster/bay_47
icon_state="bsposter47"
name = "Security pinup"
desc = "This is a pin-up poster. A dark skinned white haired girl poses in the sunlight wearing a tank top with her stomach exposed. The text on the poster states \"M, Succubus of Security.\" and a lipstick mark stains the top right corner, as if kissed by the model herself."
listing_name = "Pin-up - Security"
/datum/poster/bay_48
/decl/poster/bay_48
icon_state="bsposter48"
name = "Remote Drones 4 U"
desc = "This is an ad for a fairly basic model of drone produced by Grayson Manufactories Ltd. for use in hazardous environments."
listing_name = "Ad - Grayson Drones"
/datum/poster/bay_49
/decl/poster/bay_49
icon_state="bsposter49"
name = "Engineering recruitment"
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
listing_name = "Recruitment - Engineering"
/datum/poster/bay_50
/decl/poster/bay_50
icon_state="bsposter50"
name = "Pinup Girl Cindy Kate"
desc = "This particular one is of Cindy Kate, a seductive virtual performer well known among less savoury exonet circles."
listing_name = "Pin-up - Cindi-Kate"
/datum/poster/bay_51
/decl/poster/bay_51
icon_state="bsposter51"
name = "space tourism poster"
desc = "This is a poster produced by the Visit Space Society. This one is targeted at planet-dwellers, suggesting they generally visit space."
listing_name = "Tourism - Space"
/datum/poster/bay_52
/decl/poster/bay_52
icon_state="bsposter52"
name = "fire safety poster"
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
listing_name = "Safety - Stop Drop and Roll"
/datum/poster/bay_53
/decl/poster/bay_53
icon_state="bsposter53"
name = "fire extinguisher poster"
desc = "This is a poster reminding you of what you should use to put out a fire."
listing_name = "Safety - Fire Extinguishers"
/datum/poster/bay_54
/decl/poster/bay_54
icon_state="bsposter54"
name = "firefighter poster"
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
listing_name = "Safety - Prevent Fires"
/datum/poster/bay_55
/decl/poster/bay_55
icon_state="bsposter55"
name = "Binma tourism poster"
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit the exotic garden world of Binma, and try not to get eaten."
listing_name = "Tourism - Binma"
/datum/poster/bay_56
/decl/poster/bay_56
icon_state="bsposter56"
name = "Mars appreciation poster"
desc = "This is a poster produced by the Visit Space Society. This one suggests you visit historic Mars. Come for the domes, stay for the monuments to hubris!"
/datum/poster/bay_57
/decl/poster/bay_57
icon_state="bsposter57"
name = "space carp warning poster"
desc = "This poster tells of the dangers of space carp infestations."
listing_name = "Safety - Carp"
/datum/poster/bay_58
/decl/poster/bay_58
icon_state="bsposter58"
name = "space carp information poster"
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."

View File

@@ -1,52 +1,52 @@
/datum/poster/pol_1
/decl/poster/pol_1
icon_state="polposter1"
name = "Safety!"
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
listing_name = "Safety - Internals"
/datum/poster/pol_2
/decl/poster/pol_2
icon_state="polposter2"
name = "Safety!"
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
listing_name = "Safety - Goggles"
/datum/poster/pol_3
/decl/poster/pol_3
icon_state="polposter3"
name = "Safety!"
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
listing_name = "Safety - Follow Instruction"
/datum/poster/pol_4
/decl/poster/pol_4
icon_state="polposter4"
name = "Clean Hands Save Lives"
desc = "A safety poster reminding you to wash your hands."
listing_name = "Safety - Hand Washing"
/datum/poster/pol_5
/decl/poster/pol_5
icon_state="polposter5"
name = "Help!"
desc = "This poster depicts a man helping another man get up."
listing_name = "Safety - Help Others"
/datum/poster/pol_6
/decl/poster/pol_6
icon_state="polposter6"
name = "Walk!"
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
listing_name = "Safety - No Running"
/datum/poster/pol_7
/decl/poster/pol_7
icon_state="polposter7"
name = "Place your signs!"
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
listing_name = "Safety - Wet Floor Signs"
/datum/poster/pol_8
/decl/poster/pol_8
icon_state="polposter8"
name = "Safety!"
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
listing_name = "Safety - EVA Training"
/datum/poster/pol_9
/decl/poster/pol_9
icon_state="poster10" //Recycling this icon
name = "Airlock Maintenance Reference"
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
@@ -54,49 +54,49 @@
wire codes."
listing_name = "Safety - Airlock Maintenance"
/datum/poster/pol_10
/decl/poster/pol_10
icon_state="polposter9"
name = "orchid"
desc = "This poster appears strangely familiar, depicting the flower of a tree native to the planet Earth."
listing_name = "General - Orchid"
/datum/poster/pol_11
/decl/poster/pol_11
icon_state="polposter10"
name = "firefighter pinup"
desc = "A buff firefighter with his shirt off. Maybe he's trying to raise awareness about fire safety, but you're a little distracted."
listing_name = "Pin-up - Firefighter"
/datum/poster/pol_12
/decl/poster/pol_12
icon_state="polposter11"
name = "CHUCK"
desc = "With the budget Cyber Solutions 'Chuck' model work drone, your days of menial labour are numbered! \"With Cyber Solutions, there's always someone beside you, helping you. You know their face. You know my face.\""
listing_name = "Ad - Chuck"
/datum/poster/pol_13
/decl/poster/pol_13
icon_state="polposter12"
name = "New You"
desc = "An ad for Kaleidoscope Cosmetics. \"The common factor in all your failed relationships is you. Fix it with affordable gene therapy!\""
listing_name = "Ad - Kaleidoscope"
/datum/poster/pol_14
/decl/poster/pol_14
icon_state="polposter13"
name = "Take a Taxi"
desc = "An ad for the Major Bill's Transportation drone-operated taxi service operating in most major cities throughout Solar space."
listing_name = "Ad - Taxi"
/datum/poster/pol_15
/decl/poster/pol_15
icon_state="polposter14"
name = "Adopt A Teshpet"
desc = "An ad for definitively racist virtual pet game, Teshpets."
listing_name = "Ad - Teshpets"
/datum/poster/pol_16
/decl/poster/pol_16
icon_state="polposter15"
name = "Train and Fight"
desc = "This poster of sweaty, near-naked wrestlers is the most masculine thing you've ever seen. You can barely tell where one man ends and the other begins. Always seek manliness!"
listing_name = "Pinup - Wrestling"
/datum/poster/nt_3
/decl/poster/nt_3
icon_state = "ntposter03"
name = "Mechatronic Safety"
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
@@ -104,25 +104,25 @@
The image seems important."
listing_name = "Safety - Mech Operation"
/datum/poster/nt_4
/decl/poster/nt_4
icon_state = "ntposter04"
name = "Beware Aetotheans"
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
listing_name = "Safety - Aetothean Danger"
/datum/poster/nt_5
/decl/poster/nt_5
icon_state = "ntposter05"
name = "Promethean"
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
listing_name = "Safety - Prometheans"
/datum/poster/nt_6
/decl/poster/nt_6
icon_state = "ntposter06"
name = "NanoTrasen"
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
listing_name = "Ad - NanoTrasen"
/datum/poster/nt_7
/decl/poster/nt_7
icon_state = "ntposter07"
name = "SolGov"
desc = "This poster showcases an SCG emblem. The outer ring reads,\
@@ -130,62 +130,62 @@
Solar Confederate Government."
listing_name = "Political - SolGov"
/datum/poster/nt_8
/decl/poster/nt_8
icon_state = "ntposter08"
name = "wildlife hazard"
desc = "This SifGov poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
listing_name = "Safety - Spiders"
// A new subset of poster datum for ONLY 'Internal' NanoTrasen posters, given to Security.
/datum/poster/nanotrasen
/decl/poster/nanotrasen
icon_state = "polposter1"
name = "Safety!"
desc = "A poster advising you to learn how to put on your internals at a moment's notice."
listing_name = "Safety - Internals"
/datum/poster/nanotrasen/pol_2
/decl/poster/nanotrasen/pol_2
icon_state="polposter2"
name = "Safety!"
desc = "A blue and white colored poster. This one advises you to wear your safety goggles when handling chemicals."
listing_name = "Safety - Goggles"
/datum/poster/nanotrasen/pol_3
/decl/poster/nanotrasen/pol_3
icon_state="polposter3"
name = "Safety!"
desc = "A safety poster instructing you to comply with the authorities, especially in an emergency."
listing_name = "Safety - Follow Instruction"
/datum/poster/nanotrasen/pol_4
/decl/poster/nanotrasen/pol_4
icon_state="polposter4"
name = "Clean Hands Save Lives"
desc = "A safety poster reminding you to wash your hands."
listing_name = "Safety - Hand Washing"
/datum/poster/nanotrasen/pol_5
/decl/poster/nanotrasen/pol_5
icon_state="polposter5"
name = "Help!"
desc = "This poster depicts a man helping another man get up."
listing_name = "Safety - Help Others"
/datum/poster/nanotrasen/pol_6
/decl/poster/nanotrasen/pol_6
icon_state="polposter6"
name = "Walk!"
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
listing_name = "Safety - No Running"
/datum/poster/nanotrasen/pol_7
/decl/poster/nanotrasen/pol_7
icon_state="polposter7"
name = "Place your signs!"
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
listing_name = "Safety - Wet Floor Signs"
/datum/poster/nanotrasen/pol_8
/decl/poster/nanotrasen/pol_8
icon_state="polposter8"
name = "Safety!"
desc = "An advertisement / safety poster for EVA training and certification. Training is available at your local Central Command."
listing_name = "Safety - EVA Training"
/datum/poster/nanotrasen/pol_9
/decl/poster/nanotrasen/pol_9
icon_state="poster10"
name = "Airlock Maintenance Reference"
desc = "This poster appears to be reference material for maintenance personnel, instructing to always wear insulated gloves, that wirecutters and \
@@ -193,97 +193,97 @@
wire codes."
listing_name = "Safety - Airlock Maintenance"
/datum/poster/nanotrasen/pol_10
/decl/poster/nanotrasen/pol_10
icon_state="polposter9"
name = "orchid"
desc = "This poster suggests a feeling of peace. It depicts the flower of a tree native to the planet Earth."
listing_name = "General - Orchid"
/datum/poster/nanotrasen/bay_9
/decl/poster/nanotrasen/bay_9
icon_state="bsposter9"
name = "Pinup Girl Amy"
desc = "This particular one is of Amy, the nymphomaniac urban legend of deep space. How this photograph came to be is not known."
listing_name = "Pin-up - Amy"
/datum/poster/nanotrasen/bay_21
/decl/poster/nanotrasen/bay_21
icon_state="bsposter21"
name = "Join the Fuzz!"
desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\""
listing_name = "Recruitment - NanoTrasen Security - Pinup"
/datum/poster/nanotrasen/bay_22
/decl/poster/nanotrasen/bay_22
icon_state="bsposter22"
name = "Looking for a career with excitement?"
desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom."
listing_name = "Recruitment - Xenobiology"
/datum/poster/nanotrasen/bay_23
/decl/poster/nanotrasen/bay_23
icon_state="bsposter23"
name = "Safety first: because electricity doesn't wait!"
desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\""
listing_name = "Safety - Electric Shock"
/datum/poster/nanotrasen/bay_24
/decl/poster/nanotrasen/bay_24
icon_state="bsposter24"
name = "Responsible medbay habits, No #259"
desc = "A poster with a nervous looking geneticist on it states; \"Friends Tell Friends They're Clones. It can cause severe and irreparable emotional trauma if a person is not properly informed of their recent demise. Always follow your contractual obligation and inform them of their recent rejuvenation.\""
listing_name = "Medical - Clone Disclosure"
/datum/poster/nanotrasen/bay_25
/decl/poster/nanotrasen/bay_25
icon_state="bsposter25"
name = "Irresponsible medbay habits, No #2"
desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\""
listing_name = "Medical - Sexual Harassment"
/datum/poster/nanotrasen/bay_49
/decl/poster/nanotrasen/bay_49
icon_state="bsposter49"
name = "Engineering recruitment"
desc = "This is a poster showing an engineer relaxing by a computer, the text states \"Living the life! Join Engineering today!\""
listing_name = "Recruitment - Engineering"
/datum/poster/nanotrasen/bay_52
/decl/poster/nanotrasen/bay_52
icon_state="bsposter52"
name = "fire safety poster"
desc = "This is a poster reminding you of what you should do if you are on fire, or if you are at a dance party."
listing_name = "Safety - Stop Drop And Roll"
/datum/poster/nanotrasen/bay_53
/decl/poster/nanotrasen/bay_53
icon_state="bsposter53"
name = "fire extinguisher poster"
desc = "This is a poster reminding you of what you should use to put out a fire."
listing_name = "Safety - Extinguishers"
/datum/poster/nanotrasen/bay_54
/decl/poster/nanotrasen/bay_54
icon_state="bsposter54"
name = "firefighter poster"
desc = "This is a poster of a particularly stern looking firefighter. The caption reads, \"Only you can prevent space fires.\""
listing_name = "Safety - Prevent Fires"
/datum/poster/nanotrasen/bay_57
/decl/poster/nanotrasen/bay_57
icon_state="bsposter57"
name = "space carp warning poster"
desc = "This poster tells of the dangers of space carp infestations."
listing_name = "Safety - Carp"
/datum/poster/nanotrasen/bay_58
/decl/poster/nanotrasen/bay_58
icon_state="bsposter58"
name = "space carp information poster"
desc = "This poster showcases an old spacer saying on the dangers of migrant space carp."
listing_name = "Safety - Carp Information"
/datum/poster/nanotrasen/nt_1
/decl/poster/nanotrasen/nt_1
icon_state = "ntposter01"
name = "Security recruitment"
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about the importance of Security."
listing_name = "Recruitment - NanoTrasen Security - Importance"
/datum/poster/nanotrasen/nt_2
/decl/poster/nanotrasen/nt_2
icon_state = "ntposter02"
name = "Security recruitment"
desc = "This poster showcases an NT security guard in an excited pose, with a small blurb about Security Employee benefits."
listing_name = "Recruitment - NanoTrasen Security - Benefits"
/datum/poster/nanotrasen/nt_3
/decl/poster/nanotrasen/nt_3
icon_state = "ntposter03"
name = "Mechatronic Safety"
desc = "This poster displays three cutting-edge gygaxes standing in line in front of a man in plain clothes.\
@@ -291,25 +291,25 @@
The image seems important."
listing_name = "Safety - Mech Operation"
/datum/poster/nanotrasen/nt_4
/decl/poster/nanotrasen/nt_4
icon_state = "ntposter04"
name = "Beware Aetotheans"
desc = "This poster displays a distinctly hostile-looking red Promethean in a black coat. The fine-print around the edges warns the reader about the dangers posed by Almachi Prometheans."
listing_name = "Safety - Aetothean Danger"
/datum/poster/nanotrasen/nt_5
/decl/poster/nanotrasen/nt_5
icon_state = "ntposter05"
name = "Promethean"
desc = "This poster displays a friendly-looking green Promethean in a labcoat. The fine-print around the edges talks about the benefits Prometheans give in laboratories."
listing_name = "Safety - Prometheans"
/datum/poster/nanotrasen/nt_6
/decl/poster/nanotrasen/nt_6
icon_state = "ntposter06"
name = "NanoTrasen"
desc = "This poster showcases an NT emblem. There is writing in the ring around the inner points, probably some sort of slogan no one bothers to memorize."
listing_name = "Ad - NanoTrasen"
/datum/poster/nanotrasen/nt_7
/decl/poster/nanotrasen/nt_7
icon_state = "ntposter07"
name = "SolGov"
desc = "This poster showcases an SCG emblem. The outer ring reads,\
@@ -317,13 +317,13 @@
Solar Confederate Government."
listing_name = "Political - SolGov"
/datum/poster/nanotrasen/nt_8
/decl/poster/nanotrasen/nt_8
icon_state = "ntposter08"
name = "wildlife hazard"
desc = "This poster warns against attempting to kill a fully grown giant spider or other hostile life-form alone."
listing_name = "Safety - Spiders"
/datum/poster/nanotrasen/nt_9
/decl/poster/nanotrasen/nt_9
icon_state = "ntposter09"
name = "Regulations and You"
desc = "This SifGov poster showcases an NT security guard reading from her PDA. The blurb advocates for the reader to keep corporate regulations in mind at all times, as an emergency can occur at any time."

View File

@@ -0,0 +1,206 @@
/proc/get_poster_decl(var/path = null, var/exact = TRUE)
if(ispath(path))
if(exact)
return decls_repository.get_decl(path)
else
var/list/L = decls_repository.get_decls_of_type(path)
return L[pick(L)]
return null
/obj/item/poster
name = "rolled-up poster"
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface."
icon = 'icons/obj/contraband.dmi'
icon_state = "rolled_poster"
drop_sound = 'sound/items/drop/wrapper.ogg'
pickup_sound = 'sound/items/pickup/wrapper.ogg'
force = 0
var/decl/poster/poster_decl = null
var/poster_type = /obj/structure/sign/poster
/obj/item/poster/Initialize(var/mapload, var/decl/poster/poster_decl = null)
if(ispath(src.poster_decl))
src.poster_decl = get_poster_decl(src.poster_decl, TRUE)
else if(istype(poster_decl))
src.poster_decl = poster_decl
else if(ispath(poster_decl))
src.poster_decl = get_poster_decl(poster_decl, TRUE)
else
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
name += " - No. [src.poster_decl.name]"
return ..()
//Places the poster on a wall
/obj/item/poster/afterattack(var/atom/A, var/mob/user, var/adjacent, var/clickparams)
if(!adjacent)
return FALSE
//must place on a wall and user must not be inside a closet/mecha/whatever
var/turf/W = A
if(!iswall(W) || !isturf(user.loc))
to_chat(user, "<span class='warning'>You can't place this here!</span>")
return FALSE
var/placement_dir = get_dir(user, W)
if(!(placement_dir in cardinal))
to_chat(user, "<span class='warning'>You must stand directly in front of the wall you wish to place that on.</span>")
return FALSE
//just check if there is a poster on or adjacent to the wall
var/stuff_on_wall = 0
if(locate(/obj/structure/sign/poster) in W)
stuff_on_wall = 1
//crude, but will cover most cases. We could do stuff like check pixel_x/y but it's not really worth it.
for (var/dir in cardinal)
var/turf/T = get_step(W, dir)
if (locate(/obj/structure/sign/poster) in T)
stuff_on_wall = 1
break
if(stuff_on_wall)
to_chat(user, "<span class='notice'>There is already a poster there!</span>")
return FALSE
to_chat(user, "<span class='notice'>You start placing the poster on the wall...</span>") //Looks like it's uncluttered enough. Place the poster.
var/obj/structure/sign/poster/P = new poster_type(user.loc, get_dir(user, W), src)
if(do_after(user, 17)) //Let's check if everything is still there
to_chat(user, "<span class='notice'>You place the poster!</span>")
qdel(src)
return TRUE
P.roll_and_drop(P.loc)
qdel(src)
return FALSE
//NT subtype
/obj/item/poster/nanotrasen
icon_state = "rolled_poster_nt"
poster_type = /obj/structure/sign/poster/nanotrasen
/obj/item/poster/nanotrasen/Initialize(turf/loc, var/decl/poster/P = null)
if(!ispath(src.poster_decl) && !ispath(P) && !istype(P))
src.poster_decl = get_poster_decl(/decl/poster/nanotrasen, FALSE)
return ..()
//Selectable subtype
/obj/item/poster/custom
name = "rolled-up poly-poster"
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. This one is made from some kind of e-paper, and could display almost anything!"
poster_type = /obj/structure/sign/poster/custom
/obj/item/poster/custom/verb/select_poster()
set name = "Set Poster type"
set category = "Object"
set desc = "Click to choose a poster to display."
var/mob/M = usr
var/list/options = list()
for(var/decl/poster/posteroption in decls_repository.get_decls_of_type(/decl/poster))
options[posteroption.listing_name] = posteroption
var/choice = input(M,"Choose a poster!","Customize Poster") in options
if(src && choice && !M.stat && in_range(M,src))
poster_decl = options[choice]
name = "rolled-up poly-poster - No.[poster_decl.icon_state]"
to_chat(M, "The poster is now: [choice].")
//############################## THE ACTUAL DECALS ###########################
/obj/structure/sign/poster
name = "poster"
desc = "A large piece of space-resistant printed paper. "
icon = 'icons/obj/contraband.dmi'
anchored = 1
var/decl/poster/poster_decl = null
var/target_poster_decl_path = /decl/poster
var/roll_type = /obj/item/poster
var/ruined = FALSE
// This stuff needs to go in new() for the the flick() to look right while it's being placed
/obj/structure/sign/poster/New(var/newloc, var/placement_dir = null, var/obj/item/poster/P = null)
if(placement_dir)
dir = placement_dir
switch (dir)
if (NORTH)
pixel_x = 0
pixel_y = 32
if (SOUTH)
pixel_x = 0
pixel_y = -32
if (EAST)
pixel_x = 32
pixel_y = 0
if (WEST)
pixel_x = -32
pixel_y = 0
flick("poster_being_set", src)
return ..()
/obj/structure/sign/poster/Initialize(var/newloc, var/placement_dir = null, var/obj/item/poster/P = null)
if(ispath(src.poster_decl))
src.poster_decl = get_poster_decl(src.poster_decl, TRUE)
else if(istype(P))
src.poster_decl = P.poster_decl
roll_type = P.type
else if(ispath(P))
src.poster_decl = get_poster_decl(P, TRUE)
else
src.poster_decl = get_poster_decl(target_poster_decl_path, FALSE)
name = "[initial(name)] - [poster_decl.name]"
desc = "[initial(desc)] [poster_decl.desc]"
icon_state = poster_decl.icon_state
return ..()
/obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_wirecutter())
playsound(src, W.usesound, 100, 1)
if(ruined)
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
qdel(src)
else
to_chat(user, "<span class='notice'>You carefully remove the poster from the wall.</span>")
roll_and_drop(get_turf(user))
return
/obj/structure/sign/poster/attack_hand(mob/user as mob)
if(ruined)
return
if(alert("Do I want to rip the poster from the wall?","You think...","Yes","No") == "Yes")
if(ruined || !user.Adjacent(src))
return
visible_message("<span class='warning'>[user] rips [src] in a single, decisive motion!</span>" )
playsound(src, 'sound/items/poster_ripped.ogg', 100, 1)
ruined = TRUE
icon_state = "poster_ripped"
name = "ripped poster"
desc = "You can't make out anything from the poster's original print. It's ruined."
add_fingerprint(user)
/obj/structure/sign/poster/proc/roll_and_drop(turf/newloc)
var/obj/item/poster/P = new roll_type(newloc, poster_decl)
P.loc = newloc
qdel(src)
// NT poster subtype.
/obj/structure/sign/poster/nanotrasen
roll_type = /obj/item/poster/nanotrasen
target_poster_decl_path = /decl/poster/nanotrasen
// Non-Random Posters
/obj/structure/sign/poster/custom
roll_type = /obj/item/poster/custom

View File

@@ -1,50 +1,50 @@
// /tg/ posters.
/datum/poster/tg_1
/decl/poster/tg_1
name = "Free Tonto"
desc = "A framed shred of a much larger flag, colors bled together and faded from age."
icon_state="poster1"
/datum/poster/tg_2
/decl/poster/tg_2
name = "Atmosia Declaration of Independence"
desc = "A relic of a failed rebellion"
icon_state="poster2"
/datum/poster/tg_3
/decl/poster/tg_3
name = "Fun Police"
desc = "A poster condemning the station's security forces."
icon_state="poster3"
/datum/poster/tg_4
/decl/poster/tg_4
name = "Lusty Xeno"
desc = "A heretical poster depicting the titular star of an equally heretical book."
icon_state="poster4"
/datum/poster/tg_5
/decl/poster/tg_5
name = "Mercenary Recruitment Poster"
desc = "See the galaxy! Shatter corrupt megacorporations! Join today!"
icon_state="poster5"
/datum/poster/tg_6
/decl/poster/tg_6
name = "Clown"
desc = "Honk."
icon_state="poster6"
/datum/poster/tg_7
/decl/poster/tg_7
name = "Smoke"
desc = "A poster depicting a carton of cigarettes."
icon_state="poster7"
/datum/poster/tg_8
/decl/poster/tg_8
name = "Grey Tide"
desc = "A rebellious poster symbolizing assistant solidarity."
icon_state="poster8"
/datum/poster/tg_9
/decl/poster/tg_9
name = "Missing Gloves"
desc = "This poster is about the uproar that followed NanoTrasen's financial cuts towards insulated-glove purchases."
icon_state="poster9"
/datum/poster/tg_10
/decl/poster/tg_10
name = "Hacking Guide"
desc = "This poster details the internal workings of the common NanoTrasen airlock."
icon_state="poster10"

View File

@@ -77,7 +77,7 @@
/obj/item/weapon/lipstick/random,
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/corncob,
/obj/item/weapon/contraband/poster/custom,
/obj/item/poster/custom,
/obj/item/weapon/book/manual/barman_recipes,
/obj/item/weapon/book/manual/chef_recipes,
/obj/item/weapon/bikehorn,

View File

@@ -259,10 +259,8 @@
spawn_nothing_percentage = 50
/obj/random/contraband/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(8);/obj/item/weapon/haircomb,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(10);/obj/item/weapon/contraband/poster/custom,
prob(4);/obj/item/weapon/material/butterfly,
prob(6);/obj/item/weapon/material/butterflyblade,
prob(6);/obj/item/weapon/material/butterflyhandle,

View File

@@ -195,7 +195,7 @@
if(prob(50))
starts_with += /obj/item/weapon/storage/backpack/dufflebag/sec
if(prob(30))
starts_with += /obj/item/weapon/contraband/poster/nanotrasen
starts_with += /obj/item/poster/nanotrasen
return ..()
/obj/structure/closet/secure_closet/security/cargo/Initialize()
@@ -269,11 +269,11 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
anchored = 1
starts_with = list(
/obj/item/weapon/contraband/poster/nanotrasen,
/obj/item/weapon/contraband/poster/nanotrasen,
/obj/item/weapon/contraband/poster/nanotrasen,
/obj/item/weapon/contraband/poster/nanotrasen,
/obj/item/weapon/contraband/poster/nanotrasen)
/obj/item/poster/nanotrasen,
/obj/item/poster/nanotrasen,
/obj/item/poster/nanotrasen,
/obj/item/poster/nanotrasen,
/obj/item/poster/nanotrasen)
/obj/structure/closet/secure_closet/courtroom
name = "courtroom locker"

View File

@@ -253,8 +253,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/stack/rods{amount = 5},
/obj/item/stack/material/steel{amount = 5},
/obj/item/stack/material/cardboard{amount = 5},
/obj/item/weapon/contraband/poster,
/obj/item/weapon/contraband/poster/custom,
/obj/item/poster,
/obj/item/poster/custom,
/obj/item/weapon/newspaper,
/obj/item/weapon/paper/crumpled,
/obj/item/weapon/paper/crumpled/bloody

View File

@@ -21,6 +21,7 @@ var/global/datum/global_init/init = new ()
error_log = file("[log_path]-error.log")
debug_log = file("[log_path]-debug.log")
debug_log << "[log_end]\n[log_end]\nStarting up. [time_stamp()][log_end]\n---------------------[log_end]"
decls_repository = new()
load_configuration()
makeDatumRefLists()

View File

@@ -482,7 +482,7 @@
"jn" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"jo" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"jp" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
"jq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"jq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/poster,/obj/item/poster,/obj/item/poster,/obj/item/poster,/obj/item/poster,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"jr" = (/obj/machinery/door/window/northleft{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"js" = (/obj/structure/table/steel_reinforced,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"jt" = (/obj/machinery/door/window/northright{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -999,7 +999,7 @@
"tk" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"tl" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"tm" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"tn" = (/obj/structure/sign/poster{poster_type = "/datum/poster/bay_50"; pixel_x = -32},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"tn" = (/obj/structure/sign/poster{poster_type = "/decl/poster/bay_50"; pixel_x = -32},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"to" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/obj/item/weapon/reagent_containers/food/snacks/tastybread,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"tp" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space)
"tq" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1331; id_tag = "merc_base"; pixel_x = -25; pixel_y = -5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership)

View File

@@ -1304,7 +1304,7 @@
"zd" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"ze" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/under/cheongsam,/obj/item/clothing/under/hosformalmale,/obj/item/clothing/under/hosformalfem,/obj/item/clothing/under/harness,/obj/item/clothing/under/gladiator,/obj/item/clothing/under/ert,/obj/item/clothing/under/schoolgirl,/obj/item/clothing/under/redcoat,/obj/item/clothing/under/sexymime,/obj/item/clothing/under/sexyclown,/obj/item/clothing/under/soviet,/obj/item/clothing/under/space,/obj/item/clothing/under/swimsuit/stripper/mankini,/obj/item/clothing/under/suit_jacket/female,/obj/item/clothing/under/rank/psych/turtleneck,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/tacticool,/obj/item/clothing/under/syndicate/tacticool,/obj/item/clothing/under/dress/sailordress,/obj/item/clothing/under/dress/redeveninggown,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/under/dress/blacktango,/obj/item/clothing/under/dress/blacktango/alt,/obj/item/clothing/under/dress/dress_orange,/obj/item/clothing/under/dress/maid/janitor,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"zf" = (/obj/machinery/door/airlock/glass{name = "Dock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"zg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"zg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/poster,/obj/item/poster,/obj/item/poster,/obj/item/poster,/obj/item/poster,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"zh" = (/obj/machinery/door/window/northleft{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"zi" = (/obj/structure/table/steel_reinforced,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"zj" = (/obj/machinery/door/window/northright{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)

View File

@@ -92,7 +92,7 @@
"bN" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bO" = (/obj/structure/table/rack,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle)
"bP" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bQ" = (/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bQ" = (/obj/item/poster,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bR" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
"bS" = (/obj/structure/sign/biohazard,/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
"bT" = (/obj/item/tape/medical{icon_state = "tape_v_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
@@ -144,3 +144,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}

View File

@@ -19,7 +19,7 @@
"s" = (/obj/structure/bed/chair/comfy/beige{icon_state = "armchair_preview"; dir = 1},/turf/simulated/floor/carpet,/area/submap/Drugd)
"t" = (/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
"u" = (/obj/random/junk,/turf/simulated/floor,/area/submap/Drugd)
"v" = (/obj/structure/closet/cabinet,/obj/item/weapon/contraband/poster,/turf/simulated/floor/carpet,/area/submap/Drugd)
"v" = (/obj/structure/closet/cabinet,/obj/item/poster,/turf/simulated/floor/carpet,/area/submap/Drugd)
"w" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet,/area/submap/Drugd)
"x" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/carpet,/area/submap/Drugd)
"y" = (/obj/structure/bed/chair/comfy/beige,/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)

View File

@@ -943,7 +943,6 @@
#include "code\game\objects\effects\chem\foam.dm"
#include "code\game\objects\effects\chem\water.dm"
#include "code\game\objects\effects\decals\cleanable.dm"
#include "code\game\objects\effects\decals\contraband.dm"
#include "code\game\objects\effects\decals\crayon.dm"
#include "code\game\objects\effects\decals\misc.dm"
#include "code\game\objects\effects\decals\remains.dm"
@@ -956,6 +955,7 @@
#include "code\game\objects\effects\decals\Cleanable\tracks.dm"
#include "code\game\objects\effects\decals\posters\bs12.dm"
#include "code\game\objects\effects\decals\posters\polarisposters.dm"
#include "code\game\objects\effects\decals\posters\posters.dm"
#include "code\game\objects\effects\map_effects\beam_point.dm"
#include "code\game\objects\effects\map_effects\effect_emitter.dm"
#include "code\game\objects\effects\map_effects\map_effects.dm"