QubeKwest Wiki

There is now a wiki for QubeKwest. It seemed to me like it would be a more useful format for storing large amounts of game related information than an arbitrary collection of blog posts would be. It took longer to get it working than I wanted, but it does work.

The adventure of getting a wiki up and running proved to be one fraught with peril. For a previous project (years ago) I installed MediaWiki (the wiki system used under the hood by wikipedia.org). I managed to get it to run, eventually, but the system kept its secrets close to its chest and I was unable to actually figure out how to actually use it. Before you get to judging me for that, I didn’t try all that hard.

With that in mind I decided to try a wiki system called Tiki. This proved to be a total nightmare. After several hours, I was still fighting with PHP extensions while trying to make it happy. It used package management software to help install additional things that had its own set of requirements. In the end I did finally manage to get it to work only to discover that the version the Tiki website told me to download as the latest version actually wasn’t. In fact, trying to use it, there were messages that popped up telling me the “latest” version I was using was actually so old it wasn’t supported anymore. I ended up starting over and installing it again from their SVN repository to get the nagging messages to go away. The final install size was almost 580MB!

After using Tiki for a few days, I ran into several things that I hated even more than installing it. As it turns out, the interface is a bit of a disaster, the online documentation is either completely wrong, for old versions, or is just generally misleading in some way or another. It was a convoluted mess just to get a search box to appear on a wiki. Can you imagine a wiki without search support right out of the box?

As I used it more, I ran into issue after issue. The way you have to use images is absolutely terrible. You have to upload them, which makes galleries, and then you have to refer to them basically by number if you want them to appear correctly. Pages in the wiki had horrible formats (I assume this was just by default and could be improved, but I wasn’t inclined to do so). The search results came up with nothing more than a page name and a spot that looked like it was going to have more information but didn’t.

The issues I experienced were surely just the tip of the ice berg since I’d only used it for a couple of days. I couldn’t take it anymore. I scrapped the entire Tiki install and installed MediaWiki. Amusingly, this time with vastly more success than my first time from years back. In fact, the install was fast and painless (just a few minutes), and using it has been absolutely great so far.

As for the actual wiki content that will go on the site, the amount of information we are talking about was almost instantly daunting. When I created a block type list page. That resulted in 331 wiki pages I will need to write, and that’s until I end up adding more block types. I suspect I will write a collection of small tools that is intimately aware of the data structures in QubeKwest to generate a bunch of the wiki pages for me. That would leave it to just copying and pasting or figuring out how to import them instead of having to hand write them all.

Over the course of “whenever I feel like it” I will document things on the wiki, and I’m glad to have the place to do that now. I’m calling that a little bit of progress.

Getting Back to Work Again

As I previously mentioned, spending money tends to provide me with project motivation. The opposite has proven to be true of rejection. The failure to acquire a registered trademark let all the wind out of my sails and started another long period of not working on QubeKwest (which is absolutely still what I’m calling it even if I didn’t manage to trademark it).

In the past I found myself drawn back to this project after these long gaps of not working on it got to a certain length. That is what is happening again now. It’s been long enough, so my brain is starting to want this project again. So far, I’ve only managed to update libraries that have been updated since I was last using them (but I haven’t confirmed that the project config remains correct or that the code that uses them still compiles). Next, I will start trying to figure out what I was doing from a code perspective when I stopped working on QubeKwest.

Without looking too closely I’m pretty sure Vulkan via LWJGL will be where I dive back in because that was the last thing I remember doing. As before, I will have a lot to read and learn, much of which qualifies as reread or relearn to be honest because I’ve forgotten it. I will try to stay focused on that, and naturally, I may not quite succeed. That’s okay, the things I’m mentally wandering off to do that aren’t what I should be working on to “get a cube on the screen” are still probably useful to the project as a whole.

For those following along with the blog, I will continue to tell stories here about how things are going.

Attempted Trademarking

I find I tend to get a bit extra motivated to work on QubeKwest when I spend a bit of money. Sometimes that means software to help to make sure my concurrent code isn’t going to blow up. Other times that means buying piles of books. This time it meant applying for a registered trademark for QubeKwest. The post you are reading has been in draft status for months now as I worked through the process of trying to get the trademark and update it as things move along.

The real first step was to have a random idea and desire to get QubeKwest trademarked. Once I’d done that, I headed over to LegalZoom and went through the process of filling out the application. The application I’m referring to at this point is the one on LegalZoom, not the actual application for the trademark. That comes later.

