Diversity
I've been pouring my spare time into one specific side project for a while now, and part of that is learning to work with Ember CLI, and remembering how to work with Ember Data, but sometimes I progress so slowly on that project, it really gets to me.
(If you're curious, Ember CLI is mostly great. I wish configuration was easier -- No one seems to have an answer for how to namespace the API stub. I find I don't use the actual CLI much besides just starting the server. I don't love the API stub because the Ember Data FixtureAdapter cobbles my responses together for me, and the API stub makes me do it myself. I pretty much wrote another FixtureAdapter for myself that works with an Express server, and that's probably stupid.)
I've been sitting on a game project since college, which I did almost all of the programming on, in Python, using Panda3D. It was a top down space shooter, but the twist was that you didn't have any guns. You had Ikaruga-style polarized shields, but they were flat and reflective, so you reflected bullets back at targets.
At the end of the semester, we had a small games fair for all the teams in the class, and everyone presented to the campus population. Our game was really hard, but pretty fun, and people seemed to like it.
Panda3D was built for an MMO, and wasn't a great fit for an arcade-y game with a ton of bullets. There were performance issues, and it was a pain to distribute the game, and also pick development back up because of whatever dependencies.
I've always wanted to give it another go, and to my knowledge, the idea hasn't been implemented by anyone else yet.
I've been dragging my feet, though, wasting time deliberating, trying to decide on the perfect platform, and the perfect game engine, etc. I'd have liked to develop with HTML5 engines, but none of the ones I've seen seemed fleshed out enough that I'd feel secure that my needs for the whole thing would be met.
Recently, prompted by some post on reddit, I gave Phaser a shot. I tried prototyping a shooting behavior I thought would be fun for multiplayer, where one player shoots, and the other has the reflectors. I don't think I've heard of a game with player controlled bullet hell.
It worked, and it wasn't hard, but working through the docs gave me some bad feelings. I feel like I've matured as a programmer since I started working with Ember, which I maintain is kind of like a free apprenticeship under Yehuda Katz. But my bar for organization and documentation has gotten much higher.
I decided to reinstall Unity, and give it a go. I'd tried, without a ton of luck, to reimplement Toribash in it a few years back, because I wanted a mobile 3D version of the real thing (rather than the inverse kinematics version MiniBash that ended up getting made). Went with Cocos2D, emulating a Flash 2D version of Toribash someone else had tried before. The project went to hell. Bad communication, some underhanded crap. I don't really want to write about it. I won't pretend I was blameless.
Anyway, the point was I'd messed around with Unity a little bit, but never really got anywhere. This time, I decided to go through a tutorial project space shooter, and that was really nice.
I feel like I could make something real with Unity. The tools feel like real tools, with some shortcomings, but sufficient to do real work. I feel like a professional using them. It looks like the crap you see on the developer's screens whenever they do behind the scenes game interviews.
I'd decided to try Unity again because it says you can script with JavaScript, and I'm handy enough with JS. I'd loved working in Python, and I wanted something expressive like Python or JS.
Unity actually uses something kind of different. Commonly referred to as UnityScript. It seems to have some of the syntactic weirdness of JS, without the nice expressive features that let you use JS without killing yourself.
Somehow, it's class-based instead of prototypal, with typing, and you can't do stuff like declare POJOs like:
var usefulBoundaryObject = {
xMin: -6,
xMax: 6,
zMin: -4,
zMax: 8
}
Unity ends up yelling at you because the properties aren't declared or some crap. I feel like prototypes are at the heart of JS, and I don't know how you can change that and still call it JS. The whole thing is bizarre.
I decided if I had to use something class based anyway, I might as well learn C#. So far nothing terribly surprising. I've worked with Java before. Don't have much to say about it.
I did have some issues with the creeping scope of the scripts in that tutorial. One class that fired player shots and did its movement and stuff. I'd rather have a MovementControllable and FireControllable set of modules, and be able to swap out player control with AI strategies and stuff. The sort of stuff that's really easy with real JS and its first class functions.
One of my peeves so far is that I can have a public MonoBehaviour member in a script, which is exposed to the Unity editor, but I can't seem to assign a script (which subclasses MonoBehaviour) to it.
Anyway, learning something new, giving myself permission to work on another project, getting this moving after so long, feels reinvigorating.
When I was in school, I had a pretty bad run due to depression. I didn't like it upstate, 9/11 happened, Eric's mom died. I didn't end up doing well until my last year, where I took 21 credits both semesters. I get bored easily, and I guess I just needed more stuff to do to stay engaged.
I'm finding I'm getting more done on the first project by working on a second project. I think because of Parkinson's Law, and the fact that having less time is making me prioritize and focus more.