Hello everyone, today I decided it was the perfect branching point in my project timeline to share some of the progress I have made over the past week! I am working on the project titled above as the tools programmer and systems designer, based on this famicart entry:
By: Michael Shillingburg
About 5 years ago I designed a really simple voxel-based character creation tool in Unity using some very simplistic ideas. Each of the voxels were a cube prefab that was split up into 6 faces. Each voxel object also had a box collider used to detect if it had a neighbor, and would hide any faces blocked by a neighboring voxel. This ended up having many problems and eventually I just gave up on it, but when I saw this case looking through the famicase submission I immediately knew what I had to do!
After watching the premier video I started mocking up the designs for a simple RPG Making game that can be played 100% with a controller, as was the vision Michael left with his cart, and I think it would be an interesting design challenge. The first step was to tackle my "great white buffalo"; The voxel object editor! Right away I did things from a much better design principle. All of my voxels are rendered in code using grid array data stored in one class, and then parsed and rendered to the mesh from another class. All of that works together with the editor class that allows the player to manipulate the data. When I finished setting up all the basic framework, it looked something like this:
Once I had this finished I knew I was on to something I wish I could have worked out years ago, and I set out on making the environment look a little nicer. I also wasn't quite sure what I should do about the lighting, but after a bit more work I was here:
This is the build I had on Wednesday afternoon. The scene has 2 lights facing opposite diagonal directions to light the scene as evenly as possible, but the light was tinted yellow and I didn't notice that it was drowning out the colors that I also added in between these builds.
As well, I added normal maps to the voxels so that it didn't just look like a giant square blob:
At this point I noticed there was an issue with my voxels, and if they had a neighbor to their North (positive Z) the Bottom face would not render. I wasn't sure I would be able to fix it, and then I realized I had just messed up one of the lines that detected which neighbors affect which faces:
This one here ^ the last, or bottom face was set to also check it's positive Z neighbor when rendering faces. After noticing that I changed it to only check the bottom neighbor and everything was working as expected!
Now it was time to work on saving out the voxel object's data structures, and I decided to use the binary formatter and save out custom file classes. This led to me having to convert a lot of my voxel data into serializable classes, as a lot of the back end work was done using custom data structures:
Because of this I needed to come up with a way of converting these structures into integer arrays to be saved out, and convert it back into these data structures to be read by my voxel object renderer class. Next time I tackle something like this I will just use integer arrays right from the start, but as I was trying to make things more readable for myself I chose this method. Anyway, the converting method I chose was:
^ This is the class I made to convert the readable structures into serializable ones, and when the data comes back, I use this:
^ This one takes that serializable voxel object structure and sets the renderer's layer data accordingly.
This afternoon I finished up adding in some extra features like the ability to choose the hovered voxel's color, nudging the object around the grid, clearing the grid to start fresh, and being able to hold down inputs and have things happens at a timed interval. The current build will be the last update to this object editor, unless something completely broken is found, until I am done setting up the other functionality I need for this RPG making game; Such as:
- Character Editor
- Tile Palette Editor
- Map Editor
- Event Editor
- Global Variables Editor
With everything that's needed to get this project done, I am not entirely sure we will get this finished by the end of September! But I am fairly confident that, including what I've learned about saving my data out into binary format, the hardest part of this project for me is now over, and I can move forward with programming some fun features for all of you to make your own little voxel-based RPG and share it with us, your friends, or whoever you want! The game will not render full standalone .exe files, but by sharing your game's save information anyone else with VoxRPG Lite will be able to load your game and play your creation!
If you have the time and feel like giving the current build of my object editor a try, please let me know if you find anything going wrong or if there is something missing that you think might be helpful! https://majestikstudios.itch.io/voxrpg-lite Anything made now will work with the finished game. I am happy with any and all feedback, and I appreciate you taking the time to read my dev log! Happy developing :)