Wow. OK so 5 days in and basically nothing done. No not true: I've learned some stuff.
My first game (which is almost done, I promise) is a completely simple, no brainer, nothing to do idle game in which you grow a cult. The title is Idol Games and I can describe it to you in detail:
- there is a graph of towns
- you can start cults in each town
- cults give you
soulfire, which increases monotonically
- if your cults get too big they may be investigated, which decreases their yield/growth rate
- there are actions you can take to stop investigations, but they cost
soulfireHere are some icons from the game:
The goal for me was to practice doing UI in Quintus, and to make an idle game about cults. I'm almost done: just need to implement the actions, and here are the two lessons I'm taking away from this.
HTML5/CSS is a good UI LayerMy feeling at the outset was: use HTML5/CSS3 to prototype the layout, and then switch to Quintus' built in UI module. I did this, and am now 75% of the opinion that it was a bad idea. Not because Quintus has a poor UI module: I think it is probably fine! What I realized, though, is: I'm making HTML5 games, not "canvas" games or "Quintus" games. HTML/CSS is an extremely powerful presentation layer, with decades of work put into every aspect. It comes free with 3d transforms baked right in, and is incredibly flexible and extensible. It is also immediately familiar, and easy to manipulate. Why would I forsake that for some UI layer someone built, that isn't as specialized or developed?
In the future, I will use Quintus to present sprites and calculate changes, and HTML/CSS for all labels, text, heart-bars, etc... except where I judge Quintus will actually be easier (e.g. heart-bars). This game, in particular, doesn't even really need a canvas instance at all: it is all labels.
Separation of ConcernsThis part is design/psychology. I'm pretty good at programming, and in particular I'm pretty good at designing and re-factoring. So why don't I do those things when I am jamming? I don't write setters/getters for my variables, preferring instead to refer to them straight up; I don't pull common functionality out into components or create calculated properties; I don't write very good code! And I end up regretting it. This time, separation of concerns bit me in the ass again and again (this -- and Christmas -- is why its been days). I kept putting presentation code in the model objects: somehow I thought, "yeah the 'Town' object should keep track of its own 'Demographics Label' because yeah." Again and again, I encountered problems where I would be seeing ghost labels or duplicate badges popping in and out everywhere, and in every instance it came down to separation of concerns. The TownButton object should be keeping track of the labels, not the Town object! Normally this would be a no-brainer, so why do I make these mistakes in jams? Its psychological. I have to treat this more like it is my job, and less like I'm dicking around.
Not in a bad way! Wow that sounded dour: I love my job! Sometimes I can't wait for the weekend to end!
P.S. When this is done, probably tomorrow, I will start working on an infinite runner. I may call it "Sunrise [infinite]" in homage to my favourite infinite runner.