December 31, 2019

[Progress Update] Programmatic Auto-tiling

Starting a new project has been very interesting. I worked on The Last Librarian for two years, so I've practically forgotten what it's like to start a brand new project. It's a completely blank slate, and it's incredibly fun because of the experience I gained from the previous project. I am able to make so many improvements to even the most basic things.

So far, the only programming I've done is very basic engine things, but I am approaching a place where I might be able to start messing around with procedural generation. Here's what I've done so far:

  • Camera functions and screen scaling.
  • Player movement and object collisions.
  • Controller detection and input. (Set up to allow for control remapping).
  • New generation algorithms that handle auto-tiling.

The auto-tiling code is the most interesting part. This allows me to place tiles that connect seamlessly with adjacent tiles. The GMS2 room editor has auto-tiling functionality built-in, but as I wish to procedurally generate the terrain, I need to be able to do that myself programmatically. This algorithm I wrote is compatible with my older PGC library. (See GM Marketplace - Jen_scripts). Here is a GIF showing two iterations of a test room. The tiles are placed randomly and ran through the auto-tile algorithm.

I used bitmasking for most of the tile checks. Here is a more detailed article on the topic: Tile Bitmasking with Auto-tiling. Each position tests for adjacent tiles then chooses the appropriate tile index for the conditions. Bitmasking worked for the broad strokes, but I needed additional special cases to take care of corners and diagonal tiles. My solution also uses a default "invalid" tile, which is shown as the double squares in the GIF. A tileset artist for the game can decide to use that tile or leave it blank, depending on how it fits into the rest of the tileset.

I would show more images, but this is kind of all I've got. Stay tuned for more updates in the future.

December 17, 2019

[Progress Update] Introducing Daughter of Dreams

Today I have finally started serious design work for my next project, which will be titled Daughter of Dreams. This will be a dev-blog focused on my progress designing and developing Daughter of Dreams. I do not have very much tangible progress to show yet, but I'd like to write a bit about my concept for this game to lay the foundation for progress going forward.

Daughter of Dreams will be a procedurally generated adventure-puzzle game. I made The Last Librarian as an adventure-puzzle game inspired by Legend of Zelda. Now I would like to make another game like that, but this time it is procedurally generated. This includes the dungeons, overworld terrain, NPCs, game lore, puzzles, and more. This will be very challenging because nearly all of the content in adventure-puzzle games like these are hand-crafted. There are not many existing solutions for procedurally generating the complex world and puzzles that you would expect to find in a game like this.

Shown here is a flowchart of the gameplay experience I would like to create. This is basically modeled after the gameplay flowchart for a standard Zelda game, with a few small differences. Key items would be found in the overworld environment, and thus would be used to gain access to each dungeon. The dungeons themselves will not have key items, as they do in Zelda. Additionally, in Daughter of Dreams, it would be expected that the player would play through multiple times in order to take advantage of the procedurally generated world. To that end, the length of one cycle would be much shorter (I am thinking only two dungeons) but it would loop again with the final boss when the game is fully cycled.

The story would progress further each time you defeated the final boss, so you would play many times to discover the entire story. It is key that the over-arching story would be related to the way that the game is constantly resetting. There is an explanation for that phenomenon, and the main characters are aware that the game is resetting. This allows the story to continue through many cycles, and have certain progress carry over to future cycles.

I believe there will be two main parts to the story in Daughter of Dreams. The first is a unifying primary storyline that would be the same every time you played, maybe with branching storylines based on decisions the player makes. The second part would be world-building and lore that can be procedurally generated. To make the story as engaging as possible, I want to incorporate elements of the procedurally generated world into the story, so that each play-through remains as different as possible. I have done some brainstorming for the primary story-line, but nothing is really decided yet. I do have some concept art for the three main characters though. I will leave them as a mystery for now, however.

I have a lot of ambitious goals for this project. The vision for this game is much more complicated than my previous games. First, I will need very careful design to ensure that every interlocking system works together to create the intended experience. Then, I will need to develop algorithms for procedurally generating each part of the game. But, I am very excited. Procedural generation is my favorite area of video game programming, and I believe that what I am attempting will end up being incredibly cool, and a unique experience.

Please look forward to more updates from me about Daughter of Dreams. Soon I will share more details of the primary story-line, ideas for the generation algorithms, and some concepts for a gameplay engine designed to encourage interactions between the player and the environment.