This sprint, I worked on implementing the scenario system, as well as creating some concept art for ingredients and potions in the GDD!
Left to Right: Phoenix Feather, Nightshade, Giant’s Toe, Wyvern Scale
To start off, the concept art I did was mostly just quick digital sketches based on the cards in my paper prototype, or a reference photo that I found online in the case of the nightshade. These aren’t meant to be high quality drawings, but more so an outline of ideas that I can hone in on when I’m creating the pixel art assets next sprint.
Left to Right: Cloaking, Gigantification, Hunter’s Sense, Immediate Combustion, Larger Mind, Radiance
For the potions, I tried to decide on somewhat unique silhouette’s and color palettes for each one, so that they can be easily told apart at a glance. I also tried to convey the attributes of the potion through their shapes so that players will be rewarded for trying to intuit what they do (the exception here is immediate combustion, I want that one to look inconspicuous so that it’ll surprise unsuspecting players!). I think that for hunter’s sense and radiance I’ve succeeded in this, but the others could definitely use some further refining next sprint
Finally, the most exciting thing I worked on this sprint was the Scenario system! This system will handle everything to do with the customer interactions, from dialogue, success rolls, and deciding which scenarios should come next based on the outcome of the previous one. To get started, I first created a data table that would hold the necessary information for each scenario.
The current structure of the data table is as follows: Row name (for internal reference), Scenario name, dialogue, points required, stats applied, success dialogue, failure dialogue, character sprite, character name, scenarios unlocked on success, and scenarios unlocked on failure. The implementation of all of these from a .csv file to Unreal was very simple, except for the last two. Unreal’s data table rows are structs, which is a collection of any number of values you want as singles, this meant that I couldn’t have an array of scenarios to unlock, only one. But this wouldn’t be suitable for the gameplay I had in mind, so I needed a way to store a list within a single value.
Thankfully, after giving it some thought, a solution came to me quickly. Strings were single values that could have any size, so I could import a list of scenarios as a string of comma-separated substrings. Then within Unreal, I could use a handy built-in node called Parse into Array that could read my string, and split it into an array of strings using a delimiter as the separation points (in my case, a comma). Now I could store a list of variable size within one cell of a data table! Yay!
From here, creating the interaction process was pretty simple. I would start by alerting the player that they had a customer, then show the dialogue, then the stats of the scenario compared to the stats of the potion they chose, along with the odds of success. Finally, the scenario would end with unique dialogue based on if the character succeeded or failed!
The stat check itself was pretty interesting to implement, I already had an idea beforehand of how I wanted to do it, and for once my initial idea worked perfectly! Each scenario had a point count that the player would try to reach. Their score would be calculated based on the potion stats multiplied by the stat multiplier. For example, the above scenario takes the Power and Endurance stats, so the stat multiplier has a 1 for those stats and a 0 for the others. Since the potion has 2 Power and 0 Endurance, they score 2 points, for a 2 out of 4 chance of success. What this system also allows me to do is weigh stats differently. I could have one stat be multiplied by 2 or .5 to change its impact on success, or even make it negative to have it decrease the odds of success. This will allow me a lot of creative freedom when writing scenarios later!
Comments
Post a Comment