This is a very small release update but it represents a good bit of education on my part. I’m doing as much research on the Godot Engine as I can. This includes learning what I can on code structure for an RPG, or really any game. I know how to program, but I have very little experience as a software engineer, and even less as a game developer, so getting a base of knowledge about how to structure a project as big as an RPG is going to be crucial if there is any chance for this project to take off.
The only change in this release is that you can walk over the white block and the scene changes to the “battle arena.” You can’t actually do anything once you get there, but the scene change does happen and the character can’t move while the scene is changing. Also, there is a decent little fade-in and fade-out during the transition.
Again, this is a very small update, but that’s kind of the idea I’m going for with very small, hopefully very frequent updates. If you have any thoughts, questions, or comments be sure to leave them below.
It’s been quite a while but I’m back to working on the game. I’m sticking with Godot because it really is awesome. I have the story somewhat fleshed out but there’s still plenty of work to do there. I’ve started over from scratch (again) but I’m going to try to get to very basic “game” level of development, then start posting new versions regularly. Of course, this is always what I try to do when I start over, so we’ll see how it goes this time.
It should come as a shock to absolutely no one, but I’ve changed direction yet again. I really think this one is going to stick because I’m going back to a single-player, 2d RPG. And I’m using an actual game engine, instead of trying to make all the tools myself from scratch. It has taken me a little time to get used to it, but the Godot Engine is absolutely amazing. I’ve messed around with Godot before but was never serious about it because I didn’t like the idea of exporting a game to HTML5 because it would be packed together and it would create a delay for the game to initially load. Eventually I thought, “Screw it!” because every game on earth has some kind of load time. Besides that, the browser caches quite a bit of that data so it really only slows down the very first time you run the game.
I’ve been working on a new story and doing some preliminary testing with Godot’s 2d tools and I’ve made really, really fast progress, at least as compared with other times I’ve tried doing everything from scratch. The game’s view is top-down. I have a player character that moves in 8 directions and animates in 4. I have three very basic scenes: a town, a house in the town, and a bedroom in the house. The player can use the doors to go in between the scenes and everything generally works. Just this basic level of functionality is really fantastic to reach because a lot of the important building blocks of how Godot works were necessary to get to this point, and it really hasn’t been too bad. The map editing tools are a little clunky but totally work, and the whole process is just like 1,000% faster than trying to figure out how to do absolutely everything in code, or with tools I’ve made myself.
I still like the idea of incremental development where I frequently release versions of the game with minor improvements between versions. I’m already up to v0.00.005, but I may wait until I have something that at least resembles a game before I really put it up here for public consumption.
This will still be a huge project but I think I’m off to a better start than I’ve maybe ever been before because I’m using tools that lots of other people have used to successfully make completed games, and that’s always encouraging. I’ll try to post here regularly as I make progress, so stay tuned.
This week’s assets spotlight is a bit of a cheat in a few different ways. First, it’s obviously not done. I like the geometry just fine but I haven’t event started on replacing the color UV pattern Blender generates for you. Second, I actually made this fence for a previous project and have probably even featured it on here before, but I’m using it again because I want Isles of Arden to have all hand-painted textures whereas previously I was just using flat material colors. So it’s semi-new, and semi-complete, but at least it’s something!
This week is also the first time I’m using a screenshot from inside the game itself as the asset spotlight image. You can see the placeholder player character in there for scale reference. This is possible now because the world editor makes it relatively easy to add new assets to the game. That being said, the actual game makes it difficult to move the camera and get a good image, so I’ll probably use the world editor itself to create images for future asset spotlights.
This fence will get featured again eventually when I’ve had a chance to create a real texture for it, so look for that in the future.
You can find the latest version of the “game” on the Isles of Arden page. This release represents only very minor improvements to the actual game and is much more about the creation and integration of a world editor. Having a functioning world/scene editor will make make it much easier to add new assets to the game in the future. Check out the newest version and leave a comment letting me know what you think about the progress I’m making, and what features you would like to see in the game next.
I’ve made some more good progress on the world editor. Here is the full list of features as of today:
- Relatively full saving and loading capabilities. That is, you can save and load terrain changes and the location, rotation, and scale of objects in a scene. Terrain data is saved in a custom heightmap image file.
- Terrain editing including raising and lowering terrain and smoothing.
- Add assets to a scene from a menu.
- Translate, rotate, and scale assets that are added to a scene.
Listing it out, it’s not all that impressive considering the amount of work it has taken to get the editor to this point. Still, I’m fairly happy with it and I’m pretty much at the point I wanted to reach by the end of February, so that’s encouraging.
I think the best course of action is to release a new version showing off the features of the world editor. I’ll try to do that tomorrow. Then I need to spend some serious time actually designing the game. I have a vague idea of how I want the game to look and work, but I can’t develop from a vague idea. I need specifics about classes, races, maps, battle systems, crafting systems, economic systems, etc., etc. So after a version release tomorrow I’ll spend several days, if not more, trying to get the very basics of an actual game planned out so that I can start working on features in a more coordinated way.
Oh, and I guess I need to get an asset spotlight done as well. Hopefully I can do that over the weekend, although designing assets of any value without a real game plan in place is … challenging. Still, I’ll make something generic that I know I can use no matter what.
I’ve been making decent progress on the world editor over the last week. I missed my deadline to do an asset spotlight on Friday because I just haven’t had the time to work on it, but hopefully I’ll get something together this week. In the world editor you can now add assets to a scene and move them around. By default everything just “sticks” to the terrain, but you can move things vertically as well if it’s needed. I probably need to look into a finite state machine since keeping track of all the different modes and sub-modes within the world editor is getting a little hairy. I’ve never used an FSM before but I think if I put the time in to understand it, it would serve me well. For now I’m just going to push forward, but that will definitely be part of a future code refactoring. I need the ability to save a scene out to a file and then I think I will transition back over to development on the game and just add features to the world editor on an as-needed basis.
Speaking of the game, I really a clearer idea of how my world will work and look. I want to create original lore wherever possible and thought I would try to create a new battle system as well, but after thinking about it a bit more I realized the battle system I was imagining wouldn’t work well in a real-time multiplayer environment, so I’ll probably just stick with a classic MMO-style battle system. I would like to make a crafting system that challenging and rewarding at every character level, so I’m thinking that will be a big part of the game. But before I do any of that I need a basic story outline and some ideas about races and classes that will be available when the game first launches.
Last night I finished almost all of the items on my to-do list for another world editor update. Specifically, I can now:
- Zoom the camera in and out so that seeing and moving around a large map is much easier.
- Change the size and strength of the selection sphere. Changing the size is pretty self-explanatory, but changing strength means that vertices move up and down faster or slower (depending on the strength of the tool) when raising/lowering the terrain. This is handy for making big changes, then coming back to fine tune things.
- Smooth terrains. I don’t really like the smoothing functionality right now, but it does work. The problem with it is that all the vertices within the selection sphere move toward the average height of all the selected vertices at the same rate. So vertices right out at the edge of the sphere move up and down by the same amount as those near the center of the selection sphere. Ideally I would be able to choose this behavior, or have the default that smoothing has more effect on vertices near the middle and less effect on those near the edge. I tried doing it this way but ran into some issues with the lerp function in THREE.js. In any case, it works okay for now and I can improve this later.
- Flatten terrains. This tool is super basic at the moment since all it does is set the y value of any vertices inside the selection sphere to 0. Eventually it would be nice to have the option to set the desired flattening height, but that’s definitely a job for another day.
I did NOT make any improvements to the selection tool within the world editor. I looked at DecalGeometry but didn’t really like it. I did some research on shaders but quickly realized I don’t even know the basics of shaders. This doesn’t seem like a feature that should hold up progress so I’m going to leave it for now, but this is something I want to improve eventually and I think learning more about GLSL would be time well spent.
These are some nice improvements but I still have miles and miles to go. I think the next feature to add is the ability to place assets into a scene and save out a map file. I’m not going to worry about rotation or scale right now, just getting some stuff into the world then saving out a map file that can be loaded by the engine. Hopefully this will only take a few days, and I’ll post again when it’s done.
After much wailing and gnashing of teeth I seem to have heightmap saving and loading working properly. Now you can load up a scene, make changes to the terrain height, save the scene, refresh the page, load the scene you just saved, and the terrain changes you made earlier are persistent. The heightmap data is stored in a PNG image that gets stored on the server whenever you save the scene. This has been relatively complicated to get going because THREE.js dropped all non-buffer based geometry. This is, apparently, a much more efficient way to send data to the GPU but it means you can’t just loop through a geometry object’s vertices. Instead you must access the geometry’s ‘position’ attribute array, and make changes there. It’s actually not that much different it just throws my head for a loop because geometries have position attributes as well as indices that define individual faces. I may be overthinking the relationship between the indices array and the vertices array, but in any case it gives me trouble occasionally. But, for now, scene saving is working again.
My next step is to implement camera zooming. It’s really tough to edit terrains efficiently when you can only see the terrain from a fixed distance. I then need to create different terrain editing tools that are adjustable. Right now all you can do is raise or lower the terrain vertices within a statically sized selection sphere. I need to be able to perform other functions like smoothing and flattening as well as change the size and strength of the selection sphere. I also don’t like the idea of displaying the selection tool as a sphere. Hopefully I can figure out how to make it a decal instead that changes appearance based on the size and strength adjustments made by the user.
I’ll be working on these features for the next few days and will post again when they are done. Oh, and happy Valentine’s Day everyone.
I missed my self-set deadline of last night by just a smidge, but here’s this week’s asset spotlight: a stone bridge!
This bridge would fit in a medium-ish sized town because it’s pretty big and would clearly take quite a bit of material to make. Can I level with you guys here? This particular asset may not be completely finished. You might have surmised this by the terrible wood texture and the absolutely horrible, incomplete stone texture. I’m only showing you this view because the other side of the bridge is just flat gray. Anyway, there’s still some work to do but I wanted to get something posted regardless. Who knows, maybe one day there will be an actual game to play along with a community of actual players, and maybe I’ll ask some of those nice people to help me with the art in exchange for credits or recognition in the game? Make it kind of collaborative? I don’t know. There has to be an actual game first.
Anyway, I kind of rushed this out because I’ve been spending what little mental capacity I have on improving the world editor. You can now open a new scene, use an interactive brush to raise and lower the terrain, then save the changes out to a heightmap file. Of course, the heightmap is being written wrong right now so when you reload the scene using that file it puts all your changes in the wrong places, but I’m making progress nonetheless.
I’ll try a slightly less ambitious asset spotlight for next Friday, and hopefully post about world editor improvements before then. Stay tuned.