The first bit of resistance I ran into was a field on the LegalZoom application for a trademark that was marked as optional. This field asked me to define the “Class” of the trademark. That is essentially the way the trademark is designated to a certain type of good or service. I went into the list of classes and spent a good 20 minutes searching and reading the choices, only to decide that since the field was optional, I would skip filling it in for fear of getting it wrong. After a few days, LegalZoom contacted about the fact that I hadn’t specified a class.

This was a little more confusing than it probably should have been because LegalZoom has a page devoted to the list of classes complete with examples of things that fall under those classes. This page didn’t match the email they sent me with suggested classes at all. In fact, had the reference page said the same things their suggestions in the email had said, I would have filled it in immediately during the initial application. Instead I needed to call them up and have a quick discussion about what it should be.

After that, the ball was once again rolling in the right direction. The next step was to wait for the trademark search. This search is to make sure I wasn’t trying to trademark anything that someone else already had. I obviously hoped I wasn’t, and I had definitely spelled it differently than anyone else. This search took a few days to start, and then another few days to finish. The results were voluminous because they had attempted to separately match Qube and Kwest. Nothing that came up was the same but I studied the list all the same. After looking over the search results, I decided that none of the matching results were similar enough to QubeKwest to result in a conflict. Thus, I informed LegalZoom to continue the process.

For reasons I don’t fully understand, LegalZoom then proceeded to email me multiple times and then even to call me to tell me to review my search results. I suspect it was just multiple automated systems that were just lagging behind the process I had been following. Since I’d already done the approval and contact to tell them to carry on, there was nothing to do but to look over the emails and listen to the robocall to make sure I hadn’t missed anything and then move on with my day.

Next, with the search behind me and thankfully confirming that I should be able to apply for a trademark successfully, the process moved on to the part where I have to actually apply for the trademark. LegalZoom filled out all that paperwork for me, and that meant it was up to me to simply look it over and give them final approval to send it in for me. It took me a few hours to quadruple check everything over and then I gave them my blessing to send it on to the US Trademark Office.

The result of saying “go” was that I was directed to a USPTO signature page where I had to make sure everything looked good, agree to a few things, and then electronically sign the application. This in turn sends the information back to LegalZoom, and then I think they sent in the real application. It’s all getting a little fuzzy at this point in the process because there seems to be a fair number of things that are going back and forth behind the scenes that I don’t see or need to approve (since I already previously did so).

Naturally, the US Trademark Office is a busy place, so this part involved a whole lot of patience. Like months and months worth of patience. In fact, from the point where the application was accepted by the USPTO, they told me I wouldn’t even be assigned a lawyer to work on my application for at least three months. I guess that’s just how long the backlog is for lawyers over there. After almost three months, my application was assigned to a lawyer and within almost no time was suspended (denied) for being similar to another name. Weirdly, I never found the potentially misleading name through either the trademark search that was done by LegalZoom or with the one I later did on my own. Apparently whatever secret list the USPTO has for searches had it though.

In the end, I spent a pile of money, Legalzoom felt genuinely worthless in the process, and I was denied. I am now the proud owner of nothing more than I was at the beginning, and I’m out a small pile of money without anything to show for it. I have no intention of changing the name of this project, at least for now, because I don’t consider the name to be misleading or confusing with other game names.

Process Timeline

  • April 25, 2019 @ 1:55 PM – Completed the LegalZoom application.
  • April 29, 2019 @ 12:18 PM – LegalZoom informed me that I needed to clarify the “Class” for the trademark.
  • April 29, 2019 @ 1:09 PM – LegalZoom updated the trademark to “Class 009.”
  • April 30, 2019 – Trademark search started.
  • May 03, 2019 @ 8:53 AM – Trademark search completed.
  • May 03, 2019 @ 9:14 AM – Sent instructions to continue filing the application without changes.
  • May 03, 2019 – LegalZoom’s Peace of Mind Review™ started.
  • May 04, 2019 @ 12:03 PM – LegalZoom’s Peace of Mind Review™ done.
  • May 04, 2019 @ 12:55 PM – Electronic Signature Accepted for new trademark application.
  • May 06, 2019 @ 3:06 PM – Application sent to USPTO and my trademark application was given a serial number.
  • May 06, 2019 – LegalZoom shipped QubeKwest Trademark package to me.
  • May 13, 2019 @ 1:25 PM – Trademark package arrived from LegalZoom.
  • May 21, 2019 – USPTO status: New application will be assigned to an examining attorney approximately 3 months after filing date.
  • July 18, 2019 – USPTO status: New application assigned to an examining attorney for examination.
  • July 20, 2019 – Trademark application for QubeKwest was suspended (ie: denied) due to it being potentially confusing with another existing trademark.
  • July 20, 2019 – Process is now complete, no point in appealing.

