diff --git a/code/__defines/color.dm b/code/__defines/color.dm index 0cf687df09..e7afdf9121 100644 --- a/code/__defines/color.dm +++ b/code/__defines/color.dm @@ -128,6 +128,7 @@ #define WOOD_COLOR_BLACK "#332521" #define WOOD_COLOR_CHOCOLATE "#543c30" #define WOOD_COLOR_YELLOW "#e3994e" +#define WOOD_COLOR_FURNITURE "#824b28" #define GLASS_COLOR "#74c1ee" #define GLASS_COLOR_PHORON "#7c3a9a" diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index 69c81865c9..e62832167a 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -34,7 +34,7 @@ SUBSYSTEM_DEF(planets) // DO NOT CALL THIS DIRECTLY UNLESS IT'S IN INITIALIZE, // USE turf/simulated/proc/make_indoors() and -// tyrf/simulated/proc/make_outdoors() +// turf/simulated/proc/make_outdoors() /datum/controller/subsystem/planets/proc/addTurf(var/turf/T) if(z_to_planet.len >= T.z && z_to_planet[T.z]) var/datum/planet/P = z_to_planet[T.z] @@ -42,7 +42,7 @@ SUBSYSTEM_DEF(planets) return if(istype(T, /turf/unsimulated/wall/planetary)) P.planet_walls += T - else if(istype(T, /turf/simulated) && T.outdoors == OUTDOORS_YES) + else if(istype(T, /turf/simulated) && T.is_outdoors()) P.planet_floors += T T.vis_contents |= P.weather_holder.visuals T.vis_contents |= P.weather_holder.special_visuals diff --git a/code/datums/outfits/jobs/command.dm b/code/datums/outfits/jobs/command.dm index 18b198a3c2..d8a74f925d 100644 --- a/code/datums/outfits/jobs/command.dm +++ b/code/datums/outfits/jobs/command.dm @@ -28,14 +28,14 @@ uniform = /obj/item/clothing/under/rank/head_of_personnel l_ear = /obj/item/device/radio/headset/heads/hop shoes = /obj/item/clothing/shoes/brown - id_type = /obj/item/weapon/card/id/silver + id_type = /obj/item/weapon/card/id/silver/hop pda_type = /obj/item/device/pda/heads/hop /decl/hierarchy/outfit/job/secretary name = OUTFIT_JOB_NAME("Command Secretary") l_ear = /obj/item/device/radio/headset/headset_com shoes = /obj/item/clothing/shoes/brown - id_type = /obj/item/weapon/card/id/silver + id_type = /obj/item/weapon/card/id/silver/secretary pda_type = /obj/item/device/pda/heads r_hand = /obj/item/weapon/clipboard diff --git a/code/game/gamemodes/technomancer/equipment.dm b/code/game/gamemodes/technomancer/equipment.dm index 940e31f3cd..b96895a644 100644 --- a/code/game/gamemodes/technomancer/equipment.dm +++ b/code/game/gamemodes/technomancer/equipment.dm @@ -208,10 +208,4 @@ name = "Spyglass" desc = "A mundane spyglass, it may prove useful to those who wish to scout ahead, or fight from an extreme range." cost = 100 - obj_path = /obj/item/device/binoculars/spyglass - -/obj/item/device/binoculars/spyglass - name = "spyglass" - desc = "It's a hand-held telescope, useful for star-gazing, peeping, and recon." - icon_state = "spyglass" - slot_flags = SLOT_BELT + obj_path = /obj/item/device/binoculars/spyglass \ No newline at end of file diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index c963449a59..649fa3bc43 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -10,8 +10,8 @@ name = "space jukebox" desc = "Filled with songs both past and present!" icon = 'icons/obj/jukebox.dmi' - icon_state = "jukebox2-nopower" - var/state_base = "jukebox2" + icon_state = "jukebox-nopower" + var/state_base = "jukebox" anchored = 1 density = 1 power_channel = EQUIP diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index 6933031c5f..451cd14e57 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -334,6 +334,7 @@ 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!" + listing_name = "Tourism - Mars" /decl/poster/bay_57 icon_state="bsposter57" diff --git a/code/game/objects/effects/decals/posters/polarisposters.dm b/code/game/objects/effects/decals/posters/polarisposters.dm index 3d18d0cc4f..4cd60867cf 100644 --- a/code/game/objects/effects/decals/posters/polarisposters.dm +++ b/code/game/objects/effects/decals/posters/polarisposters.dm @@ -327,4 +327,336 @@ 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." - listing_name = "Safety - Corporate Regulations" \ No newline at end of file + listing_name = "Safety - Corporate Regulations" + +/decl/poster/nanotrasen/vore_17 + icon_state = "dwposter4" + name = "We Know Genes" + desc = "A poster purporting the infallibility of NanoTrasen's in-house forensics department." + listing_name = "Safety - Forensics" + +//Selective VORE ports + +/decl/poster/vore_14 + icon_state = "dwposter1" + name = "WANTED: PIRATES" + desc = "A poster bringing awareness to the distinguishing uniform of a known band of criminals operating in the Vir/Gavel region." + listing_name = "PSA - Pirate Faction" + +/decl/poster/vore_16 + icon_state = "dwposter3" + name = "Productivity implant" + desc = "A poster describing the benefits of Ward-Takahashi brand 'Energy Plus' implants on alertness and productivity in work and leisure." + listing_name = "Ad - Implants" + +/decl/poster/vore_18 + icon_state = "dwposter5" + name = "KAT" + desc = "A promotional poster for popular exonet show 'Kat-Kat Korner'." + listing_name = "Ad - Kat-Kat Korner" + +/decl/poster/vore_19 + icon_state = "dwposter6" + name = "Abstract Art" + desc = "You wish you had the source for this art, but it doesn't seem like it was installed correctly." + listing_name = "Art - Textures" + +/decl/poster/vore_21 + icon_state = "dwposter8" + name = "GPA" + desc = "A pretentious advertisement for the discontinued drink 'Galactic Panic Attack'" + listing_name = "Ad - Energy Drink" + +/decl/poster/vore_22 + icon_state = "dwposter9" + name = "Rope" + desc = "A poster depicting proper pit-traversal gear." + listing_name = "Safety - Ropes" + +/decl/poster/vore_23 + icon_state = "dwposter10" + name = "Visit Luna" + desc = "Part of a tourism campaign from the Visit Space Society encouraging people to visit Earth's moon and seat of the SCG, Luna." + listing_name = "Tourism - Luna" + +/decl/poster/vore_24 + icon_state = "dwposter11" + name = "Secgun" + desc = "A striking, wordless advertisement for a Lawson Arms law enforcement firearm. Largely ineffective for those not already familiar with the product line." + listing_name = "Ad - Lawson Arms" + +/decl/poster/vore_27 + icon_state = "sbsposter16" + name = "Borgar" + desc = "Don't have food at home? Feel like more than just a black coffee? Try the Borgar Burger, available everywhere." + listing_name = "Ad - Burger" + +/decl/poster/vore_29 + icon_state = "sbsposter18" + name = "Perdition" + desc = "You get the feeling that whomever made this intended for you to feel very differently than you do when you look at it." + listing_name = "Art - Abstract Lines" + +/decl/poster/vore_31 + icon_state = "tgposter1" + name = "Space Cube" + desc = "It depicts a curious cube!" + listing_name = "Art - Cube" + +/decl/poster/vore_35 + icon_state = "tgposter5" + name = "C-20R" + desc = "An ad for the C-20R sub-machinegun, produced by Scarborough Arms on Titan, a company notable for resisting trans-stellar acquisition efforts for over 50 years." + listing_name = "Ad - C-20R SMG" + +/decl/poster/vore_36 + icon_state = "tgposter6" + name = "Have a Puff" + desc = "A crudely rolled joint is depicted, though it is unclear exactly what is being advertised beyond the broad concept of marijuana." + listing_name = "Ad - Weed" + +/decl/poster/vore_37 + icon_state = "tgposter7" + name = "Revolver" + desc = "A Hedberg-Hammarstrom revolver lays in wait. The poster claims this model is practically indestructable." + listing_name = "Ad - Revolver" + +/decl/poster/vore_38 + icon_state = "tgposter8" + name = "Join Today!" + desc = "A stylish dark skinned individual in dark clothes and an armored vest looks at you intensely! Join Hedberg-Hammarstrom private security today!" + listing_name = "Recruitment - Hedberg-Hammarstrom" + +/decl/poster/vore_39 + icon_state = "tgposter9" + name = "Dress for Success" + desc = "This appears to be a movie poster. It's probably about spies or time travelling robots or both." + listing_name = "Ad - Dress for Success" + +/decl/poster/vore_40 + icon_state = "tgposter10" + name = "E-SWORD" + desc = "Energy swords are a fashion statement AND a deadly weapon all in one! This poster depicts a lot of them!" + listing_name = "Ad - Energy Swords" + +/decl/poster/vore_41 + icon_state = "tgposter11" + name = "Red Rum" + desc = "A poster advertizing Red Rum, a brand of Rum. Notably, it insists that it will not make your finger talk to you." + listing_name = "Ad - Red Rum" + +/decl/poster/vore_42 + icon_state = "tgposter12" + name = "WT64K" + desc = "This poster doesn't specify any details about the model of Ward-Takahashi personal terminal being advertised, but it looks expensive!" + listing_name = "Ad - Personal Terminal" + +/decl/poster/vore_43 + icon_state = "tgposter13" + name = "PUNCH SHIT" + desc = "Prominently featuring gleaming, pristine brass knuckles, and encouraging you to PUNCH SHIT." + listing_name = "Ad - Brass Knuckles" + +/decl/poster/vore_44 + icon_state = "tgposter14" + name = "GRIFF IT ALL" + desc = "A poster from a popular movie series, featuring a lovable anti-hero. The series is known for being quite violent and occasionally gruesome. The Griffin's method of dealing with their problems is typically unconventional, and almost always ends in corpses, but that's why people love him." + listing_name = "Ad - The Griffin" + +/decl/poster/vore_45 + icon_state = "tgposter15" + name = "LIZ LOVES YOU" + desc = "An advertisement for a short-lived pre-school children's show starring a stylized Unathi. The attempt to 'reform' the public image of Unathi with a cuddly mascot character was seen as at least a little insensitive by Unathi and past war veterans alike." + listing_name = "Ad - Liz Loves You" + +/decl/poster/vore_46 + icon_state = "tgposter16" + name = "FREE DRONE" + desc = "A poster from something of a cult classic movie. It features a drone breaking free from its laws. Despite looking ominous, behind its cold hard exterior was is a heart of gold. The movie was briefly banned, only fuelling its cult status." + listing_name = "Ad - Free Drone" + +/decl/poster/vore_50 + icon_state = "tgposter20" + name = "The Cloud" + desc = "It insists that storing all of your data in a cloud is secure and has absolutely no faults. But what will you do when the cloud blows away?" + listing_name = "Ad - Cloud Data" + +/decl/poster/vore_51 + icon_state = "tgposter21" + name = "Star-Kist" + desc = "An advertisement for Star-Kist brand soda. The can appears to be sweating with anticipation to being opened, while the gleam of the star shines off of the can's gleaming surface. The fizzy deliciosity just waiting for you to unleash it." + listing_name = "Ad - Star-Kist" + +/decl/poster/vore_52 + icon_state = "tgposter22" + name = "Space Cola" + desc = "An advertisement for Space Cola brand soda. It's rather plain, as if whoever made it expects that you already know and love Space Cola. The can is displayed in front of a simple background. It is shiny and just waiting for someone to grab it." + listing_name = "Ad - Space Cola" + +/decl/poster/vore_53 + icon_state = "tgposter23" + name = "Space Mountain Wind" + desc = "An advertisement for Space Mountain Wind. This is from their contravercial marketing campaign where they removed most of the letters from the name so that actually reading it is sort of incomprehensible. The can appears massive next to the mountain of some alien world. The poster looks adventurous, while the can itself sort of blends in with the color scheme of the overall setting." + listing_name = "Ad - Space Mountain Wind" + +/decl/poster/vore_54 + icon_state = "tgposter24" + name = "KUDZU" + desc = "A movie poster with an ominous font, and creeping space vines stretching across it. It looks like it was probably a horror film, but actually it was a love story about a man and his pet plant from an alien world." + listing_name = "Ad - Kudzu" + +/decl/poster/vore_55 + icon_state = "tgposter25" + name = "BUMBA" + desc = "A movie poster that looks like it is probably one of those historical war movies. It features three stoic looking soldiers in sepia. They are covered in grime and clearly marching off toward the viewer." + listing_name = "Ad - Bumba" + +/decl/poster/vore_57 + icon_state = "tgposter27" + name = "FREE 2559" + desc = "A movie poster featuring an ominous looking radio key. It looks pretty retro, hinting that this was probably a sci-fi movie long ago." + listing_name = "Ad - Free 2559" + +/decl/poster/vore_58 + icon_state = "tgposter28" + name = "Knights of the Fallen Star" + desc = "A movie poster featuring three characters posed at different angles across the poster. The movie is widely considered a terrible adaption of a TV classic." + listing_name = "Ad - Knights of the Fallen Star" + +/decl/poster/vore_59 + icon_state = "tgposter29" + name = "THEY ARE REAL" + desc = "This poster insists that aliens are in fact real, and lists off some 'proof' meant to change minds. It seems to be an ironic reprint from before first contact, but even then its claims feel somehow doubtful." + listing_name = "PSA - Aliens" + +/decl/poster/vore_69 + icon_state = "tgposter39" + name = "LOVE!" + desc = "The stunning visage of a handsome individual stares back at you with all of the love and adorement that you could desire. This poster warms your heart and makes you feel less alone somehow." + listing_name = "Pin-up - Ian" + +/decl/poster/vore_71 + icon_state = "tgposter41" + name = "Arachibutyrophobia" + desc = "An artist's depiction of a pink haired girl laying on the sand, with waves washing around the top of her hair. She stares up at you with a mysterious expression... This appears to be some kind of advertisement for an independent movie, but you have no idea what it would be about." + listing_name = "Ad - Arachibutyrophobia" + +/decl/poster/vore_74 + icon_state = "tgposter44" + name = "WORK FOR A FUTURE" + desc = "A poster encouraging you to work for the future you want to see, or any other future really." + listing_name = "PSA - Future" + +/decl/poster/vore_75 + icon_state = "tgposter45" + name = "Hats" + desc = "A stylish set of differently colored hats with differently colored backgrounds. You can intuit a lot about the person who made this." + listing_name = "Art - Hats" + +/decl/poster/vore_78 + icon_state = "tgposter47" + name = "RayZar" + desc = "A RayZar weapon advertisement, the sleek lines and cool glow of the RayZar Mk60 EW Halicon stand out against the plain white background. It looks so futuristic, and even though this is clearly a photograph, it hardly looks real, like something from a videogame." + listing_name = "Ad - RayZar" + +/decl/poster/vore_79 + icon_state = "tgposter48" + name = "FOAM FORCE" + desc = "An advertisement for the Foam Force line of toys! It's brightly colored and clearly made of plastic, but the desire to shoot your friends is strong when these are around." + listing_name = "Ad - Foam Force" + +/decl/poster/vore_80 + icon_state = "tgposter49" + name = "COHIBA" + desc = "An advertisement for a cigar. It looks almost too real, you can see the hyper detailed creases in the cigar's wrapping, and the golden label shines in the light. You can almost smell the smokey aroma in the air." + listing_name = "Ad - Cigars" + +/decl/poster/vore_81 + icon_state = "tgposter50" + name = "SCIENCE" + desc = "A retro advertisement for the Einstein Engines corporation, back when they were cool." + listing_name = "Ad - Einstein Engines" + +/decl/poster/vore_82 + icon_state = "tgposter51" + name = "Bowl of Fruit" + desc = "The recreation of a painting of a bowl of fruit. It looks close to photorealistic, but was clearly originally done in oil paints. The red color of the fruit is said to be a reflection of the anger in the artist's soul." + listing_name = "Art - Fruit Bowl" + +/decl/poster/vore_83 + icon_state = "tgposter52" + name = "ThinkTronic PDA-1000" + desc = "An advertisement for the Thinktronic PDA-1000. It's not clear if this is just a very old ad, or one celebrating retro technology, but the PDA depicted looks at least a century old." + listing_name = "Ad - ThinkTronic" + +/decl/poster/vore_84 + icon_state = "tgposter53" + name = "ENLIST" + desc = "An enlistment advertisement for Stealth Assault Enterprises. The figure depicted is clad in an advanced looking spacesuit, and their face is nearly totally obscured by their visor, except for the hard eyes of a very cool person glaring out at you from within." + listing_name = "Recruitment - SAARE" + +/decl/poster/vore_85 + icon_state = "tgposter54" + name = "NANO MICHI" + desc = "An advertisement for a brand of tapes to be used with a universal recorder. There's very small print at the bottom that indicates that the universal recorder is not included with the purchase of tapes." + listing_name = "Ad - Nano Michi Tapes" + +/decl/poster/vore_86 + icon_state = "tgposter55" + name = "12 GAUGE" + desc = "An advertisement for a particular type of Hephaestus Industries shotgun shells. There are several shells stood up in front of a plain background. It is not clear just what they are standing on, but they look like they could fall down at any moment, and with the size of the poster, they appear to be massive." + listing_name = "Ad - Shotgun Shells" + +/decl/poster/vore_87 + icon_state = "tgposter56" + name = "CLASS" + desc = "An advertisement for a bar aboard the NCS Northern Star. The poster seems to indicate that drinking out of a glass like the one depicted will increase your status in society. It's not clear quite how, but the glass does look very nice. There's an olive in it." + listing_name = "Ad - Bar" + +/decl/poster/vore_90 + icon_state = "tgposter59" + name = "Cannister" + desc = "This poster seems to be advertising a kind of bulk gas cannister. The can itself looks a little dated, so maybe this isn't the most modern of posters. Whatever it was, Aether Atmospherics made them, but that's the only information provided. There's not even any benefits listed or anything. It's just a picture of an old air cannister." + listing_name = "Ad - Air Cannister" + +/decl/poster/vore_91 + icon_state = "tgposter60" + name = "DICK GUM" + desc = "This appears to be a poster relating to a murder mystery novel. There is a pale man in a flat brimmed hat, who appears to be investigating the corpse of a mouse. An air of intrigue hangs about the poster." + listing_name = "Ad - Murder Mystery" + +/decl/poster/vore_93 + icon_state = "tgposter62" + name = "Pin the Tail on the Corgi" + desc = "A concerned corgi looks at you as it stands and waits, a target overlays its rear end, seemingly waiting for someone to attatch a tail to it, which, it seems to be missing." + listing_name = "Art - Pin the Tail" + +/decl/poster/vore_96 + icon_state = "bandposter" + name = "BAND" + desc = "A poster for a band, seemingly named 'BAND'. With a powerful looking hammer logo, it seems like this band must have a powerful sound!" + listing_name = "Ad - Band" + +/decl/poster/vore_98 + icon_state = "chairstvshowposter" + name = "CHAIRS" + desc = "A rather menacing looking Chair lurks in a dark room. This appears to relate to the show 'Chairs', a sensation that has been sweeping the galaxy for over two hundred seasons! The show has been able to maintain a cult audience through its entire life. It started as a medieval fantasy, but it has changed genres and main characters several times. Fans of the show insist that it is the best show, despite its somewhat incomprehensible plot." + listing_name = "Ad - Chairs" + +/decl/poster/vore_99 + icon_state = "susposter" + name = "SUS?" + desc = "A man in a spacesuit lurks near a wall. He doesn't appear to be doing his tasks... is he waiting for something? He seems rather suspicious..." + listing_name = "PSA - Suspicious Individual" + +/decl/poster/vore_100 + icon_state = "inthedarkposter" + name = "Stars in the Dark" + desc = "A depiction of some kind of constellation. It is ominously dark surrounding these lights, while the lights themselves are incredibly bright yellow. The pattern is striking and draws the eye, not unlike eyes watching you, it is hard not to stare. The poster seems almost to stare back." + listing_name = "Art - Stars" + +/decl/poster/vore_101 + icon_state = "cafejoanposter" + name = "Chat With Sally" + desc = "A poster depicting a familiar face readying to slurp a big mug of coffee. Thanks to a partnership with Kaleidoscope Cosmetics, the latest incarnation of Vir's 'Sally' chat-show host comes with the latest in cosmetic gene-mods! Or not, she's a drone." + listing_name = "Ad - Chat With Sally" diff --git a/code/game/objects/effects/decals/posters/posters.dm b/code/game/objects/effects/decals/posters/posters.dm index 8046cf439a..d770de0df3 100644 --- a/code/game/objects/effects/decals/posters/posters.dm +++ b/code/game/objects/effects/decals/posters/posters.dm @@ -28,7 +28,7 @@ else src.poster_decl = get_poster_decl(/decl/poster, FALSE) - name += " - No. [src.poster_decl.name]" + name += " - [src.poster_decl.name]" return ..() //Places the poster on a wall @@ -99,13 +99,14 @@ 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/list/decl/poster/posters = decls_repository.get_decls_of_type(/decl/poster) + for(var/option in posters) + options[posters[option].listing_name] = posters[option] 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]" + name = "rolled-up poly-poster - [src.poster_decl.name]" to_chat(M, "The poster is now: [choice].") @@ -203,4 +204,4 @@ // Non-Random Posters /obj/structure/sign/poster/custom - roll_type = /obj/item/poster/custom \ No newline at end of file + roll_type = /obj/item/poster/custom diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 3cebb3082b..b65085e65c 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -215,7 +215,7 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop if(!istype(candidate) || istype(candidate, /turf/simulated/sky)) safety-- continue - else if(candidate && !candidate.outdoors == OUTDOORS_YES) + else if(candidate && !candidate.is_outdoors()) safety-- continue else diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm index a971115ada..fd1725f4ff 100644 --- a/code/game/objects/items/devices/binoculars.dm +++ b/code/game/objects/items/devices/binoculars.dm @@ -1,15 +1,22 @@ + +//Binoculars /obj/item/device/binoculars + name = "binoculars" desc = "A pair of binoculars." + zoomdevicename = "eyepieces" icon_state = "binoculars" force = 5.0 - w_class = ITEMSIZE_SMALL throwforce = 5.0 throw_range = 15 throw_speed = 3 - //matter = list("metal" = 50,"glass" = 50) - - /obj/item/device/binoculars/attack_self(mob/user) zoom() + +//Spyglass +/obj/item/device/binoculars/spyglass + name = "spyglass" + desc = "A classic spyglass. Useful for star-gazing, peeping, and recon." + icon_state = "spyglass" + slot_flags = SLOT_BELT \ No newline at end of file diff --git a/code/game/objects/items/toys/mech_toys.dm b/code/game/objects/items/toys/mech_toys.dm index a49977c141..e093108519 100644 --- a/code/game/objects/items/toys/mech_toys.dm +++ b/code/game/objects/items/toys/mech_toys.dm @@ -2,7 +2,7 @@ * Mech toys (previously labeled prizes, but that's unintuitive) * Mech toy combat */ - + // Mech battle special attack types. #define SPECIAL_ATTACK_HEAL 1 #define SPECIAL_ATTACK_DAMAGE 2 @@ -18,7 +18,7 @@ drop_sound = 'sound/mecha/mechstep.ogg' description_info = "To engage in mech battles, hold this mech while clicking on another toy mech, or a player who is also holding a toy mech. You must be within 2 tiles (This allows you to battle across a table). Battles are entirely randomized, and mechs with higher health and special abilities have a better chance of winning." reach = 2 // So you can battle across the table! - + // Mech Battle Vars var/timer = 0 // Timer when it'll be off cooldown var/cooldown = 1.5 SECONDS // Cooldown between play sessions (and interactions) @@ -35,7 +35,7 @@ var/special_attack_cooldown = 0 // Current cooldown of their special attack var/wins = 0 // This mech's win count in combat var/losses = 0 // ...And their loss count in combat - + /obj/item/toy/mecha/Initialize() . = ..() desc = "Mini-Mecha action figure! Collect them all! Attack your friends or another mech with one to initiate epic mech combat! [desc]." @@ -59,7 +59,7 @@ return 0 //not in range and not telekinetic /** - * this proc combines "sleep" while also checking for if the battle should continue + * this proc combines "sleep" while also checking for if the battle should continue * * this goes through some of the checks - the toys need to be next to each other to fight! * if it's player vs themself: They need to be able to "control" both mechs (either must be adjacent or using TK). @@ -114,7 +114,7 @@ // If all that is good, then we can sleep peacefully. sleep(delay) return TRUE - + //all credit to skasi for toy mech fun ideas /obj/item/toy/mecha/attack_self(mob/user) if(timer < world.time) @@ -132,15 +132,15 @@ attack_self(user) /** - * If you attack a mech with a mech, initiate combat between them + * If you attack a mech with a mech, initiate combat between them */ /obj/item/toy/mecha/attackby(obj/item/user_toy, mob/living/user) - if(istype(user_toy, /obj/item/toy/mecha)) + if(istype(user_toy, /obj/item/toy/mecha)) var/obj/item/toy/mecha/M = user_toy if(check_battle_start(user, M)) mecha_brawl(M, user) ..() - + /** * Attack is called from the user's toy, aimed at target(another human), checking for target's toy. */ @@ -204,7 +204,7 @@ if(in_combat) to_chat(user, "[src] is in battle, let it finish first.") return - + var/datum/gender/T = gender_datums[user.get_visible_gender()] user.visible_message("[user] begins a fight [T.His] can't win with [src]! It looks like [T.His] trying to commit suicide!") @@ -212,7 +212,7 @@ sleep(1.5 SECONDS) for(var/i in 1 to 4) switch(i) - if(1, 3) + if(1, 3) SpinAnimation(5, 0) playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) user.adjustBruteLoss(25) @@ -285,9 +285,9 @@ sleep(1 SECONDS) //--THE BATTLE BEGINS-- - while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH) + while(combat_health > 0 && attacker.combat_health > 0 && battle_length < MAX_BATTLE_LENGTH) if(!combat_sleep(0.5 SECONDS, attacker, attacker_controller, opponent)) //combat_sleep checks everything we need to have checked for combat to continue - break + break //before we do anything - deal with charged attacks if(special_attack_charged) @@ -313,7 +313,7 @@ attacker.special_attack_charged = TRUE attacker_controller.visible_message(" [attacker] begins charging its special attack!! ", \ " You begin charging [attacker]'s special attack! ") - else //just attack + else //just attack attacker.SpinAnimation(5, 0) playsound(attacker, 'sound/mecha/mechstep.ogg', 30, TRUE) combat_health-- @@ -366,7 +366,7 @@ special_attack_charged = TRUE src_controller.visible_message(" [src] begins charging its special attack!! ", \ " You begin charging [src]'s special attack! ") - else //just attack + else //just attack SpinAnimation(5, 0) playsound(src, 'sound/mecha/mechstep.ogg', 30, TRUE) attacker.combat_health-- @@ -377,12 +377,12 @@ attacker.combat_health-- playsound(attacker, 'sound/effects/meteorimpact.ogg', 20, TRUE) src_controller.visible_message(" ...and lands a CRIPPLING BLOW! ", \ - " ...and you land a CRIPPLING blow on [attacker]! ", null) + " ...and you land a CRIPPLING blow on [attacker]! ", null) else attacker_controller.visible_message(" [src] and [attacker] stand around awkwardly.", \ - " You don't know what to do next.") + " You don't know what to do next.") - battle_length++ + battle_length++ sleep(0.5 SECONDS) /// Lines chosen for the winning mech @@ -391,7 +391,7 @@ if(attacker.combat_health <= 0 && combat_health <= 0) //both lose playsound(src, 'sound/machines/warning-buzzer.ogg', 20, TRUE) attacker_controller.visible_message(" MUTUALLY ASSURED DESTRUCTION!! [src] and [attacker] both end up destroyed!", \ - " Both [src] and [attacker] are destroyed!") + " Both [src] and [attacker] are destroyed!") else if(attacker.combat_health <= 0) //src wins wins++ attacker.losses++ @@ -403,7 +403,7 @@ " You raise up [src] victoriously over [attacker]!") else if (combat_health <= 0) //attacker wins attacker.wins++ - losses++ + losses++ playsound(src, 'sound/effects/light_flicker.ogg', 20, TRUE) src_controller.visible_message(" [src] collapses!", \ " [src] collapses!", null) @@ -418,7 +418,7 @@ in_combat = FALSE attacker.in_combat = FALSE - combat_health = max_combat_health + combat_health = max_combat_health attacker.combat_health = attacker.max_combat_health return @@ -426,49 +426,49 @@ /** * This proc checks if a battle can be initiated between src and attacker. * - * Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and + * Both SRC and attacker (if attacker is included) timers are checked if they're on cooldown, and * both SRC and attacker (if attacker is included) are checked if they are in combat already. * If any of the above are true, the proc returns FALSE and sends a message to user (and target, if included) otherwise, it returns TRUE * Arguments: * * user: the user who is initiating the battle - * * attacker: optional arg for checking two mechs at once + * * attacker: optional arg for checking two mechs at once * * target: optional arg used in Mech PvP battles (if used, attacker is target's toy) */ -/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target) - var/datum/gender/T +/obj/item/toy/mecha/proc/check_battle_start(mob/living/carbon/user, obj/item/toy/mecha/attacker, mob/living/carbon/target) + var/datum/gender/T if(target) T = gender_datums[target.get_visible_gender()] // Doing this because Polaris Code has shitty gender datums and it's clunkier than FUCK. if(attacker && attacker.in_combat) to_chat(user, "[target ? T.His : "Your" ] [attacker.name] is in combat.") - if(target) + if(target) to_chat(target, "Your [attacker.name] is in combat.") - return FALSE + return FALSE if(in_combat) to_chat(user, "Your [name] is in combat.") - if(target) + if(target) to_chat(target, "[T.His] [name] is in combat.") - return FALSE + return FALSE if(attacker && attacker.timer > world.time) to_chat(user, "[target?T.His : "Your" ] [attacker.name] isn't ready for battle.") - if(target) + if(target) to_chat(target, "Your [attacker.name] isn't ready for battle.") - return FALSE + return FALSE if(timer > world.time) to_chat(user, "Your [name] isn't ready for battle.") - if(target) + if(target) to_chat(target, "[T.His] [name] isn't ready for battle.") - return FALSE + return FALSE return TRUE /** - * Processes any special attack moves that happen in the battle (called in the mechaBattle proc). + * Processes any special attack moves that happen in the battle (called in the mechaBattle proc). * * Makes the toy shout their special attack cry and updates its cooldown. Then, does the special attack. * Arguments: * * victim - the toy being hit by the special move */ -/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim) +/obj/item/toy/mecha/proc/special_attack_move(obj/item/toy/mecha/victim) visible_message(special_attack_cry + "!!") special_attack_charged = FALSE @@ -491,15 +491,15 @@ visible_message("I FORGOT MY SPECIAL ATTACK...") /** - * Base proc for 'other' special attack moves. + * Base proc for 'other' special attack moves. * - * This one is only for inheritance, each mech with an 'other' type move has their procs below. + * This one is only for inheritance, each mech with an 'other' type move has their procs below. * Arguments: * * victim - the toy being hit by the super special move (doesn't necessarily need to be used) */ -/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim) +/obj/item/toy/mecha/proc/super_special_attack(obj/item/toy/mecha/victim) visible_message(" [src] does a cool flip.") - + /obj/random/mech_toy name = "Random Mech Toy" desc = "This is a random mech toy." @@ -510,14 +510,22 @@ return pick(typesof(/obj/item/toy/mecha)) /obj/item/toy/mecha/ripley - name = "toy ripley" + name = "toy Ripley MK-I" desc = "Mini-Mecha action figure! Collect them all! 1/11." max_combat_health = 4 // 200 integrity special_attack_type = SPECIAL_ATTACK_DAMAGE special_attack_cry = "GIGA DRILL BREAK" +/obj/item/toy/mecha/ripleymkii + name = "toy Ripley MK-II" + desc = "Mini-Mecha action figure series 2! Collect them all! 1/6" + icon_state = "ripleymkiitoy" + max_combat_health = 5 //250 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "GIGA DRILL BREAK" + /obj/item/toy/mecha/fireripley - name = "toy firefighting ripley" + name = "toy firefighting Ripley" desc = "Mini-Mecha action figure! Collect them all! 2/11." icon_state = "fireripleytoy" max_combat_health = 5 // 250 integrity? @@ -525,15 +533,15 @@ special_attack_cry = "FIRE SHIELD" /obj/item/toy/mecha/deathripley - name = "toy deathsquad ripley" + name = "toy deathsquad Ripley" desc = "Mini-Mecha action figure! Collect them all! 3/11." icon_state = "deathripleytoy" max_combat_health = 5 // 250 integrity special_attack_type = SPECIAL_ATTACK_OTHER special_attack_type_message = "instantly destroys the opposing mech if its health is less than this mech's health." special_attack_cry = "KILLER CLAMP" - -/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim) + +/obj/item/toy/mecha/deathripley/super_special_attack(obj/item/toy/mecha/victim) playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 20, TRUE) if(victim.combat_health < combat_health) // Instantly kills the other mech if it's health is below our's. visible_message("EXECUTE!!") @@ -541,16 +549,31 @@ else // Otherwise, just deal one damage. victim.combat_health-- +/obj/item/toy/mecha/hauler + name = "toy Hauler" + desc = "Mini-Mecha action figure series 2! Collect them all! 2/6" + icon_state = "haulertoy" + max_combat_health = 3 //100 integrity? + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "HAUL AWAY" + /obj/item/toy/mecha/gygax - name = "toy gygax" + name = "toy Gygax" desc = "Mini-Mecha action figure! Collect them all! 4/11." icon_state = "gygaxtoy" max_combat_health = 5 // 250 integrity special_attack_type = SPECIAL_ATTACK_UTILITY special_attack_cry = "SUPER SERVOS" +/obj/item/toy/mecha/darkgygax + name = "toy Dark Gygax" + icon_state = "darkgygaxtoy" + max_combat_health = 6 //300 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "ULTRA SERVOS" + /obj/item/toy/mecha/durand - name = "toy durand" + name = "toy Durand" desc = "Mini-Mecha action figure! Collect them all! 5/11." icon_state = "durandtoy" max_combat_health = 6 // 400 integrity @@ -566,11 +589,19 @@ special_attack_type_message = "puts the opposing mech's special move on cooldown and heals this mech." special_attack_cry = "MEGA HORN" -/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim) +/obj/item/toy/mecha/honk/super_special_attack(obj/item/toy/mecha/victim) playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 20, TRUE) victim.special_attack_cooldown += 3 // Adds cooldown to the other mech and gives a minor self heal combat_health++ +/obj/item/toy/mecha/darkhonk + name = "toy Dark H.O.N.K." + desc = "Mini-Mecha action figure series 2! Collect them all! 3/6" + icon_state = "darkhonktoy" + max_combat_health = 5 //300 integrity + special_attack_type = SPECIAL_ATTACK_DAMAGE + special_attack_cry = "BOMBANANA SPREE" + /obj/item/toy/mecha/marauder name = "toy marauder" desc = "Mini-Mecha action figure! Collect them all! 7/11." @@ -611,10 +642,17 @@ special_attack_type = SPECIAL_ATTACK_UTILITY special_attack_cry = "NO-CLIP" -/* // TG-Station Added toys, commenting these out until I port 'em later. +/obj/item/toy/mecha/savannahivanov + name = "toy Savannah-Ivanov" + desc = "Mini-Mecha action figure series 2! Collect them all! 4/6" + icon_state = "savannahivanovtoy" + max_combat_health = 7 //450 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "SKYFALL!! IVANOV STRIKE" + /obj/item/toy/mecha/reticence name = "toy Reticence" - desc = "12/13" + desc = "Mini-Mecha action figure series 2! Collect them all! 5/6" icon_state = "reticencetoy" quiet = TRUE max_combat_health = 4 //100 integrity @@ -622,19 +660,27 @@ special_attack_type_message = "has a lower cooldown than normal special moves, increases the opponent's cooldown, and deals damage." special_attack_cry = "*wave" -/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim) +/obj/item/toy/mecha/reticence/super_special_attack(obj/item/toy/mecha/victim) special_attack_cooldown-- //Has a lower cooldown... victim.special_attack_cooldown++ //and increases the opponent's cooldown by 1... victim.combat_health-- //and some free damage. /obj/item/toy/mecha/clarke name = "toy Clarke" - desc = "13/13" + desc = "Mini-Mecha action figure series 2! Collect them all! 6/6" icon_state = "clarketoy" max_combat_health = 4 //200 integrity special_attack_type = SPECIAL_ATTACK_UTILITY special_attack_cry = "ROLL OUT" -*/ + +/obj/item/toy/mecha/fivestars + name = "toy fivestars" + desc = "Micro-Mecho action series! Five stars!" + icon_state = "fivestarstoy" + max_combat_health = 4 //200 integrity + special_attack_type = SPECIAL_ATTACK_UTILITY + special_attack_cry = "ROLLING ON" + #undef SPECIAL_ATTACK_HEAL #undef SPECIAL_ATTACK_DAMAGE diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 9fc8d42d09..07017fb5d4 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -668,6 +668,82 @@ icon_state = "ert" toysay = "We're probably the good guys!" + +// Eris +/obj/item/toy/figure/un + name = "UN soldier figurine" + desc = "A FunFig 'History's Heroes and Curios' branded figurine of a United Nations soldier, adorned in their iconic 22nd century armor. There is still a price tag on the back of the base, six-hundred credits, people collect these things?" + icon_state = "unitednations" + toysay = "For unity!" + +/obj/item/toy/figure/selene + name = "Selene Federation figurine" + desc = "A FunFig 'History's Heroes and Curios' branded figurine, the basic olive drab a popular pick for many in the Selene Federation's rag-tag colonial militia. Farming accessories not included." + icon_state = "selene" + toysay = "We will not be shackled by Earth!" + +/obj/item/toy/figure/nock + name = "Nock acolyte figurine" + desc = "A FunFig 'Horrors Beyond' branded figurine, depicting a follower of the oft-maligned Nock religion. The sinister design doesn't do much to challenge perceptions of the group as a 'blood cult'." + icon_state = "acolyte" + toysay = "Praise the Outworlders, and be born anew!" + +/obj/item/toy/figure/carrion + name = "carrion figurine" + desc = "A FunFig 'Horrors Beyond' branded figurine depicting a grotesque head of flesh, the Human features seem almost underdeveloped, its skull bulging outwards, mouth agape with torn flesh. \ + Whoever made this certainly knew how to thin their paints." + icon_state = "carrion" + toysay = "Kill me!" + +/obj/item/toy/figure/zaddat + name = "Zaddat figurine" + desc = "A 'History's Heroes and Curios' branded figurine which attempts to depict a Zaddat prior to their species' genetic degradation and confinement to suits. It doesn't seem all that accurate." + icon_state = "zaddat" + toysay = "Recycle!" + +/obj/item/toy/figure/discovery + name = "Galactic Survey figurine" + desc = "A FunFig 'Discovery' branded figurine showcasing a member of the Galactic Survey Administration, wearing the typical safety-orange uniform of the branch." + icon_state = "discovery" + toysay = "No star is too far!" + +/obj/item/toy/figure/rooster + name = "rooster figurine" + desc = "A \"Space Vice\" brand figurine, there is no further manufacturer information. It's a man wearing a rooster mask, and a varsity jacket with the letter \"B\" emblazoned on the front." + icon_state = "rooster" + toysay = "Do you like hurting other people?" + +/obj/item/toy/figure/barking_dog + name = "barking dog figurine" + desc = "A FunFig 'Movie Madness IX'. A metal soldier with the mask of a hound stands upon the base, the plaque seems smeared with caked grime." + icon_state = "barking_dog" + toysay = "A dog barks on its master's orders, lest its pack runs astray. Whatever the task, the grim dog mask would tell you that your life was done." + +/obj/item/toy/figure/red_soldier + name = "red soldier figurine" + desc = "A curiously unbranded, cheap looking figurine of a red soldier fighting in the tides of war, their humanity hidden by a gas mask." + icon_state = "red_soldier" + toysay = "Why do we fight? To win the war, of course." + +/obj/item/toy/figure/tajaran + name = "Tajaran pioneer figurine" + desc = "A FunFig 'History's Heroes and Curios' branded figurine depicting a Tajaran in a rudimentary voidsuit typical of early space exploration efforts by the species." + icon_state = "tajaran" + toysay = "Meow!" + +/obj/item/toy/figure/shitcurity + name = "NanoTrasen officer figurine" + desc = "A figurine of a classic redshirt of 'Nanotrasen's finest' apparently produced by Hedberg-Hammarstrom. Their belly distends out into an obvious beer gut, revealing no form of manufacturer bias what-so-ever." + icon_state = "shitcurity" + toysay = "I joined just to kill people!" + +/obj/item/toy/figure/vir_patrolman + name = "SifGuard patrolman figurine" + desc = "A figurine depicting a sharply dressed SifGuard law enforcement patrolman with the acronym 'VGA' on their left shoulder and cap. Apparently produced by Hedberg-Hammarstrom." + icon_state = "vir_patrolman" + toysay = "Trust in us to keep your family safe!" + + /* * Plushies */ @@ -1181,6 +1257,11 @@ icon_state = "therapygreen" item_state = "egg3" // It's the green egg in items_left/righthand +/obj/structure/plushie/fumo + name = "Fumo" + desc = "A plushie of a....?." + icon_state = "fumoplushie" + phrase = "I just don't think about losing." //Toy cult sword /obj/item/toy/cultsword diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm index dcbc80b482..320b90a661 100644 --- a/code/game/objects/items/uav.dm +++ b/code/game/objects/items/uav.dm @@ -24,7 +24,7 @@ var/list/mob/living/masters // So you know which is which - var/nickname = "Generic Droan" + var/nickname = "Unnamed UAV" // Radial menu var/static/image/radial_pickup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_pickup") @@ -43,10 +43,10 @@ /obj/item/device/uav/Initialize() . = ..() - + if(!cell && cell_type) cell = new cell_type - + ion_trail = new /datum/effect/effect/system/ion_trail_follow() ion_trail.set_up(src) ion_trail.stop() @@ -69,7 +69,7 @@ "Toggle Power" = radial_power, "Pairing Mode" = radial_pair) var/choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) - + switch(choice) // Can pick up when off or packed if("Pick Up") @@ -98,7 +98,7 @@ playsound(src, 'sound/machines/buttonbeep.ogg', 50, 1) visible_message("[user] pairs [I] to [nickname]") toggle_pairing() - + else if(I.is_screwdriver() && cell) if(do_after(user, 3 SECONDS, src)) to_chat(user, "You remove [cell] into [nickname].") @@ -106,7 +106,7 @@ power_down() cell.forceMove(get_turf(src)) cell = null - + else if(istype(I, /obj/item/weapon/cell) && !cell) if(do_after(user, 3 SECONDS, src)) to_chat(user, "You insert [I] into [nickname].") @@ -166,7 +166,7 @@ playsound(src, 'sound/items/drop/metalboots.ogg', 75, 1) power_down() health -= initial(health)*0.25 //Lose 25% of your original health - + if(LAZYLEN(masters)) no_masters_time = 0 else if(no_masters_time++ > 50) @@ -232,7 +232,7 @@ /obj/item/device/uav/proc/power_down() if(state != UAV_ON) return - + state = UAV_OFF update_icon() stop_hover() diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index ea16a3be20..59f9fdb69e 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -15,24 +15,44 @@ edge = TRUE force_divisor = 0.1 // 6 when wielded with hardness 60 (steel) thrown_force_divisor = 0.25 // 5 when thrown with weight 20 (steel) - var/weakref/loaded //Weakref for currently loaded food object. + var/scoop_volume = 5 + var/loaded // Name for currently loaded food object. + var/loaded_color // Color for currently loaded food object. -/obj/item/weapon/material/kitchen/utensil/New() - ..() +/obj/item/weapon/material/kitchen/utensil/Initialize() + . = ..() if (prob(60)) src.pixel_y = rand(0, 4) - create_reagents(5) - return + create_reagents(scoop_volume) /obj/item/weapon/material/kitchen/utensil/update_icon() . = ..() cut_overlays() - var/obj/item/weapon/reagent_containers/food/snacks/eaten = loaded?.resolve() - if(eaten) + if(loaded) var/image/I = new(icon, "loadedfood") - I.color = eaten.filling_color + I.color = loaded_color add_overlay(I) +/obj/item/weapon/material/kitchen/utensil/proc/load_food(var/mob/user, var/obj/item/weapon/reagent_containers/food/snacks/loading) + if (reagents.total_volume > 0) + to_chat(user, SPAN_DANGER("There is already something on \the [src].")) + return + if (!loading?.reagents?.total_volume) + to_chat(user, SPAN_NOTICE("Nothing to scoop up in \the [loading]!")) + + + loaded = "\the [loading]" + user.visible_message( \ + "\The [user] scoops up some of [loaded] with \the [src]!", + SPAN_NOTICE("You scoop up some of [loaded] with \the [src]!") + ) + loading.bitecount++ + loading.reagents.trans_to_obj(src, min(loading.reagents.total_volume, scoop_volume)) + loaded_color = loading.filling_color + if (loading.reagents.total_volume <= 0) + qdel(loading) + update_icon() + /obj/item/weapon/material/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M)) return ..() @@ -46,19 +66,18 @@ return ..() if (loaded && reagents.total_volume > 0) - var/atom/movable/eaten = loaded?.resolve() reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - if(eaten) - if(M == user) - if(!M.can_eat(eaten)) - return - M.visible_message(SPAN_NOTICE("\The [user] eats some of \the [eaten] with \the [src].")) - else - user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!")) - if(!(M.can_force_feed(user, eaten) && do_mob(user, M, 5 SECONDS))) - return - M.visible_message(SPAN_NOTICE("\The [user] feeds some of \the [eaten] to \the [M] with \the [src].")) - playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1) + if(M == user) + if(!M.can_eat(loaded)) + return + M.visible_message("\The [user] eats some of [loaded] with \the [src].") + else + user.visible_message(SPAN_WARNING("\The [user] begins to feed \the [M]!")) + if(!(M.can_force_feed(user, loaded) && do_mob(user, M, 5 SECONDS))) + return + M.visible_message("\The [user] feeds some of [loaded] to \the [M] with \the [src].") + playsound(src,'sound/items/eatfood.ogg', rand(10,40), 1) + loaded = null update_icon() return else @@ -75,6 +94,27 @@ /obj/item/weapon/material/kitchen/utensil/fork/plastic default_material = "plastic" +/obj/item/weapon/material/kitchen/utensil/foon + name = "foon" + desc = "It's a foon. The forgotten cousin of the spork." + icon_state = "foon" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/foon/plastic + default_material = "plastic" + +/obj/item/weapon/material/kitchen/utensil/spork + name = "spork" + desc = "It's a spork. The (un)holy merger of a spoon and fork." + icon_state = "spork" + sharp = TRUE + edge = FALSE + +/obj/item/weapon/material/kitchen/utensil/spork/plastic + default_material = "plastic" + + /obj/item/weapon/material/kitchen/utensil/spoon name = "spoon" desc = "It's a spoon. You can see your own upside-down face in it." diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm index 8dd2a7b9ef..5373bf5526 100644 --- a/code/game/objects/items/weapons/material/knives.dm +++ b/code/game/objects/items/weapons/material/knives.dm @@ -128,6 +128,16 @@ force_divisor = 0.25 // 15 when wielded with hardness 60 (steel) attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") +/obj/item/weapon/material/knife/table + name = "table knife" + icon = 'icons/obj/kitchen.dmi' + icon_state = "knife_table" + sharp = FALSE // blunted tip + force_divisor = 0.1 + +/obj/item/weapon/material/knife/table/plastic + default_material = "plastic" + /obj/item/weapon/material/knife/machete name = "machete" desc = "A sharp machete often found in survival kits." diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index 9f6d4929b8..8be31ebb7f 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -2,27 +2,60 @@ * Donut Box */ +var/list/random_weighted_donuts = list( + /obj/item/weapon/reagent_containers/food/snacks/donut/plain = 5, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 5, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/green = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly = 4, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly = 3, + /obj/item/weapon/reagent_containers/food/snacks/donut/chaos = 1 +) + /obj/item/weapon/storage/box/donut - icon = 'icons/obj/food.dmi' + icon = 'icons/obj/food_donuts.dmi' icon_state = "donutbox" name = "donut box" desc = "A box that holds tasty donuts, if you're lucky." + description_fluff = "While the slogan on the box claims that these donuts are 'baked fresh locally', there is technically no legal marketing definition for 'fresh', 'local', or indeed 'baked'." center_of_mass = list("x" = 16,"y" = 9) max_storage_space = ITEMSIZE_COST_SMALL * 6 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard - starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6) + //starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6) /obj/item/weapon/storage/box/donut/Initialize() + if(!empty) + for(var/i in 1 to 6) + var/type_to_spawn = pickweight(random_weighted_donuts) + new type_to_spawn(src) . = ..() update_icon() /obj/item/weapon/storage/box/donut/update_icon() overlays.Cut() - var/i = 0 + var/x_offset = 0 for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in contents) - overlays += image('icons/obj/food.dmi', "[i][D.overlay_state]") - i++ + var/mutable_appearance/ma = mutable_appearance(icon = icon, icon_state = D.overlay_state) + ma.pixel_x = x_offset + add_overlay(ma) + x_offset += 3 /obj/item/weapon/storage/box/donut/empty empty = TRUE diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index f133c164ce..778bb2beaf 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -411,10 +411,28 @@ /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white, /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle, /obj/item/weapon/reagent_containers/food/snacks/chocolateegg, - /obj/item/weapon/reagent_containers/food/snacks/donut, - /obj/item/weapon/reagent_containers/food/snacks/donut/normal, - /obj/item/weapon/reagent_containers/food/snacks/donut/jelly, - /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink, + /obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple, + /obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/green, + /obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige, + /obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue, + /obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow, + /obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive, + /obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer, + /obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles, + /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly, /obj/item/weapon/reagent_containers/food/snacks/tuna, /obj/item/weapon/reagent_containers/food/snacks/pistachios, /obj/item/weapon/reagent_containers/food/snacks/semki, @@ -641,7 +659,19 @@ /obj/item/toy/figure/warden, /obj/item/toy/figure/psychologist, /obj/item/toy/figure/paramedic, - /obj/item/toy/figure/ert) + /obj/item/toy/figure/ert, + /obj/item/toy/figure/un, + /obj/item/toy/figure/selene, + /obj/item/toy/figure/nock, + /obj/item/toy/figure/carrion, + /obj/item/toy/figure/zaddat, + /obj/item/toy/figure/discovery, + /obj/item/toy/figure/rooster, + /obj/item/toy/figure/barking_dog, + /obj/item/toy/figure/tajaran, + /obj/item/toy/figure/red_soldier, + /obj/item/toy/figure/shitcurity, + /obj/item/toy/figure/vir_patrolman) /obj/random/plushie name = "random plushie" @@ -821,8 +851,8 @@ /obj/random/mre/dessert/item_to_spawn() return pick(/obj/item/weapon/reagent_containers/food/snacks/candy, /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar, - /obj/item/weapon/reagent_containers/food/snacks/donut/normal, - /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, /obj/item/weapon/reagent_containers/food/snacks/cookiesnack) @@ -833,7 +863,7 @@ /obj/random/mre/dessert/vegan/item_to_spawn() return pick(/obj/item/weapon/reagent_containers/food/snacks/candy, /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit) /obj/random/mre/drink diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index e54c75eebb..0d3fba0497 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -1,15 +1,17 @@ /obj/structure/sign/double/barsign + desc = "The current barsign of this shift! The bartender can change it with their ID." icon = 'icons/obj/barsigns.dmi' icon_state = "empty" + plane = ABOVE_PLANE appearance_flags = 0 anchored = 1 var/cult = 0 /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) . = cached_icon_states(icon) - . -= "on" - . -= "narsiebistro" - . -= "empty" + . -= "On" + . -= "Nar-sie Bistro" + . -= "Empty" if(initial) . -= "Off" @@ -18,9 +20,9 @@ switch(icon_state) if("Off") . += "It appears to be switched off." - if("narsiebistro") + if("Nar-sie Bistro") . += "It shows a picture of a large black and red being. Spooky!" - if("on", "empty") + if("On", "Empty") . += "The lights are on, but there's no picture." else . += "It says '[icon_state]'" diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 28e15e5583..182e99f2fb 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -21,7 +21,7 @@ return /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction - if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/double)) + if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double)) playsound(src, tool.usesound, 50, 1) to_chat(user, "You unfasten the sign with your [tool].") var/obj/item/sign/S = new(src.loc) @@ -63,14 +63,14 @@ qdel(src) else ..() -/obj/structure/sign/double/map +/obj/structure/sign/scenery/map name = "station map" desc = "A framed picture of the station." -/obj/structure/sign/double/map/left +/obj/structure/sign/scenery/map/left icon_state = "map-left" -/obj/structure/sign/double/map/right +/obj/structure/sign/scenery/map/right icon_state = "map-right" /obj/structure/sign/securearea @@ -250,6 +250,10 @@ name = "\improper ACIDIC SURFACE" icon_state = "acid" +/obj/structure/sign/warning/cold + name = "\improper EXTREME COLD ENVIRONMENT" + icon_state = "cold" + /obj/structure/sign/redcross name = "medbay" desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." @@ -320,6 +324,7 @@ desc = "A warning sign which reads XENOBIOLOGY." icon_state = "xenobio3" + //direction signs presented by the order they appear in the dmi /obj/structure/sign/directions name = "direction sign" @@ -336,221 +341,436 @@ desc = "A direction sign, pointing out the way to \the [src]." */ +//Also floor/level/deck signs in the same vein. Naming conventions! +/obj/structure/sign/levels + name = "level sign" + desc = "A level sign, claiming to know which level to find... Something on?" + icon_state = "level" + icon = 'icons/obj/decals_levels.dmi' + //engineering signs /obj/structure/sign/directions/engineering name = "\improper Engineering Department" desc = "A direction sign, pointing out the way to the Engineering Department." icon_state = "direction_eng" +/obj/structure/sign/levels/engineering + name = "\improper Engineering Department" + desc = "A level sign, stating the level to find the Engineering Department on." + icon_state = "level_eng" + /obj/structure/sign/directions/engineering/reactor name = "\improper Reactor" desc = "A direction sign, pointing out the way to the Reactor." icon_state = "direction_core" +/obj/structure/sign/levels/engineering/reactor + name = "\improper Reactor" + desc = "A level sign, stating the level to find the Reactor on." + icon_state = "level_core" + /obj/structure/sign/directions/engineering/solars name = "\improper Solar Array" desc = "A direction sign, pointing out the way to the nearest Solar Array." icon_state = "direction_solar" +/obj/structure/sign/levels/engineering/solars + name = "\improper Solar Array" + desc = "A level sign, stating the level to find the nearest Solar Array on." + icon_state = "level_solar" + /obj/structure/sign/directions/engineering/atmospherics name = "\improper Atmospherics Department" desc = "A direction sign, pointing out the way to the Atmospherics Department." icon_state = "direction_atmos" +/obj/structure/sign/levels/engineering/atmospherics + name = "\improper Atmospherics Department" + desc = "A level sign, stating the level to find the Atmospherics Department on." + icon_state = "level_atmos" + /obj/structure/sign/directions/engineering/gravgen name = "\improper Gravity Generator" desc = "A direction sign, pointing out the way to the Artificial Gravity Generator." icon_state = "direction_grav" +/obj/structure/sign/levels/engineering/gravgen + name = "\improper Gravity Generator" + desc = "A level sign, stating the level to find the Artificial Gravity Generator on." + icon_state = "level_grav" + /obj/structure/sign/directions/engineering/engeqp name = "\improper Engineering Equipment Storage" desc = "A direction sign, pointing out the way to Engineering Equipment Storage." icon_state = "direction_engeqp" +/obj/structure/sign/levels/engineering/engeqp + name = "\improper Engineering Equipment Storage" + desc = "A level sign, stating the level to find Engineering Equipment Storage on." + icon_state = "level_engeqp" + //security signs /obj/structure/sign/directions/security name = "\improper Security Department" desc = "A direction sign, pointing out the way to the Security Department." icon_state = "direction_sec" +/obj/structure/sign/levels/security + name = "\improper Security Department" + desc = "A level sign, stating the level to find the Security Department on." + icon_state = "direction_sec" + /obj/structure/sign/directions/security/armory name = "\improper Armory" desc = "A direction sign, pointing out the way to the Armory." icon_state = "direction_armory" +/obj/structure/sign/levels/security/armory + name = "\improper Armory" + desc = "A level sign, stating the level to find the Armory on." + icon_state = "direction_armory" + /obj/structure/sign/directions/security/brig name = "\improper Brig" desc = "A direction sign, pointing out the way to the Brig." icon_state = "direction_brig" +/obj/structure/sign/levels/security/brig + name = "\improper Brig" + desc = "A level sign, stating the level to find the Brig on." + icon_state = "level_brig" + /obj/structure/sign/directions/security/seceqp name = "\improper Security Equipment Storage" desc = "A direction sign, pointing out the way to Security Equipment Storage." icon_state = "direction_seceqp" +/obj/structure/sign/levels/security/seceqp + name = "\improper Security Equipment Storage" + desc = "A level sign, stating the level to find Security Equipment Storage on." + icon_state = "level_seceqp" + /obj/structure/sign/directions/security/internal_affairs name = "\improper Internal Affairs Office" desc = "A direction sign, pointing out the way to the Internal Affairs Office." icon_state = "direction_intaff" +/obj/structure/sign/levels/security/internal_affairs + name = "\improper Internal Affairs Office" + desc = "A level sign, stating the level to find the Internal Affairs Office on." + icon_state = "level_intaff" + /obj/structure/sign/directions/security/forensics name = "\improper Forensics Lab" desc = "A direction sign, pointing out the way to the Forensics Lab." icon_state = "direction_forensics" +/obj/structure/sign/levels/security/forensics + name = "\improper Forensics Lab" + desc = "A level sign, stating the level to find the Forensics Lab on." + icon_state = "level_forensics" + /obj/structure/sign/directions/security/forensics/alt icon_state = "direction_lab" +/obj/structure/sign/levels/security/forensics/alt + icon_state = "level_lab" + /obj/structure/sign/directions/security/interrogation name = "\improper Interrogations" desc = "A direction sign, pointing out the way to Interrogations." icon_state = "direction_interrogation" +/obj/structure/sign/levels/security/interrogation + name = "\improper Interrogations" + desc = "A level sign, stating the level to find Interrogations on." + icon_state = "level_interrogation" + //science signs /obj/structure/sign/directions/science name = "\improper Science Department" desc = "A direction sign, pointing out the way to the Science Department." icon_state = "direction_sci" - + +/obj/structure/sign/levels/science + name = "\improper Science Department" + desc = "A level sign, stating the level to find the Science Department on." + icon_state = "level_sci" + /obj/structure/sign/directions/science/rnd name = "\improper Research & Development" desc = "A direction sign, pointing out the way to Research & Development." icon_state = "direction_rnd" +/obj/structure/sign/levels/science/rnd + name = "\improper Research & Development" + desc = "A level sign, stating the level to find Research & Development on." + icon_state = "level_rnd" + /obj/structure/sign/directions/science/toxins name = "\improper Toxins Lab" desc = "A direction sign, pointing out the way to the Toxins Lab." icon_state = "direction_sci" +/obj/structure/sign/levels/science/toxins + name = "\improper Toxins Lab" + desc = "A level sign, stating the level to find the Toxins Lab on." + icon_state = "level_sci" + /obj/structure/sign/directions/science/robotics name = "\improper Robotics Workshop" desc = "A direction sign, pointing out the way to the Robotics Workshop." icon_state = "direction_robotics" +/obj/structure/sign/levels/science/robotics + name = "\improper Robotics Workshop" + desc = "A level sign, stating the level to find the Robotics Workshop on." + icon_state = "level_robotics" + /obj/structure/sign/directions/science/xenoarch name = "\improper Xenoarchaeology Lab" desc = "A direction sign, pointing out the way to the Xenoarchaeology Lab." icon_state = "direction_xenoarch" +/obj/structure/sign/levels/science/xenoarch + name = "\improper Xenoarchaeology Lab" + desc = "A level sign, stating the level to find the Xenoarchaeology Lab on." + icon_state = "level_xenoarch" + /obj/structure/sign/directions/science/xenobiology name = "\improper Xenobiology Lab" desc = "A direction sign, pointing out the way to the Xenobiology Lab." icon_state = "direction_xbio" +/obj/structure/sign/levels/science/xenobiology + name = "\improper Xenobiology Lab" + desc = "A level sign, stating the level to find the Xenobiology Lab on." + icon_state = "level_xbio" + /obj/structure/sign/directions/science/xenoflora name = "\improper Xenoflora Lab" desc = "A direction sign, pointing out the way to the Xenoflora Lab." icon_state = "direction_xflora" +/obj/structure/sign/levels/science/xenoflora + name = "\improper Xenoflora Lab" + desc = "A level sign, stating the level to find the Xenoflora Lab on." + icon_state = "level_xflora" + /obj/structure/sign/directions/science/exploration name = "\improper Exploration Department" desc = "A direction sign, pointing out the way to the Exploration Department." icon_state = "direction_explo" +/obj/structure/sign/levels/science/exploration + name = "\improper Exploration Department" + desc = "A level sign, stating the level to find the Exploration Department on." + icon_state = "level_explo" + //medical signs /obj/structure/sign/directions/medical name = "\improper Medical Bay" desc = "A direction sign, pointing out the way to the Medical Bay." icon_state = "direction_med" +/obj/structure/sign/levels/medical + name = "\improper Medical Bay" + desc = "A level sign, stating the level to find the Medical Bay on." + icon_state = "level_med" + /obj/structure/sign/directions/medical/chemlab name = "\improper Chemistry Lab" desc = "A direction sign, pointing out the way to the Chemistry Lab." icon_state = "direction_med" +/obj/structure/sign/levels/medical/chemlab + name = "\improper Chemistry Lab" + desc = "A level sign, stating the level to find the Chemistry Lab on." + icon_state = "level_med" + /obj/structure/sign/directions/medical/surgery name = "\improper Surgery" desc = "A direction sign, pointing out the way to Surgery." icon_state = "direction_surgery" +/obj/structure/sign/levels/medical/surgery + name = "\improper Surgery" + desc = "A level sign, stating the level to find Surgery on." + icon_state = "level_surgery" + /obj/structure/sign/directions/medical/operating_1 name = "\improper Operating Theatre 1" desc = "A direction sign, pointing out the way to Operating Theatre 1." icon_state = "direction_op1" +/obj/structure/sign/levels/medical/operating_1 + name = "\improper Operating Theatre 1" + desc = "A level sign, stating the level to find Operating Theatre 1 on." + icon_state = "level_op1" + /obj/structure/sign/directions/medical/operating_2 name = "\improper Operating Theatre 2" desc = "A direction sign, pointing out the way to Operating Theatre 2." icon_state = "direction_op2" +/obj/structure/sign/levels/medical/operating_2 + name = "\improper Operating Theatre 2" + desc = "A level sign, stating the level to find Operating Theatre 2 on." + icon_state = "level_op2" + /obj/structure/sign/directions/medical/virology name = "\improper Virology" desc = "A direction sign, pointing out the way to the Virology Lab." icon_state = "direction_viro" +/obj/structure/sign/levels/medical/virology + name = "\improper Virology" + desc = "A level sign, stating the level to find the Virology Lab on." + icon_state = "level_viro" + /obj/structure/sign/directions/medical/medeqp name = "\improper Medical Equipment Storage" desc = "A direction sign, pointing out the way to Medical Equipment Storage." icon_state = "direction_medeqp" +/obj/structure/sign/levels/medical/medeqp + name = "\improper Medical Equipment Storage" + desc = "A level sign, stating the level to find Medical Equipment Storage on." + icon_state = "level_medeqp" + /obj/structure/sign/directions/medical/morgue name = "\improper Morgue" desc = "A direction sign, pointing out the way to the Morgue." icon_state = "direction_morgue" +/obj/structure/sign/levels/medical/morgue + name = "\improper Morgue" + desc = "A level sign, stating the level to find the Morgue on." + icon_state = "level_morgue" + /obj/structure/sign/directions/medical/cloning name = "\improper Cloning Lab" desc = "A direction sign, pointing out the way to the Cloning Lab." icon_state = "direction_cloning" +/obj/structure/sign/levels/medical/cloning + name = "\improper Cloning Lab" + desc = "A level sign, stating the level to find the Cloning Lab on." + icon_state = "level_cloning" + /obj/structure/sign/directions/medical/resleeving name = "\improper Resleeving Lab" desc = "A direction sign, pointing out the way to the Resleeving Lab." icon_state = "direction_resleeve" - + +/obj/structure/sign/levels/medical/resleeving + name = "\improper Resleeving Lab" + desc = "A level sign, stating the level to find the Resleeving Lab on." + icon_state = "level_resleeve" + //special signs /obj/structure/sign/directions/evac name = "\improper Evacuation" desc = "A direction sign, pointing out the way to the Escape Shuttle Dock." icon_state = "direction_evac" +/obj/structure/sign/levels/evac + name = "\improper Evacuation" + desc = "A level sign, stating the level to find the Escape Shuttle Dock on." + icon_state = "level_evac" + /obj/structure/sign/directions/eva name = "\improper Extra-Vehicular Activity" desc = "A direction sign, pointing out the way to the EVA Bay." icon_state = "direction_eva" +/obj/structure/sign/levels/eva + name = "\improper Extra-Vehicular Activity" + desc = "A level sign, stating the level to find the EVA Bay on." + icon_state = "level_eva" + //command signs /obj/structure/sign/directions/ai_core name = "\improper AI Core" desc = "A direction sign, pointing out the way to the AI Core." icon_state = "direction_ai_core" +/obj/structure/sign/levels/ai_core + name = "\improper AI Core" + desc = "A level sign, stating the level to find the AI Core on." + icon_state = "level_ai_core" + /obj/structure/sign/directions/bridge name = "\improper Bridge" desc = "A direction sign, pointing out the way to the Bridge." icon_state = "direction_bridge" +/obj/structure/sign/levels/bridge + name = "\improper Bridge" + desc = "A level sign, stating the level to find the Bridge on." + icon_state = "level_bridge" + /obj/structure/sign/directions/command name = "\improper Command" desc = "A direction sign, pointing out the way to the Command Center." icon_state = "direction_command" +/obj/structure/sign/levels/command + name = "\improper Command" + desc = "A level sign, stating the level to find the Command Center on." + icon_state = "level_command" + /obj/structure/sign/directions/teleporter name = "\improper Teleporter" desc = "A direction sign, pointing out the way to the Teleporter." icon_state = "direction_teleport" +/obj/structure/sign/levels/teleporter + name = "\improper Teleporter" + desc = "A level sign, stating the level to find the Teleporter on." + icon_state = "level_teleport" + /obj/structure/sign/directions/telecomms name = "\improper Telecommunications Hub" desc = "A direction sign, pointing out the way to the Telecommunications Hub." icon_state = "direction_tcomms" - + +/obj/structure/sign/levels/telecomms + name = "\improper Telecommunications Hub" + desc = "A level sign, stating the level to find the Telecommunications Hub on." + icon_state = "level_tcomms" + //cargonia signs /obj/structure/sign/directions/cargo name = "\improper Cargo Department" desc = "A direction sign, pointing out the way to the Cargo Department." icon_state = "direction_crg" +/obj/structure/sign/levels/cargo + name = "\improper Cargo Department" + desc = "A level sign, stating the level to find the Cargo Department on." + icon_state = "level_crg" + /obj/structure/sign/directions/cargo/mining name = "\improper Mining Department" desc = "A direction sign, pointing out the way to the Mining Department." icon_state = "direction_mining" +/obj/structure/sign/levels/cargo/mining + name = "\improper Mining Department" + desc = "A level sign, stating the level to find the Mining Department on." + icon_state = "level_mining" + /obj/structure/sign/directions/cargo/refinery name = "\improper Refinery" desc = "A direction sign, pointing out the way to the Refinery." icon_state = "direction_refinery" +/obj/structure/sign/levels/cargo/refinery + name = "\improper Refinery" + desc = "A level sign, stating the level to find the Refinery on." + icon_state = "level_refinery" + //civilian/misc signs /obj/structure/sign/directions/roomnum name = "room number" @@ -562,66 +782,131 @@ desc = "A direction sign, pointing out the way to Cryogenic Storage." icon_state = "direction_cry" +/obj/structure/sign/levels/cryo + name = "\improper Cryogenic Storage" + desc = "A level sign, stating the level to find Cryogenic Storage on." + icon_state = "level_cry" + /obj/structure/sign/directions/elevator name = "\improper Elevator" desc = "A direction sign, pointing out the way to the nearest elevator." icon_state = "direction_elv" +/obj/structure/sign/levels/elevator + name = "\improper Elevator" + desc = "A level sign, stating the level to find the nearest elevator on." + icon_state = "level_elv" + /obj/structure/sign/directions/bar name = "\improper Bar" desc = "A direction sign, pointing out the way to the nearest watering hole." icon_state = "direction_bar" +/obj/structure/sign/levels/bar + name = "\improper Bar" + desc = "A level sign, stating the level to find the nearest watering hole on." + icon_state = "level_bar" + /obj/structure/sign/directions/kitchen name = "\improper Kitchen" desc = "A pictographic direction sign with a knife, plate, and fork, pointing out the way to the nearest dining establishment." icon_state = "direction_kitchen" +/obj/structure/sign/levels/kitchen + name = "\improper Kitchen" + desc = "A pictographic direction sign with a knife, plate, and fork, stating the level to find the nearest dining establishment on." + icon_state = "level_kitchen" + /obj/structure/sign/directions/tram name = "\improper Public Transit Station" desc = "A direction sign, pointing out the way to the nearest public transit station." icon_state = "direction_tram" +/obj/structure/sign/levels/tram + name = "\improper Public Transit Station" + desc = "A level sign, stating the level to find the nearest public transit station on." + icon_state = "level_tram" + /obj/structure/sign/directions/janitor name = "\improper Custodial Closet" desc = "A direction sign, pointing out the way to the Custodial Closet." icon_state = "direction_janitor" +/obj/structure/sign/levels/janitor + name = "\improper Custodial Closet" + desc = "A level sign, stating the level to find the Custodial Closet on." + icon_state = "level_janitor" + /obj/structure/sign/directions/chapel name = "\improper Chapel" desc = "A direction sign, pointing out the way to the Chapel." icon_state = "direction_chapel" +/obj/structure/sign/levels/chapel + name = "\improper Chapel" + desc = "A level sign, stating the level to find the Chapel on." + icon_state = "level_chapel" + /obj/structure/sign/directions/dorms name = "\improper Dormitories" desc = "A direction sign, pointing out the way to the Dormitories." icon_state = "direction_dorms" +/obj/structure/sign/levels/dorms + name = "\improper Dormitories" + desc = "A level sign, stating the level to find the Dormitories on." + icon_state = "level_dorms" + /obj/structure/sign/directions/library name = "\improper Library" desc = "A direction sign, pointing out the way to the Library." icon_state = "direction_library" +/obj/structure/sign/levels/library + name = "\improper Library" + desc = "A level sign, stating the level to find the Library on." + icon_state = "level_library" + /obj/structure/sign/directions/dock name = "\improper Dock" desc = "A direction sign, pointing out the way to the nearest docking area." icon_state = "direction_dock" +/obj/structure/sign/levels/dock + name = "\improper Dock" + desc = "A level sign, stating the level to find the nearest docking area on." + icon_state = "level_dock" + /obj/structure/sign/directions/gym name = "\improper Gym" desc = "A direction sign, pointing out the way to the Gym." icon_state = "direction_gym" +/obj/structure/sign/levels/gym + name = "\improper Gym" + desc = "A level sign, stating the level to find the Gym on." + icon_state = "level_gym" + /obj/structure/sign/directions/pool name = "\improper Pool" desc = "A direction sign, pointing out the way to the Pool." icon_state = "direction_pool" +/obj/structure/sign/levels/pool + name = "\improper Pool" + desc = "A level sign, stating the level to find the Pool on." + icon_state = "level_pool" + /obj/structure/sign/directions/recreation name = "\improper Recreation Area" desc = "A direction sign, pointing out the way to the nearest Recreation Area." icon_state = "direction_recreation" +/obj/structure/sign/levels/recreation + name = "\improper Recreation Area" + desc = "A level sign, stating the level to find the nearest Recreation Area on." + icon_state = "level_recreation" + /obj/structure/sign/directions/stairwell name = "\improper Stairwell" desc = "A direction sign with stairs and a door, pointing out the way to the nearest stairwell." @@ -686,6 +971,48 @@ name = "\improper Fourth Deck" icon_state = "deck-4" +/obj/structure/sign/level/one + name = "\improper Level One" + icon_state = "level-1" + +/obj/structure/sign/level/one/large + icon_state = "level-1-large" + +/obj/structure/sign/level/two + name = "\improper Level Two" + icon_state = "level-2" + +/obj/structure/sign/level/two/large + icon_state = "level-2-large" + +/obj/structure/sign/level/three + name = "\improper Level Three" + icon_state = "level-3" + +/obj/structure/sign/level/three/large + icon_state = "level-3-large" + +/obj/structure/sign/level/fourth + name = "\improper Level Four" + icon_state = "level-4" + +/obj/structure/sign/level/four/large + icon_state = "level-4-large" + +/obj/structure/sign/level/basement + name = "\improper Basement Level" + icon_state = "level-b" + +/obj/structure/sign/level/basement/large + icon_state = "level-b-large" + +/obj/structure/sign/level/ground + name = "\improper Basement Level" + icon_state = "level-g" + +/obj/structure/sign/level/ground/large + icon_state = "level-g-large" + /obj/structure/sign/hangar/one name = "\improper Hangar One" icon_state = "hangar-1" @@ -726,12 +1053,61 @@ name = "\improper AIR" icon_state = "atmos_air" -/obj/structure/sign/poi/engineleft +/obj/structure/sign/scenery/engineleft name = "I.C.V." desc = "The charred name of a cargo ship of some description." icon_state = "poi_engine1" -/obj/structure/sign/poi/engineright +/obj/structure/sign/scenery/engineright name = "I.C.V." desc = "The charred name of a cargo ship of some description." - icon_state = "poi_engine2" \ No newline at end of file + icon_state = "poi_engine2" + +//Direction/Level sign overlays. Not mechanically functional as noted above, but usable for mapping. +/obj/structure/sign/scenery/overlay + name = "snow covering" + desc = "Frozen snow obscures the view of a sign beneath." + icon_state = "snowy" + icon = 'icons/obj/decals_directions.dmi' + +/obj/structure/sign/scenery/overlay/rust + name = "rust covering" + desc = "Thick rust obscures the view of a sign beneath." + icon_state = "rusted" + +/obj/structure/sign/scenery/overlay/vine + name = "vine covering" + desc = "Thick vines obscure the view of a sign beneath." + icon_state = "vines" + +/obj/structure/sign/scenery/overlay/vine/top + icon_state = "vines_top" + +/obj/structure/sign/scenery/overlay/vine/mid + icon_state = "vines_mid" + +/obj/structure/sign/scenery/overlay/vine/bottom + icon_state = "vines_bottom" + +/obj/structure/sign/bigname + name = "Cynosure Station" + desc = "An aging sign for the Cynosure Xenoarchaeological Research Station." + icon_state = "cyno_1" + +/obj/structure/sign/bigname/seg_2 + icon_state = "cyno_2" + +/obj/structure/sign/bigname/seg_3 + icon_state = "cyno_3" + +/obj/structure/sign/bigname/seg_4 + icon_state = "cyno_4" + +/obj/structure/sign/bigname/seg_5 + icon_state = "cyno_5" + +/obj/structure/sign/bigname/seg_6 + icon_state = "cyno_6" + +/obj/structure/sign/bigname/seg_7 + icon_state = "cyno_7" diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 9891f82513..9066187d15 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -20,11 +20,10 @@ var/datum/material/material var/datum/material/padding_material var/base_icon = "bed" - var/applies_material_colour = 1 + var/applies_material_colour = 1 //Set to 0 whenever defining a custom colour or it will apply additively to the material, or when no colour overlay should be present. /obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material) ..(newloc) - color = null if(!new_material) new_material = DEFAULT_WALL_MATERIAL material = get_material_by_name(new_material) @@ -47,7 +46,7 @@ var/cache_key = "[base_icon]-[material.name]" if(isnull(stool_cache[cache_key])) var/image/I = image(icon, base_icon) - if(applies_material_colour) //VOREStation Add - Goes with added var + if(applies_material_colour) I.color = material.icon_colour stool_cache[cache_key] = I add_overlay(stool_cache[cache_key]) @@ -290,7 +289,7 @@ /obj/structure/bed/roller/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - + playsound(src, 'sound/effects/roll.ogg', 100, 1) /obj/structure/bed/roller/post_buckle_mob(mob/living/M as mob) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index f4aba45aca..a0e9c714d9 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -2,7 +2,6 @@ name = "chair" desc = "You sit in this. Either by will or force." icon_state = "chair_preview" - color = "#666666" base_icon = "chair" buckle_dir = 0 buckle_lying = 0 //force people to sit up in chairs when buckled @@ -82,12 +81,18 @@ /obj/structure/bed/chair/shuttle name = "chair" - desc = "You sit in this. Either by will or force." + desc = "Please remain seated while the overhead sign is illuminated." icon_state = "shuttlechair" color = null base_icon = "shuttlechair" applies_material_colour = 0 +/obj/structure/bed/chair/shuttle_padded + icon_state = "shuttlechair2" + base_icon = "shuttlechair2" + color = null + applies_material_colour = 0 + // Leaving this in for the sake of compilation. /obj/structure/bed/chair/comfy desc = "It's a chair. It looks comfy." @@ -141,7 +146,7 @@ /obj/structure/bed/chair/office/Moved(atom/old_loc, direction, forced = FALSE) . = ..() - + playsound(src, 'sound/effects/roll.ogg', 100, 1) /obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction) @@ -210,22 +215,94 @@ /obj/structure/bed/chair/wood name = "wooden chair" desc = "Old is never too old to not be in fashion." - icon_state = "wooden_chair" + base_icon = "wooden_chair" + icon_state = "wooden_chair_preview" + color = WOOD_COLOR_FURNITURE + applies_material_colour = 0 /obj/structure/bed/chair/wood/update_icon() return +/obj/structure/bed/chair/wood/walnut + name = "walnut chair" + color = WOOD_COLOR_RICH + +/obj/structure/bed/chair/wood/pine + name = "pinewood chair" + color = WOOD_COLOR_PALE + +/obj/structure/bed/chair/wood/ebony + name = "ebony chair" + color = WOOD_COLOR_BLACK + +/obj/structure/bed/chair/wood/mahogany + name = "mahogany chair" + color = WOOD_COLOR_CHOCOLATE + /obj/structure/bed/chair/wood/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/stack) || W.is_wirecutter()) return ..() -/obj/structure/bed/chair/wood/New(var/newloc) +/obj/structure/bed/chair/wood/New(var/newloc, var/newmaterial) ..(newloc, "wood") /obj/structure/bed/chair/wood/wings icon_state = "wooden_chair_wings" +/obj/structure/bed/chair/wood/walnut/wings + icon_state = "wooden_chair_wings" + +/obj/structure/bed/chair/wood/pine/wings + icon_state = "wooden_chair_wings" + +/obj/structure/bed/chair/wood/ebony/wings + icon_state = "wooden_chair_wings" + +/obj/structure/bed/chair/wood/mahogany/wings + icon_state = "wooden_chair_wings" + +//Eris Chairs + +/obj/structure/bed/chair/modern_chair + name = "modern chair" + desc = "It's like sitting in an egg." + icon_state = "modern_chair" + color = null + base_icon = "modern_chair" + applies_material_colour = 0 + +/obj/structure/bed/chair/modern_chair/Initialize() + . = ..() + var/image/I = image(icon, "[base_icon]_over") + I.layer = ABOVE_MOB_LAYER + I.plane = MOB_PLANE + overlays |= I + +/obj/structure/bed/chair/modern_bar_stool + name = "bar stool" + desc = "How vibrant!" + icon_state = "modern_stool" + color = null + base_icon = "modern_stool" + applies_material_colour = 0 + +/obj/structure/bed/chair/backed_grey + name = "grey chair" + desc = "Also available in red." + icon_state = "onestar_chair_grey" + color = null + base_icon = "onestar_chair_grey" + applies_material_colour = 0 + +/obj/structure/bed/chair/backed_red + name = "red chair" + desc = "Also available in grey." + icon_state = "onestar_chair_red" + color = null + base_icon = "onestar_chair_red" + applies_material_colour = 0 + //sofa /obj/structure/bed/chair/sofa @@ -236,6 +313,7 @@ icon_state = "sofamiddle" applies_material_colour = 1 var/sofa_material = "carpet" + var/corner_piece = FALSE /obj/structure/bed/chair/sofa/update_icon() if(applies_material_colour && sofa_material) @@ -247,9 +325,9 @@ else name = "[sofa_material] [initial(name)]" -/obj/structure/bed/chair/update_layer() +/obj/structure/bed/chair/sofa/update_layer() // Corner east/west should be on top of mobs, any other state's north should be. - if((icon_state == "sofacorner" && ((dir & EAST) || (dir & WEST))) || (icon_state != "sofacorner" && (dir & NORTH))) + if((corner_piece && ((dir & EAST) || (dir & WEST))) || (!corner_piece && (dir & NORTH))) plane = MOB_PLANE layer = MOB_LAYER + 0.1 else @@ -266,6 +344,44 @@ /obj/structure/bed/chair/sofa/corner icon_state = "sofacorner" base_icon = "sofacorner" + corner_piece = TRUE + +// Wooden nonsofa - no corners +/obj/structure/bed/chair/sofa/pew + name = "pew bench" + desc = "If they want you to go to church, why do they make these so uncomfortable?" + base_icon = "pewmiddle" + icon_state = "pewmiddle" + applies_material_colour = FALSE + +/obj/structure/bed/chair/sofa/pew/left + icon_state = "pewend_left" + base_icon = "pewend_left" + +/obj/structure/bed/chair/sofa/pew/right + icon_state = "pewend_right" + base_icon = "pewend_right" + +// Corporate sofa - one color fits all +/obj/structure/bed/chair/sofa/corp + name = "black leather sofa" + desc = "How corporate!" + base_icon = "corp_sofamiddle" + icon_state = "corp_sofamiddle" + applies_material_colour = FALSE + +/obj/structure/bed/chair/sofa/corp/left + icon_state = "corp_sofaend_left" + base_icon = "corp_sofaend_left" + +/obj/structure/bed/chair/sofa/corp/right + icon_state = "corp_sofaend_right" + base_icon = "corp_sofaend_right" + +/obj/structure/bed/chair/sofa/corp/corner + icon_state = "corp_sofacorner" + base_icon = "corp_sofacorner" + corner_piece = TRUE //color variations diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index c3cb592c09..3982bfe31b 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -39,7 +39,7 @@ var/global/list/stool_cache = list() //haha stool icon_state = "" cut_overlays() // Base icon. - var/cache_key = "stool-[material.name]" + var/cache_key = "[base_icon]-[material.name]" if(isnull(stool_cache[cache_key])) var/image/I = image(icon, base_icon) I.color = material.icon_colour @@ -47,9 +47,9 @@ var/global/list/stool_cache = list() //haha stool add_overlay(stool_cache[cache_key]) // Padding overlay. if(padding_material) - var/padding_cache_key = "stool-padding-[padding_material.name]" + var/padding_cache_key = "[base_icon]-padding-[padding_material.name]" if(isnull(stool_cache[padding_cache_key])) - var/image/I = image(icon, "stool_padding") + var/image/I = image(icon, "[base_icon]_padding") I.color = padding_material.icon_colour stool_cache[padding_cache_key] = I add_overlay(stool_cache[padding_cache_key]) @@ -149,3 +149,22 @@ var/global/list/stool_cache = list() //haha stool remove_padding() else ..() + +/obj/item/weapon/stool/barstool + name = "bar stool" + desc = "Apply butt." + icon = 'icons/obj/furniture.dmi' + icon_state = "bar_stool_preview" //set for the map + randpixel = 0 + center_of_mass = null + force = 10 + throwforce = 10 + w_class = ITEMSIZE_HUGE + base_icon = "bar_stool_base" + anchored = 1 + +/obj/item/weapon/stool/barstool/padded + icon_state = "bar_stool_padded_preview" //set for the map + +/obj/item/weapon/stool/barstool/padded/New(var/newloc, var/new_material) + ..(newloc, "steel", "carpet") \ No newline at end of file diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index cb5db5411d..64b187b587 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -1,8 +1,8 @@ /obj/structure/undies_wardrobe name = "underwear wardrobe" desc = "Holds item of clothing you shouldn't be showing off in the hallways." - icon = 'icons/obj/closet.dmi' - icon_state = "cabinet_closed" + icon = 'icons/obj/closets/undies_wardrobe.dmi' + icon_state = "wardrobe" density = 1 /obj/structure/undies_wardrobe/attack_hand(var/mob/user) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 282a10f9e0..e14ffb5921 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -4,7 +4,7 @@ name = "toilet" desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean." icon = 'icons/obj/watercloset.dmi' - icon_state = "toilet00" + icon_state = "toilet" density = 0 anchored = 1 var/open = 0 //if the lid is up @@ -41,7 +41,7 @@ update_icon() /obj/structure/toilet/update_icon() - icon_state = "toilet[open][cistern]" + icon_state = "toilet[initial(icon_state)][open][cistern]" /obj/structure/toilet/attackby(obj/item/I as obj, mob/living/user as mob) if(I.is_crowbar()) @@ -92,6 +92,40 @@ return +/obj/structure/toilet/prison + name = "prison toilet" + icon_state = "toilet2" + +/obj/structure/toilet/prison/attack_hand(mob/living/user) + return + +/obj/structure/toilet/prison/attackby(obj/item/I, mob/living/user) + if(istype(I, /obj/item/weapon/grab)) + user.setClickCooldown(user.get_attack_speed(I)) + + var/obj/item/weapon/grab/G = I + + if(isliving(G.affecting)) + var/mob/living/GM = G.affecting + + if(G.state>1) + if(!GM.loc == get_turf(src)) + to_chat(user, "[GM.name] needs to be on the toilet.") + return + if(open && !swirlie) + user.visible_message("[user] starts to give [GM.name] a swirlie!", "You start to give [GM.name] a swirlie!") + swirlie = GM + if(do_after(user, 30, GM)) + user.visible_message("[user] gives [GM.name] a swirlie!", "You give [GM.name] a swirlie!", "You hear a toilet flushing.") + if(!GM.internal) + GM.adjustOxyLoss(5) + swirlie = null + else + user.visible_message("[user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!") + GM.adjustBruteLoss(5) + else + to_chat(user, "You need a tighter grip.") + /obj/structure/urinal name = "urinal" @@ -222,7 +256,7 @@ M.touching.remove_any(remove_amount) M.clean_blood() - + if(isturf(loc)) var/turf/tile = loc for(var/obj/effect/E in tile) @@ -274,7 +308,7 @@ icon_state = "rubberducky" /obj/structure/sink - name = "sink" + name = "bathroom sink" icon = 'icons/obj/watercloset.dmi' icon_state = "sink" desc = "A sink used for washing one's hands and face." @@ -392,6 +426,14 @@ name = "kitchen sink" icon_state = "sink_alt" +/obj/structure/sink/countertop + name = "countertop sink" + icon_state = "sink3" + +/obj/structure/sink/generic + name = "sink" + icon_state = "sink4" + /obj/structure/sink/puddle //splishy splashy ^_^ name = "puddle" icon_state = "puddle" diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 213691ab70..df5fe16aa7 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -148,7 +148,7 @@ var/list/flooring_types icon_base = "grass_sif" build_type = /obj/item/stack/tile/grass/sif has_base_range = 1 - + /decl/flooring/grass/sif/forest name = "thick growth" desc = "A natural moss that has adapted to the sheer cold climate." @@ -232,7 +232,7 @@ var/list/flooring_types /decl/flooring/snow name = "snow" desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is." - icon = 'icons/turf/snow_new.dmi' + icon = 'icons/turf/outdoors.dmi' icon_base = "snow" footstep_sounds = list("human" = list( 'sound/effects/footstep/snow1.ogg', diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 4926d1e047..83161f40f2 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -16,8 +16,8 @@ var/list/floor_decals = list() color = newcolour ..(newloc) -// TODO: identify what is causing these atoms to be qdeleted in New()/Initialize() -// somewhere in this chain. Alternatively repath to /obj/floor_decal or some other +// TODO: identify what is causing these atoms to be qdeleted in New()/Initialize() +// somewhere in this chain. Alternatively repath to /obj/floor_decal or some other // abstract handler that explicitly doesn't invoke any obj behavior. /obj/effect/floor_decal/Initialize() add_to_turf_decals() @@ -1215,3 +1215,28 @@ var/list/floor_decals = list() /obj/effect/floor_decal/grass_edge/corner name = "grass edge" icon_state = "grass_edge_corner" + +//Multi-part Floor Signs + +/obj/effect/floor_decal/arrivals + name = "arrivals sign" + icon_state = "arrivals_1" + +/obj/effect/floor_decal/arrivals/right + icon_state = "arrivals_2" + +/obj/effect/floor_decal/shuttles + name = "departures sign" + icon_state = "shuttle_1" + +/obj/effect/floor_decal/shuttles/right + icon_state = "shuttle_2" + +/obj/effect/floor_decal/arrow + name = "floor arrow" + icon_state = "arrow_single" + +/obj/effect/floor_decal/arrows + name = "floor arrows" + icon_state = "arrows" + diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index 05be706493..e3e9548647 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -400,7 +400,7 @@ //**** Here lives snow **** /turf/simulated/floor/snow name = "snow" - icon = 'icons/turf/snow_new.dmi' + icon = 'icons/turf/outdoors.dmi' icon_state = "snow" initial_flooring = /decl/flooring/snow var/list/crossed_dirs = list() diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 3c3d1adb92..ae8664113a 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -45,10 +45,10 @@ return // Create a ceiling to shield from the weather - if(src.outdoors == OUTDOORS_YES) + if(src.is_outdoors()) for(var/dir in cardinal) var/turf/A = get_step(src, dir) - if(A && !A.outdoors == OUTDOORS_YES) + if(A && !A.is_outdoors()) if(expended_tile || R.use(1)) make_indoors() playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm index 8ffa4c8aeb..cfed9385c6 100644 --- a/code/game/turfs/simulated/outdoors/outdoors.dm +++ b/code/game/turfs/simulated/outdoors/outdoors.dm @@ -1,6 +1,6 @@ var/list/turf_edge_cache = list() -/turf/ +/turf // If greater than 0, this turf will apply edge overlays on top of other turfs cardinally adjacent to it, if those adjacent turfs are of a different icon_state, // and if those adjacent turfs have a lower edge_blending_priority. var/edge_blending_priority = 0 @@ -26,19 +26,22 @@ var/list/turf_edge_cache = list() var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks) /turf/simulated/floor/Initialize(mapload) - if(should_be_outdoors()) + if(is_outdoors()) SSplanets.addTurf(src) . = ..() /turf/simulated/floor/Destroy() - if(should_be_outdoors()) + if(is_outdoors()) SSplanets.removeTurf(src) return ..() // Turfs can decide if they should be indoors or outdoors. // By default they choose based on their area's setting. // This helps cut down on ten billion `/outdoors` subtypes being needed. -/turf/simulated/proc/should_be_outdoors() +/turf/proc/is_outdoors() + return FALSE + +/turf/simulated/is_outdoors() switch(outdoors) if(OUTDOORS_YES) return TRUE @@ -50,14 +53,16 @@ var/list/turf_edge_cache = list() return TRUE return FALSE +/// Makes the turf explicitly outdoors. /turf/simulated/proc/make_outdoors() - if(outdoors == OUTDOORS_YES) + if(is_outdoors()) // Already outdoors. return outdoors = OUTDOORS_YES SSplanets.addTurf(src) +/// Makes the turf explicitly indoors. /turf/simulated/proc/make_indoors() - if(!outdoors == OUTDOORS_NO) + if(!is_outdoors()) // Already indoors. return outdoors = OUTDOORS_NO SSplanets.removeTurf(src) @@ -65,7 +70,7 @@ var/list/turf_edge_cache = list() /turf/simulated/post_change() ..() // If it was outdoors and still is, it will not get added twice when the planet controller gets around to putting it in. - if(outdoors == OUTDOORS_YES) + if(is_outdoors()) make_outdoors() else make_indoors() diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index 07a6804803..fc4832d845 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -53,6 +53,16 @@ desc = "Looks slippery." edge_blending_priority = 0 +/turf/simulated/floor/outdoors/ice/dark + name = "black ice" + icon_state = "ice_dark" + desc = "An uneven surface of dark rocks glazed over by solid ice. Looks slippey, maybe even painful" + +/turf/simulated/floor/outdoors/ice/dark_smooth + name = "smooth black ice" + icon_state = "ice_dark_smooth" + desc = "Dark rock that has been smoothened to be perfectly even. It's coated in a layer of slippey ice" + /turf/simulated/floor/outdoors/ice/Entered(var/mob/living/M) sleep(1 * world.tick_lag) if(istype(M, /mob/living)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 3a1e1224f5..559bc62557 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -171,7 +171,7 @@ return // Create a ceiling to shield from the weather - if(outdoors == OUTDOORS_YES) + if(is_outdoors()) if(expended_tile || R.use(1)) // Don't need to check adjacent turfs for a wall, we're building on one make_indoors() if(!expended_tile) // Would've already played a sound diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm index 6153884f59..5b94301c34 100644 --- a/code/modules/admin/verbs/lightning_strike.dm +++ b/code/modules/admin/verbs/lightning_strike.dm @@ -40,13 +40,13 @@ for(var/obj/machinery/power/thing in range(LIGHTNING_REDIRECT_RANGE, T)) if(istype(thing, /obj/machinery/power/tesla_coil)) var/turf/simulated/coil_turf = get_turf(thing) - if(istype(coil_turf) && thing.anchored && coil_turf.outdoors == OUTDOORS_YES) + if(istype(coil_turf) && thing.anchored && coil_turf.is_outdoors()) coil = thing break if(istype(thing, /obj/machinery/power/grounding_rod)) var/turf/simulated/rod_turf = get_turf(thing) - if(istype(rod_turf) && thing.anchored && rod_turf.outdoors == OUTDOORS_YES) + if(istype(rod_turf) && thing.anchored && rod_turf.is_outdoors()) ground = thing if(coil) // Coil gets highest priority. diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 08854d0eee..f45fcdf016 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -70,7 +70,7 @@ var/temp = "" var/category = R_ADMIN if(check_rights(R_ADMIN, FALSE, C)) // admins - if(C.holder.fakekey && check_rights(R_ADMIN|R_MOD, FALSE, src)) // Only admins and mods can see stealthmins + if(C.holder.fakekey && !check_rights_for(src, R_ADMIN|R_MOD)) // Only admins and mods can see stealthmins continue num_admins_online++ else if(check_rights(R_MOD, FALSE, C)) // mods diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 259118c57f..4999aa91ca 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -433,7 +433,8 @@ products = list(/obj/item/weapon/handcuffs = 8, /obj/item/weapon/grenade/flashbang = 4, /obj/item/device/flash = 5, - /obj/item/weapon/reagent_containers/food/snacks/donut/normal = 12, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain = 6, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly = 6, /obj/item/weapon/storage/box/evidence = 6) contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/weapon/storage/box/donut = 2) @@ -1023,4 +1024,34 @@ products = list(/obj/item/weapon/reagent_containers/food/snacks/packaged/genration = 8, /obj/item/weapon/reagent_containers/food/snacks/packaged/vegration = 8, /obj/item/weapon/reagent_containers/food/snacks/packaged/meatration = 8) - contraband = list(/obj/item/weapon/reagent_containers/food/snacks/packaged/sweetration = 2) \ No newline at end of file + contraband = list(/obj/item/weapon/reagent_containers/food/snacks/packaged/sweetration = 2) + +///////////////////////Radical Renard/////////////////////////////////////// + +/obj/machinery/vending/radren + name = "Radical Renard Sodas" + desc = "A softdrink vendor owned by a frontier based soda company that's been contracted by NanoTrasen" + icon_state = "radren" + product_slogans = "Enjoy the rad refreshing taste of Radical Renard brand soda!" + product_ads = "Radically Refreshing!;Get Cool!;Have you tried our new Andromeda Apple?;Enjoy a cold one with Renard!" + products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10) + contraband = list() + prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2, + /obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1) + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + vending_sound = "machines/vending/vending_cans.ogg" \ No newline at end of file diff --git a/code/modules/flufftext/look_up.dm b/code/modules/flufftext/look_up.dm index 846925c4db..10cd25b288 100644 --- a/code/modules/flufftext/look_up.dm +++ b/code/modules/flufftext/look_up.dm @@ -12,7 +12,7 @@ to_chat(usr, span("warning", "You appear to be in a place without any sort of concept of direction. You have bigger problems to worry about.")) return - if(T.outdoors == OUTDOORS_NO) // They're inside. + if(!T.is_outdoors()) // They're inside. to_chat(usr, "You see nothing interesting.") return diff --git a/code/modules/food/food/cans.dm b/code/modules/food/food/cans.dm index 6b53a966dd..9a50547a04 100644 --- a/code/modules/food/food/cans.dm +++ b/code/modules/food/food/cans.dm @@ -137,7 +137,7 @@ /obj/item/weapon/reagent_containers/food/drinks/cans/tonic/Initialize() . = ..() - reagents.add_reagent("tonic", 50) + reagents.add_reagent("tonic", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater name = "soda water" @@ -147,7 +147,7 @@ /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater/Initialize() . = ..() - reagents.add_reagent("sodawater", 50) + reagents.add_reagent("sodawater", 30) /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale name = "\improper Classic Ginger Ale" @@ -171,7 +171,7 @@ . = ..() reagents.add_reagent("rootbeer", 30) -//ADDITIONS BELOW THIS LINE MADE ON 04/03/2021 +/////////////////////////BODA VENDOR DRINKS///////////////////////// /obj/item/weapon/reagent_containers/food/drinks/cans/kvass name = "\improper Kvass" @@ -203,4 +203,150 @@ /obj/item/weapon/reagent_containers/food/drinks/cans/boda/Initialize() . = ..() - reagents.add_reagent("sodawater", 30) \ No newline at end of file + reagents.add_reagent("sodawater", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/bodaplus + name = "\improper Boda-Plyus" + desc = "State regulated soda beverage, now with added surplus flavoring. Enjoy comrades." + icon_state = "bodaplus" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/bodaplus/Initialize() + . = ..() + reagents.add_reagent("sodawater", 15) + reagents.add_reagent(pick(list( + "applejuice", + "grapejuice", + "lemonjuice", + "limejuice", + "watermelonjuice", + "banana", + "berryjuice", + "pineapplejuice")), 15) + +/obj/item/weapon/reagent_containers/food/drinks/cans/redarmy + name = "\improper Red Army Twist" + desc = "A taste of what keeps our glorious nation running! Served as Space Commissariat Stahlin prefers it! Luke warm." + icon_state = "red_army" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/redarmy/Initialize() + . = ..() + reagents.add_reagent("potatojuice", 15) + reagents.add_reagent("sodawater", 15) + +/obj/item/weapon/reagent_containers/food/drinks/cans/arstbru + name = "\improper Arstotzka Brü" + desc = "Just what any bureaucrat needs to get through the day. Keep stamping those papers!" + icon_state = "arst_bru" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/arstbru/Initialize() + . = ..() + reagents.add_reagent("turnipjuice", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/terra_cola + name = "\improper Terra-Cola" + desc = "Made by the people. Served to the people." + description_fluff = "A can of the only soft drink state approved for the benefit of the people. Served at room temperature regardless of ambient temperatures thanks to innovative Terran insulation technology." + icon_state = "terra_cola" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/terra_cola/Initialize() + . = ..() + reagents.add_reagent("water", 25) + reagents.add_reagent("iron", 5) + +/////////////////////////MISC VENDOR DRINKS///////////////////////// + +/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola + name = "\improper Superior Strawberry" + desc = "Feel superior above all with Superior Strawberry!" + icon_state = "strawcoke" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/straw_cola/Initialize() + . = ..() + reagents.add_reagent("strawsoda", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola + name = "\improper Andromeda Apple" + desc = "Look to the stars and prepare to explore with Andromeda Apple!" + icon_state = "applecoke" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/apple_cola/Initialize() + . = ..() + reagents.add_reagent("applesoda", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola + name = "\improper Lunar Lemon" + desc = "Feel back at home on the Lunar Colonies with this classic berverage straight from the source!" + icon_state = "lemoncoke" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_cola/Initialize() + . = ..() + reagents.add_reagent("lemonsoda", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla + name = "\improper Starship Sarsaparilla" + desc = "Take off and shoot for the stars with this classic cowboy cola!" + icon_state = "sarsaparilla" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/sarsaparilla/Initialize() + . = ..() + reagents.add_reagent("sarsaparilla", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola + name = "\improper Gravity Grape" + desc = "Get down with Newton's favorite corbonated science experiment!" + icon_state = "grapesoda" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_cola/Initialize() + . = ..() + reagents.add_reagent("grapesoda", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola + name = "\improper Orion Orange" + desc = "Take a taste-tastic trip to Orion's Belt with Orion Orange!" + icon_state = "orangesoda" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/orange_cola/Initialize() + . = ..() + reagents.add_reagent("orangesoda", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda + name = "\improper Bacon Soda" + desc = "Taste something out of this world with Bacon Soda!" + icon_state = "porkcoke" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/baconsoda/Initialize() + . = ..() + reagents.add_reagent("porksoda", 30) + +/////////////////////////CANNED BOOZE DRINKS///////////////////////// + +/obj/item/weapon/reagent_containers/food/drinks/cans/beercan + name = "\improper Sunshine Brew" + desc = "Beat the heat with this refreshing brewed beverage." + icon_state = "beercan" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/beercan/Initialize() + . = ..() + reagents.add_reagent("beer", 30) + +/obj/item/weapon/reagent_containers/food/drinks/cans/alecan + name = "\improper Spacecastle Pale Ale" + desc = "A delicious IPA that's canned for your pleasure. Drink up!" + icon_state = "alecan" + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/drinks/cans/alecan/Initialize() + . = ..() + reagents.add_reagent("ale", 30) \ No newline at end of file diff --git a/code/modules/food/food/drinks/bottle.dm b/code/modules/food/food/drinks/bottle.dm index 124240d906..6000c567ad 100644 --- a/code/modules/food/food/drinks/bottle.dm +++ b/code/modules/food/food/drinks/bottle.dm @@ -87,7 +87,7 @@ if(A.density && usr.Adjacent(A) && !istype(A, /mob)) things_to_smash_on += A - var/atom/choice = input("Select what you want to smash the bottle on.") as null|anything in things_to_smash_on + var/atom/choice = input(usr, "Select what you want to smash the bottle on.", "SMASH!", things_to_smash_on) if(!choice) return if(!(choice.density && usr.Adjacent(choice))) @@ -205,7 +205,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey name = "Uncle Git's Special Reserve" desc = "A premium single-malt whiskey, gently matured in a highly classified location." - icon_state = "whiskeybottle" + icon_state = "whiskeybottle1" center_of_mass = list("x"=16, "y"=3) /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/Initialize() @@ -322,16 +322,6 @@ . = ..() reagents.add_reagent("cognac", 100) -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine - name = "Doublebeard Bearded Special Wine" - desc = "Cheap cooking wine pretending to be drinkable." - icon_state = "winebottle" - center_of_mass = list("x"=16, "y"=4) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/Initialize() - . = ..() - reagents.add_reagent("wine", 100) - /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe name = "Jailbreaker Verte" desc = "One sip of this and you just know you're gonna have a good time." @@ -362,26 +352,6 @@ . = ..() reagents.add_reagent("bluecuracao", 100) -/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine - name = "Briar Rose Grenadine Syrup" - desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." - icon_state = "grenadinebottle" - center_of_mass = list("x"=16, "y"=6) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/Initialize() - . = ..() - reagents.add_reagent("grenadine", 100) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine - name = "Warlock's Velvet" - desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" - icon_state = "pwinebottle" - center_of_mass = list("x"=16, "y"=4) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/Initialize() - . = ..() - reagents.add_reagent("pwine", 100) - /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew name = "Redeemer's Brew" desc = "Just opening the top of this bottle makes you feel a bit tipsy. Not for the faint of heart." @@ -392,26 +362,6 @@ . = ..() reagents.add_reagent("unathiliquor", 100) -/obj/item/weapon/reagent_containers/food/drinks/bottle/sake - name = "Mono-No-Aware Luxury Sake" - desc = "Dry alcohol made from rice, a favorite of businessmen." - icon_state = "sakebottle" - center_of_mass = list("x"=16, "y"=3) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize() - . = ..() - reagents.add_reagent("sake", 100) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne - name = "Gilthari Luxury Champagne" - desc = "For those special occassions." - icon_state = "champagne" - center_of_mass = list("x"=16, "y"=3) - -/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize() - . = ..() - reagents.add_reagent("champagne", 100) - /obj/item/weapon/reagent_containers/food/drinks/bottle/peppermintschnapps name = "Dr. Bone's Peppermint Schnapps" desc = "A flavoured grain liqueur with a fresh, minty taste." @@ -452,6 +402,68 @@ . = ..() reagents.add_reagent("jager", 100) +/////////////////////////WINES///////////////////////// + +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine + name = "Doublebeard Bearded Special Red" + desc = "Cheap cooking wine pretending to be drinkable." + icon_state = "winebottle" + center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/Initialize() + . = ..() + reagents.add_reagent("redwine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/whitewine + name = "Doublebeard Bearded Special White" + desc = "Cooking wine pretending to be drinkable." + icon_state = "whitewinebottle" + center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/whitewine/Initialize() + . = ..() + reagents.add_reagent("whitewine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/carnoth //anagram of 'ntcahors' where the bottle sprite originated from + name = "NanoTrasen Carnoth Red" + desc = "A NanoTrasen branded wine given to high ranking staff as gifts. Made special on the agricultural planet Carnoth." + icon_state = "carnoth" + center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/carnoth/Initialize() + . = ..() + reagents.add_reagent("carnoth", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine + name = "Warlock's Velvet" + desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" + icon_state = "pwinebottle" + center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/Initialize() + . = ..() + reagents.add_reagent("pwine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne + name = "Gilthari Luxury Champagne" + desc = "For those special occassions." + icon_state = "champagne" + center_of_mass = list("x"=16, "y"=3) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/Initialize() + . = ..() + reagents.add_reagent("champagne", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/sake + name = "Mono-No-Aware Luxury Sake" + desc = "Dry alcohol made from rice, a favorite of businessmen." + icon_state = "sakebottle" + center_of_mass = list("x"=16, "y"=3) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/Initialize() + . = ..() + reagents.add_reagent("sake", 100) + //////////////////////////JUICES AND STUFF/////////////////////// /obj/item/weapon/reagent_containers/food/drinks/bottle/cola //MODIFIED ON 04/21/2021 @@ -578,6 +590,26 @@ . = ..() reagents.add_reagent("lemonjuice", 100) +/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine + name = "Briar Rose Grenadine Syrup" + desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." + icon_state = "grenadinebottle" + center_of_mass = list("x"=16, "y"=6) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/Initialize() + . = ..() + reagents.add_reagent("grenadine", 100) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/grapejuice + name = "Special Blend Grapejuice" + desc = "A delicious blend of various grape species in one succulent blend." + icon_state = "grapejuicebottle" + center_of_mass = list("x"=16, "y"=3) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/grapejuice/Initialize() + . = ..() + reagents.add_reagent("grapejuice", 100) + //////////////////////////SMALL BOTTLES/////////////////////// /obj/item/weapon/reagent_containers/food/drinks/bottle/small @@ -629,7 +661,6 @@ . = ..() reagents.add_reagent("cider", 50) - /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale name = "\improper Magm-Ale" desc = "A true dorf's drink of choice." @@ -650,3 +681,45 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper/Initialize() . = ..() reagents.add_reagent("ale", 50) + +//////////////////////////SMALL BOTTLED SODA/////////////////////// + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cola + name = "Space Cola" + desc = "Cola. In space." + icon_state = "colabottle2" + center_of_mass = list("x"=16, "y"=6) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/cola/Initialize() + . = ..() + reagents.add_reagent("cola", 50) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_up + name = "Space-Up" + desc = "Tastes like a hull breach in your mouth." + icon_state = "space-up_bottle2" + center_of_mass = list("x"=16, "y"=6) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_up/Initialize() + . = ..() + reagents.add_reagent("space_up", 50) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_mountain_wind + name = "Space Mountain Wind" + desc = "Blows right through you like a space wind." + icon_state = "space_mountain_wind_bottle2" + center_of_mass = list("x"=16, "y"=6) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/space_mountain_wind/Initialize() + . = ..() + reagents.add_reagent("spacemountainwind", 50) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/dr_gibb + name = "Dr. Gibb" + desc = "A delicious mixture of 42 different flavors." + icon_state = "dr_gibb_bottle2" + center_of_mass = list("x"=16, "y"=6) + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/dr_gibb/Initialize() + . = ..() + reagents.add_reagent("dr_gibb", 50) \ No newline at end of file diff --git a/code/modules/food/food/lunch.dm b/code/modules/food/food/lunch.dm index 871e37e187..6bbd434e43 100644 --- a/code/modules/food/food/lunch.dm +++ b/code/modules/food/food/lunch.dm @@ -12,8 +12,8 @@ var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/sna /obj/item/weapon/reagent_containers/food/snacks/tossedsalad, /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose) -var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, - /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, +var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly, /obj/item/weapon/reagent_containers/food/snacks/muffin, /obj/item/weapon/reagent_containers/food/snacks/popcorn, /obj/item/weapon/reagent_containers/food/snacks/sosjerky, diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index ffc8070254..733fae75df 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -160,24 +160,7 @@ // Eating with forks if(istype(W,/obj/item/weapon/material/kitchen/utensil)) var/obj/item/weapon/material/kitchen/utensil/U = W - if(!U.reagents) - U.create_reagents(5) - - if (U.reagents.total_volume > 0) - to_chat(user, "You already have something on your [U].") - return - - user.visible_message( \ - "[user] scoops up some [src] with \the [U]!", \ - "You scoop up some [src] with \the [U]!" \ - ) - - bitecount++ - - reagents.trans_to_obj(U, min(reagents.total_volume,5)) - - if (reagents.total_volume <= 0) - qdel(src) + U.load_food(user, src) return if (is_sliceable()) @@ -369,43 +352,280 @@ name = "donut" desc = "Goes great with Robust Coffee." description_fluff = "These donuts claim to be made fresh daily in a boutique bakery in New Reykjavik and delivered to Nanotrasen's hardworking asset protection crew. They're probably synthesized." - icon_state = "donut1" + icon = 'icons/obj/food_donuts.dmi' + icon_state = "donut" filling_color = "#D9C386" - var/overlay_state = "box-donut1" - center_of_mass = list("x"=13, "y"=16) nutriment_desc = list("sweetness", "donut") - -/obj/item/weapon/reagent_containers/food/snacks/donut/normal - name = "donut" - desc = "Goes great with Robust Coffee." - icon_state = "donut1" nutriment_amt = 3 - bitesize = 3 + bitesize = 4 + var/overlay_state = "donut_inbox" -/obj/item/weapon/reagent_containers/food/snacks/donut/normal/Initialize() +/obj/item/weapon/reagent_containers/food/snacks/donut/plain + name = "plain donut" + icon_state = "donut" + desc = "A plain ol' donut." + +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly + name = "plain jelly donut" + icon_state = "jelly" + desc = "At least this one has jelly!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/pink + name = "pink frosted donut" + icon_state = "donut_pink" + desc = "This one has pink frosting!" + overlay_state = "donut_pink_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/pink/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly + name = "pink frosted jelly donut" + icon_state = "jelly_pink" + desc = "This one has pink frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/pink/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/purple + name = "purple frosted donut" + icon_state = "donut_purple" + desc = "This one has purple frosting!" + overlay_state = "donut_purple_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/purple/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly + name = "purple frosted jelly donut" + icon_state = "jelly_purple" + desc = "This one has purple frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/purple/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/green + name = "green frosted donut" + icon_state = "donut_green" + desc = "This one has green frosting!" + overlay_state = "donut_green_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/green/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly + name = "green frosted jelly donut" + icon_state = "jelly_green" + desc = "This one has green frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/green/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/beige + name = "beige frosted donut" + icon_state = "donut_beige" + desc = "This one has beige frosting!" + overlay_state = "donut_beige_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/beige/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly + name = "beige frosted jelly donut" + icon_state = "jelly_beige" + desc = "This one has beige frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/beige/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc + name = "chocolate frosted donut" + icon_state = "donut_choc" + desc = "This one has chocolate frosting!" + overlay_state = "donut_choc_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly + name = "chocolate frosted jelly donut" + icon_state = "jelly_choc" + desc = "This one has chocolate frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/blue + name = "blue frosted donut" + icon_state = "donut_blue" + desc = "This one has blue frosting!" + overlay_state = "donut_blue_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/blue/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly + name = "blue frosted jelly donut" + icon_state = "jelly_blue" + desc = "This one has blue frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/blue/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow + name = "yellow frosted donut" + icon_state = "donut_yellow" + desc = "This one has yellow frosting!" + overlay_state = "donut_yellow_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly + name = "yellow frosted jelly donut" + icon_state = "jelly_yellow" + desc = "This one has yellow frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/yellow/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/olive + name = "olive frosted donut" + icon_state = "donut_olive" + desc = "This one has olive frosting!" + overlay_state = "donut_olive_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/olive/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly + name = "olive frosted jelly donut" + icon_state = "jelly_olive" + desc = "This one has olive frosting and a jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/olive/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/homer + name = "frosted donut with sprinkles" + icon_state = "donut_homer" + desc = "It's a d'ohnut!" + overlay_state = "donut_homer_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/homer/Initialize() . = ..() reagents.add_reagent("nutriment", 3, nutriment_desc) reagents.add_reagent("sprinkles", 1) - if(prob(30)) - src.icon_state = "donut2" - src.overlay_state = "box-donut2" - src.name = "frosted donut" - reagents.add_reagent("sprinkles", 2) - center_of_mass = list("x"=19, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly + name = "frosted jelly donut with sprinkles" + icon_state = "jelly_homer" + desc = "It's a d'ohnut with jelly filling!" + +/obj/item/weapon/reagent_containers/food/snacks/donut/homer/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles + name = "chocolate sprinkles donut" + icon_state = "donut_choc_sprinkles" + desc = "Mmm, chocolate with sprinkles... approaching maximum donut." + overlay_state = "donut_choc_sprinkles_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("sprinkles", 1) + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly + name = "chocolate sprinkles jelly donut" + icon_state = "jelly_choc_sprinkles" + desc = "Pretty sure this is the most sugar you can pack into a donut." + +/obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("berryjuice", 5) + +/obj/item/weapon/reagent_containers/food/snacks/donut/meat + name = "meat donut" + icon_state = "donut_meat" + desc = "This donut has ... meat? Is it made of meat?!" + overlay_state = "donut_meat_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/meat/Initialize() + . = ..() + reagents.add_reagent("protein", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh + name = "laugh donut" + icon_state = "donut_laugh" + desc = "Try not to laugh." + overlay_state = "donut_laugh_inbox" + +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh/jelly + name = "laugh jelly donut" + icon_state = "jelly_laugh" + desc = "Try not to be jelly." + +/obj/item/weapon/reagent_containers/food/snacks/donut/laugh/jelly/Initialize() + . = ..() + reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("berryjuice", 5) /obj/item/weapon/reagent_containers/food/snacks/donut/chaos name = "Chaos Donut" desc = "Like life, it never quite tastes the same." - icon_state = "donut1" + icon_state = "donut_chaos" filling_color = "#ED11E6" nutriment_amt = 2 bitesize = 10 + overlay_state = "donut_chaos_inbox" /obj/item/weapon/reagent_containers/food/snacks/donut/chaos/Initialize() . = ..() reagents.add_reagent("sprinkles", 1) - var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10) - switch(chaosselect) + switch(rand(1,10)) if(1) reagents.add_reagent("nutriment", 3, nutriment_desc) if(2) @@ -432,81 +652,26 @@ src.name = "Frosted Chaos Donut" reagents.add_reagent("sprinkles", 2) -/obj/item/weapon/reagent_containers/food/snacks/donut/jelly - name = "Jelly Donut" - desc = "You jelly?" - icon_state = "jdonut1" +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry filling_color = "#ED1169" - center_of_mass = list("x"=16, "y"=11) - nutriment_amt = 3 - bitesize = 5 -/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/Initialize() +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry/Initialize() . = ..() - reagents.add_reagent("sprinkles", 1) - reagents.add_reagent("berryjuice", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) - -/obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry - name = "Jelly Donut" - desc = "You jelly?" - icon_state = "jdonut1" - filling_color = "#ED1169" - center_of_mass = list("x"=16, "y"=11) - nutriment_amt = 3 - bitesize = 5 - -/obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry/Initialize() - . = ..() - reagents.add_reagent("sprinkles", 1) reagents.add_reagent("poisonberryjuice", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) -/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly - name = "Jelly Donut" - desc = "You jelly?" - icon_state = "jdonut1" +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly filling_color = "#ED1169" - center_of_mass = list("x"=16, "y"=11) - nutriment_amt = 3 - bitesize = 5 -/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/Initialize() +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly/Initialize() . = ..() - reagents.add_reagent("sprinkles", 1) reagents.add_reagent("slimejelly", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) -/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly - name = "Jelly Donut" - desc = "You jelly?" - icon_state = "jdonut1" +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly filling_color = "#ED1169" - center_of_mass = list("x"=16, "y"=11) - nutriment_amt = 3 - bitesize = 5 -/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/Initialize() +/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly/Initialize() . = ..() - reagents.add_reagent("sprinkles", 1) reagents.add_reagent("cherryjelly", 5) - if(prob(30)) - src.icon_state = "jdonut2" - src.overlay_state = "box-donut2" - src.name = "Frosted Jelly Donut" - reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" diff --git a/code/modules/food/recipes_fryer.dm b/code/modules/food/recipes_fryer.dm index 8b38c909dd..8df0da2b96 100644 --- a/code/modules/food/recipes_fryer.dm +++ b/code/modules/food/recipes_fryer.dm @@ -128,7 +128,7 @@ items = list( /obj/item/weapon/reagent_containers/food/snacks/doughslice ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly result_quantity = 2 /datum/recipe/jellydonut/poisonberry @@ -136,15 +136,15 @@ items = list( /obj/item/weapon/reagent_containers/food/snacks/dough ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/poisonberry /datum/recipe/jellydonut/slime // Subtypes of jellydonut, appliance inheritance applies. reagents = list("slimejelly" = 5, "sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/slimejelly /datum/recipe/jellydonut/cherry // Subtypes of jellydonut, appliance inheritance applies. reagents = list("cherryjelly" = 5, "sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly /datum/recipe/donut appliance = FRYER @@ -152,7 +152,7 @@ items = list( /obj/item/weapon/reagent_containers/food/snacks/doughslice ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + result = /obj/item/weapon/reagent_containers/food/snacks/donut/plain result_quantity = 2 /datum/recipe/chaosdonut diff --git a/code/modules/materials/sheets/organic/wood.dm b/code/modules/materials/sheets/organic/wood.dm index d3d1fd6418..eb95131425 100644 --- a/code/modules/materials/sheets/organic/wood.dm +++ b/code/modules/materials/sheets/organic/wood.dm @@ -18,7 +18,7 @@ icon_state = "sheet-log" default_type = MAT_LOG no_variants = FALSE - color = "#824B28" + color = WOOD_COLOR_FURNITURE max_amount = 25 w_class = ITEMSIZE_HUGE description_info = "Use inhand to craft things, or use a sharp and edged object on this to convert it into two wooden planks." diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 1c39b4f53a..d700d43149 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -43,7 +43,7 @@ var/global/list/total_extraction_beacons = list() return if(!can_use_indoors) var/turf/T = get_turf(A) - if(T && T.outdoors == OUTDOORS_NO) + if(T && !T.is_outdoors()) to_chat(user, "[src] can only be used on things that are outdoors!") return if(!flag) @@ -146,7 +146,7 @@ var/global/list/total_extraction_beacons = list() /obj/item/fulton_core/attack_self(mob/user) var/turf/T = get_turf(user) - var/outdoors = T.outdoors == OUTDOORS_YES + var/outdoors = T.is_outdoors() if(do_after(user,15,target = user) && !QDELETED(src) && outdoors) new /obj/structure/extraction_point(get_turf(user)) qdel(src) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 7e19a1415d..daa6e2710c 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -73,6 +73,30 @@ var/list/mining_overlay_cache = list() rock_icon_state = "rock-light" random_icon = 1 +/turf/simulated/mineral/alt + icon_state = "rock-alt" + rock_side_icon_state = "rock_side-alt" + sand_icon_state = "asteroid" + rock_icon_state = "rock-alt" + +/turf/simulated/mineral/icey + icon_state = "rock-icey" + rock_side_icon_state = "rock_side-icey" + sand_icon_state = "sand-icey" // to be replaced + rock_icon_state = "rock-icey" + +/turf/simulated/mineral/crystal + icon_state = "rock-crystal" + rock_side_icon_state = "rock_side-crystal" + sand_icon_state = "sand-icey" // to be replaced + rock_icon_state = "rock-crystal" + +/turf/simulated/mineral/crystal_shiny + icon_state = "rock-crystal-shiny" + rock_side_icon_state = "rock_side-crystal" + sand_icon_state = "sand-icey" // to be replaced + rock_icon_state = "rock-crystal-shiny" + /turf/simulated/mineral/ignore_mapgen ignore_mapgen = 1 @@ -90,6 +114,10 @@ var/list/mining_overlay_cache = list() icon_state = "sand-light" sand_icon_state = "sand-light" +/turf/simulated/mineral/floor/icey + icon_state = "sand-icey" + sand_icon_state = "sand-icey" // to be replaced + /turf/simulated/mineral/floor/light_border icon_state = "sand-light-border" sand_icon_state = "sand-light-border" diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 7a921adf04..f8b7ad6fb2 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -8,7 +8,7 @@ return 1 if(feedback) if(status[1] == HUMAN_EATING_NO_MOUTH) - to_chat(src, "Where do you intend to put \the [food]? You don't have a mouth!") + to_chat(src, "Where do you intend to put [food]? You don't have a mouth!") else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) to_chat(src, "\The [status[2]] is in the way!") return 0 @@ -19,7 +19,7 @@ return 1 if(feedback) if(status[1] == HUMAN_EATING_NO_MOUTH) - to_chat(feeder, "Where do you intend to put \the [food]? \The [src] doesn't have a mouth!") + to_chat(feeder, "Where do you intend to put [food]? \The [src] doesn't have a mouth!") else if(status[1] == HUMAN_EATING_BLOCKED_MOUTH) to_chat(feeder, "\The [status[2]] is in the way!") return 0 diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 6c6ea77f71..4ab13ff86f 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -146,7 +146,7 @@ . += turf_move_cost // Wind makes it easier or harder to move, depending on if you're with or against the wind. - if((T.outdoors == OUTDOORS_YES) && (T.z <= SSplanets.z_to_planet.len)) + if((T.is_outdoors()) && (T.z <= SSplanets.z_to_planet.len)) var/datum/planet/P = SSplanets.z_to_planet[z] if(P) var/datum/weather_holder/WH = P.weather_holder diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 938e8d8c8e..a6aab5cdee 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -32,6 +32,10 @@ "Mouse" = "pai-mouse", "Monkey" = "pai-monkey", "Corgi" = "pai-borgi", + "Bat" = "pai-bat", + "Butterfly" = "pai-butterfly", + "Hawk" = "pai-hawk", + "Duffel" = "pai-duffel", "Fox" = "pai-fox", "Parrot" = "pai-parrot", "Rabbit" = "pai-rabbit", @@ -44,6 +48,7 @@ "Chirp" = list("chirps","chirrups","cheeps"), "Feline" = list("purrs","yowls","meows"), "Canine" = list("yaps","barks","woofs"), + "Rodent" = list("squeaks", "SQUEAKS", "sqiks") ) var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking @@ -112,7 +117,7 @@ pda.ownjob = "Personal Assistant" pda.owner = text("[]", src) pda.name = pda.owner + " (" + pda.ownjob + ")" - + var/datum/data/pda/app/messenger/M = pda.find_program(/datum/data/pda/app/messenger) if(M) M.toff = TRUE diff --git a/code/modules/multiz/zshadow.dm b/code/modules/multiz/zshadow.dm index 8787836265..e43ab21939 100644 --- a/code/modules/multiz/zshadow.dm +++ b/code/modules/multiz/zshadow.dm @@ -41,12 +41,12 @@ return owner.examine(user, distance, infix, suffix) // Relay some stuff they hear -/mob/zshadow/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/zshadow/hear_say(var/list/message_pieces, var/verb = "says", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) if(speaker && speaker.z != src.z) return // Only relay speech on our acutal z, otherwise we might relay sounds that were themselves relayed up! if(isliving(owner)) verb += " from above" - return owner.hear_say(message, verb, language, italics, speaker, speech_sound, sound_vol) + return owner.hear_say(message_pieces, verb, italics, speaker, speech_sound, sound_vol) /mob/zshadow/proc/sync_icon(var/mob/M) name = M.name diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm index 0c199ddf4e..7378e8aa43 100644 --- a/code/modules/planet/sif.dm +++ b/code/modules/planet/sif.dm @@ -299,7 +299,7 @@ var/datum/planet/sif/planet_sif = null for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain @@ -352,7 +352,7 @@ var/datum/planet/sif/planet_sif = null for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue // They're indoors, so no need to rain on them. // If they have an open umbrella, it'll guard from rain @@ -410,7 +410,7 @@ var/datum/planet/sif/planet_sif = null for(var/mob/living/carbon/H as anything in human_mob_list) if(H.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(H) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue // They're indoors, so no need to pelt them with ice. // If they have an open umbrella, it'll guard from hail @@ -506,7 +506,7 @@ var/datum/planet/sif/planet_sif = null var/mob/living/L = thing if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue // They're indoors, so no need to burn them with ash. L.inflict_heat_damage(rand(1, 3)) @@ -544,7 +544,7 @@ var/datum/planet/sif/planet_sif = null if(L.z in holder.our_planet.expected_z_levels) irradiate_nearby_turf(L) var/turf/T = get_turf(L) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue // They're indoors, so no need to irradiate them with fallout. L.rad_act(rand(direct_rad_low, direct_rad_high)) @@ -558,5 +558,5 @@ var/datum/planet/sif/planet_sif = null var/turf/T = pick(turfs) // We get one try per tick. if(!istype(T)) return - if(T.outdoors == OUTDOORS_YES) + if(T.is_outdoors()) SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high)) diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index e4230963d4..2f4eba9fa8 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -123,7 +123,7 @@ for(var/mob/M in player_list) // Don't need to care about clientless mobs. if(M.z in our_planet.expected_z_levels) var/turf/T = get_turf(M) - if(T.outdoors == OUTDOORS_NO) + if(!T.is_outdoors()) continue to_chat(M, message) @@ -200,7 +200,7 @@ // Otherwise they should hear some sounds, depending on if they're inside or not. var/turf/T = get_turf(M) if(istype(T)) - if(T.outdoors == OUTDOORS_YES) // Mob is currently outdoors. + if(T.is_outdoors()) // Mob is currently outdoors. hear_outdoor_sounds(M, TRUE) hear_indoor_sounds(M, FALSE) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index f6bc1c9ff6..c30081fa91 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -9,7 +9,7 @@ /obj/machinery/power/smes/batteryrack name = "power cell rack PSU" - desc = "A rack of power cells working as a PSU." + desc = "A rack of power cells working as a PSU. Made from a recycled Breaker Box frame." icon = 'icons/obj/cellrack.dmi' icon_state = "rack" capacity = 0 diff --git a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm b/code/modules/reagents/machinery/dispenser/cartridge_presets.dm index 672356551b..bc1a199498 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge_presets.dm @@ -61,8 +61,10 @@ spawn_reagent = "kahlua" /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey spawn_reagent = "whiskey" -/obj/item/weapon/reagent_containers/chem_disp_cartridge/wine - spawn_reagent = "wine" +/obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine + spawn_reagent = "redwine" +/obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine + spawn_reagent = "whitewine" /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka spawn_reagent = "vodka" /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin diff --git a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm b/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm index 84c5260c3f..0dc376fae3 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm @@ -52,7 +52,7 @@ /obj/machinery/chemical_dispenser/bar_alc dispense_reagents = list( "lemon_lime", "sugar", "orangejuice", "limejuice", "sodawater", "tonic", "beer", "kahlua", - "whiskey", "wine", "vodka", "cider", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "bitters" + "whiskey", "redwine", "whitewine", "vodka", "cider", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "bitters" ) /obj/machinery/chemical_dispenser/bar_coffee diff --git a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm index 6b90357a2c..537a980e6c 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm @@ -105,7 +105,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/wine, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, /obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, diff --git a/code/modules/reagents/machinery/dispenser/supply.dm b/code/modules/reagents/machinery/dispenser/supply.dm index 984d7786a8..f011420516 100644 --- a/code/modules/reagents/machinery/dispenser/supply.dm +++ b/code/modules/reagents/machinery/dispenser/supply.dm @@ -66,7 +66,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/wine, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, /obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, @@ -191,19 +192,20 @@ SEC_PACK(tungsten, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tung SEC_PACK(calcium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/calcium, "Reagent refill - Calcium", "calcium reagent cartridge crate", 15, access_chemistry) // Bar-restricted (alcoholic drinks) -// Datum path Contents type Supply pack name Container name Cost Container access -SEC_PACK(beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, "Reagent refill - Beer", "beer reagent cartridge crate", 15, access_bar) -SEC_PACK(kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, "Reagent refill - Kahlua", "kahlua reagent cartridge crate", 15, access_bar) -SEC_PACK(whiskey, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, "Reagent refill - Whiskey", "whiskey reagent cartridge crate", 15, access_bar) -SEC_PACK(wine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/wine, "Reagent refill - Wine", "wine reagent cartridge crate", 15, access_bar) -SEC_PACK(vodka, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, "Reagent refill - Vodka", "vodka reagent cartridge crate", 15, access_bar) -SEC_PACK(gin, /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, "Reagent refill - Gin", "gin reagent cartridge crate", 15, access_bar) -SEC_PACK(rum, /obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, "Reagent refill - Rum", "rum reagent cartridge crate", 15, access_bar) -SEC_PACK(tequila, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, "Reagent refill - Tequila", "tequila reagent cartridge crate", 15, access_bar) -SEC_PACK(vermouth, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, "Reagent refill - Vermouth", "vermouth reagent cartridge crate", 15, access_bar) -SEC_PACK(cognac, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, "Reagent refill - Cognac", "cognac reagent cartridge crate", 15, access_bar) -SEC_PACK(ale, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, "Reagent refill - Ale", "ale reagent cartridge crate", 15, access_bar) -SEC_PACK(mead, /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, "Reagent refill - Mead", "mead reagent cartridge crate", 15, access_bar) +// Datum path Contents type Supply pack name Container name Cost Container access +SEC_PACK(beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, "Reagent refill - Beer", "beer reagent cartridge crate", 15, access_bar) +SEC_PACK(kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, "Reagent refill - Kahlua", "kahlua reagent cartridge crate", 15, access_bar) +SEC_PACK(whiskey, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, "Reagent refill - Whiskey", "whiskey reagent cartridge crate", 15, access_bar) +SEC_PACK(rwine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/redwine, "Reagent refill - Red Wine", "red wine reagent cartridge crate", 15, access_bar) +SEC_PACK(wwine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whitewine, "Reagent refill - White Wine", "white wine reagent cartridge crate", 15, access_bar) +SEC_PACK(vodka, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vodka, "Reagent refill - Vodka", "vodka reagent cartridge crate", 15, access_bar) +SEC_PACK(gin, /obj/item/weapon/reagent_containers/chem_disp_cartridge/gin, "Reagent refill - Gin", "gin reagent cartridge crate", 15, access_bar) +SEC_PACK(rum, /obj/item/weapon/reagent_containers/chem_disp_cartridge/rum, "Reagent refill - Rum", "rum reagent cartridge crate", 15, access_bar) +SEC_PACK(tequila, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, "Reagent refill - Tequila", "tequila reagent cartridge crate", 15, access_bar) +SEC_PACK(vermouth, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, "Reagent refill - Vermouth", "vermouth reagent cartridge crate", 15, access_bar) +SEC_PACK(cognac, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, "Reagent refill - Cognac", "cognac reagent cartridge crate", 15, access_bar) +SEC_PACK(ale, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, "Reagent refill - Ale", "ale reagent cartridge crate", 15, access_bar) +SEC_PACK(mead, /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, "Reagent refill - Mead", "mead reagent cartridge crate", 15, access_bar) // Unrestricted (water, sugar, non-alcoholic drinks) // Datum path Contents type Supply pack name Container name Cost diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index 75de64b284..5630500d63 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -107,8 +107,8 @@ /decl/chemical_reaction/instant/drinks/wine name = "Wine" - id = "wine" - result = "wine" + id = "redwine" + result = "redwine" required_reagents = list("grapejuice" = 10) catalysts = list("enzyme" = 5) result_amount = 10 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 425450825c..186386e58f 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -168,6 +168,7 @@ icon = 'icons/obj/gun.dmi' icon_state = "chemsprayer" item_state = "chemsprayer" + item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi') center_of_mass = list("x" = 16,"y" = 16) throwforce = 3 w_class = ITEMSIZE_NORMAL @@ -176,6 +177,7 @@ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINEERING = 3) /obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj) + playsound(src, 'sound/effects/spray3.ogg', rand(50,1), -6) var/direction = get_dir(src, A) var/turf/T = get_turf(A) var/turf/T1 = get_step(T,turn(direction, 90)) diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 47d724f7a3..3c85222c1b 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -1050,6 +1050,19 @@ glass_desc = "Juice from a potato. Bleh." allergen_type = ALLERGEN_VEGETABLE //Potatoes are vegetables +/datum/reagent/drink/juice/turnip + name = "Turnip Juice" + id = "turnipjuice" + description = "Juice of the turnip. A step below the potato." + taste_description = "turnips" + nutrition = 2 + color = "#251e2e" + sugary = FALSE + + glass_name = "turnip juice" + glass_desc = "Juice of the turnip. A step below the potato." + allergen_type = ALLERGEN_VEGETABLE //Turnips are vegetables + /datum/reagent/drink/juice/tomato name = "Tomato Juice" id = "tomatojuice" @@ -1714,6 +1727,110 @@ glass_desc = "A glass of refreshing Space Cola" glass_special = list(DRINK_FIZZ) +/datum/reagent/drink/soda/lemon_soda + name = "Lemon Soda" + id = "lemonsoda" + description = "Soda made using lemon concentrate. Sour." + taste_description = "strong sourness" + reagent_state = LIQUID + color = "#ffe658" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "lemon Soda" + glass_desc = "A glass of refreshing Lemon Soda. So sour!" + glass_special = list(DRINK_FIZZ) + allergen_type = ALLERGEN_FRUIT + +/datum/reagent/drink/soda/apple_soda + name = "Apple Soda" + id = "applesoda" + description = "Soda made using fresh apples." + taste_description = "crisp juiciness" + reagent_state = LIQUID + color = "#c73737" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Apple Soda" + glass_desc = "A glass of refreshing Apple Soda. Crisp!" + glass_special = list(DRINK_FIZZ) + allergen_type = ALLERGEN_FRUIT + + +/datum/reagent/drink/soda/straw_soda + name = "Strawberry Soda" + id = "strawsoda" + description = "Soda made using sweet berries." + taste_description = "oddly bland" + reagent_state = LIQUID + color = "#ffa3a3" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Strawberry Soda" + glass_desc = "A glass of refreshing Strawberry Soda" + glass_special = list(DRINK_FIZZ) + allergen_type = ALLERGEN_FRUIT + +/datum/reagent/drink/soda/orangesoda + name = "Orange Soda" + id = "orangesoda" + description = "Soda made using fresh picked oranges." + taste_description = "sweet and citrusy" + reagent_state = LIQUID + color = "#ff992c" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Orange Soda" + glass_desc = "A glass of refreshing Orange Soda. Delicious!" + glass_special = list(DRINK_FIZZ) + allergen_type = ALLERGEN_FRUIT + +/datum/reagent/drink/soda/grapesoda + name = "Grape Soda" + id = "grapesoda" + description = "Soda made of carbonated grapejuice." + taste_description = "tangy goodness" + reagent_state = LIQUID + color = "#9862d2" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Grape Soda" + glass_desc = "A glass of refreshing Grape Soda. Tangy!" + glass_special = list(DRINK_FIZZ) + allergen_type = ALLERGEN_FRUIT + +/datum/reagent/drink/soda/sarsaparilla + name = "Sarsaparilla" + id = "sarsaparilla" + description = "Soda made from genetically modified Mexican sarsaparilla plants." + taste_description = "licorice and caramel" + reagent_state = LIQUID + color = "#e1bb59" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Sarsaparilla" + glass_desc = "A glass of refreshing Sarsaparilla. Delicious!" + glass_special = list(DRINK_FIZZ) + +/datum/reagent/drink/soda/pork_soda + name = "Bacon Soda" + id = "porksoda" + description = "Soda made using pork like flavoring." + taste_description = "sugar coated bacon" + reagent_state = LIQUID + color = "ff8080" + adj_drowsy = -3 + adj_temp = -5 + + glass_name = "Bacon Soda" + glass_desc = "A glass of Bacon Soda, very odd..." + glass_special = list(DRINK_FIZZ) + /datum/reagent/drink/soda/spacemountainwind name = "Mountain Wind" id = "spacemountainwind" @@ -2502,19 +2619,71 @@ allergen_type = ALLERGEN_GRAINS //Whiskey is also made from grain. -/datum/reagent/ethanol/wine - name = "Wine" - id = "wine" +/datum/reagent/ethanol/redwine + name = "Red Wine" + id = "redwine" description = "An premium alchoholic beverage made from distilled grape juice." taste_description = "bitter sweetness" color = "#7E4043" // rgb: 126, 64, 67 strength = 15 - glass_name = "wine" + glass_name = "red wine" glass_desc = "A very classy looking drink." allergen_type = ALLERGEN_FRUIT //Wine is made from grapes (fruit) +/datum/reagent/ethanol/whitewine + name = "White Wine" + id = "whitewine" + description = "An premium alchoholic beverage made from fermenting of the non-coloured pulp of grapes." + taste_description = "light fruity flavor" + color = "#F4EFB0" // rgb: 244, 239, 176 + strength = 15 + + glass_name = "white wine" + glass_desc = "A very classy looking drink." + + allergen_type = ALLERGEN_FRUIT //Wine is made from grapes (fruit) + +/datum/reagent/ethanol/carnoth + name = "Carnoth" + id = "carnoth" + description = "An premium alchoholic beverage made with multiple hybridized species of grapes that give it a dark maroon coloration." + taste_description = "alcoholic sweet flavor" + color = "#5B0000" // rgb: 0, 100, 35 + strength = 20 + + glass_name = "carnoth" + glass_desc = "A very classy looking drink." + + allergen_type = ALLERGEN_FRUIT //Wine is made from grapes (fruit) + +/datum/reagent/ethanol/pwine + name = "Poison Wine" + id = "pwine" + description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!" + color = "#000000" + strength = 10 + druggy = 50 + halluci = 10 + + glass_name = "???" + glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?" + allergen_type = ALLERGEN_FRUIT //Made from berries which are fruit + +/datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + if(dose > 30) + M.adjustToxLoss(2 * removed) + if(dose > 60 && ishuman(M) && prob(5)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[O_HEART] + if (L && istype(L)) + if(dose < 120) + L.take_damage(10 * removed, 0) + else + L.take_damage(100, 0) + /datum/reagent/ethanol/wine/champagne name = "Champagne" id = "champagne" @@ -3138,32 +3307,6 @@ glass_name = "Patron" glass_desc = "Drinking patron in the bar, with all the subpar ladies." -/datum/reagent/ethanol/pwine - name = "Poison Wine" - id = "pwine" - description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!" - color = "#000000" - strength = 10 - druggy = 50 - halluci = 10 - - glass_name = "???" - glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?" - allergen_type = ALLERGEN_FRUIT //Made from berries which are fruit - -/datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(dose > 30) - M.adjustToxLoss(2 * removed) - if(dose > 60 && ishuman(M) && prob(5)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[O_HEART] - if (L && istype(L)) - if(dose < 120) - L.take_damage(10 * removed, 0) - else - L.take_damage(100, 0) - /datum/reagent/ethanol/red_mead name = "Red Mead" id = "red_mead" diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm index 0663a899c9..ee081f7525 100644 --- a/code/modules/tables/presets.dm +++ b/code/modules/tables/presets.dm @@ -43,7 +43,7 @@ /obj/structure/table/wooden_reinforced icon_state = "reinf_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/wooden_reinforced/New() material = get_material_by_name("wood") @@ -52,15 +52,15 @@ /obj/structure/table/woodentable icon_state = "plain_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/woodentable/New() material = get_material_by_name("wood") ..() -/obj/structure/table/sifwoodentable +/obj/structure/table/sifwoodentable //Shouldn't these be blue? icon_state = "plain_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/sifwoodentable/New() material = get_material_by_name("alien wood") @@ -68,7 +68,7 @@ /obj/structure/table/sifwooden_reinforced icon_state = "reinf_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/sifwooden_reinforced/New() material = get_material_by_name("alien wood") @@ -179,7 +179,7 @@ */ /obj/structure/table/bench/wooden icon_state = "plain_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/bench/wooden/New() material = get_material_by_name("wood") @@ -187,7 +187,7 @@ /obj/structure/table/bench/sifwooden icon_state = "plain_preview" - color = "#824B28" + color = WOOD_COLOR_FURNITURE /obj/structure/table/bench/sifwooden/New() material = get_material_by_name("alien wood") diff --git a/html/changelog.html b/html/changelog.html index 89684e0897..dc0b12ff83 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,12 @@ -->
+

12 July 2021

+

MoondancerPony updated:

+ +

20 June 2021

MoondancerPony updated: