From a407b88124efe46525b378a23642e2ff9ca328f1 Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 18 May 2017 01:00:00 +0200 Subject: [PATCH 01/21] Adds a taste system! --- code/__DEFINES/mob.dm | 6 ++++ code/modules/mob/living/carbon/carbon.dm | 1 + code/modules/mob/living/carbon/human/human.dm | 6 ++++ .../living/carbon/human/species/species.dm | 1 + code/modules/mob/living/living.dm | 36 +++++++++++++++++++ code/modules/mob/living/living_defines.dm | 2 ++ code/modules/reagents/chemistry/reagents.dm | 4 ++- .../reagents/chemistry/reagents/admin.dm | 4 ++- 8 files changed, 58 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index 97cea621dae..cc2d7069348 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -67,6 +67,12 @@ // Factor of how fast mob nutrition decreases #define HUNGER_FACTOR 0.1 +// Taste sensitivity - the more the more reagents you'll taste +#define TASTE_SENSITIVITY_NORMAL 1 +#define TASTE_SENSITIVITY_SHARP 3 +#define TASTE_SENSITIVITY_DULL 0.75 +#define TASTE_SENSITIVITY_NO_TASTE 0 + // Reagent type flags, defines the types of mobs this reagent will affect #define ORGANIC 1 #define SYNTHETIC 2 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 5911c04f563..193ac27e310 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1015,6 +1015,7 @@ so that different stomachs can handle things in different ways VB*/ if(toEat.consume_sound) playsound(loc, toEat.consume_sound, rand(10,50), 1) if(toEat.reagents.total_volume) + taste_reagents(toEat.reagents) var/fraction = min(this_bite/toEat.reagents.total_volume, 1) toEat.reagents.reaction(src, toEat.apply_type, fraction) toEat.reagents.trans_to(src, this_bite*toEat.transfer_efficiency) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1c012655cdc..735e897c1c1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -2160,3 +2160,9 @@ update_icons() ..() + +mob/living/carbon/human/get_taste_sensitivity() + if(species) + return species.taste_sensitivity + else + return 1 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d2d44757705..cc01bdf65d6 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -45,6 +45,7 @@ var/reagent_tag //Used for metabolizing reagents. var/hunger_drain = HUNGER_FACTOR var/digestion_ratio = 1 //How quickly the species digests/absorbs reagents. + var/taste_sensitivity = TASTE_SENSITIVITY_NORMAL //factor of how much of a reagent is needed for a human to taste it var/siemens_coeff = 1 //base electrocution coefficient diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 525559e8e6c..4d145a19e7c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -851,3 +851,39 @@ to_chat(src, "You don't have the dexterity to do this!") return 0 return 1 + +/mob/living/proc/get_taste_sensitivity() + return 1 + +/mob/living/proc/taste_reagents(datum/reagents/tastes) + if(!get_taste_sensitivity())//this also works for IPCs and stuff that returns 0 here + return + + var/do_not_taste_at_all = 1//so we don't spam with recent tastes + + var/taste_sum = 0 + var/list/taste_list = list()//associative list so we can stack stuff that tastes the same + var/list/final_taste_list = list()//final list of taste strings + + for(var/datum/reagent/R in tastes.reagent_list) + taste_sum += R.volume * R.taste_strength + taste_list[R.taste_message] += R.volume * R.taste_strength + + for(var/R in taste_list) + if(recent_tastes[R] && (world.time - recent_tastes[R] < 12 SECONDS)) + continue + + do_not_taste_at_all = 0//something was fresh enough to taste; could still be bland enough to be unrecognizable + + if(taste_list[R] / taste_sum >= 0.15 / get_taste_sensitivity())//we return earlier if the proc returns a 0; won't break the universe + final_taste_list += R + recent_tastes[R] = world.time + + if(do_not_taste_at_all) + return //no message spam + + if(final_taste_list.len == 0)//too many reagents - none meet their thresholds + to_chat(src, "You you can't really make out what you're tasting...") + return + + to_chat(src, "You can taste [english_list(final_taste_list)].") diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 397ce90af6c..52a0f2f74ad 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -59,3 +59,5 @@ var/tesla_ignore = FALSE var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" + + var/list/recent_tastes = list() diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index cdc214c3089..054be7442e6 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -29,6 +29,8 @@ var/drink_icon = null var/drink_name = "Glass of ..what?" var/drink_desc = "You can't really tell what this is." + var/taste_strength = 1 //how easy it is to taste - the more the easier + var/taste_message = "bitterness" //life's bitter by default. Cool points for using a span class for when you're tasting LIQUID FUCKING DEATH /datum/reagent/Destroy() . = ..() @@ -148,4 +150,4 @@ if(prob(5)) to_chat(M, "You feel like you can't live without [name]!") if(prob(5)) - to_chat(M, "You would DIE for some [name] right now!") \ No newline at end of file + to_chat(M, "You would DIE for some [name] right now!") diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm index b94998221ef..eadcb57cc91 100644 --- a/code/modules/reagents/chemistry/reagents/admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -7,6 +7,7 @@ process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds! admin_only = 1 can_synth = 0 + taste_message = "admin abuse" /datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) @@ -58,4 +59,5 @@ /datum/reagent/medicine/adminordrazine/nanites name = "Nanites" id = "nanites" - description = "Nanomachines that aid in rapid cellular regeneration." \ No newline at end of file + description = "Nanomachines that aid in rapid cellular regeneration." + taste_message = "nanomachines, son" From 84fdc3d9f1ffb2defe6264535bec4c2006b86d21 Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 18 May 2017 02:24:27 +0200 Subject: [PATCH 02/21] Adds reagent taste messages --- code/modules/mob/living/living.dm | 2 + .../reagents/chemistry/reagents/alcohol.dm | 73 ++++++++++++++++++- .../reagents/chemistry/reagents/drink_base.dm | 2 +- .../reagents/chemistry/reagents/drink_cold.dm | 14 +++- .../reagents/chemistry/reagents/drinks.dm | 36 ++++++++- .../reagents/chemistry/reagents/drugs.dm | 6 +- .../reagents/chemistry/reagents/food.dm | 66 +++++++++++++++-- .../reagents/chemistry/reagents/medicine.dm | 1 + .../reagents/chemistry/reagents/misc.dm | 47 ++++++++++-- .../reagents/chemistry/reagents/paint.dm | 4 +- .../chemistry/reagents/paradise_pop.dm | 9 ++- .../chemistry/reagents/pyrotechnic.dm | 9 +++ .../reagents/chemistry/reagents/toxins.dm | 21 +++++- .../reagents/chemistry/reagents/water.dm | 12 ++- 14 files changed, 278 insertions(+), 24 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4d145a19e7c..07fd0abf283 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -867,6 +867,8 @@ for(var/datum/reagent/R in tastes.reagent_list) taste_sum += R.volume * R.taste_strength + if(!R.taste_message)//set to null; no taste, like water + continue taste_list[R.taste_message] += R.volume * R.taste_strength for(var/R in taste_list) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index b07e9da9124..fe224331f71 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -9,6 +9,7 @@ can_grow_in_plants = 0 //Alcoholic drinks won't be grown in plants (would "water down" random seed chems too much) var/dizzy_adj = 3 var/alcohol_perc = 1 //percentage of ethanol in a beverage 0.0 - 1.0 + taste_message = "strong alcohol" /datum/reagent/consumable/ethanol/on_mob_life(mob/living/M) M.AdjustDrunk(alcohol_perc) @@ -43,6 +44,7 @@ drink_icon ="beerglass" drink_name = "Beer glass" drink_desc = "A freezing pint of beer" + taste_message = "beer" /datum/reagent/consumable/ethanol/cider name = "Cider" @@ -54,6 +56,7 @@ drink_icon = "rewriter" drink_name = "Cider" drink_desc = "a refreshing glass of traditional cider" + taste_message = "cider" /datum/reagent/consumable/ethanol/whiskey name = "Whiskey" @@ -72,6 +75,7 @@ description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 + taste_message = "pure class" /datum/reagent/consumable/ethanol/gin name = "Gin" @@ -95,6 +99,7 @@ drink_icon = "absinthebottle" drink_name = "Glass of Absinthe" drink_desc = "The green fairy is going to get you now!" + taste_message = "fucking pain" //copy paste from LSD... shoot me /datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M) @@ -128,6 +133,7 @@ drink_icon = "mojito" drink_name = "Glass of Mojito" drink_desc = "Fresh from Spesscuba." + taste_message = "mojito" /datum/reagent/consumable/ethanol/vodka name = "Vodka" @@ -148,6 +154,7 @@ drink_icon = "ginvodkaglass" drink_name = "Glass of Sake" drink_desc = "A glass of Sake." + taste_message = "sake" /datum/reagent/consumable/ethanol/tequila name = "Tequila" @@ -168,6 +175,7 @@ drink_icon = "vermouthglass" drink_name = "Glass of Vermouth" drink_desc = "You wonder why you're even drinking this straight." + taste_message = "vermouth" /datum/reagent/consumable/ethanol/wine name = "Wine" @@ -179,6 +187,7 @@ drink_icon = "wineglass" drink_name = "Glass of wine" drink_desc = "A very classy looking drink." + taste_message = "wine" /datum/reagent/consumable/ethanol/cognac name = "Cognac" @@ -201,6 +210,7 @@ drink_icon = "suicider" drink_name = "Suicider" drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + taste_message = "approaching death" /datum/reagent/consumable/ethanol/ale name = "Ale" @@ -211,6 +221,7 @@ drink_icon = "aleglass" drink_name = "Ale glass" drink_desc = "A freezing pint of delicious Ale" + taste_message = "ale" /datum/reagent/consumable/ethanol/thirteenloko name = "Thirteen Loko" @@ -224,6 +235,7 @@ drink_icon = "thirteen_loko_glass" drink_name = "Glass of Thirteen Loko" drink_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass" + taste_message = "party" /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M) M.AdjustDrowsy(-7) @@ -247,6 +259,7 @@ drink_icon = "glass_brown" drink_name = "Glass of bilk" drink_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." + taste_message = "bilk" /datum/reagent/consumable/ethanol/atomicbomb name = "Atomic Bomb" @@ -258,6 +271,7 @@ drink_icon = "atomicbombglass" drink_name = "Atomic Bomb" drink_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/threemileisland name = "THree Mile Island Iced Tea" @@ -269,6 +283,7 @@ drink_icon = "threemileislandglass" drink_name = "Three Mile Island Ice Tea" drink_desc = "A glass of this is sure to prevent a meltdown." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" @@ -313,6 +328,7 @@ drink_icon = "cubalibreglass" drink_name = "Cuba Libre" drink_desc = "A classic mix of rum and cola." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/whiskey_cola name = "Whiskey Cola" @@ -324,6 +340,7 @@ drink_icon = "whiskeycolaglass" drink_name = "Whiskey Cola" drink_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." + taste_message = "whiskey and coke" /datum/reagent/consumable/ethanol/martini name = "Classic Martini" @@ -335,6 +352,7 @@ drink_icon = "martiniglass" drink_name = "Classic Martini" drink_desc = "Damn, the bartender even stirred it, not shook it." + taste_message = "martini" /datum/reagent/consumable/ethanol/vodkamartini name = "Vodka Martini" @@ -357,6 +375,7 @@ drink_icon = "whiterussianglass" drink_name = "White Russian" drink_desc = "A very nice looking drink. But that's just, like, your opinion, man." + taste_message = "creamy alcohol" /datum/reagent/consumable/ethanol/screwdrivercocktail name = "Screwdriver" @@ -368,6 +387,7 @@ drink_icon = "screwdriverglass" drink_name = "Screwdriver" drink_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/booger name = "Booger" @@ -379,6 +399,7 @@ drink_icon = "booger" drink_name = "Booger" drink_desc = "Ewww..." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/bloody_mary name = "Bloody Mary" @@ -390,6 +411,7 @@ drink_icon = "bloodymaryglass" drink_name = "Bloody Mary" drink_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." + taste_message = "tomatoes with booze" /datum/reagent/consumable/ethanol/gargle_blaster name = "Pan-Galactic Gargle Blaster" @@ -401,6 +423,7 @@ drink_icon = "gargleblasterglass" drink_name = "Pan-Galactic Gargle Blaster" drink_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." + taste_message = "the number fourty-two, somehow" /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" @@ -412,6 +435,7 @@ drink_icon = "bravebullglass" drink_name = "Brave Bull" drink_desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/tequila_sunrise name = "Tequila Sunrise" @@ -423,6 +447,7 @@ drink_icon = "tequilasunriseglass" drink_name = "Tequila Sunrise" drink_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/toxins_special name = "Toxins Special" @@ -434,6 +459,7 @@ drink_icon = "toxinsspecialglass" drink_name = "Toxins Special" drink_desc = "Whoah, this thing is on FIRE" + taste_message = "FIRE" /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(mob/living/M) if(M.bodytemperature < 330) @@ -450,6 +476,7 @@ drink_icon = "beepskysmashglass" drink_name = "Beepsky Smash" drink_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." + taste_message = "THE LAW" /datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M) M.Stun(1) @@ -465,6 +492,7 @@ drink_icon = "irishcreamglass" drink_name = "Irish Cream" drink_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" + taste_message = "creamy alcohol" /datum/reagent/consumable/ethanol/manly_dorf name = "The Manly Dorf" @@ -476,6 +504,7 @@ drink_icon = "manlydorfglass" drink_name = "The Manly Dorf" drink_desc = "A manly concotion made from Ale and Beer. Intended for true men only." + taste_message = "manliness" /datum/reagent/consumable/ethanol/longislandicedtea name = "Long Island Iced Tea" @@ -487,6 +516,7 @@ drink_icon = "longislandicedteaglass" drink_name = "Long Island Iced Tea" drink_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/moonshine name = "Moonshine" @@ -498,6 +528,7 @@ drink_icon = "glass_clear" drink_name = "Moonshine" drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + taste_message = "the proletaryat" /datum/reagent/consumable/ethanol/b52 name = "B-52" @@ -509,6 +540,7 @@ drink_icon = "b52glass" drink_name = "B-52" drink_desc = "Kahlua, Irish Cream, and congac. You will get bombed." + taste_message = "creamy alcohol" /datum/reagent/consumable/ethanol/irishcoffee name = "Irish Coffee" @@ -520,6 +552,7 @@ drink_icon = "irishcoffeeglass" drink_name = "Irish Coffee" drink_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." + taste_message = "coffee and booze" /datum/reagent/consumable/ethanol/margarita name = "Margarita" @@ -531,6 +564,7 @@ drink_icon = "margaritaglass" drink_name = "Margarita" drink_desc = "On the rocks with salt on the rim. Arriba~!" + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/black_russian name = "Black Russian" @@ -542,6 +576,7 @@ drink_icon = "blackrussianglass" drink_name = "Black Russian" drink_desc = "For the lactose-intolerant. Still as classy as a White Russian." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/manhattan name = "Manhattan" @@ -553,6 +588,7 @@ drink_icon = "manhattanglass" drink_name = "Manhattan" drink_desc = "The Detective's undercover drink of choice. He never could stomach gin..." + taste_message = "bitter alcohol" /datum/reagent/consumable/ethanol/manhattan_proj name = "Manhattan Project" @@ -564,6 +600,7 @@ drink_icon = "proj_manhattanglass" drink_name = "Manhattan Project" drink_desc = "A scienitst drink of choice, for thinking how to blow up the station." + taste_message = "bitter alcohol" /datum/reagent/consumable/ethanol/whiskeysoda name = "Whiskey Soda" @@ -575,6 +612,7 @@ drink_icon = "whiskeysodaglass2" drink_name = "Whiskey Soda" drink_desc = "Ultimate refreshment." + taste_message = "mediocrity" /datum/reagent/consumable/ethanol/antifreeze name = "Anti-freeze" @@ -586,6 +624,7 @@ drink_icon = "antifreeze" drink_name = "Anti-freeze" drink_desc = "The ultimate refreshment." + taste_message = "poor life choices" /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M) if(M.bodytemperature < 330) @@ -602,6 +641,7 @@ drink_icon = "b&p" drink_name = "Barefoot" drink_desc = "Barefoot and pregnant" + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/snowwhite name = "Snow White" @@ -613,6 +653,7 @@ drink_icon = "snowwhite" drink_name = "Snow White" drink_desc = "A cold refreshment." + taste_message = "refreshing alcohol" /datum/reagent/consumable/ethanol/demonsblood name = "Demons Blood" @@ -625,6 +666,7 @@ drink_icon = "demonsblood" drink_name = "Demons Blood" drink_desc = "Just looking at this thing makes the hair at the back of your neck stand up." + taste_message = "evil" /datum/reagent/consumable/ethanol/vodkatonic name = "Vodka and Tonic" @@ -637,6 +679,7 @@ drink_icon = "vodkatonicglass" drink_name = "Vodka and Tonic" drink_desc = "For when a gin and tonic isn't russian enough." + taste_message = "fizzy alcohol" /datum/reagent/consumable/ethanol/ginfizz name = "Gin Fizz" @@ -649,6 +692,7 @@ drink_icon = "ginfizzglass" drink_name = "Gin Fizz" drink_desc = "Refreshingly lemony, deliciously dry." + taste_message = "fizzy alcohol" /datum/reagent/consumable/ethanol/bahama_mama name = "Bahama mama" @@ -660,6 +704,7 @@ drink_icon = "bahama_mama" drink_name = "Bahama Mama" drink_desc = "Tropic cocktail" + taste_message = "fruity alcohol" /datum/reagent/consumable/ethanol/singulo name = "Singulo" @@ -672,6 +717,7 @@ drink_icon = "singulo" drink_name = "Singulo" drink_desc = "A blue-space beverage." + taste_message = "infinity" /datum/reagent/consumable/ethanol/sbiten name = "Sbiten" @@ -683,6 +729,7 @@ drink_icon = "sbitenglass" drink_name = "Sbiten" drink_desc = "A spicy mix of Vodka and Spice. Very hot." + taste_message = "spicy alcohol" /datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M) if(M.bodytemperature < 360) @@ -699,6 +746,7 @@ drink_icon = "devilskiss" drink_name = "Devils Kiss" drink_desc = "Creepy time!" + taste_message = "blood mixed with alcohol" /datum/reagent/consumable/ethanol/red_mead name = "Red Mead" @@ -710,6 +758,7 @@ drink_icon = "red_meadglass" drink_name = "Red Mead" drink_desc = "A True Vikings Beverage, though its color is strange." + taste_message = "blood mixed with alcohol" /datum/reagent/consumable/ethanol/mead name = "Mead" @@ -722,6 +771,7 @@ drink_icon = "meadglass" drink_name = "Mead" drink_desc = "A Vikings Beverage, though a cheap one." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/iced_beer name = "Iced Beer" @@ -733,6 +783,7 @@ drink_icon = "iced_beerglass" drink_name = "Iced Beer" drink_desc = "A beer so frosty, the air around it freezes." + taste_message = "refreshing alcohol" /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M) if(M.bodytemperature > 270) @@ -749,6 +800,7 @@ drink_icon = "grogglass" drink_name = "Grog" drink_desc = "A fine and cepa drink for Space." + taste_message = "rum" /datum/reagent/consumable/ethanol/aloe name = "Aloe" @@ -760,6 +812,7 @@ drink_icon = "aloe" drink_name = "Aloe" drink_desc = "Very, very, very good." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/andalusia name = "Andalusia" @@ -771,6 +824,7 @@ drink_icon = "andalusia" drink_name = "Andalusia" drink_desc = "A nice, strange named drink." + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/alliescocktail name = "Allies Cocktail" @@ -782,6 +836,7 @@ drink_icon = "alliescocktail" drink_name = "Allies cocktail" drink_desc = "A drink made from your allies." + taste_message = "bitter alcohol" /datum/reagent/consumable/ethanol/acid_spit name = "Acid Spit" @@ -793,6 +848,7 @@ drink_icon = "acidspitglass" drink_name = "Acid Spit" drink_desc = "A drink from Nanotrasen. Made from live aliens." + taste_message = "PAIN" /datum/reagent/consumable/ethanol/amasec name = "Amasec" @@ -804,6 +860,7 @@ drink_icon = "amasecglass" drink_name = "Amasec" drink_desc = "Always handy before COMBAT!!!" + taste_message = "a stunbaton" /datum/reagent/consumable/ethanol/neurotoxin name = "Neuro-toxin" @@ -817,6 +874,7 @@ drink_icon = "neurotoxinglass" drink_name = "Neurotoxin" drink_desc = "A drink that is guaranteed to knock you silly." + taste_message = "brain damageeeEEeee" /datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/M) M.Weaken(3) @@ -869,6 +927,7 @@ drink_icon = "changelingsting" drink_name = "Changeling Sting" drink_desc = "A stingy drink." + taste_message = "a tiny prick" /datum/reagent/consumable/ethanol/irishcarbomb name = "Irish Car Bomb" @@ -881,6 +940,7 @@ drink_icon = "irishcarbomb" drink_name = "Irish Car Bomb" drink_desc = "An irish car bomb." + taste_message = "creamy alcohol" /datum/reagent/consumable/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -892,6 +952,7 @@ drink_icon = "syndicatebomb" drink_name = "Syndicate Bomb" drink_desc = "A syndicate bomb." + taste_message = "a job offer" /datum/reagent/consumable/ethanol/erikasurprise name = "Erika Surprise" @@ -903,6 +964,7 @@ drink_icon = "erikasurprise" name = "Erika Surprise" drink_desc = "The surprise is, it's green!" + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" @@ -915,6 +977,7 @@ drink_icon = "driestmartiniglass" drink_name = "Driest Martini" drink_desc = "Only for the experienced. You think you see sand floating in the glass." + taste_message = "bitter alcohol" /datum/reagent/consumable/ethanol/driestmartini/on_mob_life(mob/living/M) if(current_cycle >= 55 && current_cycle < 115) @@ -930,6 +993,7 @@ drink_icon = "kahluaglass" drink_name = "Glass of RR coffee Liquor" drink_desc = "DAMN, THIS THING LOOKS ROBUST" + taste_message = "sweet alcohol" /datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M) M.AdjustDizzy(-5) @@ -947,6 +1011,7 @@ drink_icon = "ginsonic" drink_name = "Gin and Sonic" drink_desc = "An extremely high amperage drink. Absolutely not for the true Englishman." + taste_message = "SPEED" /datum/reagent/ginsonic/on_mob_life(mob/living/M) M.AdjustDrowsy(-5) @@ -972,6 +1037,7 @@ drink_icon = "cognacglass" drink_name = "Glass of applejack" drink_desc = "When cider isn't strong enough, you gotta jack it." + taste_message = "strong cider" /datum/reagent/consumable/ethanol/jackrose name = "Jack Rose" @@ -982,6 +1048,7 @@ drink_icon = "patronglass" drink_name = "Jack Rose" drink_desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s." + taste_message = "style" /datum/reagent/consumable/ethanol/drunkenblumpkin name = "Drunken Blumpkin" @@ -992,6 +1059,7 @@ drink_icon = "drunkenblumpkin" drink_name = "Drunken Blumpkin" drink_desc = "A drink for the drunks" + taste_message = "weirdness" /datum/reagent/consumable/ethanol/eggnog name = "Eggnog" @@ -1003,6 +1071,7 @@ drink_icon = "glass_yellow" drink_name = "Eggnog" drink_desc = "For enjoying the most wonderful time of the year." + taste_message = "christmas spirit" /datum/reagent/consumable/ethanol/dragons_breath //inaccessible to players, but here for admin shennanigans name = "Dragon's Breath" @@ -1012,6 +1081,7 @@ color = "#DC0000" alcohol_perc = 1 can_synth = 0 + taste_message = "LIQUID FUCKING DEATH OH GOD WHAT THE FUCK" /datum/reagent/consumable/ethanol/dragons_breath/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST && prob(20)) @@ -1059,6 +1129,7 @@ drink_icon = "synthanolglass" drink_name = "Glass of Synthanol" drink_desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too." + taste_message = "motor oil mixed with puke" /datum/reagent/consumable/ethanol/synthanol/on_mob_life(mob/living/M) if(!M.isSynthetic()) @@ -1138,4 +1209,4 @@ alcohol_perc = 0.25 drink_icon = "synthignonglass" drink_name = "Glass of Synthignon" - drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." \ No newline at end of file + drink_desc = "Someone mixed good wine and robot booze. Romantic, but atrocious." diff --git a/code/modules/reagents/chemistry/reagents/drink_base.dm b/code/modules/reagents/chemistry/reagents/drink_base.dm index 25484983a4f..a924d84349b 100644 --- a/code/modules/reagents/chemistry/reagents/drink_base.dm +++ b/code/modules/reagents/chemistry/reagents/drink_base.dm @@ -23,4 +23,4 @@ if(adj_temp_cool) if(M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature - (adj_temp_cool * TEMPERATURE_DAMAGE_COEFFICIENT)) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index ffd43a81840..a92d8644c6b 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -1,6 +1,7 @@ /datum/reagent/consumable/drink/cold name = "Cold drink" adj_temp_cool = 5 + taste_message = null /datum/reagent/consumable/drink/cold/tonic name = "Tonic Water" @@ -50,6 +51,7 @@ drink_icon = "glass_brown" drink_name = "Glass of Space Cola" drink_desc = "A glass of refreshing Space Cola" + taste_message = "cola" /datum/reagent/consumable/drink/cold/nuka_cola name = "Nuka Cola" @@ -60,6 +62,7 @@ drink_icon = "nuka_colaglass" drink_name = "Nuka Cola" drink_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland" + taste_message = "cola" /datum/reagent/consumable/drink/cold/nuka_cola/on_mob_life(mob/living/M) M.Jitter(20) @@ -83,6 +86,7 @@ drink_icon = "Space_mountain_wind_glass" drink_name = "Glass of Space Mountain Wind" drink_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." + taste_message = "lime soda" /datum/reagent/consumable/drink/cold/dr_gibb name = "Dr. Gibb" @@ -93,6 +97,7 @@ drink_icon = "dr_gibb_glass" drink_name = "Glass of Dr. Gibb" drink_desc = "Dr. Gibb. Not as dangerous as the name might imply." + taste_message = "cherry soda" /datum/reagent/consumable/drink/cold/space_up name = "Space-Up" @@ -103,6 +108,7 @@ drink_icon = "space-up_glass" drink_name = "Glass of Space-up" drink_desc = "Space-up. It helps keep your cool." + taste_message = "lemon soda" /datum/reagent/consumable/drink/cold/lemon_lime name = "Lemon Lime" @@ -110,6 +116,7 @@ id = "lemon_lime" color = "#878F00" // rgb: 135, 40, 0 adj_temp_cool = 8 + taste_message = "citrus soda" /datum/reagent/consumable/drink/cold/lemonade name = "Lemonade" @@ -119,6 +126,7 @@ drink_icon = "lemonade" drink_name = "Lemonade" drink_desc = "Oh the nostalgia..." + taste_message = "lemonade" /datum/reagent/consumable/drink/cold/kiraspecial name = "Kira Special" @@ -128,6 +136,7 @@ drink_icon = "kiraspecial" drink_name = "Kira Special" drink_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" + taste_message = "citrus soda" /datum/reagent/consumable/drink/cold/brownstar name = "Brown Star" @@ -138,6 +147,7 @@ drink_icon = "brownstar" drink_name = "Brown Star" drink_desc = "Its not what it sounds like..." + taste_message = "orange soda" /datum/reagent/consumable/drink/cold/milkshake name = "Milkshake" @@ -148,6 +158,7 @@ drink_icon = "milkshake" drink_name = "Milkshake" drink_desc = "Glorious brainfreezing mixture." + taste_message = "milkshake" /datum/reagent/consumable/drink/cold/rewriter name = "Rewriter" @@ -157,7 +168,8 @@ drink_icon = "rewriter" drink_name = "Rewriter" drink_desc = "The secert of the sanctuary of the Libarian..." + taste_message = "coffee...soda?" /datum/reagent/consumable/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(5) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 7db9387c3ff..47b4111a67d 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -6,6 +6,7 @@ drink_icon = "glass_orange" drink_name = "Glass of Orange juice" drink_desc = "Vitamins! Yay!" + taste_message = "orange juice" /datum/reagent/consumable/drink/orangejuicde/on_mob_life(mob/living/M) if(M.getOxyLoss() && prob(30)) @@ -20,6 +21,7 @@ drink_icon = "glass_red" drink_name = "Glass of Tomato juice" drink_desc = "Are you sure this is tomato juice?" + taste_message = "tomato juice" /datum/reagent/consumable/drink/tomatojuice/on_mob_life(mob/living/M) if(M.getFireLoss() && prob(20)) @@ -34,6 +36,7 @@ drink_icon = "glass_green" drink_name = "Glass of Lime juice" drink_desc = "A glass of sweet-sour lime juice." + taste_message = "lime juice" /datum/reagent/consumable/drink/limejuice/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -48,6 +51,7 @@ drink_icon = "carrotjuice" drink_name = "Glass of carrot juice" drink_desc = "It is just like a carrot but without crunching." + taste_message = "carrot juice" /datum/reagent/consumable/drink/carrotjuicde/on_mob_life(mob/living/M) M.AdjustEyeBlurry(-1) @@ -69,6 +73,7 @@ drink_icon = "doctorsdelightglass" drink_name = "Doctor's Delight" drink_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." + taste_message = "healthy dietary choices" /datum/reagent/consumable/drink/doctors_delight/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -84,6 +89,7 @@ drink_icon = "triplecitrus" drink_name = "Glass of Triplecitrus Juice" drink_desc = "As colorful and healthy as it is delicious." + taste_message = "citrus juice" /datum/reagent/consumable/drink/triple_citrus/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -97,6 +103,7 @@ drink_icon = "berryjuice" drink_name = "Glass of berry juice" drink_desc = "Berry juice. Or maybe its jam. Who cares?" + taste_message = "berry juice" /datum/reagent/consumable/drink/poisonberryjuice name = "Poison Berry Juice" @@ -106,6 +113,7 @@ drink_icon = "poisonberryjuice" drink_name = "Glass of poison berry juice" drink_desc = "A glass of deadly juice." + taste_message = "berry juice" /datum/reagent/consumable/drink/poisonberryjuice/on_mob_life(mob/living/M) M.adjustToxLoss(1) @@ -116,12 +124,14 @@ id = "applejuice" description = "The sweet juice of an apple, fit for all ages." color = "#ECFF56" // rgb: 236, 255, 86 + taste_message = "apple juice" /datum/reagent/consumable/drink/watermelonjuice name = "Watermelon Juice" id = "watermelonjuice" description = "Delicious juice made from watermelon." color = "#863333" // rgb: 134, 51, 51 + taste_message = "watermelon juice" /datum/reagent/consumable/drink/lemonjuice name = "Lemon Juice" @@ -131,12 +141,14 @@ drink_icon = "lemonglass" drink_name = "Glass of lemonjuice" drink_desc = "Sour..." + taste_message = "lemon juice" /datum/reagent/consumable/drink/grapejuice name = "Grape Juice" id = "grapejuice" description = "This juice is known to stain shirts." color = "#993399" // rgb: 153, 51, 153 + taste_message = "grape juice" /datum/reagent/consumable/drink/banana name = "Banana Juice" @@ -146,6 +158,7 @@ drink_icon = "banana" drink_name = "Glass of banana juice" drink_desc = "The raw essence of a banana. HONK" + taste_message = "banana juice" /datum/reagent/consumable/drink/banana/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) @@ -160,6 +173,7 @@ drink_icon = "nothing" drink_name = "Nothing" drink_desc = "Absolutely nothing." + taste_message = "nothing...how?" /datum/reagent/consumable/drink/nothing/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) @@ -176,6 +190,7 @@ drink_icon = "glass_brown" drink_name = "Glass of potato juice" drink_desc = "Who in the hell requests this? Gross!" + taste_message = "puke, you're pretty sure" /datum/reagent/consumable/drink/milk name = "Milk" @@ -185,6 +200,7 @@ drink_icon = "glass_white" drink_name = "Glass of milk" drink_desc = "White and nutritious goodness!" + taste_message = "milk" /datum/reagent/consumable/drink/milk/on_mob_life(mob/living/M) if(M.getBruteLoss() && prob(20)) @@ -200,6 +216,7 @@ color = "#DFDFC7" // rgb: 223, 223, 199 drink_name = "Glass of soy milk" drink_desc = "White and nutritious soy goodness!" + taste_message = "fake milk" /datum/reagent/consumable/drink/milk/cream name = "Cream" @@ -208,12 +225,14 @@ color = "#DFD7AF" // rgb: 223, 215, 175 drink_name = "Glass of cream" drink_desc = "Ewwww..." + taste_message = "cream" /datum/reagent/consumable/drink/milk/chocolate_milk name = "Chocolate milk" id ="chocolate_milk" description = "Chocolate-flavored milk, tastes like being a kid again." color = "#85432C" + taste_message = "chocolate milk" /datum/reagent/consumable/drink/hot_coco name = "Hot Chocolate" @@ -225,6 +244,7 @@ drink_icon = "hot_coco" drink_name = "Glass of hot coco" drink_desc = "Delicious and cozy" + taste_message = "chocolate" /datum/reagent/consumable/drink/coffee name = "Coffee" @@ -242,6 +262,7 @@ drink_icon = "glass_brown" drink_name = "Glass of coffee" drink_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." + taste_message = "coffee" /datum/reagent/consumable/drink/coffee/on_mob_life(mob/living/M) if(holder.has_reagent("frostoil")) @@ -266,6 +287,7 @@ drink_icon = "icedcoffeeglass" drink_name = "Iced Coffee" drink_desc = "A drink to perk you up and refresh you!" + taste_message = "coffee" /datum/reagent/consumable/drink/coffee/soy_latte name = "Soy Latte" @@ -322,6 +344,7 @@ drink_icon = "glass_brown" drink_name = "Glass of Tea" drink_desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?" + taste_message = "tea" /datum/reagent/consumable/drink/tea/on_mob_life(mob/living/M) if(M.getToxLoss() && prob(20)) @@ -347,6 +370,7 @@ drink_icon = "bananahonkglass" drink_name = "Banana Honk" drink_desc = "A drink from Banana Heaven." + taste_message = "honks" /datum/reagent/consumable/drink/bananahonk/on_mob_life(mob/living/M) if((ishuman(M) && M.job in list("Clown") ) || issmall(M)) @@ -362,6 +386,7 @@ drink_icon = "silencerglass" drink_name = "Silencer" drink_desc = "A drink from mime Heaven." + taste_message = "mphhhh" /datum/reagent/consumable/drink/silencer/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) @@ -378,6 +403,7 @@ drink_icon = "chocolatepudding" drink_name = "Chocolate Pudding" drink_desc = "Tasty" + taste_message = "chocolate" /datum/reagent/consumable/drink/vanillapudding name = "Vanilla Pudding" @@ -388,6 +414,7 @@ drink_icon = "vanillapudding" drink_name = "Vanilla Pudding" drink_desc = "Tasty." + taste_message = "vanilla" /datum/reagent/consumable/drink/cherryshake name = "Cherry Shake" @@ -398,6 +425,7 @@ drink_icon = "cherryshake" drink_name = "Cherry Shake" drink_desc = "A cherry flavored milkshake." + taste_message = "cherry milkshake" /datum/reagent/consumable/drink/bluecherryshake name = "Blue Cherry Shake" @@ -408,6 +436,7 @@ drink_icon = "bluecherryshake" drink_name = "Blue Cherry Shake" drink_desc = "An exotic blue milkshake." + taste_message = "cherry milkshake" /datum/reagent/consumable/drink/pumpkin_latte name = "Pumpkin Latte" @@ -418,6 +447,7 @@ drink_icon = "pumpkin_latte" drink_name = "Pumpkin Latte" drink_desc = "A mix of coffee and pumpkin juice." + taste_message = "overpriced hipster spices" /datum/reagent/consumable/drink/gibbfloats name = "Gibb Floats" @@ -428,21 +458,25 @@ drink_icon= "gibbfloats" drink_name = "Gibbfloat" drink_desc = "Dr. Gibb with ice cream on top." + taste_message = "taste revolution" /datum/reagent/consumable/drink/pumpkinjuice name = "Pumpkin Juice" id = "pumpkinjuice" description = "Juiced from real pumpkin." color = "#FFA500" + taste_message = "puke" /datum/reagent/consumable/drink/blumpkinjuice name = "Blumpkin Juice" id = "blumpkinjuice" description = "Juiced from real blumpkin." color = "#00BFFF" + taste_message = "caustic puke" /datum/reagent/consumable/drink/grape_soda name = "Grape soda" id = "grapesoda" description = "Beloved of children and teetotalers." - color = "#E6CDFF" \ No newline at end of file + color = "#E6CDFF" + taste_message = "grape soda" diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 3719c6f49b8..0d6fc67db5d 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -439,6 +439,7 @@ reagent_state = LIQUID color = "#644600" addiction_chance = 30 + taste_message = "puke...or worse" /datum/reagent/jenkem/on_mob_life(mob/living/M) M.Dizzy(5) @@ -500,6 +501,7 @@ overdose_threshold = 15 process_flags = ORGANIC | SYNTHETIC //Flipping for everyone! addiction_chance = 10 + taste_message = "flips" /datum/reagent/fliptonium/on_mob_life(mob/living/M) if(current_cycle == 5) @@ -575,6 +577,7 @@ overdose_threshold = 20 addiction_chance = 60 metabolization_rate = 0.6 + taste_message = "wiper fluid" /datum/reagent/lube/ultra/on_mob_life(mob/living/M) var/high_message = pick("You feel your servos whir!", "You feel like you need to go faster.", "You feel like you were just overclocked!") @@ -622,6 +625,7 @@ process_flags = SYNTHETIC overdose_threshold = 20 addiction_chance = 50 + taste_message = "silicone" /datum/reagent/surge/on_mob_life(mob/living/M) @@ -651,4 +655,4 @@ B.pixel_y = rand(-20, 0) B.icon = I M.adjustFireLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER) - M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER) \ No newline at end of file + M.adjustBruteLoss(rand(1,5)*REAGENTS_EFFECT_MULTIPLIER) diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 082b6496357..d25d0529062 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -23,6 +23,7 @@ reagent_state = SOLID nutriment_factor = 15 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 + taste_message = "bland food" /datum/reagent/consumable/nutriment/on_mob_life(mob/living/M) if(!(M.mind in ticker.mode.vampires)) @@ -43,12 +44,14 @@ id = "protein" description = "Various essential proteins and fats commonly found in animal flesh and blood." diet_flags = DIET_CARN | DIET_OMNI + taste_message = "meat" /datum/reagent/consumable/nutriment/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores name = "Plant-matter" id = "plantmatter" description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce." diet_flags = DIET_HERB | DIET_OMNI + taste_message = "plant matter" /datum/reagent/consumable/vitamin name = "Vitamin" @@ -56,6 +59,7 @@ description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID color = "#664330" // rgb: 102, 67, 48 + taste_message = null /datum/reagent/consumable/vitamin/on_mob_life(mob/living/M) if(prob(50)) @@ -80,6 +84,7 @@ color = "#FFFFFF" // rgb: 255, 255, 255 nutriment_factor = 5 * REAGENTS_METABOLISM overdose_threshold = 200 // Hyperglycaemic shock + taste_message = "sweetness" /datum/reagent/consumable/sugar/on_mob_life(mob/living/M) M.AdjustDrowsy(-5) @@ -111,6 +116,7 @@ reagent_state = LIQUID nutriment_factor = 2 * REAGENTS_METABOLISM color = "#792300" // rgb: 121, 35, 0 + taste_message = "salt" /datum/reagent/consumable/ketchup name = "Ketchup" @@ -119,6 +125,7 @@ reagent_state = LIQUID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#731008" // rgb: 115, 16, 8 + taste_message = "ketchup" /datum/reagent/consumable/capsaicin name = "Capsaicin Oil" @@ -126,6 +133,7 @@ description = "This is what makes chilis hot." reagent_state = LIQUID color = "#B31008" // rgb: 179, 16, 8 + taste_message = "HOTNESS" /datum/reagent/consumable/capsaicin/on_mob_life(mob/living/M) switch(current_cycle) @@ -155,6 +163,7 @@ description = "This shit goes in pepperspray." reagent_state = LIQUID color = "#B31008" // rgb: 179, 16, 8 + taste_message = "PURE FIRE" /datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) if(prob(5)) @@ -223,6 +232,7 @@ reagent_state = LIQUID color = "#8BA6E9" // rgb: 139, 166, 233 process_flags = ORGANIC | SYNTHETIC + taste_message = "cold" /datum/reagent/consumable/frostoil/on_mob_life(mob/living/M) switch(current_cycle) @@ -262,6 +272,7 @@ reagent_state = SOLID color = "#B1B0B0" overdose_threshold = 100 + taste_message = "salt" /datum/reagent/consumable/sodiumchloride/overdose_process(mob/living/M, severity) if(prob(70)) @@ -273,6 +284,7 @@ id = "blackpepper" description = "A powder ground from peppercorns. *AAAACHOOO*" reagent_state = SOLID + taste_message = "pepper" /datum/reagent/consumable/cocoa name = "Cocoa Powder" @@ -281,6 +293,7 @@ reagent_state = SOLID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 + taste_message = "bitter cocoa" /datum/reagent/consumable/vanilla name = "Vanilla Powder" @@ -289,6 +302,7 @@ reagent_state = SOLID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#FFFACD" + taste_message = "bitter vanilla" /datum/reagent/consumable/hot_coco name = "Hot Chocolate" @@ -297,6 +311,7 @@ reagent_state = LIQUID nutriment_factor = 2 * REAGENTS_METABOLISM color = "#403010" // rgb: 64, 48, 16 + taste_message = "chocolate" /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M) if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 @@ -308,6 +323,7 @@ id = "sprinkles" description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." color = "#FF00FF" // rgb: 255, 0, 255 + taste_message = "sweetness" /datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate")) @@ -322,6 +338,7 @@ reagent_state = LIQUID nutriment_factor = 20 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 + taste_message = "oil" /datum/reagent/consumable/cornoil/reaction_turf(turf/simulated/T, volume) if(!istype(T)) @@ -342,6 +359,7 @@ description = "Heated beyond usefulness, this enzyme is now worthless." reagent_state = LIQUID color = "#282314" // rgb: 54, 94, 48 + taste_message = null /datum/reagent/consumable/dry_ramen name = "Dry Ramen" @@ -349,6 +367,7 @@ description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water." reagent_state = SOLID color = "#302000" // rgb: 48, 32, 0 + taste_message = "dry ramen coated with what might just be your tears" /datum/reagent/consumable/hot_ramen name = "Hot Ramen" @@ -357,6 +376,7 @@ reagent_state = LIQUID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 + taste_message = "ramen" /datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M) if(M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 @@ -370,6 +390,7 @@ reagent_state = LIQUID nutriment_factor = 5 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 + taste_message = "SPICY ramen" /datum/reagent/consumable/hell_ramen/on_mob_life(mob/living/M) M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT @@ -381,6 +402,7 @@ description = "This is what you rub all over yourself to pretend to be a ghost." reagent_state = SOLID color = "#FFFFFF" // rgb: 0, 0, 0 + taste_message = "flour" /datum/reagent/consumable/flour/reaction_turf(turf/T, volume) if(!istype(T, /turf/space)) @@ -393,6 +415,7 @@ reagent_state = SOLID nutriment_factor = 3 * REAGENTS_METABOLISM color = "#FFFFFF" // rgb: 0, 0, 0 + taste_message = "rice" /datum/reagent/consumable/cherryjelly name = "Cherry Jelly" @@ -400,6 +423,7 @@ description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." reagent_state = LIQUID color = "#801E28" // rgb: 128, 30, 40 + taste_message = "cherry jelly" /datum/reagent/consumable/bluecherryjelly name = "Blue Cherry Jelly" @@ -407,6 +431,7 @@ description = "Blue and tastier kind of cherry jelly." reagent_state = LIQUID color = "#00F0FF" + taste_message = "cherry jelly" /datum/reagent/consumable/egg name = "Egg" @@ -414,6 +439,7 @@ description = "A runny and viscous mixture of clear and yellow fluids." reagent_state = LIQUID color = "#F0C814" + taste_message = "eggs" /datum/reagent/consumable/egg/on_mob_life(mob/living/M) if(prob(8)) @@ -428,6 +454,7 @@ description = "The powdered starch of maize, derived from the kernel's endosperm. Used as a thickener for gravies and puddings." reagent_state = LIQUID color = "#C8A5DC" + taste_message = "flour" /datum/reagent/consumable/corn_syrup name = "Corn Syrup" @@ -435,6 +462,7 @@ description = "A sweet syrup derived from corn starch that has had its starches converted into maltose and other sugars." reagent_state = LIQUID color = "#C8A5DC" + taste_message = "sweetness" /datum/reagent/consumable/corn_syrup/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar", 1.2) @@ -446,6 +474,7 @@ description = "An incredibly sweet syrup, created from corn syrup treated with enzymes to convert its sugars into fructose." reagent_state = LIQUID color = "#C8A5DC" + taste_message = "diabetes" /datum/reagent/consumable/vhfcs/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar", 2.4) @@ -458,6 +487,7 @@ reagent_state = LIQUID color = "#d3a308" nutriment_factor = 15 * REAGENTS_METABOLISM + taste_message = "sweetness" /datum/reagent/consumable/honey/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar", 3) @@ -476,6 +506,7 @@ drink_icon = "chocolateglass" drink_name = "Glass of chocolate" drink_desc = "Tasty" + taste_message = "chocolate" /datum/reagent/consumable/chocolate/on_mob_life(mob/living/M) M.reagents.add_reagent("sugar", 0.8) @@ -491,6 +522,7 @@ description = "A rather bitter herb once thought to hold magical protective properties." reagent_state = LIQUID color = "#21170E" + taste_message = "tea" /datum/reagent/consumable/mugwort/on_mob_life(mob/living/M) if(ishuman(M) && M.mind) @@ -509,6 +541,7 @@ color = "#AB5D5D" metabolization_rate = 0.2 overdose_threshold = 133 + taste_message = "bacon" /datum/reagent/consumable/porktonium/overdose_process(mob/living/M, severity) if(prob(15)) @@ -525,6 +558,7 @@ color = "#B4B400" metabolization_rate = 0.2 nutriment_factor = 2 + taste_message = "broth" /datum/reagent/consumable/cheese name = "Cheese" @@ -532,6 +566,7 @@ description = "Some cheese. Pour it out to make it solid." reagent_state = SOLID color = "#FFFF00" + taste_message = "cheese" /datum/reagent/consumable/cheese/on_mob_life(mob/living/M) if(prob(3)) @@ -549,6 +584,7 @@ reagent_state = LIQUID color = "#B2B139" overdose_threshold = 50 + taste_message = "cheese?" /datum/reagent/consumable/fake_cheese/overdose_process(mob/living/M, severity) if(prob(8)) @@ -562,6 +598,7 @@ reagent_state = SOLID color = "#50FF00" addiction_chance = 5 + taste_message = "cheese...?" /datum/reagent/consumable/weird_cheese/on_mob_life(mob/living/M) if(prob(5)) @@ -578,6 +615,7 @@ description = "A dish made of mashed beans cooked with lard." reagent_state = LIQUID color = "#684435" + taste_message = "burritos" /datum/reagent/consumable/beans/on_mob_life(mob/living/M) if(prob(10)) @@ -590,6 +628,7 @@ description = "Bread! Yep, bread." reagent_state = SOLID color = "#9C5013" + taste_message = "bread" /datum/reagent/consumable/soybeanoil name = "Space-soybean oil" @@ -597,6 +636,7 @@ description = "An oil derived from extra-terrestrial soybeans." reagent_state = LIQUID color = "#B1B0B0" + taste_message = "oil" /datum/reagent/consumable/soybeanoil/on_mob_life(mob/living/M) if(prob(10)) @@ -613,6 +653,7 @@ color = "#B1B0B0" metabolization_rate = 0.2 overdose_threshold = 75 + taste_message = "oil" /datum/reagent/consumable/hydrogenated_soybeanoil/on_mob_life(mob/living/M) if(prob(15)) @@ -643,6 +684,7 @@ description = "A paste comprised of highly-processed organic material. Uncomfortably similar to deviled ham spread." reagent_state = LIQUID color = "#EBD7D7" + taste_message = "meat" /datum/reagent/consumable/meatslurry/on_mob_life(mob/living/M) if(prob(4)) @@ -660,6 +702,7 @@ description = "A starchy food paste made from boiled potatoes." reagent_state = SOLID color = "#D6D9C1" + taste_message = "potatoes" /datum/reagent/consumable/gravy name = "Gravy" @@ -667,6 +710,7 @@ description = "A savory sauce made from a simple meat-dripping roux and milk." reagent_state = LIQUID color = "#B4641B" + taste_message = "gravy" /datum/reagent/consumable/beff name = "Beff" @@ -674,6 +718,7 @@ description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced." reagent_state = SOLID color = "#AC7E67" + taste_message = "meat; hopefully" /datum/reagent/consumable/beff/on_mob_life(mob/living/M) if(prob(5)) @@ -691,6 +736,7 @@ description = "An Italian-American variety of salami usually made from beef and pork" reagent_state = SOLID color = "#AC7E67" + taste_message = "pepperoni" /datum/reagent/consumable/pepperoni/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == TOUCH) @@ -722,6 +768,7 @@ description = "A gross and unidentifiable substance." reagent_state = LIQUID color = "#63DE63" + taste_message = "burned food" /datum/reagent/questionmark/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -737,6 +784,7 @@ reagent_state = LIQUID color = "#F5F5F5" metabolization_rate = 0.2 + taste_message = "excellent cuisine" /datum/reagent/msg/on_mob_life(mob/living/M) if(prob(5)) @@ -747,16 +795,13 @@ M.Stun(rand(2,5)) ..() -/datum/reagent/msg/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == INGEST) - to_chat(M, "That tasted amazing!") - /datum/reagent/cholesterol name = "cholesterol" id = "cholesterol" description = "Pure cholesterol. Probably not very good for you." reagent_state = LIQUID color = "#FFFAC8" + taste_message = "heart disease" /datum/reagent/cholesterol/on_mob_life(mob/living/M) if(volume >= 25 && prob(volume*0.15)) @@ -782,6 +827,7 @@ description = "Scrapings of some unknown fungus found growing on the station walls." reagent_state = LIQUID color = "#C87D28" + taste_message = "puke" /datum/reagent/fungus/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -802,6 +848,7 @@ reagent_state = LIQUID color = "#8EAE7B" process_flags = ORGANIC | SYNTHETIC //Because apparently ghosts in the shell + taste_message = "spooks" /datum/reagent/ectoplasm/on_mob_life(mob/living/M) var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...") @@ -830,6 +877,7 @@ description = "Looks like someone lost their lunch. And then collected it. Yuck." reagent_state = LIQUID color = "#FFFF00" + taste_message = "puke" /datum/reagent/vomit/reaction_turf(turf/T, volume) if(volume >= 5 && !istype(T, /turf/space)) @@ -842,12 +890,13 @@ description = "Whoa, that can't be natural. That's horrible." reagent_state = LIQUID color = "#78FF74" + taste_message = "puke" /datum/reagent/greenvomit/reaction_turf(turf/T, volume) if(volume >= 5 && !istype(T, /turf/space)) new /obj/effect/decal/cleanable/vomit/green(T) playsound(T, 'sound/effects/splat.ogg', 50, 1, -3) - + ////Lavaland Flora Reagents//// /datum/reagent/consumable/entpoly @@ -855,6 +904,7 @@ id = "entpoly" description = "An ichor, derived from a certain mushroom, makes for a bad time." color = "#1d043d" + taste_message = "puke" /datum/reagent/consumable/entpoly/on_mob_life(mob/living/M) if(current_cycle >= 10) @@ -873,12 +923,13 @@ description = "A stimulating ichor which causes luminescent fungi to grow on the skin. " color = "#b5a213" var/light_activated = 0 + taste_message = "puke" /datum/reagent/consumable/tinlux/on_mob_life(mob/living/M) if(!light_activated) M.set_light(2) light_activated = 1 - ..() + ..() /datum/reagent/consumable/tinlux/on_mob_delete(mob/living/M) M.set_light(0) @@ -889,9 +940,10 @@ description = "A bubbly paste that heals wounds of the skin." color = "#d3a308" nutriment_factor = 3 * REAGENTS_METABOLISM + taste_message = "sweetness" /datum/reagent/consumable/vitfro/on_mob_life(mob/living/M) if(prob(80)) M.adjustBruteLoss(-1 * REAGENTS_EFFECT_MULTIPLIER) M.adjustFireLoss(-1 * REAGENTS_EFFECT_MULTIPLIER) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index a8fcf888318..6a156313971 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -205,6 +205,7 @@ color = "#C8A5DC" penetrates_skin = 1 metabolization_rate = 0.15 + taste_message = "salt" /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/M) if(prob(33)) diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 89233789903..d08531aebc3 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -38,6 +38,7 @@ description = "A colorless, odorless gas." reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 + taste_message = null /datum/reagent/nitrogen name = "Nitrogen" @@ -45,7 +46,7 @@ description = "A colorless, odorless, tasteless gas." reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 - + taste_message = null /datum/reagent/hydrogen name = "Hydrogen" @@ -53,7 +54,7 @@ description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas." reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 - + taste_message = null /datum/reagent/potassium name = "Potassium" @@ -61,7 +62,7 @@ description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water." reagent_state = SOLID color = "#A0A0A0" // rgb: 160, 160, 160 - + taste_message = "bad ideas" /datum/reagent/sulfur name = "Sulfur" @@ -69,7 +70,7 @@ description = "A chemical element." reagent_state = SOLID color = "#BF8C00" // rgb: 191, 140, 0 - + taste_message = "impulsive decisions" /datum/reagent/sodium name = "Sodium" @@ -77,7 +78,7 @@ description = "A chemical element." reagent_state = SOLID color = "#808080" // rgb: 128, 128, 128 - + taste_message = "horrible misjudgement" /datum/reagent/phosphorus name = "Phosphorus" @@ -85,7 +86,7 @@ description = "A chemical element." reagent_state = SOLID color = "#832828" // rgb: 131, 40, 40 - + taste_message = "misguided choices" /datum/reagent/carbon name = "Carbon" @@ -93,6 +94,7 @@ description = "A chemical element." reagent_state = SOLID color = "#1C1300" // rgb: 30, 20, 0 + taste_message = "like a pencil or something" /datum/reagent/carbon/reaction_turf(turf/T, volume) if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T)) // Only add one dirt per turf. Was causing people to crash. @@ -104,6 +106,7 @@ description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." reagent_state = SOLID color = "#F7C430" // rgb: 247, 196, 48 + taste_message = "bling" /datum/reagent/silver @@ -112,6 +115,7 @@ description = "A lustrous metallic element regarded as one of the precious metals." reagent_state = SOLID color = "#D0D0D0" // rgb: 208, 208, 208 + taste_message = "sub-par bling" /datum/reagent/aluminum @@ -120,6 +124,7 @@ description = "A silvery white and ductile member of the boron group of chemical elements." reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 + taste_message = "metal" /datum/reagent/silicon @@ -128,6 +133,7 @@ description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 + taste_message = null /datum/reagent/copper @@ -135,6 +141,7 @@ id = "copper" description = "A highly ductile metal." color = "#6E3B08" // rgb: 110, 59, 8 + taste_message = "copper" /datum/reagent/iron @@ -143,6 +150,7 @@ description = "Pure iron is a metal." reagent_state = SOLID color = "#C8A5DC" // rgb: 200, 165, 220 + taste_message = "metal" /datum/reagent/iron/on_mob_life(mob/living/M) if(ishuman(M)) @@ -158,6 +166,7 @@ description = "A perfluoronated sulfonic acid that forms a foam when mixed with water." reagent_state = LIQUID color = "#9E6B38" // rgb: 158, 107, 56 + taste_message = null // metal foaming agent // this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually @@ -167,6 +176,7 @@ description = "A caustic substance commonly used in fertilizer or household cleaners." reagent_state = GAS color = "#404030" // rgb: 64, 64, 48 + taste_message = "floor cleaner" /datum/reagent/diethylamine name = "Diethylamine" @@ -174,6 +184,7 @@ description = "A secondary amine, useful as a plant nutrient and as building block for other compounds." reagent_state = LIQUID color = "#322D00" + taste_message = null /datum/reagent/oil name = "Oil" @@ -181,6 +192,7 @@ description = "A decent lubricant for machines. High in benzene, naptha and other hydrocarbons." reagent_state = LIQUID color = "#3C3C3C" + taste_message = "motor oil" /datum/reagent/iodine name = "Iodine" @@ -188,6 +200,7 @@ description = "A purple gaseous element." reagent_state = GAS color = "#493062" + taste_message = null /datum/reagent/carpet name = "Carpet" @@ -195,6 +208,7 @@ description = "A covering of thick fabric used on floors. This type looks particularly gross." reagent_state = LIQUID color = "#701345" + taste_message = "a carpet...what?" /datum/reagent/carpet/reaction_turf(turf/simulated/T, volume) if(istype(T, /turf/simulated/floor/plating) || istype(T, /turf/simulated/floor/plasteel)) @@ -208,6 +222,7 @@ description = "A red-brown liquid element." reagent_state = LIQUID color = "#4E3A3A" + taste_message = null /datum/reagent/phenol name = "Phenol" @@ -215,6 +230,7 @@ description = "Also known as carbolic acid, this is a useful building block in organic chemistry." reagent_state = LIQUID color = "#525050" + taste_message = null /datum/reagent/ash name = "Ash" @@ -222,6 +238,7 @@ description = "Ashes to ashes, dust to dust." reagent_state = LIQUID color = "#191919" + taste_message = "ash" /datum/reagent/acetone name = "Acetone" @@ -229,6 +246,7 @@ description = "Pure 100% nail polish remover, also works as an industrial solvent." reagent_state = LIQUID color = "#474747" + taste_message = null /datum/reagent/acetone/on_mob_life(mob/living/M) M.adjustToxLoss(1.5) @@ -240,6 +258,7 @@ description = "Volatile." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 + taste_message = null /datum/reagent/colorful_reagent name = "Colorful Reagent" @@ -247,6 +266,7 @@ description = "It's pure liquid colors. That's a thing now." reagent_state = LIQUID color = "#FFFFFF" + taste_message = "colors!" /datum/reagent/colorful_reagent/reaction_mob(mob/living/simple_animal/M, method=TOUCH, volume) if(isanimal(M)) @@ -269,6 +289,7 @@ description = "A rather tubular and gnarly way of coloring totally bodacious hair. Duuuudddeee." reagent_state = LIQUID color = "#960096" + taste_message = "the 2559 Autumn release of the Le Jeune Homme catalogue for professional hairdressers" /datum/reagent/hair_dye/reaction_mob(mob/living/M, volume) if(ishuman(M)) @@ -291,6 +312,7 @@ reagent_state = LIQUID color = "#5DDA5D" penetrates_skin = 1 + taste_message = "someone's beard" /datum/reagent/hairgrownium/reaction_mob(mob/living/M, volume) if(ishuman(M)) @@ -309,6 +331,7 @@ reagent_state = LIQUID color = "#5DD95D" penetrates_skin = 1 + taste_message = "multiple beards" /datum/reagent/super_hairgrownium/reaction_mob(mob/living/M, volume) if(ishuman(M)) @@ -341,6 +364,7 @@ description = "Oh god it never ends, IT NEVER STOPS!" reagent_state = GAS color = "#D06E27" + taste_message = "mexican cuisine" /datum/reagent/fartonium/on_mob_life(mob/living/M) if(prob(66)) @@ -364,6 +388,7 @@ description = "Hugs, in liquid form. Yes, the concept of a hug. As a liquid. This makes sense in the future." reagent_state = LIQUID color = "#FF97B9" + taste_message = "hugs; awww" /datum/reagent/love name = "Pure love" @@ -371,6 +396,7 @@ description = "What is this emotion you humans call \"love?\" Oh, it's this? This is it? Huh, well okay then, thanks." reagent_state = LIQUID color = "#FF83A5" + taste_message = "love; awwwwwww" /datum/reagent/love/on_mob_life(mob/living/M) if(M.a_intent == I_HARM) @@ -399,6 +425,7 @@ id = "royal_bee_jelly" description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees." color = "#00ff80" + taste_message = "sweetness" /datum/reagent/royal_bee_jelly/on_mob_life(mob/living/M) if(prob(2)) @@ -411,6 +438,7 @@ description = "A commercial chemical designed to help older men in the bedroom." //not really it just makes you a giant color = "#ff0000"//strong red. rgb 255, 0, 0 var/current_size = 1 + taste_message = "power!" /datum/reagent/growthserum/on_mob_life(mob/living/carbon/H) var/newsize = current_size @@ -442,13 +470,15 @@ description = "Finely ground Coffee beans, used to make coffee." reagent_state = SOLID color = "#5B2E0D" // rgb: 91, 46, 13 + taste_message = "bitterness" /datum/reagent/toxin/teapowder name = "Ground Tea Leaves" id = "teapowder" description = "Finely shredded Tea leaves, used for making tea." reagent_state = SOLID - color = "#7F8400" // rgb: 127, 132, 0 + color = "#7F8400" // rgb: 127, 132, 0" + taste_message = "bitterness" //////////////////////////////////Hydroponics stuff/////////////////////////////// @@ -458,6 +488,7 @@ description = "Some kind of nutriment. You can't really tell what it is. You should probably report it, along with how you obtained it." color = "#000000" // RBG: 0, 0, 0 var/tox_prob = 0 + taste_message = "puke" /datum/reagent/plantnutriment/on_mob_life(mob/living/M) if(prob(tox_prob)) @@ -520,4 +551,4 @@ id = "triplepiss" description = "Ewwwwwwwww." reagent_state = LIQUID - color = "#857400" \ No newline at end of file + color = "#857400" diff --git a/code/modules/reagents/chemistry/reagents/paint.dm b/code/modules/reagents/chemistry/reagents/paint.dm index 0ca67259126..e1a765f59d9 100644 --- a/code/modules/reagents/chemistry/reagents/paint.dm +++ b/code/modules/reagents/chemistry/reagents/paint.dm @@ -4,6 +4,7 @@ description = "Floor paint is used to color floor tiles." reagent_state = LIQUID color = "#808080" + taste_message = "paint" /datum/reagent/paint/reaction_turf(turf/T, volume) if(!istype(T, /turf/space)) @@ -54,7 +55,8 @@ description = "Paint remover is used to remove floor paint from floor tiles." reagent_state = LIQUID color = "#808080" + taste_message = "alcohol" /datum/reagent/paint_remover/reaction_turf(turf/T, volume) if(!istype(T, /turf/space)) - T.color = initial(T.color) \ No newline at end of file + T.color = initial(T.color) diff --git a/code/modules/reagents/chemistry/reagents/paradise_pop.dm b/code/modules/reagents/chemistry/reagents/paradise_pop.dm index 2dab79627cc..edf633bcacc 100644 --- a/code/modules/reagents/chemistry/reagents/paradise_pop.dm +++ b/code/modules/reagents/chemistry/reagents/paradise_pop.dm @@ -15,6 +15,7 @@ description = "Tastes just how you'd think Paradise would if you could bottle it." reagent_state = LIQUID color = "#cc0044" + taste_message = "paradise" //Apple-pocalypse: Low chance to cause a goonchem vortex that pulls things within a very small radius (2 tiles?) towards the drinker /datum/reagent/consumable/drink/apple_pocalypse @@ -23,6 +24,7 @@ description = "If doomsday came in fruit form, it'd probably be apples." reagent_state = LIQUID color = "#44FF44" + taste_message = "doomsday" /datum/reagent/consumable/drink/apple_pocalypse/on_mob_life(mob/living/M) if(prob(1)) @@ -38,6 +40,7 @@ description = "Reason for ban: Excessive Flavor." reagent_state = LIQUID color = "#FF44FF" + taste_message = "a permaban" /datum/reagent/consumable/drink/berry_banned/on_mob_life(mob/living/M) if(prob(10)) @@ -65,6 +68,7 @@ description = "Reason for ban: Excessive Flavor." reagent_state = LIQUID color = "#FF44FF" + taste_message = "a permaban" /datum/reagent/consumable/drink/berry_banned2/on_mob_life(mob/living/M) if(prob(50)) @@ -85,6 +89,7 @@ description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years." reagent_state = LIQUID color = "#4d2600" + taste_message = "greytide" /datum/reagent/consumable/drink/blackeye_brew/on_mob_life(mob/living/M) if(prob(25)) @@ -107,6 +112,7 @@ description = "Exploding with grape flavor and a favorite among ERT members system-wide." reagent_state = LIQUID color = "#9933ff" + taste_message = "old people" /datum/reagent/consumable/drink/grape_granade/on_mob_life(mob/living/M) if(prob(1)) @@ -125,6 +131,7 @@ description = "Soft drinks have been detected on collision course with your tastebuds." reagent_state = LIQUID color = "#cc9900" + taste_message = "flying space rocks" /datum/reagent/consumable/drink/meteor_malt/on_mob_life(mob/living/M) if(prob(25)) @@ -134,4 +141,4 @@ var/amount = rand(1, 5) var/mineral = pick("copper", "iron", "gold", "carbon", "silver", "aluminum", "silicon", "sodiumchloride", "plasma") M.reagents.add_reagent(mineral, amount) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index 43e81db402f..d4147a1cae9 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -7,6 +7,7 @@ drink_icon = "dr_gibb_glass" drink_name = "Glass of welder fuel" drink_desc = "Unless you are an industrial tool, this is probably not safe for consumption." + taste_message = "mistakes" /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite! if(method == TOUCH) @@ -20,6 +21,7 @@ description = "The liquid phase of an unusual extraterrestrial compound." reagent_state = LIQUID color = "#7A2B94" + taste_message = "corporate assets going to waste" /datum/reagent/plasma/on_mob_life(mob/living/M) M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) @@ -43,6 +45,7 @@ reagent_state = SOLID color = "#673910" // rgb: 103, 57, 16 process_flags = ORGANIC | SYNTHETIC + taste_message = "metal" /datum/reagent/thermite/reaction_turf(turf/simulated/wall/W, volume) if(volume >= 5 && istype(W)) @@ -56,6 +59,7 @@ description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity." reagent_state = LIQUID color = "#808080" // rgb: 128, 128, 128 + taste_message = "sweetness" /datum/reagent/stabilizing_agent name = "Stabilizing Agent" @@ -63,6 +67,7 @@ description = "A chemical that stabilises normally volatile compounds, preventing them from reacting immediately." reagent_state = LIQUID color = "#FFFF00" + taste_message = null /datum/reagent/clf3 name = "Chlorine Trifluoride" @@ -72,6 +77,7 @@ color = "#FF0000" metabolization_rate = 4 process_flags = ORGANIC | SYNTHETIC + taste_message = null /datum/reagent/clf3/on_mob_life(mob/living/M) M.adjust_fire_stacks(2) @@ -116,6 +122,7 @@ description = "Sucks everything into the detonation point." reagent_state = LIQUID color = "#800080" + taste_message = "the end of the world" /datum/reagent/blackpowder name = "Black Powder" @@ -125,6 +132,7 @@ color = "#000000" metabolization_rate = 0.05 penetrates_skin = 1 + taste_message = "sand" /datum/reagent/blackpowder/reaction_turf(turf/T, volume) //oh shit if(volume >= 5 && !istype(T, /turf/space)) @@ -279,6 +287,7 @@ id = "plasma_dust" description = "A fine dust of plasma. This chemical has unusual mutagenic properties for viruses and slimes alike." color = "#500064" // rgb: 80, 0, 100 + taste_message = "corporate assets going to waste" /datum/reagent/plasma_dust/on_mob_life(mob/living/M) M.adjustToxLoss(3) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 8fabc46db00..935fda3691d 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -38,6 +38,7 @@ description = "Useful for dealing with undesirable customers." reagent_state = LIQUID color = "#CF3600" // rgb: 207, 54, 0 + taste_message = "mint" /datum/reagent/minttoxin/on_mob_life(mob/living/M) if(FAT in M.mutations) @@ -50,6 +51,7 @@ description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." reagent_state = LIQUID color = "#801E28" // rgb: 128, 30, 40 + taste_message = "slimes?" /datum/reagent/slimejelly/on_mob_life(mob/living/M) if(prob(10)) @@ -66,6 +68,7 @@ reagent_state = LIQUID color = "#13BC5E" // rgb: 19, 188, 94 can_synth = 0 + taste_message = "shadows" /datum/reagent/slimetoxin/on_mob_life(mob/living/M) if(ishuman(M)) @@ -99,6 +102,7 @@ color = "#484848" // rgb: 72, 72, 72 metabolization_rate = 0.2 penetrates_skin = 1 + taste_message = "metal" /datum/reagent/mercury/on_mob_life(mob/living/M) if(prob(70)) @@ -113,6 +117,7 @@ color = "#808080" // rgb: 128, 128, 128 penetrates_skin = 1 process_flags = ORGANIC | SYNTHETIC + taste_message = "fire" /datum/reagent/chlorine/on_mob_life(mob/living/M) M.adjustFireLoss(1) @@ -126,6 +131,7 @@ color = "#6A6054" penetrates_skin = 1 process_flags = ORGANIC | SYNTHETIC + taste_message = "spicy freshness" /datum/reagent/fluorine/on_mob_life(mob/living/M) M.adjustFireLoss(1) @@ -212,6 +218,7 @@ reagent_state = LIQUID color = "#00D72B" process_flags = ORGANIC | SYNTHETIC + taste_message = "ACID" /datum/reagent/sacid/on_mob_life(mob/living/M) M.adjustFireLoss(1) @@ -322,6 +329,7 @@ drink_icon ="beerglass" drink_name = "Beer glass" drink_desc = "A freezing pint of beer" + taste_message = "beer" /datum/reagent/beer2/on_mob_life(mob/living/M) switch(current_cycle) @@ -341,6 +349,7 @@ metabolization_rate = 0.1 penetrates_skin = 1 can_synth = 0 + taste_message = null /datum/reagent/polonium/on_mob_life(mob/living/M) M.apply_effect(8, IRRADIATE, negate_armor = 1) @@ -354,6 +363,7 @@ color = "#E7C4C4" metabolization_rate = 0.2 overdose_threshold = 40 + taste_message = null /datum/reagent/histamine/reaction_mob(mob/living/M, method=TOUCH, volume) //dumping histamine on someone is VERY mean. if(iscarbon(M)) @@ -510,6 +520,7 @@ color = "#CF3600" metabolization_rate = 0.1 penetrates_skin = 1 + taste_message = "almonds" /datum/reagent/cyanide/on_mob_life(mob/living/M) M.adjustToxLoss(1.5*REAGENTS_EFFECT_MULTIPLIER) @@ -566,6 +577,7 @@ reagent_state = LIQUID color = "#4141D2" process_flags = ORGANIC | SYNTHETIC + taste_message = "ACID" /datum/reagent/facid/on_mob_life(mob/living/M) M.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) @@ -629,6 +641,7 @@ reagent_state = LIQUID color = "#7F10C0" can_synth = 0 + taste_message = null /datum/reagent/initropidril/on_mob_life(mob/living/M) if(prob(33)) @@ -659,6 +672,7 @@ reagent_state = LIQUID color = "#1E4664" metabolization_rate = 0.2 + taste_message = null /datum/reagent/pancuronium/on_mob_life(mob/living/M) switch(current_cycle) @@ -721,6 +735,7 @@ penetrates_skin = 1 can_synth = 0 + taste_message = null /datum/reagent/ketamine/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 5) @@ -781,6 +796,7 @@ reagent_state = SOLID color = "#D1DED1" metabolization_rate = 0.2 + taste_message = "puke" /datum/reagent/lipolicide/on_mob_life(mob/living/M) if(!M.nutrition) @@ -853,6 +869,7 @@ metabolization_rate = 0.1 penetrates_skin = 1 overdose_threshold = 25 + taste_message = null /datum/reagent/sarin/on_mob_life(mob/living/M) switch(current_cycle) @@ -1062,6 +1079,7 @@ reagent_state = SOLID color = "#993333" process_flags = ORGANIC | SYNTHETIC + taste_message = "ANTS; OH GOD!" /datum/reagent/ants/on_mob_life(mob/living/M) M.adjustBruteLoss(2) @@ -1083,6 +1101,7 @@ metabolization_rate = 0.2 var/shock_timer = 0 process_flags = ORGANIC | SYNTHETIC + taste_message = "electrons" /datum/reagent/teslium/on_mob_life(mob/living/M) shock_timer++ @@ -1090,4 +1109,4 @@ shock_timer = 0 M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you playsound(M, "sparks", 50, 1) - ..() \ No newline at end of file + ..() diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 70d2a9f76c0..0595ffa84bf 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -18,6 +18,7 @@ drink_icon = "glass_clear" drink_name = "Glass of Water" drink_desc = "The father of all refreshments." + taste_message = null /datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume) // Put out fire @@ -61,6 +62,7 @@ description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity." reagent_state = LIQUID color = "#1BB1AB" + taste_message = "oil" /datum/reagent/lube/reaction_turf(turf/simulated/T, volume) if(volume >= 1 && istype(T)) @@ -73,6 +75,7 @@ description = "A compound used to clean things. Now with 50% more sodium hypochlorite!" reagent_state = LIQUID color = "#61C2C2" + taste_message = "floor cleaner" /datum/reagent/space_cleaner/reaction_obj(obj/O, volume) if(O && !istype(O, /atom/movable/lighting_overlay)) @@ -138,6 +141,7 @@ drink_icon = "glass_red" drink_name = "Glass of Tomato juice" drink_desc = "Are you sure this is tomato juice?" + taste_message = "blood" /datum/reagent/blood/reaction_mob(mob/living/M, method=TOUCH, volume) if(data && data["viruses"]) @@ -238,6 +242,7 @@ description = "Smelly water from a fish tank. Gross!" reagent_state = LIQUID color = "#757547" + taste_message = "puke" /datum/reagent/fishwater/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -257,6 +262,7 @@ description = "Filthy water scoured from a nasty toilet bowl. Absolutely disgusting." reagent_state = LIQUID color = "#757547" + taste_message = "puke" /datum/reagent/fishwater/toiletwater/reaction_mob(mob/living/M, method=TOUCH, volume) //For shennanigans return @@ -271,6 +277,7 @@ drink_icon = "glass_clear" drink_name = "Glass of Water" drink_desc = "The father of all refreshments." + taste_message = null /datum/reagent/holywater/on_mob_life(mob/living/M) M.AdjustJitter(-5) @@ -346,6 +353,7 @@ description = "Something that shouldn't exist on this plane of existance." process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it. metabolization_rate = 1 + taste_message = null /datum/reagent/fuel/unholywater/on_mob_life(mob/living/M) if(iscultist(M)) @@ -373,6 +381,7 @@ process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. metabolization_rate = 1 can_synth = 0 + taste_message = null /datum/reagent/hellwater/on_mob_life(mob/living/M) M.fire_stacks = min(5, M.fire_stacks + 3) @@ -388,6 +397,7 @@ color = "#FF9966" description = "You don't even want to think about what's in here." reagent_state = LIQUID + taste_message = "meat" /datum/reagent/liquidgibs/reaction_turf(turf/T, volume) //yes i took it from synthflesh... if(volume >= 5 && !istype(T, /turf/space)) @@ -416,4 +426,4 @@ if(istype(O, /obj/item/clothing/shoes/galoshes)) var/t_loc = get_turf(O) qdel(O) - new /obj/item/clothing/shoes/galoshes/dry(t_loc) \ No newline at end of file + new /obj/item/clothing/shoes/galoshes/dry(t_loc) From 96f842262f1b2198a0e6cf46163f0f12a69da02a Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 18 May 2017 02:33:03 +0200 Subject: [PATCH 03/21] Species taste sensitivity --- code/__DEFINES/mob.dm | 2 +- code/modules/mob/living/carbon/human/species/station.dm | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index cc2d7069348..829d3940eff 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -69,7 +69,7 @@ // Taste sensitivity - the more the more reagents you'll taste #define TASTE_SENSITIVITY_NORMAL 1 -#define TASTE_SENSITIVITY_SHARP 3 +#define TASTE_SENSITIVITY_SHARP 1.5 #define TASTE_SENSITIVITY_DULL 0.75 #define TASTE_SENSITIVITY_NO_TASTE 0 diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index c1005f2b932..552118886f8 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -10,6 +10,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS dietflags = DIET_OMNI + taste_sensitivity = TASTE_SENSITIVITY_DULL unarmed_type = /datum/unarmed_attack/punch blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ colonies across a wide swathe of space. They hold a wide range of forms and creeds.

