I did some work on the level-up stuff today. Made the View, and its associated method, and some minor tweaks to various areas. Starting this post inspired me to do a bit more, but I didn't feel like implementing the menu yet, so I'm leaving it there for tonight and coming back to it tomorrow.
One thing that I don't want to force out late at night is representing the stat boosts from leveling up in a separate data structure that gets added into the Fighter component. Or rather, I just now coded the data structure, but I'd like to wrap up early, so I won't add it in yet. Wiring it in is more effort than writing it, because I'll need to add it to the component, the serialization code, and the three component initializations. I'll also want to add processing of it to the properties for the stats associated with the modifications.
Everything that remains in part 11 should be pretty straightforward, except for the menu code, because I have to look up the deprecation chains every time.
Something else on my mind is how exactly I want to test some of this behavior. Like, I don't actually care about replicating a sequence of behaviors with the Confused, AI, I just want to assert that it makes no illegal moves, and wears off in the proper timeframe. Maybe if I have isolated tests for confusion and going down stairs, I can handle the rest more easily.
One other note: I fumbled a set of commits earlier today in terms of committing generated code in the right order, so I've now decided that I don't want to do that. First thing tomorrow, when it comes time to work on this, I'm going to remove the generated code and the customizations that make it work, go back to ignoring it. I've reopened the feature request relating to this use case.
That's enough (or too much) rambling for now. Good night.