Updated Game Design Document
Game Engine Decision
In my experience as a game developer, I have used both GameMaker and Unity extensively more than other game engine. I have used Unity for 2 years and I found it to be a powerful 3D game development tool with a clean UI system and more flexible OOP scripting. GameMaker is a user-friendly tool which is best suited (and designed) for fast-paced 2D game development. I have used GameMaker for 10+ years and am quite comfortable with the engine. After spending some time thinking of what engine to use, I have decided to use GameMaker Studio 2 because I am more familiar with the engine than Unity and the game is in 2D top-down perspective. I also considered the development timeframe and project scope in making this decision.
Project and Word List Setup
In setting up my project, I downloaded an English word list text file to use for word validity checks. I had two choices on how to handle the word list inside of GameMaker: read directly from the text file or store all the words in the game project through code. GameMaker has what is called a sandboxed file system. GameMaker writes and saves any included file and files created through code to the local machine. The problem with the sandbox system is that the user can easily edit text files if they find the directory in which the files are stored. Using the local machine to store files are mandatory for save files, but text files like word lists are not needed to be changed after release. In my case, I do not want the user to alter the word list file to cheat the system. With that said, my solution was that I copied each line (or word) from the word list text file and pasted to an online text manipulation website called Text Mechanic. I will explain why I used Text Mechanic after I explain on how the data in my game is being handled.
I will store all words in a data structure which will handle dividing the list into subsections of words for smoother performance and optimization. What I am doing with the words found in the word list is adding them to the word data structure through a function:

I have defined a master word data structure which will hold all subsections of words based on their first three letters in the “PRE” key. I will use a custom script called word_list_add_words() to populate the data structure. However, I cannot simply paste the words from the word list text file into the function and expect it to work. Instead, I use Text Mechanic to add prefixes and suffixes to each word in order for the computer to understand what I am trying to do:

For each word in the list, I add the prefix: word_list_add_word(_wordList, “ and the suffix “); to make the computer interpret each word as an entry for the word data structure that the game will use.
Turn-based Combat Setup
For my game, I set up a simple turn system which allows the player’s team to take actions before the enemy team. Team members can perform actions in any order they want, with one unit being able to be selected or deselected at any time. I essentially added defined two enum values which dictate what sides each unit can align with. In my case, it is PLAYER_TEAM and ENEMY_TEAM. I have been thinking of what way the player can select its individual units Each character’s actions are dependent on what Letter Pieces that character has. I have attached changes to the documentation, which states that the character now has two base Letter Banks: its inventory Letter Bank and its combat Letter Bank. A snippet of the combat’s state machine is below:

Notice that I commented out the ENEMY TEAM’s turn order entry. I did this because I have not implemented AI, as that is scheduled to be developed before the Beta release.
Letter Bank Generation Process
I have spent quite some time brainstorming how I will set up each character’s combat Letter Bank filling and refilling at the beginning of each team’s turn. I have decided to go the route of randomly selecting words from different word lists, which are separated by letters they contain. For example, if I wanted to generate a random “P” word, then APPLE or PULL can be pulled from the list and stored for later use. A random letter is selected at random for the first word then letters are selected more intelligently because a first word has been picked. I repeat this process a number of times to generate multiple words. I take all the randomly picked words and evaluate what letters they share and their frequency, which guides the program in deciding what letters to add to each character’s bank. This makes it roughly 90% more likely that the player can spell a word. I have not yet added a fail-safe to characters that cannot spell a word, but some thought is being put into that potential problem.
Alpha Wrap-up: Single Combat Encounter
For this game’s alpha stage, I have decided to go for a simple three heroes vs. three enemies combat encounter with three simple good wizards and three targets since no AI has been added yet. I have added some simple UI, which allows players to click on heroes, targets, Letter Pieces or confirm/cancel buttons to interact with the game. Below is a video demonstrating the gameplay so far:
Simple art and presentation is done because I am focusing on prototyping the game for Alpha testing before proceeding with more complex implementations and presentation.