— PROJECT NAME
Spells
— ROLE
Technical Game Designer,
Backend Developer,
HUB World Designer
— DATE
Jan. 2025 – Apr. 2025
Spells is a stylized fantasy roguelike, in which the player controls a powerful Lexomancer; a rare class of wizard who can conjure magic through the use of language. As a Lexomancer, you have the ability to enhance your spells by stringing together letter tiles into words that will modify your spells in unique ways.
As you wake up, you begin your journey through forests and caves in order to reach the Word Forge. As you travel through these areas, you must battle your way through hoards of enemies, gathering new letter tiles as you go.
Other Links:
Spell Casting Framework
3D Assets By Matthew Vroman
My intentionality behind the Spell Casting System was to make a framework that would have any and all important variables in one place. This was to ensure that we wouldn’t have variables all over the place making it difficult to change the damage output or movement speed of a spell as an example. The second reason the Spell Casting System was set up in the way it was, was so that we would have the opportunity at any point to go back and add more spells if we felt it was needed and would add to the experience.
When creating a new spell, all of the information is stored in the Spell Traits map. The first element to be filled is the specific spell that will have the associated spell information. For this example we will follow Fireball. There are 4 categories for each element:
1. Type of Spell Cast
2. Projectile Type
3. Projectile Movement
4. Projectile Time
For fireball, we fill the Spell Cast Type in as a projectile, as this spell will fire a projectile from the player character. Next we move into the Projectile Type structure. This structure holds all the base information required for a spell. How much damage will be applied, should an AOE spawn on impact, what VFX is associated with the spell. Any information that relates to how the spell will react is stored here.
After the Projectile Type structure is the Projectile Movement structure. This structure holds all the information related to how a spell should move through space if it is a spell that moves. How fast a spell should travel, the range a spell has, its homing acceleration. Information regarding a spells movement is stored here.
Finally, we have the Projectile Time structure. This structure holds any information that impacts the timing of a spell. The spells cast time, how long the cooldown is, the duration of the AOE. Any time related factors are stored here.
Spell Casting Documentation:
Modifiers Framework
UI by R. Tucker Koepp
The Modifiers Framework is closely associated with the Spell Casting Framework. On updating the spellbook by adding letters to a spell slot, a function is initiated which gets the letter, find its letter function, and applies its effect.
Letter Modifier Documentation:
3D Assets by Matthew Vroman
UI Art & Dummy functionality by R. Tucker Koepp
The Hub World is the start area for the player before starting a run. This area is meant to be a resting spot for the player. A place the player is allowed to settle down before getting back into the action. Elements are placed around the environment for the player to interact with and explore using our interaction system.
There are many systems to interact with in the Hub World. Some the player will interact with between every run, and some meant to be tertiary. One of the main areas is the Training Yard. Placed in the center of the area, this is meant to be a space that the player will interact with no matter what each run. Its central location forces the player to pass through wherever the player is in the Hub World.
The Training Yard has two main components. The first is the Spell Stand, placed on the far right of the Training Yard, this is in the direct path of the player from spawn to the portal of which the player must enter to start a run. This allows for the player to switch spell classes quickly if the player wants to get back into the action.
The Spell Stand is also placed in this location to be close to the Shop. Player’s can quickly reach the Shop following the path to the right. Once the player is done, the have the choice of going up, giving another access point to the portal to start a run. The player can also choose to go to their left and enter the Training Yard, putting them right next to the Spell Stand and allowing them to switch classes quickly to get back into the action.
The third element of the Training Yard is the dummies. Placed in the top left section, three dummies are placed for the player to test out the different spell classes and pick out a class for the type of gameplay they prefer. The location of the dummies is close to the Spell Stand, allowing for the player to switch between classes
Along with interacting with some of the more important systems, we use this interaction system to provide tips for the player in small interactable elements scattered around the Hub World. Signs are placed around traps and other interactable items that are meant to cause harm to the player. These tips are meant to give the player an insight into what to look out for when in a run. However, we do not require the player to interact with these items, giving the player the option to ignore them if they so choose.
Player’s can walk up to a sign and press F when prompted to get a tip about the item in front of them. Walking away or pressing the LMB will get rid of the message.
As with any Roguelike, the player has to be able to apply upgrades to their character from run to run. Spells is no different, using two types of currency as part of the Economy System. Players have access to in run currency (Gold), which they can spend at shops that show up after competing a certain amount of rooms. Players also have a second currency type known as Infusion Gems, which they get while in a run from breaking barrels or buying more gems at the shops found throughout the game.
The shop system uses two main aspects to communicate. BP_NPC and BPC_Shop are the two main actors for this system. An array is stored in BP_NPC known as Shop Items. This array holds all of the shop items available in the game. Each item requires the following information:
ItemAvailable: Boolean to check if the shop keeper has the item in their inventory.
Image: The items icon.
Title: The name for the item as it will appear to the player
ItemInfo: Description of the item as it applies to the player.
GoldPrice: How much the item costs in gold.
InfusedGemPrice: How much the item costs in Infusion Gems.
InStock: How many of that item the shop keeper has before the player cannot buy any more.
ItemEffect: What effect will be applied to the player.
This array is instance editable to change values between in-run and out-of-run shops. When the ItemAvailable Boolean is checked to True, that item will appear in the shop.
The BP_NPC blueprint controls the items that will appear in the shop, while BPC_Shop controls the functionality when the player is interacting with the system. Once the player opens the shop, an array on the component is filled with the available items from the BP_NPC’s shop item array.
Credits:
R. Tucker Koepp: Combat Designer, Technical Game Designer, Gameplay Programmer
Caleb Wilson: Level Designer
Caleb Wilson
Matthew Vroman: 3D Art, Technical Art, Lighting, VFX
https://www.artstation.com/mvroman