Added Support for Multiple Letter Banks
Prior to this stage in development, I only had one Letter Bank hardcoded for each unit to be used at any point in combat. That one Letter Bank can be used to spell a word into the unit’s SpelledWord letter bank UI. I have done this for testing purposes to see if word spelling mechanics would work. But, in the long run, more flexibility would be ideal for my project. What if I wanted to add a persistent Letter Bank for each hero that would carry over between combat encounters? How about a group Letter Bank for all heroes to use (persistent and local for each encounter)? Ultimately, I have decided to expand on the current system by adding support for multiple Letter Banks. Originally, I stored each character’s Letter Bank in a data structure called a DS List (which is a fancy 1D array) with no support for other units to use. This approach would not be ideal for Letter Banks that can be used across multiple units.
Instead of having Letter Banks be DS lists for each unit, I decided to have each Letter Bank be an object. Since each Letter Bank is an object, its visibility can be toggled on and off, which controls when the player can interact with its Letter Pieces. This offers a lot more flexibility regarding when each Letter Bank’s data can be accessed and used for spelling words.
Setup for Hero Statistics and Spells
Originally, each hero was generic and not unique from one another since the same hero was created three times. However, the current setup is not particularly interesting. So, I decided to proceed with implementing unique characters per my design document. Before implementing character statistics and spells, I added a persistent game object which stores data about each hero, which is carried between each combat encounter. Below are screenshots of how each hero’s stats and information are stored:


DS Maps are handy data structures in GameMaker, which allow developers to store data with keys associated with each value. I think they are ideal for saving and loading data via file management. For now, I am using it for storing data pertaining to each hero. Now, I am ready to apply character statistics to each hero.
Applied Character Stats in Combat
Each character object has stats as variables, such as name, level, HP, Letter Bank slot count, and damage bonus. Since I wanted to make the transition from hero duplicates to unique heroes, I had to dynamically populate each hero’s information based on that hero’s name. Below is a screenshot of how I access each hero’s data by name:

The above function retrieves a specific hero’s data, based on that hero’s name. When I set up the game’s hero data using DS Maps, I pull out entries from the data map by using specific keys. So, I did the reverse of assigning data: pulling out the data based on how I set up the keys when initializing the data. With this script set up, I can see the differences in health between each heroic wizard:

Now, I am ready to proceed with implementing spell casts for each hero.
Implemented Hero Spells
For each hero, I implemented one spell. Here are the spells I implemented for each hero:
Power Spell
Lang has Power Spell, which allows him and his allies to hit targets for more damage in the current turn. This spell, along with the next spell I will discuss, was the easiest to implement. All I had to do was add a variable called PowerSpellDamageBonus, which is simply added to the total number of damage that the hero deals.
Express of Relief
Letta has Express of Relief, which acts as a significant healing ability for her and her allies. This spell simply does the same as a healing letter (using the Heal function), but more effective because it has higher healing points and can reach the whole party. The next two spells that I implemented were a bit more complicated to program.
Letter Delivery
Gram has Letter Delivery, which creates a bonus Letter Bank for herself and her allies, which is filled upon creation. This spell caused me to change the letter bank generation function. Instead of just filling all Letter Banks the player has available to it at the beginning of each turn, I simply pass in a Letter Bank object as a parameter for the function to fill in order to make the Letter Bank generation more flexible and functional.
Colorful Language
V. Larry has Colorful Language, which replaces some neutral letters with positive colors and replaces some negative letters with neutral letters. This was the spell that was the most complicated to program. I essentially cycle through each Letter Bank’s letters and store their colors in two lists (negative and neutral) to access later. Then, I shuffle the list and change the color of a number of Letter Pieces from the lists.
Below is a video demonstrating the spells:
Letter Bank Generation Tweak
After doing some finishing touches on the spell casting system for the heroic wizards. I decided to make a tweak to my smart Letter Bank generation system. I maintained the approach of randomly selecting words from the master word list in deciding what letters to pick. The big change I made was the weighting system when scoring letters to place into each Letter Bank. The two ways I score letters are as follows:
- How often those letters appear across all randomly chosen words (apart from the maximum amount of times they appear in any one word)
- How many of that letter at maximum appear across all words. Ex. RACER and STAGGER both add more than one of the same letter (R and G respectively) to the letter scoring system.
The source code for the Letter Bank generation system, at the moment, is messy and long. I will likely continue to make tweaks to the code as necessary. So, I will not share a code snippet of the Letter Bank generation system right now.
Final Notes on Beta
Up to this point, the beta is wrapped up and there are three things I plan on adding before the final version is done:
- An AI for the enemy wizards
- Juice for word spelling and attacks
- Updated graphics and music addition
I will not add an exploration mode as planned because I want to focus more on the combat system than any side mechanics. I will consider it after the Capstone course but it will not be in the final version of this class project.