[1.18.2]: Nourishment effect overlaps with Vampirism thirst bar
MarioSMB opened this issue · 9 comments
Description
When consuming a Farmer's Delight meal and gaining the Nourishment buff as a vampire, the "glazed" hunger bar overlaps with the Vampirism mod's thirst bar, as seen in this picture:
Steps to reproduce
No response
Mod list
Forge 40.1.86
Farmer's Delight 1.2.0
Vampirism 1.8.8
Logs
No response
Forge
- I am using the Forge version of Farmer's Delight
Minimal instance
- I have tested this on a minimal instance
Performance and shader mods
- I have tested this without performance or shader mods
I don't know if this is something that should be fixed on Vampirism's or FD's side, please let me know if it should be taken to Vampirism instead.
Vampirism replaces the hunger bar with its own blood sprites (vampires don’t eat food), which is rendered overlayed by the nourishment sprites in the regular hunger bar position.
Given this is an override on Vampirism’s side, I’m not sure exactly what can be done to hide the gilded effect here.
The Nourishment gilded overlay is applied over the Hunger meter, and should ideally move together with it. The "half-peeled" sprite does not include the original shank, so the hunger meter is rendering underneath it.
Does this overlap only happen when Nourishment is applied? Does the Hunger bar move out of its place?
Hmm... then it sounds more like a small design conflict.
In this case, we would need to confirm whether Vampirism disables the hunger bar in favor of its own, or just "reskins" the normal hunger bar with different eating mechanics.
Either way, sounds like Nourishment should simply not have any effects to vampires, so what Vampirism could potentially do is cancel overlay events being applied on the food_level
layer. This would prevent FD from rendering gilded shanks, since they're not needed.
EDIT: If you have AppleSkin installed, does it display any blinking overlays over the blood meter when holding food? If not, maybe they're doing something I'm not, which is worth looking into.
Thanks for the information, I'll go ahead and let them know with a link back to this issue.
So... I went around testing with AppleSkin and found this issue doesn't seem to occur in 1.19.2! It may only apply to 1.18.2 versions of the mods.
What Vampirism does
Vampirism just adds an additional overlay to the overlay registry
and cancels the rendering of the food bar
Misconception
so what Vampirism could potentially do is cancel overlay events being applied on the food_level layer
From what if understand is that you misunderstood the OverlayRegistry
OverlayRegistry
is a registry where all overlays can be rendered and organized in one place. Registering your nourishment overlay above the food_level
only places your overlay in the rendering list above the food level, so that the food is rendered before your nourishment and does not replace your overlay. It does not actually bind your overlay somehow to the food_level
Solution Ideas
More or less suitable solutions
- From Vampirism's side we could cancel the nourishing overlay just like the food bar, but that would require Farmer's Delight to expose the
IIngameOverlay
object and Vampirism to have a hard dependency on Farmer's Delight. - Farmer delight could check if the
RenderGameOverlayEvent.PostLayer
event was posted for thefood_layer
and render its overlay accordingly. - Farmer's Delight could depend on Vampirism's API and check if the blood bar or food bar is rendered
- Simply disable the nourishing overlay if Vampirism is installed or an inter mod message is received.
Conclusion
I have not found a good solution to this problem. Considering that this problem may only exists in 1.18 and Vampirism currently focuses on 1.16 and 1.19, it could be worth to take a simple workaround instead of a whole fix. But maybe you have a different opinion or solution.
I had looked a bit poorly into the cause of this issue back then. Yes, it does seem that the way FD renders its overlay on 1.18 in specific causes it to never be canceled. @Cheaterpaul is correct in this one.
Since I copied this impl from AppleSkin, that mod also causes an issue with Vampirism. If I recall, I assumed this method was the required way of rendering overlays on 1.18, but I might be wrong here.
I'll see if I can fix this locally on 1.18, then update here. 👍
Fixed on commit 34e1687. Both of FD's overlays are now rendered during their respective levels on event, and are therefore canceled properly by other mods. Should be out in 1.2.2 soon. 👍