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.

October 02, 2019

[Progress Update] Starting the Development Blog

I have been working on The Last Librarian for almost two years now, but I am finally close to finished. Early access starts October 19th, and the full release will be only a short few months after that. There is still more work to do, of course, but in the meantime, I am beginning early design work for my next major title, Daughter of Dreams. For that, I am starting this development blog.

I have begun this blog for two primary reasons. The first is to fulfill my own personal desire to share what I'm working with, in a long-form. I am very excited about Daughter of Dreams so I'm hoping to let out that excitement just a little bit by writing about it here. Additionally, as this project is aiming to be a capstone project for my college education, I am using this blog to help document the development process and record some information so that I can write about it in detail later. In that regard, I hope this blog will be useful to other people as well, as I share about my design process and systems implemented in Daughter of Dreams and future projects.

I am not quite ready to announce exactly what Daughter of Dreams will end up being, as I need to get The Last Librarian into early access first. But I will say that I am ecstatic to finally begin development on this project. It has been in the back of my mind for almost as long as I was making The Last Librarian. It is incredibly ambitious and technically complicated, and I think will provide a game experience that is unique, or at least very rare in the game industry.

Maybe this is all just to hype you all up--or myself--for what is coming next. At any rate, as I no longer have design work to do for The Last Librarian, I have officially started the design document for Daughter of Dreams. I am attempting to design the entire game system on paper before I start actual prototyping. I believe it will be necessary to do so for the complexity of this project. I already have several pages detailing a physics/chemistry engine borrowing concepts from Breath of the Wild, and some brainstorming for the primary story and game lore.

I look forward to writing more about Daughter of Dreams in the future. Thanks for reading!