Not saying that it's pretty, but it's quick and easy.
It reminds me of this: http://typicalprogrammer.com/abject-oriented/
I can understand that instantiating templates by hand is not so bad. But once it is written, maintaining the code is not so obvious for someone not acquainted with it.
Did I introduce a bug or not in the code? Not easy to tell without context.
fixing level selection again
commit dae018e4f76db0e9da810b4560d6c8e1c7029048
Date: Mon Apr 11 07:06:47 2016 -0700 fixing level selection for hint case
commit a754bcd0d09ab1e357ae28c8f06baf65d879878f
Date: Sat Apr 9 02:33:14 2016 -0700 forgot to fix the level selection in the move caseIf I could actually reuse code properly I'd only have to fix it once.
Without effective code reuse, I have to hunt down the copies, each of which may have slight modifications to make them better fit their use case (and might be hard to grep for as a result), figure out whether or not the bug exists in that copy (and whether it can actually be triggered), and fix it there.
The description of inheritance in http://typicalprogrammer.com/abject-oriented/ seems relevant here. (Edit: Derp, junke got there way before me!)