December 28, 2020

[Design] Character Introductions

What I find most inspiring about creativity is the ability to craft a fantasy world, beautiful, new, magical, and completely alien. I have written before about the world-building in Daughter of Dreams and how I wish Somnar to be something different and unique. I consider this game to be a work of epic fantasy, and the story-telling is one of my key design pillars going into this project. The story may not be realized in the game itself until much later in the process, but I have begun designing characters and writing snippets of dialogue from the start. Today I want to introduce those characters. They are merely concepts, so they may change throughout development, but I think their essence will remain the same, only refined.

Sonya is the Hero of Light, who once lead the charge against the City of Shadow, and drove away the enemy, in an event known as the Great Victory. Now, she has been summoned from the ancient past to defend Somnar once again from the dark sorcerer Charon. She is a disciple and soldier of Ta'Reya, and fights with a Sorrite spear destined to defeat the darkness.

Lydia is the Prophet of Light, sent to aid Sonya in her mission. Lydia is an ardent follower of Ta'Reya, and was chosen for her kindness, sincerity, and loyalty. However, the weight of responsibility makes her uncertain, and the grim necessities of war lead her to question even her most deeply held beliefs. But she must persevere in the face of darkness, lest Charon succeed in his nefarious goals.

Duran is an outcast, unwanted by the followers of Light and the common-folk alike. He suffers from a Cinder addiction, a substance which leaves him nonfunctional on the best of days. Furthermore, he bears a dangerous curse, one more terrifying in its power than even the dark magic of Charon. He joins Sonya in an effort to finally commit himself to something valuable, and perhaps free himself as well.

Angela and her familiar, a Void Owl named Kree, herald from a distant land. Angela is an investigative historian, hoping to uncover the lost legends of Somnar, the truth of what happened in the Great Victory. Among those tales, she hopes to find evidence of her ancestors, whom she believes to have originated from the heart of Somnar, yet fled when the City of Shadows fell.

Charon, the dark sorcerer, and the last witness... He has returned to wreck his revenge of the followers of Light, for they once vanquished him generations ago with the aid of Ta'Reya. But they have weakened since, and now he hopes to reverse the flow of time and return the City of Shadow to its former glory. Yet he will find his efforts stymied by an anomaly--Sonya the Hero of Light, human and yet immutable and nearly invulnerable to magical attacks.

Ta'Reya, the God of Light, is the beacon of hope for the followers of Light. The legends say that when the people prayed, Ta'Reya set fire to the Moon of Night, and she is the reason that Somnar has two suns, and will never again to be shrouded in the sinister dark of night. Now Ta'Reya acts again to save Somnar, bringing the Hero of Light back in the hour of need, so that she may vanquish Charon and prevent night from falling again, forever.

Sai'Ra is the God of Pain, among the most dangerous beings to walk the Void. He prefers to work indirectly, and frequently offers his power to mortals seeking great power. He extracts only the smallest price: their eternal pain and anguish. His reach is vast, and his motived are arcane and unknowable... Duran is one who bears the curse of Sai'Ra, and the God of Pain is not quite finished with him yet.

The story throughout Daughter of Dreams will be character driven, a necessity for a procedurally generated game, as it is much harder to tell a linear plot. The interactions between characters will be essential, and I hope to create a flexible system where the various characters may leave or rejoin the current party depending on events in the story. Their unique powers will be expanded upon as I work on the combat prototype, and the specifics of the plot are currently being worked out behind-the-scenes.

What I have presented here is only a brief introduction to the characters. This is an ambitious project, and there is much more depth to the characters that is not revealed in this post. I can't wait to show more details of Daughter of Dreams as I continue to make progress. There may not be many more story information though, as I want to keep most things spoiler-free. Finally, I'd like to thank my brother, who created the concept art used in this post, and will be doing most of the character art for the game itself.

December 08, 2020

[Programming Notes] Turn-Based Combat System

This week, I implemented the core systems of the new turn-based combat system for Daughter of Dreams. This is one of the most technically complicated pieces of code I've written, though it may not seem like it. The challenging part for me was making it as simple as it is. I believe what I have will be powerful and flexible enough to expand easily to support the entire combat system (and probably in-game cutscenes as well, though GML 2.3 sequences may still be a better option). Abilities are modular, and can be assigned to any entity (player characters and enemies), and the combat engine can transition between states fluidly, as well as undo actions.

What It Looks Like

So far, the combat prototype has two main operations. A character can be selected from any number of playable characters, and they can be given an order to move according to basic grid-based movement. These are merely the simple actions I implemented to test the system. As the game expands, I will add new actions that will be supported by the foundational code that makes up the combat system.

Two playable characters with grid-based movement.

System Overview

The combat system is currently comprised of two primary components.
- A finite state queue of functions which return true or false.
- An index of actions assigned to combat entities (playable characters and enemies).

The logic for the finite state function queue is as follows:
1) Run the current function when the update method is called. (Usually in the step event).
2) If the function returns true, progress the queue to the next function.

Next, an action is defined globally, and can be assigned by reference ID to any entity.
- The action includes all the data required to display the action on the UI.
- The action execute method can assign required values for the entities.
- The action can add functions to the combat function queue to define the logic of the action.

Class definitions shows the essential attributes and operations of each component.

System Implementation

With these components in place, the logic for starting a new combat scenario is as simple as adding each step of the combat cycle to the combat function queue. The logic of each step is handled internally, moving to the next state once that function returns true.

