It's been a while, and I'm not sure if that's forgivable. This past year has been very busy, and schoolwork has consumed most of my free time. Unfortunately, this has meant that I was not able to work on the games as much. Despite my downtime on Crevis, I have still made additions to the game. Before I talk about them, I would like to talk about the changes to the site and its structure.
Website changes + merger
I have decided to post all of my projects and games on this website. One of the reasons why I was lacking in activity on this site during the past year was because my focus was on schoolwork and on another project, Nesus. I had no way of communicating my progress on Nesus and what I was doing, resulting in the extended period of time between my current post and the last post.
I came to the conclusion that I should write about all of my projects on the Crevis website, as creating a new website would a) be problematic for current viewers, as they would have to make the switch from Crevis to the new website, and b) it would cost more money (money doesn't grow on trees, especially for students).
In order to merge my content, a website redesign was required. I also had intended to refresh the look of the site for a while now. Here is how the blog will work when discussing multiple projects:
Restructuring data in Crevis
Towards the end of 2017, I realized that the way data was handled in Crevis was very inefficient. The inefficiency of data handling was leading to loss of performance and memory, and spikes of lag whenever new chunks were generated. This is a very difficult problem to approach, because in my mind I thought I was using an efficient method.
The data structures utilized were ds_grids, and there were three ds_grids per chunk. One would represent block data, another background block data, and the third would represent metadata. Grids must be represented with integers, and for block data grids are optimal.
However, metadata (data that describes each block) must be versatile and must have the capacity to store more information. Metadata tells the game what state a block may be in. For example if the block is on fire, the metadata of the block describes this. Metadata is also used to identify chests, as each chest must have a unique identifier so that their inventories may be saved and retraced.
Metadata was extremely slow to process in the previous iteration of the chunk system, and was a main factor in the cripple of the chunk system. I (currently) have no idea how to approach the problem of storing metadata and am open to any suggestions.
The entire chunk saving/loading system in Crevis is really slow, and I honestly have no idea how to fix it. I have seen other systems that use shaders to save/load, though I do not know the languages associated with shaders in GameMaker. I have also looked into buffers but am unable to get them to work with the system I have set up. Buffers seem to be the only lead that I have, so I had no choice but to break down the current saving system and start from the ground up.
The inventory system is similarly broken, though it is easier to fix than the chunk system, as it requires less memory. I also already have a few ideas of what to do with the inventory system, so it should not be long before it is optimized.
My vision of Nesus
In addition to working on Crevis, I have worked heavily on Nesus, a game that I began in 2016. My motivation for working on Nesus was based solely off of the fact that it was Greenlit on Steam as part of the last batch.
For those that do not know, "greenlight" on Steam indicates that the game was accepted onto the platform.
Upon its admission to Steam, my vision of the game had completely changed from 2016. A story had festered in the crevices of my brain - one of loss, tradegy, and finding oneself again. I do not want to reveal what the story is, so I cannot give many details. I created a character and completed most of its mechanics (movement, dashing, combat, guns, etc). Here is the progression in design, from the earliest mockups to the final design.
I also created a parallax system that can accept an infinite amount of layers that each possess their own speeds relative to the player. This is achieved by saving parallax data to .ini files.
I used some free backgrounds to test the parallax system, and they work perfectly! The system is well-optimized and versatile, so it should last the duration of this project. There are tons of things I've done behind the scenes, including creating a combat system, dashing system, and fluid animations. I have also begun work on bosses and their mechanics, and I have just been jumping around. Now, I have a clear focus on levels and content and that will be my priority.
Until next time!
February's task is to improve the combat system and create a system for enemies and their AI.
The author of the blog is Niften, or Sour Apple. He posts weekly, usually on the weekends on Saturday.