July 1, 2016
After having completed my second Java course at my university, I decided to take the summer off and get started on a game project that I’ve been thinking about for a long time: A 2D isometric engine. I finally felt like I was at the competency level necessary to begin working on it.
I’ve always found isometric projection to be the most immersive and realistic choice for 2D graphics, even before I knew anything about the different types of graphical projection. I could never really get into side-scrollers or top-down games using oblique projection quite like I could with games using isometric projection.
When I first started thinking about doing this project I had a few ideas for specific games that I wanted to create. First I considered doing an alien wave shooter then I changed direction entirely and started thinking about a large open-world crafting/survival game (similar to Rust). Then I came to the realization that it would be more practical to create a sort of engine to handle the lower-level stuff so that I won’t have to worry about it later when I start working on the actual game. I don’t have any experience yet with any commercial game engines (I do plan on learning one or two at some future point), so I figured that if I write my own custom tools, then I will already have a deep understanding of how to use them. I’ll also be able to improve upon them as needed.
Currently, I have some very basic gameplay mechanics for walking/running around the map and placing entities in relation to a grid coordinate system. I’m almost finished writing my own GUI library (since NiftyGUI was outdated and had some deprecated dependencies when I checked and TWL’s website was down for a while)(Also Swing and JavaFX are incompatible with Slick2d) that will be used in the level editor and any other custom tools I might need to write. Slick2d provides an AbstractComponent class that provides input listener methods that can be overridden to handle mouse and keyboard events. I must only be concerned with the composition, rendering, and explicit behavior of any particular component. So far I have the following: Button, TextField, Label, Slider, Panel(draggable & minimizeable), and MenuBar, Menu, & MenuItem. I’m currently working on a ComboBox for providing a drop-down list of items where only one may be selected at a time. I finally almost have enough components to start working on the actual level editor.
The next gameplay mechanic that I think I’ll at least experiment with is locking the player to the grid. So, instead of the movement being based on the equation of a line in a particular direction, it will be based on which adjacent grid-squares can be traversed.
August 5, 2016
The time has finally come for an update. I’ve been getting back on track and into a good routine and thus, have been able to put in a substantial amount of work on the project. The major changes include a revamped grid system and the earliest features of the level editing functionality.
The previous grid system was based on two sets of parallel lines that ran at the same angles along the edges of the isometric tiles. Positioning was determined by the intersection of any two of these lines. This was fine for positioning entities, tracking current player location, and the like; However, it might not be the best or most practical system for the later features that I have in mind. The new grid uses a collection of polygons that fit over the isometric tiles of the map. Player movement is also now locked to the grid. If a gridsquare is traversable, the player can move onto the tile and will stop in the center. This allows for environment-based collision detection by setting desired gridsquares’ traversable field to false. Entities are now positioned based on the row and column of the grid that they occupy. I plan on extending the new grid system in many ways by storing data in each gridsquare such as: entity height layer when occupied, terrain type, and probably a lot more.
Alright, enough about the grid. It’s time to talk about the most exciting change of this update that I’ve been eager to begin working on: The level editing stuff. This is the main reason I spent over a month working on the GUI library (and it’s still nowhere near completion). There is now an “Edit Mode” which can be toggled on/off by pressing F1. When turned on, a menu bar and the mapX/mapY coordinates are displayed. So far, there are only a few options available in the menu bar, but they’re good ones. Here’s what I’ve got so far: File -> Save(unimplemented), Edit->Grid->Set Grid Layer, Edit->Gridsquares->Edit Traversables, Edit->Gridsquares->Edit Heightmap Indices(unimplemented), View->Grid, View->FPS Counter. This system will be greatly expanded upon and will ultimately become the core of the engine used to create isometric games.
School starts back up for me in exactly one month, so I hope to accomplish as much as possible on this project before then. I hope to be able crank out another update within that short time. I’ve also figured out how to export everything into an executable jar file. I’d really like to do that next time and make the game and source available here for download.
November 5, 2018
I’m not sure if I’ll return to this project. I’ve since dropped out of school and have been trying to do freelance web-development. When I eventually do get back into game development, I’ll probably be looking at learning a game engine and getting into VR.