Scale food effect adjustments by percentage eaten

- Reset food effects proportionally as well
This commit is contained in:
Nettika 2023-05-05 23:19:36 -07:00
parent 518aca555e
commit 80f7bbd020

View file

@ -8,7 +8,7 @@ local function adjustFoodNotPicky(item)
end end
end end
local function adjustFoodVeryPicky(item) local function adjustFoodVeryPicky(item, proportion)
local unhappyChange = item:getUnhappyChangeUnmodified() local unhappyChange = item:getUnhappyChangeUnmodified()
local boredomChange = item:getBoredomChangeUnmodified() local boredomChange = item:getBoredomChangeUnmodified()
@ -22,17 +22,17 @@ local function adjustFoodVeryPicky(item)
-- Microwaved food is dull -- Microwaved food is dull
if item:isCookedInMicrowave() then if item:isCookedInMicrowave() then
boredomChange = boredomChange + 10 boredomChange = boredomChange + 10 * proportion
end end
-- Uncooked food which ought to be cooked is disgusting -- Uncooked food which ought to be cooked is disgusting
if item:isCookable() and not item:isCooked() then if item:isCookable() and not item:isCooked() then
unhappyChange = unhappyChange + 10 unhappyChange = unhappyChange + 10 * proportion
end end
-- Canned food is disgusting -- Canned food is disgusting
if item:getEatType() == "can" then if item:getEatType() == "can" then
unhappyChange = unhappyChange + 10 unhappyChange = unhappyChange + 10 * proportion
end end
-- Adjust food groups -- Adjust food groups
@ -43,7 +43,7 @@ local function adjustFoodVeryPicky(item)
["Wine"] = -10, ["Wine"] = -10,
} }
if foodGroupAdjustments[item:getFoodType()] then if foodGroupAdjustments[item:getFoodType()] then
unhappyChange = unhappyChange + foodGroupAdjustments[item:getFoodType()] unhappyChange = unhappyChange + foodGroupAdjustments[item:getFoodType()] * proportion
end end
-- Adjust specific foods -- Adjust specific foods
@ -83,13 +83,29 @@ local function adjustFoodVeryPicky(item)
["TofuFried"] = 10, ["TofuFried"] = 10,
} }
if foodAdjustments[item:getType()] then if foodAdjustments[item:getType()] then
unhappyChange = unhappyChange + foodAdjustments[item:getType()] unhappyChange = unhappyChange + foodAdjustments[item:getType()] * proportion
end end
item:setUnhappyChange(unhappyChange) item:setUnhappyChange(unhappyChange)
item:setBoredomChange(boredomChange) item:setBoredomChange(boredomChange)
end end
local function getProportion(food, n)
n = math.min(n, 1.0)
n = math.max(n, 0.0)
if food:getBaseHunger() ~= 0 and food:getHungChange() ~= 0 then
n = math.min(food:getBaseHunger() * n / food:getHungChange(), 1.0)
n = math.max(n, 0.0)
end
if food:getHungChange() < 0 and food:getHungChange() * (1.0 - n) > -0.01 then
n = 1.0
end
if food:getHungChange() == 0 and food:getThirstChange() < 0 and food:getThirstChange() * (1.0 - n) > -0.01 then
n = 1.0
end
return n
end
local base_tooltip_render = ISToolTipInv.render local base_tooltip_render = ISToolTipInv.render
function ISToolTipInv:render() function ISToolTipInv:render()
@ -105,7 +121,12 @@ function ISToolTipInv:render()
if traits:contains("NotAPickyEater") then if traits:contains("NotAPickyEater") then
adjustFoodNotPicky(self.item) adjustFoodNotPicky(self.item)
elseif traits:contains("RefinedPalate") then elseif traits:contains("RefinedPalate") then
adjustFoodVeryPicky(self.item) if self.item:getBaseHunger() ~= 0 then
local percentage = self.item:getHungChange() / self.item:getBaseHunger()
adjustFoodVeryPicky(self.item, percentage)
else
adjustFoodVeryPicky(self.item, 1)
end
end end
end end
@ -124,13 +145,14 @@ local base_eat_start = ISEatFoodAction.start
function ISEatFoodAction:start() function ISEatFoodAction:start()
self.origUnhappyChange = self.item:getUnhappyChangeUnmodified() self.origUnhappyChange = self.item:getUnhappyChangeUnmodified()
self.origBoredomChange = self.item:getBoredomChangeUnmodified() self.origBoredomChange = self.item:getBoredomChangeUnmodified()
self.proportion = getProportion(self.item, self.percentage)
-- Adjust food effects based on traits -- Adjust food effects based on traits
local traits = self.character:getTraits() local traits = self.character:getTraits()
if traits:contains("NotAPickyEater") then if traits:contains("NotAPickyEater") then
adjustFoodNotPicky(self.item) adjustFoodNotPicky(self.item)
elseif traits:contains("RefiendPalate") then elseif traits:contains("RefinedPalate") then
adjustFoodVeryPicky(self.item) adjustFoodVeryPicky(self.item, self.percentage)
end end
-- Call original function -- Call original function
@ -144,8 +166,13 @@ function ISEatFoodAction:stop()
base_eat_stop(self) base_eat_stop(self)
-- Reset food effects -- Reset food effects
self.item:setUnhappyChange(self.origUnhappyChange) local percentage = self:getJobDelta()
self.item:setBoredomChange(self.origBoredomChange) if percentage > 0.95 then
percentage = 1.0
end
local adjust = 1 - (self.proportion * percentage)
self.item:setUnhappyChange(self.origUnhappyChange * adjust)
self.item:setBoredomChange(self.origBoredomChange * adjust)
end end
local base_eat_perform = ISEatFoodAction.perform local base_eat_perform = ISEatFoodAction.perform
@ -155,6 +182,7 @@ function ISEatFoodAction:perform()
base_eat_perform(self) base_eat_perform(self)
-- Reset food effects -- Reset food effects
self.item:setUnhappyChange(self.origUnhappyChange) local adjust = 1 - self.proportion
self.item:setBoredomChange(self.origBoredomChange) self.item:setUnhappyChange(self.origUnhappyChange * adjust)
self.item:setBoredomChange(self.origBoredomChange * adjust)
end end