I’ve been making good progress since the last post. My short term goal with the project at the moment is to reach a state where I can make levels and have a playable game. So what I’m aiming for right now is to have a playable build of the game in which a user can start a level, play it all the way to the end and then either move to the next level if there is any or get back to the main menu and exit the game gracefully. Shouldn’t be too difficult to pull off right? Well, not quite. This might be good enough to serve as a high level plan but this is abstracting to the point of trivializing. We need to go deeper.
There’s a lot that goes into creating a program, getting it to another person’s machine, running it and then have it behave the same way it does on your machine. So many steps, and so many things can go wrong in each of the steps because of a myriad of reasons. If a seemingly routine computing scenario is so deceptively complicated then what of everything else in the world? Every time I think about this I’m amazed that anything ever works! Ignorance is bliss I suppose, as inhabitants of this universe we don’t really care as long as everything works consistently, its turtles all the way down anyway. The same holds true when it comes to users, they don’t really care about the minutia involved in opening a window and drawing a coloured triangle in it or how many closing parentheses you really needed to make a particular bit of lisp code run. They just want it to work and that’s how it should be. I however, DO care since I’m the person making the software.
But i’m getting ahead of myself. Too far ahead in fact. Lets take a few steps back from our proverbial user’s computer – we’ll be back dear user – and return to our own. Actually, lets trace our steps back from executing on the user’s machine to the current state of the game.
- The user launches the game and plays it
- The user downloads the game from a digital distribution website like Itch.io
- I upload the latest build of the game to a digital distribution website like Itch.io
- I can launch the game, reach the main menu, start the game and play a level from start to end
- I have finished creating a level in the game and implemented all the necessary gameplay and underlying engine related functionality
- I can create a level, save it to a file, load it from a file, play that level
- I can create a level in the game’s level editor
- I can place all kinds of entities in the game while its running, view their data and modify it
- I can place objects in the scene by code and modify some of their properties
Ah, finally we’re back. Bear in mind there are many more sub-steps within each of these but this gives a good enough overview. I’ve been able to place objects in the scene a long time ago but have only recently begun work on being able to properly place them in the scene. The first of these are transformation tools using which we are able to translate, rotate and scale entities.. My primary inspiration for these comes from a level editor called Trenchbroom and Blender.
The translate tool in Trenchbroom in particular struck me as incredibly simple and intuitive. The way it works is that by default you only translate in the x and z axes when dragging an object around with the mouse and when you hold down the alt button you only translate on the y axis. The first time I used it, it felt like such a natural way of doing this I wondered why this wasn’t more common. Or, this is a very awkward way of translating objects in a scene and only seems intuitive because it maps well to the way I think? Who knows. Luckily, i’m only making these tools for myself so I get to have weird tools that only work well with the way I think, perks of working alone.
The rotate tool is somewhat eccentric too but not as much. There are three circles representing the primary axes. You select an axis by hovering over the circle representing it, hold the left mouse button down then move the mouse left or right and another arc gets drawn within the circle showing how much you will rotate the entity by. You release the mouse button and the entity rotates.
I can’t say I’m completely satisfied with how these tools have turned out. There are still things I want to do slightly differently but at the same time I’m afraid of dwelling on them for too long. The act of making progress while fixing bugs and polishing existing functionality seems like walking on a tight rope. I’m going to proceed with the tools that I have right now and get back to them once I have actually tried to use them when building a level. I feel like it’ll give me a better sense of which direction to move in.
I’m glad however to finally make some tangible progress and its really refreshing. I’m hoping by the end of next week I’ll complete work on these tools and be finally able to place entities by using the level editor instead of placing them by code. Until next time!