Understanding the effects system and the creature class

I am working on rebuliding some old PRs of mine, and right now I am working on adding ice tiles that are slippery.

As far as I can tell, the effects system is like the disease system, but json-flexible in many ways, and still hardcoded in other ways. That is to say, if I want the player to slip on ice, I will add the effect in the json, but I will still code regularly in the source code that the player will slip: I am not expected to write that part out in the json.

My follow-up question to that assumption is this: if I create an ice tile that is slippery, and I want all creatures to slip on it, would I add the code to “bool Creature::move_effects()” rather than “bool Character::move_effects()”? This way, zombies can slip and slide too. Would it be improper for me to do that?

And a follow-up-up question: if I want to check if the player is wearing winter boots, is that something that I can’t do in Creature::move_effects(), or, given that I am already doing a creature-type verifiction, should I simply write the code in Character::, and then write similar code in Monster:: as well?

Thanks! I hope I was clear enough :x

edit: This is sort of related. I am thinking of making an effect that chills the player when they walk into icey fog. Normally I would just do this in the update_bodytemp() function, and it would be hidden from the player. If I do this with the effects system, I can make it more clear and more convenient to code. Would that be too verbose if I used effects in that way? If so, is it possible to make effects “invisible”, meaning not show up in the @ menu?

As for the move_effects:
You shouldn’t make all creatures slip the same way, unless you also want to make “is_flying”, “is_burrowing”, “is_slip_resistant” etc. functions for the creature.

It would probably be better to add a virtual slip() function to creature and then implement it in player (where it would test slip resistance and maybe wings) and monster (where it would check for legs, flying, burrowing etc.).
Then you’d check for slippery tiles in move_effects and invoke slip() if the tiles can actually be slippery…

Thanks, that answers my first two questions! I’ll create a Creature::slip() function and customize it to the player and to monsters.