From f981c233798f8f2caa2e7e03ab0457282f9c485b Mon Sep 17 00:00:00 2001 From: Nettika Date: Sun, 30 Apr 2023 12:29:40 -0700 Subject: [PATCH] Add "Refined Palate" trait - Increase or decrease happiness for a variety of foods and food categories based on subjective quality when the Refined Palate trait is active. - Move the trait definition to the shared code. - Add icons for the "Refined Palate" and "Not a Picky Eater" traits. --- media/lua/client/DogFoodIsntThatBad.lua | 192 +++++++++++++++++++---- media/lua/shared/DogFoodIsntThatBad.lua | 21 +++ media/lua/shared/Translate/EN/UI_EN.txt | 4 +- media/ui/Traits/trait_NotAPickyEater.png | Bin 0 -> 2041 bytes media/ui/Traits/trait_RefinedPalate.png | Bin 0 -> 1877 bytes 5 files changed, 189 insertions(+), 28 deletions(-) create mode 100644 media/lua/shared/DogFoodIsntThatBad.lua create mode 100644 media/ui/Traits/trait_NotAPickyEater.png create mode 100644 media/ui/Traits/trait_RefinedPalate.png diff --git a/media/lua/client/DogFoodIsntThatBad.lua b/media/lua/client/DogFoodIsntThatBad.lua index 59ca482..5912e79 100644 --- a/media/lua/client/DogFoodIsntThatBad.lua +++ b/media/lua/client/DogFoodIsntThatBad.lua @@ -1,39 +1,177 @@ -local base_perform = ISEatFoodAction.perform +local function adjustFoodNotPicky(item) + print("adjust not picky") -function ISEatFoodAction:perform() - if getPlayer():getTraits():contains("NotAPickyEater") then - self.item:setUnhappyChange(math.min(self.item:getUnhappyChange(), 0)) - self.item:setBoredomChange(math.min(self.item:getBoredomChange(), 0)) - print("NotAPickyEater trait active, removing negative effects from food") -- DEBUG + item:setUnhappyChange(math.min(item:getUnhappyChange(), 0)) + item:setBoredomChange(math.min(item:getBoredomChange(), 0)) +end + +local function adjustFoodVeryPicky(item) + print("adjust very picky") + + local unhappyChange = item:getUnhappyChange() + local boredomChange = item:getBoredomChange() + + -- Microwaved food is gross + if item:isCookedInMicrowave() then + unhappyChange = unhappyChange + 5 + boredomChange = boredomChange + 10 + print("microwaved") end - base_perform(self) + + -- Canned food is gross + if string.match(item:getDisplayName(), "Canned ") then + unhappyChange = unhappyChange + 5 + boredomChange = boredomChange + 10 + print("canned") + end + + -- Dog food is very gross + if string.match(item:getDisplayName(), "Dog Food") then + unhappyChange = unhappyChange + 20 + print("dog food") + end + + -- Tea Bag is very gross + if item:getDisplayName() == "Tea Bag" then + unhappyChange = unhappyChange + 20 + print("tea bag") + end + + -- Dry Ramen Noodles are pretty gross + if item:getDisplayName() == "Dry Ramen Noodles" then + unhappyChange = unhappyChange + 10 + boredomChange = boredomChange + 10 + print("dry ramen") + end + + -- Pickled jars are a little gross + if string.match(item:getDisplayName(), "Jar of ") then + unhappyChange = unhappyChange + 10 + boredomChange = boredomChange + 10 + print("jar") + end + + -- Fried food is a little gross + if string.match(item:getDisplayName(), "Fried ") then + unhappyChange = unhappyChange + 10 + boredomChange = boredomChange + 10 + print("fried") + end + + -- Beer is a little gross + if item:getFoodType() == "Beer" then + unhappyChange = unhappyChange + 10 + print("beer") + end + + -- Wine is very good + if item:getFoodType() == "Wine" then + unhappyChange = unhappyChange - 15 + boredomChange = boredomChange - 5 + print("wine") + end + + -- Vegetables are pretty good + if item:getFoodType() == "Vegetables" then + unhappyChange = unhappyChange - 5 + boredomChange = boredomChange - 10 + print("vegetables") + end + + -- Fruits are pretty good + if item:getFoodType() == "Fruits" then + unhappyChange = unhappyChange - 5 + boredomChange = boredomChange - 10 + print("fruits") + end + + -- Egg is pretty good + if item:getFoodType() == "Egg" then + unhappyChange = unhappyChange - 5 + print("egg") + end + + -- Bread is pretty good + if item:getFoodType() == "Bread" then + unhappyChange = unhappyChange - 5 + print("bread") + end + + -- Processed Cheese food is gross + if item:getDisplayName() == "Processed Cheese" then + unhappyChange = unhappyChange + 5 + boredomChange = boredomChange + 10 + print("processed cheese") + end + + -- Candy is a little gross + if item:getFoodType() == "Candy" then + unhappyChange = unhappyChange + 5 + print("candy") + end + + -- Dead critters are extremely gross + if string.match(item:getDisplayName(), "Dead ") then + unhappyChange = unhappyChange + 40 + print("dead") + end + + -- Increase negative effects by 50% + if unhappyChange > 0 then + unhappyChange = unhappyChange * 1.5 + end + if boredomChange > 0 then + boredomChange = boredomChange * 1.5 + end + + item:setUnhappyChange(unhappyChange) + item:setBoredomChange(boredomChange) end local base_tooltip_render = ISToolTipInv.render function ISToolTipInv:render() - local unhappyChange = self.item:getUnhappyChange() - local boredomChange = self.item:getBoredomChange() - if getPlayer():getTraits():contains("NotAPickyEater") then - self.item:setUnhappyChange(math.min(unhappyChange, 0)) - self.item:setBoredomChange(math.min(boredomChange, 0)) + local origUnhappyChange = self.item:getUnhappyChange() + local origBoredomChange = self.item:getBoredomChange() + + -- Adjust food effects based on traits + if self.item:getType() == "Food" then + local traits = getPlayer():getTraits() + if traits:contains("NotAPickyEater") then + adjustFoodNotPicky(self.item) + elseif traits:contains("RefinedPalate") then + adjustFoodVeryPicky(self.item) + end end + + -- Call original function base_tooltip_render(self) - if getPlayer():getTraits():contains("NotAPickyEater") then - self.item:setUnhappyChange(unhappyChange) - self.item:setBoredomChange(boredomChange) + + -- Reset food effects + self.item:setUnhappyChange(origUnhappyChange) + self.item:setBoredomChange(origBoredomChange) +end + +local base_perform = ISEatFoodAction.perform + +function ISEatFoodAction:perform() + local origUnhappyChange = self.item:getUnhappyChange() + local origBoredomChange = self.item:getBoredomChange() + + -- Adjust food effects based on traits + local traits = getPlayer():getTraits() + if traits:contains("NotAPickyEater") then + adjustFoodNotPicky(self.item) + print("negated negative emotional effects") + elseif traits:contains("RefiendPalate") then + adjustFoodVeryPicky(self.item) + print("amplified negative emotional effects") end -end -local function initTraits() - TraitFactory.addTrait( - "NotAPickyEater", - getText("UI_trait_NotAPickyEater"), - -1, - getText("UI_trait_NotAPickyEater_description"), - false, - false - ) -end + -- Call original function + base_perform(self) -Events.OnGameBoot.Add(initTraits) + -- Reset food effects + self.item:setUnhappyChange(origUnhappyChange) + self.item:setBoredomChange(origBoredomChange) +end diff --git a/media/lua/shared/DogFoodIsntThatBad.lua b/media/lua/shared/DogFoodIsntThatBad.lua new file mode 100644 index 0000000..4c5c6f8 --- /dev/null +++ b/media/lua/shared/DogFoodIsntThatBad.lua @@ -0,0 +1,21 @@ +local function initTraits() + TraitFactory.addTrait( + "NotAPickyEater", + getText("UI_trait_NotAPickyEater"), + 1, + getText("UI_trait_NotAPickyEaterdesc"), + false, + false + ) + TraitFactory.addTrait( + "RefinedPalate", + getText("UI_trait_RefinedPalate"), + -2, + getText("UI_trait_RefinedPalatedesc"), + false, + false + ) + TraitFactory.setMutualExclusive("NotAPickyEater", "RefinedPalate") +end + +Events.OnGameBoot.Add(initTraits) diff --git a/media/lua/shared/Translate/EN/UI_EN.txt b/media/lua/shared/Translate/EN/UI_EN.txt index 3edafe1..941797c 100644 --- a/media/lua/shared/Translate/EN/UI_EN.txt +++ b/media/lua/shared/Translate/EN/UI_EN.txt @@ -1,4 +1,6 @@ UI_EN = { UI_trait_NotAPickyEater = "Not a Picky Eater", - UI_trait_NotAPickyEater_description = "No foods make you unhappy or bored.", + UI_trait_NotAPickyEaterdesc = "Foods never increases unhappiness or boredom.", + UI_trait_RefinedPalate = "Refined Palate", + UI_trait_RefinedPalatedesc = "Many additional low quality foods increase unhappiness and boredom.", } diff --git a/media/ui/Traits/trait_NotAPickyEater.png b/media/ui/Traits/trait_NotAPickyEater.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe29e94d053f775a46a35d965799dc844a548f2 GIT binary patch literal 2041 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-cT|N$lmsP~D-;yvr)B1( zDwI?fq$;FVWTr7NRNPt{o;l5ACGVf}nl&sfEKQF$?0YW#;|JfgGq2X2diT@j@tJi^ zX@ZlKR05a%e}4b)AMSqTQnx+FCOB=VQ1L91oSPBvZ=buV?99Fg&gnhxLR0qn#@HVE zZSwAdQPjQW@0B*JAE)y^%zK$R=g)16`^R_WOC9x|aQJuX9{$zeUJJ+1H;j_maP!R7 zNva3zA4-(Y+*B12@jxQ(HdEZuEUf0$$=(KQz`I@^+%*ef| z)U{lE`wg81lH9gYH)n5^Wh@Xp_bs4Jg5!q68_fx!&!=$I^&C)lEt zoW%?l7te0q=$^T@^xoUV7J-HjG7*fvk9gL&>|s&X5|lYLZ*Rr>=5YDiPnHD}9yoJI zrRk)lihh*}G0nOpW9jw9(52UK*$m&JPQlf7txGhQO({CIP;!!S+4C8O0WlAij!qBQ za%7U%x&{7IUuCa|O7=CK{Y=U{b6@K+-ECKjmh)+qzTDTo&i31t&kR@D_$BLF7Ap6d zeCoaBbhYO28{wVz0~a?-F&J|jA6&$3%CkC7DPx(iy&-dwA4kV)7lxKHVPk2}Bfd}0 z966)bzTyL4)GtoI#hnrYQ~b{H@7h?c_`PwqhT4ojb{z!_-*a^aCp%hrGIN`vv+=emzEjeVbhte9vOb#Quw-6$G^*EBJWnu zW_# zn#9`Cxog`q6W(=E8UE8mR-XQ5H%UoP(jnojN5T8JOHygqeHJJz$kV9u*kJNxt8dbd z+FgHxXS}Z9Q~9jANa_7mF0(T=+kAv}q!wJXRo%g5dpNP~kn**=z9&9Cov_#J-O5Gp z<{AqGnLp9DHwi$!5uS^ZDN^YPuWz9(p@k z96xyc&YqXwpJuW9c%$8+VEYm(=^^T=;B<38O@MZCh4W&~)u^rrf`mB8T z4Ra2zxpTTUvAXU)dHlA=!pnBk_3N*T|2>sCV*WNWT zRUP_$>rx-5zu~^COTSl=QqY+>8KG<2ux4eid3MJoHBa(uQI&4_8f?Ws0X z=zZXR9)tZ6-!fn7KYe@HM0SV0y3Zf+EFsfPpI*srWnf@nOY(MiVfYV%3-&Ib%)r3F zS>O>_%)r1c48n{Iv*t)JFfg!}c>21sKWC8@SI|2UYtq2Lz<9{h#WBRaH7Bf0ll~WZt~vZmCPv z?h?V~<|7X3sppCw76h;D?k#_uv2c5vC=Z{Ksc6pspWgelibNLJRl1e$a4%0Zo@}+) zk*hh+dp+Mjc7>^b+7|t}@>7g4_uY(V_xbv!`)6#J`r>XXH^YYo2M*SmHOur0e)w5b zw%I{tDyxE>QTOIeTn%S_skwhtox6FlN}x^LM&_IE75`OE+sWT;^=-wy(+_X%Y}`Ko zYzM2HUH-wy$fH+|XfR}dQelYKFKTPQ6*x)b<(8DlgTFtqGORr-%d_=&pxzsS|1-X8 z=PoMl?e%9i*gQ!opvKpE#q8q`?H*?8^0f)?{<1%hB_S(m%IeeJY)SV&|7&wq*s|+D zO|-V!Z literal 0 HcmV?d00001 diff --git a/media/ui/Traits/trait_RefinedPalate.png b/media/ui/Traits/trait_RefinedPalate.png new file mode 100644 index 0000000000000000000000000000000000000000..96b7b61390cf84b75fe8f549f3a6e5c766232cbc GIT binary patch literal 1877 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 literal 0 HcmV?d00001