A Bit of Housekeeping

It’s been a long time since I made any serious effort on the holy grail task of getting a cube on the screen.  For that reason, everything I was trying to use to do it is now very out of date.  This problem resulted in a bit of housekeeping.  Since I’m in there updating tools and reading over code I’d written, I figured it was also a good time to grab the latest collection of libraries and assorted goodies and make sure that the new versions didn’t break anything.  Specifically, I believe it is time to bump LWJGL up to the latest version, and to seriously consider a switch from the main line of Java to OpenJDK.

I’ve been coding on Java 8 for a very long time.  I had everything I needed, and Oracle kept updating it with bug fixes and other useful patches, so I really didn’t have any need to change.  Recently however, Oracle has gotten onto a pattern of releasing major versions of Java much much faster than before.  In fact, since I last posted, the official JDK has advanced all the way to version 11.  With this new pattern of fast releases, they also appear to have changed the license agreement in a way that I don’t care for.

If I’m reading or understanding their new license correctly, they are making it pointlessly expensive to use Java to create commercial software.  I hope I’m just not understanding the intent of the new license, because if I’m right, it seems like Oracle is essentially trying to make Java itself go away by pricing themselves out of a market with dozens of other free options available.  As a coder that prefers Java to all other languages, this makes me rather sad and was the driving force behind my idea to switch to OpenJDK for QubeKwest.  With any luck, it’ll be pretty straightforward to do this, and unless I’m misunderstanding again, the use of OpenJDK dodges this entire license issue completely.

Starting to Itch

A friend of mine has been talking a lot about a game project he’s been working on lately.  In general, I love talking about coding projects, even when they aren’t mine.  I find it sets my mind spinning in fun and interesting ways.  When I’m not talking about one of my own projects, I mostly hope that I am a useful source of ideas for the person I’m listening to.  There is another side effect though.

Talking about other projects, and sharing in the excitement that other people have for their projects is great, but I end up missing my own projects that have stalled.  I describe this longing for my own coding projects as “itching to work on them.”  Thankfully there isn’t any actual physical itching involved, but conversations spawn ideas.  Ideas in turn spawn problem solving.  Problem solving causes a desire to put these theoretical solutions to code.

The last time I posted anything here was nearly a year ago now.  In that time I’ve worked on several other projects and as a rule, I’ve stalled out on all of them.  I’m not sure why I do this, but I think it has to do with getting to a part of the code that is hard or boring or otherwise just not something I want to work on.  The solution is to simply stop until I wish I was working on it again.  That time is fast approaching again.

To that end, I’ve updated my development tools to their latest versions for probably the 3rd or 4th time since I stopped work on QubeKwest.  I’ve done some thinking about my library choices and I’ve devoted enough time picking over the code I’d already written that I found some things to correct about my project documentation.  The itch is returning in full force, and I expect to resume working on the project soon.  Hopefully, “soon” really means soon this time.

Bogged Down Electronics

So as it turns out, simulating electronics is hard.  Sure sure, this isn’t an especially surprising revelation for most I’m sure, and if I think about it, there really isn’t any surprise for me either.  In my efforts to build an electrical simulation engine within QubeKwest, I ran into several very tricky problems (some of which I have solved, others I have theories about how to solve, and some that may never be solved).  In my efforts to solve these problems, I found that I had lost my motivation to keep working.

I would like to resume development on the game, but I haven’t actually done so yet.  I can blame part of the delay on things at work (my real job) being tough to deal with lately, and other parts on a preference to play other people’s games instead of writing my own (games are fun, that’s why you’re reading this blog I suspect).  While those things may be a factor, I think at this point I can chalk it up to general laziness.

Sometimes when you get into a project that is way more than you can reasonably expect to finish by yourself, you just need to let yourself slack off a little.  Otherwise you’ll truly just burn out.  I don’t want to burn out on this project because it’s the largest, most complex, most diverse, and most interesting that I’ve ever worked on.  I just haven’t got anything to report as new development at this time.  Probably soon though.

Development Momentum

I decided it would be a good time to talk about momentum.  Or perhaps the total lack thereof.  I’m a self-confessed fragile ego, especially when it comes to coding.  I think this stems from a few issues I’ve got all at once, but the important ones are things like this:

I’ve never really finished any sizable project.  For my own projects this makes a lot of sense.  I have no deadlines, no audience, and no real driving motivation to finish anything.  In other words, when I get sick of working on something, I just stop.  After all, I’m sick of it, it got hard, or it got boring, and I don’t have to keep working on it.