\ @@ -114,6 +115,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR dietflags = DIET_OMNI + taste_sensitivity = TASTE_SENSITIVITY_SHARP reagent_tag = PROCESS_ORG flesh_color = "#AFA59E" base_color = "#424242" @@ -164,6 +166,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = FEET_PADDED | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | HAS_FUR dietflags = DIET_OMNI + taste_sensitivity = TASTE_SENSITIVITY_SHARP reagent_tag = PROCESS_ORG flesh_color = "#966464" base_color = "#CF4D2F" @@ -213,6 +216,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_BODY_MARKINGS dietflags = DIET_HERB + taste_sensitivity = TASTE_SENSITIVITY_DULL flesh_color = "#8CD7A3" blood_color = "#1D2CBF" base_color = "#38b661" //RGB: 56, 182, 97. @@ -792,6 +796,7 @@ flags = NO_BREATHE | RADIMMUNE | IS_PLANT | NO_BLOOD | NO_PAIN clothing_flags = HAS_SOCKS dietflags = 0 //Diona regenerate nutrition in light, no diet necessary + taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE oxy_mod = 0 @@ -903,6 +908,7 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY dietflags = 0 //IPCs can't eat, so no diet + taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE blood_color = "#1F181F" flesh_color = "#AAAAAA" //Default styles for created mobs. From e4bafa2a7ed1c2688c00615d7449fad5a245d3eb Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Thu, 18 May 2017 08:29:01 +0200 Subject: [PATCH 04/21] Changes! --- .../mob/living/carbon/human/species/species.dm | 2 +- code/modules/reagents/chemistry/reagents/drinks.dm | 2 +- code/modules/reagents/chemistry/reagents/food.dm | 12 ++++++------ code/modules/reagents/chemistry/reagents/misc.dm | 4 ++-- .../reagents/chemistry/reagents/pyrotechnic.dm | 4 ++-- code/modules/reagents/chemistry/reagents/water.dm | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index cc01bdf65d6..d400fd08a81 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -45,7 +45,7 @@ var/reagent_tag //Used for metabolizing reagents. var/hunger_drain = HUNGER_FACTOR var/digestion_ratio = 1 //How quickly the species digests/absorbs reagents. - var/taste_sensitivity = TASTE_SENSITIVITY_NORMAL //factor of how much of a reagent is needed for a human to taste it + var/taste_sensitivity = TASTE_SENSITIVITY_NORMAL //the most widely used factor; humans use a different one var/siemens_coeff = 1 //base electrocution coefficient diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 47b4111a67d..de395b0faac 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -465,7 +465,7 @@ id = "pumpkinjuice" description = "Juiced from real pumpkin." color = "#FFA500" - taste_message = "puke" + taste_message = "autumn" /datum/reagent/consumable/drink/blumpkinjuice name = "Blumpkin Juice" diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index d25d0529062..72e30fef570 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -598,7 +598,7 @@ reagent_state = SOLID color = "#50FF00" addiction_chance = 5 - taste_message = "cheese...?" + taste_message = "cheeeeeese...?" /datum/reagent/consumable/weird_cheese/on_mob_life(mob/living/M) if(prob(5)) @@ -718,7 +718,7 @@ description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced." reagent_state = SOLID color = "#AC7E67" - taste_message = "meat; hopefully" + taste_message = "meat - hopefully" /datum/reagent/consumable/beff/on_mob_life(mob/living/M) if(prob(5)) @@ -801,7 +801,7 @@ description = "Pure cholesterol. Probably not very good for you." reagent_state = LIQUID color = "#FFFAC8" - taste_message = "heart disease" + taste_message = "heart attack" /datum/reagent/cholesterol/on_mob_life(mob/living/M) if(volume >= 25 && prob(volume*0.15)) @@ -827,7 +827,7 @@ description = "Scrapings of some unknown fungus found growing on the station walls." reagent_state = LIQUID color = "#C87D28" - taste_message = "puke" + taste_message = "mold" /datum/reagent/fungus/reaction_mob(mob/living/M, method=TOUCH, volume) if(method == INGEST) @@ -904,7 +904,7 @@ id = "entpoly" description = "An ichor, derived from a certain mushroom, makes for a bad time." color = "#1d043d" - taste_message = "puke" + taste_message = "mold" /datum/reagent/consumable/entpoly/on_mob_life(mob/living/M) if(current_cycle >= 10) @@ -923,7 +923,7 @@ description = "A stimulating ichor which causes luminescent fungi to grow on the skin. " color = "#b5a213" var/light_activated = 0 - taste_message = "puke" + taste_message = "mold" /datum/reagent/consumable/tinlux/on_mob_life(mob/living/M) if(!light_activated) diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index d08531aebc3..c9a6be0a7bf 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -133,7 +133,7 @@ description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 - taste_message = null + taste_message = "metal" /datum/reagent/copper @@ -266,7 +266,7 @@ description = "It's pure liquid colors. That's a thing now." reagent_state = LIQUID color = "#FFFFFF" - taste_message = "colors!" + taste_message = "the rainbow" /datum/reagent/colorful_reagent/reaction_mob(mob/living/simple_animal/M, method=TOUCH, volume) if(isanimal(M)) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index d4147a1cae9..0d9d7cfbc95 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -67,7 +67,7 @@ description = "A chemical that stabilises normally volatile compounds, preventing them from reacting immediately." reagent_state = LIQUID color = "#FFFF00" - taste_message = null + taste_message = "long-term stability" /datum/reagent/clf3 name = "Chlorine Trifluoride" @@ -132,7 +132,7 @@ color = "#000000" metabolization_rate = 0.05 penetrates_skin = 1 - taste_message = "sand" + taste_message = "explosions" /datum/reagent/blackpowder/reaction_turf(turf/T, volume) //oh shit if(volume >= 5 && !istype(T, /turf/space)) diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 0595ffa84bf..f32038a0b3f 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -141,7 +141,7 @@ drink_icon = "glass_red" drink_name = "Glass of Tomato juice" drink_desc = "Are you sure this is tomato juice?" - taste_message = "blood" + taste_message = "blood" /datum/reagent/blood/reaction_mob(mob/living/M, method=TOUCH, volume) if(data && data["viruses"]) @@ -381,7 +381,7 @@ process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL. metabolization_rate = 1 can_synth = 0 - taste_message = null + taste_message = "admin abuse" /datum/reagent/hellwater/on_mob_life(mob/living/M) M.fire_stacks = min(5, M.fire_stacks + 3) From 77260eeceb517dcbfc017be4fb69df76865b394a Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Tue, 23 May 2017 21:30:44 +0200 Subject: [PATCH 05/21] More taste tweaks. --- .../reagents/chemistry/reagents/alcohol.dm | 14 +++++++------- .../reagents/chemistry/reagents/food.dm | 2 +- .../reagents/chemistry/reagents/misc.dm | 10 +++++----- .../chemistry/reagents/pyrotechnic.dm | 2 +- .../reagents/chemistry/reagents/toxins.dm | 19 ++++++++++--------- .../reagents/chemistry/reagents/water.dm | 1 + 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index fe224331f71..232032fd9e7 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -9,7 +9,7 @@ can_grow_in_plants = 0 //Alcoholic drinks won't be grown in plants (would "water down" random seed chems too much) var/dizzy_adj = 3 var/alcohol_perc = 1 //percentage of ethanol in a beverage 0.0 - 1.0 - taste_message = "strong alcohol" + taste_message = "liquid fire" /datum/reagent/consumable/ethanol/on_mob_life(mob/living/M) M.AdjustDrunk(alcohol_perc) @@ -75,7 +75,7 @@ description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 - taste_message = "pure class" + taste_message = "class" /datum/reagent/consumable/ethanol/gin name = "Gin" @@ -423,7 +423,7 @@ drink_icon = "gargleblasterglass" drink_name = "Pan-Galactic Gargle Blaster" drink_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." - taste_message = "the number fourty-two, somehow" + taste_message = "the number fourty two" /datum/reagent/consumable/ethanol/brave_bull name = "Brave Bull" @@ -474,6 +474,7 @@ color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.5 drink_icon = "beepskysmashglass" + description = "Whiskey-imbued cream, what else would you expect from the Irish." drink_name = "Beepsky Smash" drink_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." taste_message = "THE LAW" @@ -485,7 +486,6 @@ /datum/reagent/consumable/ethanol/irish_cream name = "Irish Cream" id = "irishcream" - description = "Whiskey-imbued cream, what else would you expect from the Irish." reagent_state = LIQUID color = "#664300" // rgb: 102, 67, 0 alcohol_perc = 0.3 @@ -528,7 +528,7 @@ drink_icon = "glass_clear" drink_name = "Moonshine" drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - taste_message = "the proletaryat" + taste_message = "prohibition" /datum/reagent/consumable/ethanol/b52 name = "B-52" @@ -746,7 +746,7 @@ drink_icon = "devilskiss" drink_name = "Devils Kiss" drink_desc = "Creepy time!" - taste_message = "blood mixed with alcohol" + taste_message = "blood" /datum/reagent/consumable/ethanol/red_mead name = "Red Mead" @@ -758,7 +758,7 @@ drink_icon = "red_meadglass" drink_name = "Red Mead" drink_desc = "A True Vikings Beverage, though its color is strange." - taste_message = "blood mixed with alcohol" + taste_message = "blood" /datum/reagent/consumable/ethanol/mead name = "Mead" diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 72e30fef570..ef45cc1a6f3 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -718,7 +718,7 @@ description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced." reagent_state = SOLID color = "#AC7E67" - taste_message = "meat - hopefully" + taste_message = "meat" /datum/reagent/consumable/beff/on_mob_life(mob/living/M) if(prob(5)) diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index c9a6be0a7bf..e0e1854b866 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -124,7 +124,7 @@ description = "A silvery white and ductile member of the boron group of chemical elements." reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 - taste_message = "metal" + taste_message = null /datum/reagent/silicon @@ -133,7 +133,7 @@ description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon." reagent_state = SOLID color = "#A8A8A8" // rgb: 168, 168, 168 - taste_message = "metal" + taste_message = "a CPU" /datum/reagent/copper @@ -388,7 +388,7 @@ description = "Hugs, in liquid form. Yes, the concept of a hug. As a liquid. This makes sense in the future." reagent_state = LIQUID color = "#FF97B9" - taste_message = "hugs; awww" + taste_message = "hugs" /datum/reagent/love name = "Pure love" @@ -396,7 +396,7 @@ description = "What is this emotion you humans call \"love?\" Oh, it's this? This is it? Huh, well okay then, thanks." reagent_state = LIQUID color = "#FF83A5" - taste_message = "love; awwwwwww" + taste_message = "love" /datum/reagent/love/on_mob_life(mob/living/M) if(M.a_intent == I_HARM) @@ -438,7 +438,7 @@ description = "A commercial chemical designed to help older men in the bedroom." //not really it just makes you a giant color = "#ff0000"//strong red. rgb 255, 0, 0 var/current_size = 1 - taste_message = "power!" + taste_message = "enhancement" /datum/reagent/growthserum/on_mob_life(mob/living/carbon/H) var/newsize = current_size diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index 0d9d7cfbc95..5040b3136e5 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -45,7 +45,7 @@ reagent_state = SOLID color = "#673910" // rgb: 103, 57, 16 process_flags = ORGANIC | SYNTHETIC - taste_message = "metal" + taste_message = "rust" /datum/reagent/thermite/reaction_turf(turf/simulated/wall/W, volume) if(volume >= 5 && istype(W)) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 935fda3691d..63bce7d68ea 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -51,7 +51,7 @@ description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL." reagent_state = LIQUID color = "#801E28" // rgb: 128, 30, 40 - taste_message = "slimes?" + taste_message = "slimes" /datum/reagent/slimejelly/on_mob_life(mob/living/M) if(prob(10)) @@ -188,6 +188,7 @@ description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." reagent_state = SOLID color = "#B8B8C0" // rgb: 184, 184, 192 + taste_message = null /datum/reagent/uranium/on_mob_life(mob/living/M) M.apply_effect(2, IRRADIATE, negate_armor = 1) @@ -254,10 +255,6 @@ if(method == INGEST) if(ishuman(M)) var/mob/living/carbon/human/H = M - - if(volume < 10) - to_chat(M, "The greenish acidic substance stings you, but isn't concentrated enough to harm you!") - if(volume >=10 && volume <=25) if(!H.unacidable) M.take_organ_damage(0,min(max(volume-10,2)*2,20)) @@ -706,6 +703,7 @@ color = "#5F8BE1" metabolization_rate = 0.7 can_synth = 0 + taste_message = null /datum/reagent/sodium_thiopental/on_mob_life(mob/living/M) switch(current_cycle) @@ -734,8 +732,8 @@ metabolization_rate = 0.8 penetrates_skin = 1 can_synth = 0 - taste_message = null + /datum/reagent/ketamine/on_mob_life(mob/living/M) switch(current_cycle) if(1 to 5) @@ -784,6 +782,7 @@ description = "A toxin produced by certain mushrooms. Very deadly." reagent_state = LIQUID color = "#D9D9D9" + taste_message = null /datum/reagent/amanitin/on_mob_delete(mob/living/M) M.adjustToxLoss(current_cycle*rand(2,4)) @@ -796,7 +795,7 @@ reagent_state = SOLID color = "#D1DED1" metabolization_rate = 0.2 - taste_message = "puke" + taste_message = "battery acid" /datum/reagent/lipolicide/on_mob_life(mob/living/M) if(!M.nutrition) @@ -998,6 +997,7 @@ reagent_state = LIQUID color = "#60A584" heart_rate_stop = 1 + taste_message = "sweetness" /datum/reagent/capulettium/on_mob_life(mob/living/M) switch(current_cycle) @@ -1021,6 +1021,7 @@ reagent_state = LIQUID color = "#60A584" heart_rate_stop = 1 + taste_message = "sweetness" /datum/reagent/capulettium_plus/on_mob_life(mob/living/M) M.Silence(2) @@ -1079,7 +1080,7 @@ reagent_state = SOLID color = "#993333" process_flags = ORGANIC | SYNTHETIC - taste_message = "ANTS; OH GOD!" + taste_message = "ANTS OH GOD" /datum/reagent/ants/on_mob_life(mob/living/M) M.adjustBruteLoss(2) @@ -1101,7 +1102,7 @@ metabolization_rate = 0.2 var/shock_timer = 0 process_flags = ORGANIC | SYNTHETIC - taste_message = "electrons" + taste_message = "electricity" /datum/reagent/teslium/on_mob_life(mob/living/M) shock_timer++ diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index f32038a0b3f..33aedce7222 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -410,6 +410,7 @@ description = "Also known as sodium hydroxide." reagent_state = LIQUID color = "#FFFFD6" // very very light yellow + taste_message = "ACID"//don't drink lye, kids /datum/reagent/drying_agent name = "Drying agent" From 086327ef656a360ac88cded1e781f63dc4e7c55c Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Wed, 14 Jun 2017 18:39:08 +0200 Subject: [PATCH 06/21] Can't taste pills and patches --- code/modules/food_and_drinks/food.dm | 3 ++- code/modules/mob/living/carbon/carbon.dm | 7 ++++--- code/modules/reagents/reagent_containers/pill.dm | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 4655dcba98f..f19672667f8 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -12,9 +12,10 @@ var/apply_method = "swallow" var/transfer_efficiency = 1.0 var/instant_application = 0 //if we want to bypass the forcedfeed delay + var/taste = TRUE//whether you can taste eating from this burn_state = FLAMMABLE /obj/item/weapon/reagent_containers/food/New() ..() pixel_x = rand(-5, 5) //Randomizes postion - pixel_y = rand(-5, 5) \ No newline at end of file + pixel_y = rand(-5, 5) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 193ac27e310..6e01ef5fd3e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -953,7 +953,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, else if(!forceFed(toEat, user, fullness)) return 0 - consume(toEat, bitesize_override) + consume(toEat, bitesize_override, taste = toEat.taste) score_foodeaten++ return 1 @@ -1006,7 +1006,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach so that different stomachs can handle things in different ways VB*/ -/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat, var/bitesize_override) +/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat, var/bitesize_override, var/taste = 1) var/this_bite = bitesize_override ? bitesize_override : toEat.bitesize if(!toEat.reagents) return @@ -1015,7 +1015,8 @@ so that different stomachs can handle things in different ways VB*/ if(toEat.consume_sound) playsound(loc, toEat.consume_sound, rand(10,50), 1) if(toEat.reagents.total_volume) - taste_reagents(toEat.reagents) + if(taste) + taste_reagents(toEat.reagents) var/fraction = min(this_bite/toEat.reagents.total_volume, 1) toEat.reagents.reaction(src, toEat.apply_type, fraction) toEat.reagents.trans_to(src, this_bite*toEat.transfer_efficiency) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index a6fd792e795..eca60146cc3 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -10,6 +10,7 @@ possible_transfer_amounts = null volume = 50 consume_sound = null + taste = FALSE /obj/item/weapon/reagent_containers/food/pill/New() ..() @@ -108,4 +109,4 @@ name = "Salbutamol pill" desc = "Used to treat respiratory distress." icon_state = "pill8" - list_reagents = list("salbutamol" = 20) \ No newline at end of file + list_reagents = list("salbutamol" = 20) From 67c64852cd4792f9b49ccd604e831d434f9eaca2 Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Jul 2017 21:02:39 -0700 Subject: [PATCH 07/21] Fixes being able to sentience potion pirates --- code/modules/mob/living/simple_animal/hostile/pirate.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index d3fec4bf8d8..29c9923b5cd 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -26,6 +26,7 @@ /obj/item/weapon/melee/energy/sword/pirate) del_on_death = 1 faction = list("pirate") + sentience_type = SENTIENCE_OTHER /mob/living/simple_animal/hostile/pirate/ranged name = "Pirate Gunner" From 6fa2bf5f2db0b00baf43b5767275082f82a436af Mon Sep 17 00:00:00 2001 From: Kyep Date: Sat, 1 Jul 2017 23:59:25 -0700 Subject: [PATCH 08/21] Now applies to syndiemobs, russians & angels, too --- code/modules/mob/living/simple_animal/hostile/russian.dm | 2 +- code/modules/mob/living/simple_animal/hostile/statue.dm | 2 ++ code/modules/mob/living/simple_animal/hostile/syndicate.dm | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 2f639d9e6f7..8e36e96c2af 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -25,7 +25,7 @@ loot = list(/obj/effect/landmark/mobcorpse/russian, /obj/item/weapon/kitchen/knife) del_on_death = 1 - + sentience_type = SENTIENCE_OTHER /mob/living/simple_animal/hostile/russian/ranged icon_state = "russianranged" diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 6ddb86fd818..1e756dad51d 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -47,6 +47,8 @@ var/cannot_be_seen = 1 var/mob/living/creator = null + sentience_type = SENTIENCE_OTHER + // No movement while seen code. diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 469631951aa..470163315f3 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -25,6 +25,7 @@ status_flags = CANPUSH loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier) del_on_death = 1 + sentience_type = SENTIENCE_OTHER ///////////////Sword and shield//////////// From 603d86adf3bae03f6b4685d8122d2f05387a829a Mon Sep 17 00:00:00 2001 From: Kyep Date: Mon, 10 Jul 2017 03:04:19 -0700 Subject: [PATCH 09/21] Deletes angels from the list --- code/modules/mob/living/simple_animal/hostile/statue.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 1e756dad51d..6ddb86fd818 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -47,8 +47,6 @@ var/cannot_be_seen = 1 var/mob/living/creator = null - sentience_type = SENTIENCE_OTHER - // No movement while seen code. From 3c305cc73c21fed80c2bd4f126471383de81b942 Mon Sep 17 00:00:00 2001 From: TravellingMerchant Date: Mon, 10 Jul 2017 22:46:27 +0100 Subject: [PATCH 10/21] Add files via upload --- icons/obj/flag.dmi | Bin 38545 -> 38605 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/flag.dmi b/icons/obj/flag.dmi index d1e0f08fa4977f8d88e770816095e474bd8f89e0..10126f99102871b75ab43f2759fb6b63b4ef6835 100644 GIT binary patch literal 38605 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 Q2><{907*qoM6N<$g45FEQvd(} delta 38321 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 Date: Mon, 10 Jul 2017 20:59:03 -0400 Subject: [PATCH 11/21] SQL version control --- SQL/updates/Readme.md | 7 +++++++ code/__DEFINES/misc.dm | 3 +++ code/controllers/configuration.dm | 11 +++++++++++ config/example/dbconfig.txt | 8 +++++++- 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 SQL/updates/Readme.md diff --git a/SQL/updates/Readme.md b/SQL/updates/Readme.md new file mode 100644 index 00000000000..29d7ad0287a --- /dev/null +++ b/SQL/updates/Readme.md @@ -0,0 +1,7 @@ +### UPDATING SQL +The contents of this directory contain update sql scripts for the paracode SQL database. + +Files following the naming convention -.sql +Files are designed to be run sequentialy, moving from version 2, to version 4 would require running the following SQL scripts. +2-3.sql +3-4.sql \ No newline at end of file diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 61e5e5069b4..1142f614775 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -347,3 +347,6 @@ #define BLOOD_STATE_HUMAN "blood" #define BLOOD_STATE_XENO "xeno" #define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" + +// The SQL version required by this version of the code +#define SQL_VERSION 0 diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 2ab267ce5a8..6fb873c9391 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -667,6 +667,7 @@ /datum/configuration/proc/loadsql(filename) // -- TLE var/list/Lines = file2list(filename) + var/db_version = 0 for(var/t in Lines) if(!t) continue @@ -704,8 +705,18 @@ sqlfdbkpass = value if("feedback_tableprefix") sqlfdbktableprefix = value + if("db_version") + db_version = text2num(value) else diary << "Unknown setting in configuration: '[name]'" + if(config.sql_enabled && db_version != SQL_VERSION) + config.sql_enabled = 0 + diary << "WARNING: DB_CONFIG DEFINITION MISMATCH!" + spawn(60) + if(ticker.current_state == GAME_STATE_PREGAME) + going = 0 + spawn(600) + to_chat(world, "DB_CONFIG MISMATCH, ROUND START DELAYED.
Please check database version for recent upstream changes!
") /datum/configuration/proc/loadoverflowwhitelist(filename) var/list/Lines = file2list(filename) diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index 4dd55974678..e713bda4c7d 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -5,6 +5,12 @@ ## Should SQL be enabled? Uncomment to enable. #SQL_ENABLED +## Database version. This value is used if SQL_ENABLED is uncommented +## This value must be set to the version of the paradise schema in use. +## If this value does not match, the SQL database will not be loaded and an error will be generated. +## Roundstart will be delayed. +DB_VERSION 0 + ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. ADDRESS localhost @@ -30,4 +36,4 @@ FEEDBACK_TABLEPREFIX FEEDBACK_LOGIN username ## Password used to access the database. -FEEDBACK_PASSWORD password \ No newline at end of file +FEEDBACK_PASSWORD password From 43055f5244e427f05ef9bbeb2490fd8ca7ac3b7a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sat, 22 Jul 2017 02:32:09 -0400 Subject: [PATCH 12/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 16 ++++++++++++++++ html/changelogs/.all_changelog.yml | 11 +++++++++++ html/changelogs/AutoChangeLog-pr-7651.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7818.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7828.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7829.yml | 4 ---- html/changelogs/AutoChangeLog-pr-7845.yml | 4 ---- 7 files changed, 27 insertions(+), 20 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7651.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7818.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7828.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7829.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-7845.yml diff --git a/html/changelog.html b/html/changelog.html index b2b8e5f02e0..f50544d9689 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,22 @@ -->