Each step (combat_start, combat_player, etcetera) can divert from the primary cycle by inserting more functions in the combat function queue at its own position. For example, the player phase will allow the player to choose actions for their characters. When an action is chosen, the associated functions are added to the combat function queue.

The final combat cycle can be represented with this flowchart. The primary combat cycle is the Start > Player Phase > Enemy Phase > End/Restart. Each player or enemy action diverts the primary cycle by inserting other phases into the combat function queue. Furthermore, actions could be canceled at certain steps, by instead inserting the previous phase. (For example: with Choose Attack, on "confirm" input, insert Choose Target, but on "cancel" input, insert Player Phase again).

System Pros and Cons

This method is powerful because it is easy to transition from each state to any other state, just by appending the next associated function. It handles the turn-based aspect of the combat with the simple logic of the function queue. Each state is handled in order, one at a time. Actions are modular, so they can be assigned to and used by any entity, instead of programming every ability for each entity.

The downside of this system is that at the moment, the function queue cannot accept parameters. Every function used for combat abilities must return true or false, and be designed to run every time the function queue update method is called. If additional variables are needed (such as timers, or damage values), they must be declared outside of the scope of the function. It is possible I will expand the function queue to use parameters as well, but it will complicate the system.

Additionally, while actions are modular, they also require more code this way than they would if each was more specialized. The move action as it stands uses four separate functions (initialization, player input, drawing, and execution). However I believe the flexibility outweighs this complication.

Stray Thoughts

In the future, I hope to regularly post programming notes to cover the more interesting systems that I develop for Daughter of Dreams. I am learning a lot, and I hope if I share what I've been doing that others might find it useful too. Also, if anyone knows of useful articles or posts covering similar topics, please let me know and I will include them in the resources section.


December 02, 2020

[Progress Update] New Ideas and Turn-based Combat

It has been a long time since I wrote a blog post. Over the summer I had been working on Daughter of Dreams significantly, but unfortunately, most of my designs ended up not working out. Considering the start of a new quarter at college, which was an especially busy quarter for me, I decided back in September to take a break from Daughter of Dreams until I had significant free time again. This has turned out to be a really good decision, and the ideas I had during the summer have been maturing during my break. What I have now is much more solid, so I am excited to now begin in earnest with the development of Daughter of Dreams, as the quarter is over and I have the entire month of December to focus and get some game development done.

I'd like to start this new phase of development with a new blog post covering the most significant changes to my plans and designs. My goal for the month of December is to get a fully working prototype of the combat system into the hands of my alpha-testers. I've been working on character design and story as well, but those are backburner until I have a game engine running.

Turn-based Combat

The first major change to my design is to develop a turn-based combat system. This deviates from the common design of a Zelda-like, which usually has real-time action combat. However, I do not think this is a requirement, as I believe a Zelda-like depends a lot more on key item progression.

The combat in Daughter of Dreams specifically is not fully designed yet. But there are a few features I am considering. I will expand this as I develop the prototype.
  • I will use small numbers for combat values, like the way it is done in the classic Paper Mario games. This allows for a more strategic type of turn-based combat, compared to large number systems, as the player can predict exactly how much damage their attack will do and which strategy will be most effective.
  • Combat will be positional, like a tactical RPG. I am thinking that the combat will take place on a grid, and attacks will target particular cells in the grid. I believe this will create a unique element to the combat, and allow me to design abilities that require more strategy than simply which will do the most damage.
There are several reasons that I decided to shift to a turn-based combat system. A turn-based combat system is much more theoretical than real-time. I mean that the enjoyment of turn-based combat depends less on the art and animation, and more on the pure design and balance. This plays into my strengths, as I am primarily a designer and programmer, and not an artist. Additionally, a turn-based system better supports multiple characters being present, as they become members of the combat party. This will help with the story-telling of the game, which I want to be a major focus.

Story Structure

I have written previously about the world-building of Somnar in Daughter of Dreams and I believe those elements will mostly remain the same. I have not yet shared many details of the plot itself, but I would like to write about a few ways that the new combat system will allow me to tell a more engaging story.
  • The story will depend on many different characters joining the party. This allows me to explore the interactions between characters, have character development, and create conflict through their interactions. Before, I felt restrained to having the main character lead the story on their own, with others becoming background characters limited to specific interactions.
  • Characters will maintain their progress between cycles. Daughter of Dreams has always been planned to be procedurally generated, where the main story takes place over multiple cycles. My plan is for character progress to save between cycles. This includes character development and combat abilities and the experience they have gained. With the new design for combat, there can be a sense of progression that is earned over time, through many cycles.

Dungeon Design

While I am shifting to a more RPG style turn-based combat system, I still want to preserve the Spirit of Adventure that is key to Zelda-like games. I have not considered this aspect very much yet, but I do plan for there to still be procedurally generated dungeons, though the puzzles may depend more on unique dungeon-specific mechanics than key item progression. There is also an opportunity to allow particular characters certain abilities in the overworld (outside of combat), which I will explore as I develop the prototype. Overworld and dungeon exploration, as well as puzzle-solving, are still key design pillars.

Stray Thoughts

This is just a summary overview of some of the ideas I have considered during my break over the past few months. I will hopefully expand more on particular elements once I have more design done on paper. I plan to write several more blog posts soon, covering more about Daughter of Dreams and a few other topics. Finally, my priority now is to create the combat prototype. Stay tuned for updates!