One of the things I tend to enjoy is talking about my projects.  I suppose that’s a fair bit of the reason for this blog.  After a while, negativity or lack of interest or lack of feedback can result in loss of interest for me.

One of the specific issues I’ve been having with QubeKwest is that I hit a massive amount of serialization work and got buried in it.  It’s really boring, and requires a lot of test code to make sure it’s working correctly.  You can’t very well serialize a block and not get back the same block again later without all sorts of things going wrong.

Another issue is that I get fairly consistent feedback that I’m just wasting my time.  I realize this project is essentially a clone of an existing game at the end of the day, and that I could code it faster by using someone else’s game engine, but the truth is that I don’t care.  I’m doing this project for me, largely to give my brain something to do that requires education and devotion.  Thus, I really don’t want to just make plugins for Minecraft or use someone else’s game engine.  I want to learn how to write one and then, well, write one.

Now, I did just claim that I don’t care.  Like five sentences ago in fact.  While that is mostly true, the other truth is that I care a little.  Enough in this case to have entirely stopped work on the project for about four months so far.  Sure, it’s been fun playing World of Warcraft a lot, but I’m starting to get itchy about not coding, so I’m not sure how much longer I can go before I can’t stand it anymore.

Stay tuned, there may just be development updates again someday soon.

Delays and Procrastination

This project is really honestly the one I want to finish.  Well, perhaps not “finish” exactly as much as simply “release to the public.”  The problem is that I’m feeling a bit overwhelmed and underawesome.

I’ve chosen, for better or worse, to build my own game engine for this game.  This has several interesting side effects.  First and foremost it means I have a metric crapload of code to write and things to learn before I ever manage to get any game on the screen.  Second, I have to build every possible subsystem required to make a concept into a game.  Third, I have about 17 simultaneous learning curves to try to tackle to make it all happen.

This post is not intended as pure complaining, but I’d be lying if I claimed I’m not complaining at least a little bit.  This is hard.  Really really hard.  It’s a little bit scary, and a lot bit interesting, and as previously mentioned a whole pile of overwhelming.

After wrapping up the code for my math library and the subsequent code to test the heck out of it, I’ve made very little progress.  A little bit of messing with how I represent 3D models and some confusion about how I should be representing them.  I’ve opened my programming tools a couple times with the intention of coding only to find myself not even sure where to start.  The next logical step for someone that doesn’t know where to start is sadly to simply not start.  The step after that is to play a bunch of Minecraft with the intention of observing how different things work.  Yes, that really is how the last month has gone.

On the bright side I’ve put in a lot of hours studying how liquids work in Minecraft and some of the sassier details about redstone.  I do not have any solid ideas about how to code either one if I ever manage to get enough of a game engine together to bother, but at least I’ve learned a little more about how they work.  Also, where Minecraft uses redstone as a form of electricity, I plan to make QubeKwest have good old fashioned electricity with wires and devices and logic circuits.  Someday.

Here is a list of the things I’ve been working on without successfully finishing much.

  • I started an asynchronous network client and server.  Neither is done or functional, and in fact, they no longer even compile.  My synchronous version grew up to be an extremely simple version of a chat program, but was dropped from the project as too limited.
  • I started making a lot of the data structures that the game will need to represent all sorts of things.  Everything from blocks to the chunks they live in to the idea of a world coordinate.  Some of these even have tests written for them.  Others are properly serializable.  None are “final.”
  • I wrote code that can load shaders from the disk into the video card.  I wrote code that can put geometry into the card as well.  Neither is especially flexible or in any way ready to be used for actual rendering of pretty things.
  • I’ve created tons of Java packages.  Some are empty and others are probably unnecessary.  It’s occurred to me that I may be breaking down the project a little too far, and that’s helping to confuse me instead of, well, helping me.
  • I wrote some random functions.  By this I mean functions that produce random numbers in various interesting ways.  They sort of work, but are also somewhat limited.  I guess I’m entitled to sort of finish something from time to time.
  • I have vast amounts of code devoted to doing complicated math and even more code devoted to making sure that code actually works correctly.  While that’s cool and everything, it’s also utterly unused so far.

Well, I think you get the idea.  I’ve stalled on the project for now because I get home from work and can’t find the motivation to work on it and because it’s hard and confusing.  I’ll build up a head of steam created by frustration with myself and I’ll start working on it eventually.  I hope.