+

22 July 2017

+

Crazylemon64 updated:

+
    +
  • Slipping now outputs a visible message instead of a personal one
  • +
+

Fox McCloud updated:

+
    +
  • Fixes IPCs and Diona being immune to weapon knockdown
  • +
+

Kyep updated:

+
    +
  • Terror Spider away mission is now harder to cheese.
  • +
  • Loading a different character while in the lobby will now update the character name listed on the lobby screen. Same when you rename an existing character.
  • +
  • Blood decals are no longer movable. This means LINDA cannot move them, spiders cannot wrap them, etc.
  • +
+

21 July 2017

Purpose2 updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 688f9b3cb4b..bdfffa7db53 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5247,3 +5247,14 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: 'MetaStation: Church shutters block vision again' - bugfix: 'MetaStation: Adds the missing Armory shutter button.' - rscdel: 'MetaStation: Removes tinted windows from R&D & Genetics' +2017-07-22: + Crazylemon64: + - tweak: Slipping now outputs a visible message instead of a personal one + Fox McCloud: + - bugfix: Fixes IPCs and Diona being immune to weapon knockdown + Kyep: + - tweak: Terror Spider away mission is now harder to cheese. + - bugfix: Loading a different character while in the lobby will now update the character + name listed on the lobby screen. Same when you rename an existing character. + - bugfix: Blood decals are no longer movable. This means LINDA cannot move them, + spiders cannot wrap them, etc. diff --git a/html/changelogs/AutoChangeLog-pr-7651.yml b/html/changelogs/AutoChangeLog-pr-7651.yml deleted file mode 100644 index dc41764f59f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7651.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - tweak: "Terror Spider away mission is now harder to cheese." diff --git a/html/changelogs/AutoChangeLog-pr-7818.yml b/html/changelogs/AutoChangeLog-pr-7818.yml deleted file mode 100644 index 01d9ad067f0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7818.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Crazylemon64" -delete-after: True -changes: - - tweak: "Slipping now outputs a visible message instead of a personal one" diff --git a/html/changelogs/AutoChangeLog-pr-7828.yml b/html/changelogs/AutoChangeLog-pr-7828.yml deleted file mode 100644 index 1e774ff28ca..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7828.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - bugfix: "Loading a different character while in the lobby will now update the character name listed on the lobby screen. Same when you rename an existing character." diff --git a/html/changelogs/AutoChangeLog-pr-7829.yml b/html/changelogs/AutoChangeLog-pr-7829.yml deleted file mode 100644 index 1746752dbf0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7829.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - bugfix: "Blood decals are no longer movable. This means LINDA cannot move them, spiders cannot wrap them, etc." diff --git a/html/changelogs/AutoChangeLog-pr-7845.yml b/html/changelogs/AutoChangeLog-pr-7845.yml deleted file mode 100644 index ded920fbc22..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7845.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - bugfix: "Fixes IPCs and Diona being immune to weapon knockdown" From 97c2c10b139748ea8230856ce62475e44f56936e Mon Sep 17 00:00:00 2001 From: FlattestGuitar Date: Sat, 22 Jul 2017 23:53:46 +0200 Subject: [PATCH 13/21] o7 --- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/carbon/human/species/station.dm | 1 - code/modules/reagents/chemistry/reagents/drinks.dm | 2 +- code/modules/reagents/chemistry/reagents/drugs.dm | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b71374862fb..b50e1b3f394 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1022,7 +1022,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, /*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach so that different stomachs can handle things in different ways VB*/ -/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat, var/bitesize_override, var/taste = 1) +/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat, var/bitesize_override, var/taste = TRUE) var/this_bite = bitesize_override ? bitesize_override : toEat.bitesize if(!toEat.reagents) return diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 52e2914df8a..33a64d6caf1 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -10,7 +10,6 @@ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS dietflags = DIET_OMNI - taste_sensitivity = TASTE_SENSITIVITY_DULL unarmed_type = /datum/unarmed_attack/punch blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \ colonies across a wide swathe of space. They hold a wide range of forms and creeds.

    \ diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index de395b0faac..9a524aa377a 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -173,7 +173,7 @@ drink_icon = "nothing" drink_name = "Nothing" drink_desc = "Absolutely nothing." - taste_message = "nothing...how?" + taste_message = "nothing... how?" /datum/reagent/consumable/drink/nothing/on_mob_life(mob/living/M) if(ishuman(M) && M.job in list("Mime")) diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 0d6fc67db5d..6a4ede5fe50 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -439,7 +439,7 @@ reagent_state = LIQUID color = "#644600" addiction_chance = 30 - taste_message = "puke...or worse" + taste_message = "puke... or worse" /datum/reagent/jenkem/on_mob_life(mob/living/M) M.Dizzy(5) From 211038b6c79ab88eba005eb0ef7855b3028fdb0d Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Sun, 23 Jul 2017 18:19:23 -0400 Subject: [PATCH 14/21] Fixes Infections in Organs from Cloning --- code/modules/surgery/organs/organ.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index ecede7f82b3..a59542bd2af 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -123,6 +123,8 @@ var/list/organ_cache = list() return 1 if(is_found_within(/obj/structure/closet/crate/freezer)) return 1 + if(is_found_within(/obj/machinery/clonepod)) + return 1 if(isturf(loc)) if(world.time - last_freezer_update_time > freezer_update_period) // I don't want to loop through everything in the tile constantly, especially since it'll be a pile of organs From 7536a0d5ff84e81deea567268c884c97c6ef15b9 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 23 Jul 2017 19:35:33 -0400 Subject: [PATCH 15/21] Automatic changelog generation for PR #7859 [ci skip] --- html/changelogs/AutoChangeLog-pr-7859.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7859.yml diff --git a/html/changelogs/AutoChangeLog-pr-7859.yml b/html/changelogs/AutoChangeLog-pr-7859.yml new file mode 100644 index 00000000000..71ae8ee2629 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7859.yml @@ -0,0 +1,4 @@ +author: "Fox McCloud" +delete-after: True +changes: + - bugfix: "Fixes cloners causing infections in clonees" From 0d4afe64cb4b6f6690caf6f3beb8c9f596716a84 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Sun, 23 Jul 2017 20:10:30 -0400 Subject: [PATCH 16/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AutoChangeLog-pr-7859.yml | 4 ---- 3 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7859.yml diff --git a/html/changelog.html b/html/changelog.html index f50544d9689..1f282784fc2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->
    +

    23 July 2017

    +

    Fox McCloud updated:

    +
      +
    • Fixes cloners causing infections in clonees
    • +
    +

    22 July 2017

    Crazylemon64 updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index bdfffa7db53..cbac5d6e9c2 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5258,3 +5258,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. name listed on the lobby screen. Same when you rename an existing character. - bugfix: Blood decals are no longer movable. This means LINDA cannot move them, spiders cannot wrap them, etc. +2017-07-23: + Fox McCloud: + - bugfix: Fixes cloners causing infections in clonees diff --git a/html/changelogs/AutoChangeLog-pr-7859.yml b/html/changelogs/AutoChangeLog-pr-7859.yml deleted file mode 100644 index 71ae8ee2629..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7859.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - bugfix: "Fixes cloners causing infections in clonees" From 9c86d072525c0e3d07a040209b95fe460ec9551e Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Sun, 23 Jul 2017 21:08:10 -0700 Subject: [PATCH 17/21] Adds decorative telecomms machinery for map making --- _maps/map_files/vr/lobby.dmm | 10 ++++---- code/game/objects/structures/decor/decor.dm | 7 ++++++ .../structures/decor/machinery/telecomms.dm | 23 +++++++++++++++++++ paradise.dme | 2 ++ 4 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 code/game/objects/structures/decor/decor.dm create mode 100644 code/game/objects/structures/decor/machinery/telecomms.dm diff --git a/_maps/map_files/vr/lobby.dmm b/_maps/map_files/vr/lobby.dmm index 798228e212e..a4441c9e000 100644 --- a/_maps/map_files/vr/lobby.dmm +++ b/_maps/map_files/vr/lobby.dmm @@ -3,18 +3,18 @@ "c" = (/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) "d" = (/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby) "e" = (/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) -"f" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"f" = (/obj/structure/decor/machinery/telecomms/processor,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) "g" = (/turf/unsimulated/floor{icon_state = "light_on"},/area/vr/lobby) "h" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"; tag = "icon-fakewindows (WEST)"},/area/vr/lobby) "i" = (/turf/unsimulated/wall/fakeglass{dir = 0; icon_state = "fakewindows"; tag = "icon-fakewindows (EAST)"},/area/vr/lobby) -"j" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) -"k" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) -"l" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) +"j" = (/obj/structure/decor/machinery/telecomms/server,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"k" = (/obj/structure/decor/machinery/telecomms/relay,/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) +"l" = (/obj/structure/decor/machinery/telecomms/hub,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) "m" = (/obj/machinery/computer/vr_control,/turf/unsimulated/floor{tag = "icon-dark"; icon_state = "dark"},/area/vr/lobby) "n" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/vr/lobby) "o" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows (EAST)"; icon_state = "fakewindows"; dir = 4},/area/vr/lobby) "p" = (/obj/effect/landmark{name = "avatarspawn"},/turf/unsimulated/floor{icon_state = "gcircuit"},/area/vr/lobby) -"q" = (/obj/machinery/telecomms/processor/preset_cent,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/vr/lobby) +"q" = (/obj/structure/decor/machinery/telecomms/processor,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/vr/lobby) "r" = (/turf/unsimulated/wall/fakeglass,/area/vr/lobby) (1,1,1) = {" diff --git a/code/game/objects/structures/decor/decor.dm b/code/game/objects/structures/decor/decor.dm new file mode 100644 index 00000000000..69d62afc2e6 --- /dev/null +++ b/code/game/objects/structures/decor/decor.dm @@ -0,0 +1,7 @@ +// The purpose of "Decor" structures is to look like pre-existing objects without having functionality + +/obj/structure/decor + name = "Non-existent Decor" + desc = "Yell at a coder!" + anchored = TRUE + density = TRUE diff --git a/code/game/objects/structures/decor/machinery/telecomms.dm b/code/game/objects/structures/decor/machinery/telecomms.dm new file mode 100644 index 00000000000..1068cfb0b4e --- /dev/null +++ b/code/game/objects/structures/decor/machinery/telecomms.dm @@ -0,0 +1,23 @@ +/obj/structure/decor/machinery/telecomms/processor + name = "Processor Unit" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "processor" + desc = "This machine is used to process large quantities of information." + +/obj/structure/decor/machinery/telecomms/hub + name = "Telecommunication Hub" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "hub" + desc = "A mighty piece of hardware used to send/receive massive amounts of data." + +/obj/structure/decor/machinery/telecomms/server + name = "Telecommunication Server" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "comm_server" + desc = "A machine used to store data and network statistics." + +/obj/structure/decor/machinery/telecomms/relay + name = "Telecommunication Relay" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "relay" + desc = "A mighty piece of hardware used to send massive amounts of data far away." diff --git a/paradise.dme b/paradise.dme index aabf27d6e61..bab5d2e425e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -969,6 +969,8 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" +#include "code\game\objects\structures\decor\decor.dm" +#include "code\game\objects\structures\decor\machinery\telecomms.dm" #include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" From 27709ce438735a3596e0e1e57109940b103c7b8a Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jul 2017 10:23:19 -0400 Subject: [PATCH 18/21] Automatic changelog generation for PR #7691 [ci skip] --- html/changelogs/AutoChangeLog-pr-7691.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7691.yml diff --git a/html/changelogs/AutoChangeLog-pr-7691.yml b/html/changelogs/AutoChangeLog-pr-7691.yml new file mode 100644 index 00000000000..fc48feaf271 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7691.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - bugfix: "it is no longer possible to use a sentience potion to convert space pirates in the beach away mission to your side. Nor is this possible with other sentient NPCs, such as syndies or russians." From 7ea5c17eb03227f737bee22f88df4fa4eefe2b39 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jul 2017 11:22:16 -0400 Subject: [PATCH 19/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 5 +++++ html/changelogs/AutoChangeLog-pr-7691.yml | 4 ---- 3 files changed, 11 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7691.yml diff --git a/html/changelog.html b/html/changelog.html index 1f282784fc2..20c155a0ba0 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,12 @@ -->
      +

      24 July 2017

      +

      Kyep updated:

      +
        +
      • it is no longer possible to use a sentience potion to convert space pirates in the beach away mission to your side. Nor is this possible with other sentient NPCs, such as syndies or russians.
      • +
      +

      23 July 2017

      Fox McCloud updated:

        diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index cbac5d6e9c2..fa849c61d18 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5261,3 +5261,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2017-07-23: Fox McCloud: - bugfix: Fixes cloners causing infections in clonees +2017-07-24: + Kyep: + - bugfix: it is no longer possible to use a sentience potion to convert space pirates + in the beach away mission to your side. Nor is this possible with other sentient + NPCs, such as syndies or russians. diff --git a/html/changelogs/AutoChangeLog-pr-7691.yml b/html/changelogs/AutoChangeLog-pr-7691.yml deleted file mode 100644 index fc48feaf271..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7691.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kyep" -delete-after: True -changes: - - bugfix: "it is no longer possible to use a sentience potion to convert space pirates in the beach away mission to your side. Nor is this possible with other sentient NPCs, such as syndies or russians." From 931c46130696b118f03958e9fdc446a75a3f4944 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jul 2017 14:53:37 -0400 Subject: [PATCH 20/21] Automatic changelog generation for PR #7333 [ci skip] --- html/changelogs/AutoChangeLog-pr-7333.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-7333.yml diff --git a/html/changelogs/AutoChangeLog-pr-7333.yml b/html/changelogs/AutoChangeLog-pr-7333.yml new file mode 100644 index 00000000000..27d031c19d6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-7333.yml @@ -0,0 +1,4 @@ +author: "FlattestGuitar" +delete-after: True +changes: + - rscadd: "Adds a taste system! Drink or eat stuff to find out what it tastes like!" From b6e79b3de45b7187439b3799fd7fcd767bde2fb0 Mon Sep 17 00:00:00 2001 From: ParadiseSS13-Bot Date: Mon, 24 Jul 2017 15:27:43 -0400 Subject: [PATCH 21/21] Automatic changelog compile, [ci skip] --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 2 ++ html/changelogs/AutoChangeLog-pr-7333.yml | 4 ---- 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-7333.yml diff --git a/html/changelog.html b/html/changelog.html index 20c155a0ba0..fd395c3c24a 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,6 +57,10 @@

        24 July 2017

        +

        FlattestGuitar updated:

        +
          +
        • Adds a taste system! Drink or eat stuff to find out what it tastes like!
        • +

        Kyep updated:

        • it is no longer possible to use a sentience potion to convert space pirates in the beach away mission to your side. Nor is this possible with other sentient NPCs, such as syndies or russians.
        • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index fa849c61d18..4d10493b12d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5262,6 +5262,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Fox McCloud: - bugfix: Fixes cloners causing infections in clonees 2017-07-24: + FlattestGuitar: + - rscadd: Adds a taste system! Drink or eat stuff to find out what it tastes like! Kyep: - bugfix: it is no longer possible to use a sentience potion to convert space pirates in the beach away mission to your side. Nor is this possible with other sentient diff --git a/html/changelogs/AutoChangeLog-pr-7333.yml b/html/changelogs/AutoChangeLog-pr-7333.yml deleted file mode 100644 index 27d031c19d6..00000000000 --- a/html/changelogs/AutoChangeLog-pr-7333.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlattestGuitar" -delete-after: True -changes: - - rscadd: "Adds a taste system! Drink or eat stuff to find out what it tastes like!"