Still Reading

Progress on QubeKwest stalled a little bit here recently due to a lot of reading and an otherwise busy schedule. I got really amped up working on the core game engine concepts, and then started to get a little worried that I may be making a horrible decision somewhere in the process. This resulted in still more reading. This time, the book du jour is an absolute monster of a tome called Game Engine Architecture: Third Edition by Jason Gregory. I already own, but only made a cursory pass at reading, the Second Edition of the same book. When I noticed there was a new one I picked it up because I wanted to make sure my efforts at reading a book of this magnitude were spent on the most up to date information possible.

In case I haven’t made it obvious yet, this book is gigantic. The introduction actually states that it is designed to be the textbook for a series of three college courses about game architecture. I’m plugging my way through it and getting a bit twitchy that I’m not actually coding, but in this case, I figure it’s a good idea to make sure my decisions are well informed since it is extremely likely to be devastating to the project to have to fundamentally change some large part of the core game engine thanks to a poor choice.

I’ve been reading it for a bit, I’ve got a long way to go, and I thankfully haven’t found any choices I’ve made to be bad. This is good news and may lead me to finally writing the Vulkan boilerplate initialization code.

Historical Detour

As I’ve been up to my eyeballs in engine coding for QubeKwest I began to wax nostalgic. This led to conversations with people about old game engines, which in turn led to the purchase of a series of interrelated books, which in turn led to reading them. Really nothing about this pattern is especially odd, but it is rather impressively distracting. I think I was primed and ready for a distraction that prevented me from writing over 1000 lines of Vulkan boilerplate setup code and these books provided that perfectly.

The journey through history started with the Game Engine Black Book: Wolfenstein 3D by Fabien Sanglard. This book was very hard for me to put down as I grew up with the computers that were described in the book (386 CPUs running DOS on practically no RAM) and Wolfenstein 3D was the first FPS I’d ever played. All told this book only took me about 3 day to plow through cover to cover. There’s a fair bit of code, a lot of helpful diagrams, and tons of screenshots. (In other words, I recommend getting the paper version of this book instead of a digital form.)

Once I was done with that game engine, I was on to the next one made by the same guys at id software. The Doom engine was my personal favorite growing up. It was so immersive and killing hordes of demons was more varied and entertaining than killing enemy soldiers. This led me directly into the Game Engine Black Book: Doom also by Fabien Sanglard. This one was about other computers I had growing up (486 CPUs, still running DOS, and barely more RAM) and the guts of how a BSP (binary space partition) based game engine works. There was a ton of interesting information in this one about porting Doom to other platforms too. Most should never have had a port of Doom, but it was interesting none-the-less. This one was a bit longer and took me about a week to read through.

Having now become completely fascinated with the guys that started id Software and the game engines they created, I took a step further back in time and picked up Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture by David Kushner, which drops the coding side of the story in favor of the story of the people that created it. This book is far older than either of the earlier two I mentioned, and it’s an inspiring read of how a couple of scrappy kids eventually went on to make a ton of money and mostly have fun doing it. I’m still reading my way through this one, and the guys (as I’ve come to refer to them) have put out Commander Keen, Wolfenstein 3D, and Spear of Destiny and are just getting ramped up on making Doom.

All this reading spun off a temporary side project to see if I could write my own version of the Wolfenstein 3D engine from scratch in JavaScript. After a weekend of working on it, I had the ability to walk around in a place with texture mapped walls. I was proud of what I’d done, so I took a bit of time to add a 2D overhead map that updates with what the rays looked like that were cast to produce the 3D view and tracked the player as they wandered around. Next I tried to make objects (like lamps and tables and bowls of dog food) and while I did manage to get my raycasting method to work as a recursive algorithm to allow mostly transparent objects, I never did quite get them to show up properly. I also never tried to make doors, elevator switches, or secret push blocks, but I considered what I’d made in a weekend as “good enough” for a distraction and called it as done as I was likely to make it. At least for the time being.

With a lot of reading and a side project mostly behind me at this point, I’m back to where I get to climb that mountain of Vulkan boilerplate setup code. I’m not sure how much fun it’ll be to write, but it is definitely all new to me, so there’s something to be said for that.