So to carry on with the Systems Design that I’ve been assigned. I’m working on the Crafting System. As can be seen in the blog post previously, this is the final stage of the Potion making process. The aim of this System is to produce Potions with varying levels of Potency, Potency is essentially the Quality of the Potion, the higher the Potency, the better the reward and Customer Satisfaction.
The Crafting System takes the raw ingredients from the Harvesting Minigame and uses them in the Crafting Puzzle to affect both the Potency of the final Potion and the Difficulty of the Puzzle. It’s the way to bridge the Framework and Dungeoneering ingredients. We considered having a simple crafting system like that of Minecraft, but decided that this would mimic it way too much, and that having a mini game could be a fun way to get the Player more involved with the game outside of the Tycoon mechanics.
There will be buffer mechanics in place to make sure that Players that aren’t necessarily that good at the Crafting Puzzle, will still be able to make high Potency Potions. This means that if you harvest high-quality Ingredients from the Harvesting Minigame, they will alter the Crafting Puzzle to make it easier to attain a higher score. To attain a maximum Potency, You need to both do well on the Crafting Minigame and use high-quality Ingredients.
In my Fifth Sketchbook, I’ve documented a range of Ideas and developed them further to create some final concepts. I then discussed with my team who helped me to develop the current final idea. I went on and took this into Unity and prototyped it, this will help us next semester as the groundwork will already be in place, saving valuable development time. I can use this prototype to iterate on the gameplay, changing how you attain a max score or even the fundamental mechanics. The aim of this is to have the variables available to change through a GUI, allowing my team-mates to experiment with the Mini-game to tune specific elements.
It was really difficult to come up with a new Mini-game for Belljar. This is because a lot of the ideas I came up with have already been done. I did a lot of research by looking into the Puzzle Games on Miniclip and playing a few of the Mini-games from Puzzle Pirates to help inspire me. I also watched a BFG Clip about Dream-Making to use the movement of the dreams to further develop some of my other ideas.
It was really good to do some research into this extremely mini-game heavy game. This was because I was drawing a blank on my ideas and playing the game helped aid my creativity. It definitely helped me to realise that a huge amount of mini-games have been done before, and are often just reskinned or have slight alterations of a basic mechanic. It put my mind at ease and really allowed me to look at the puzzle from a different perspective.
A huge amount of Puzzle Pirates gameplay revolves around setting up huge combos in the least amount of time, this is how you hit the high scores and its really interesting gameplay. This is the kind of thing that we want for the Crafting Puzzle for Belljar as the score you acquire will directly feed into the Potency of the Potions.
The Final Idea
The current iteration of the Crafting System that will go into the GDD is as follows. There are three concentric circles that rotate independently of each other, these circles change colour randomly according to a base cycle speed, which is altered by the Quality of the Ingredients used in the Mini-Game.
The Special Ingredient from Dungeoneering will also increase the difficulty of the puzzle, therefore fulfilling our desire for the game to become more difficult when trying to craft some of the higher level Potions. We may also give the Special Ingredients more attributes; like resetting a wheel when it is locked in, or introduces a different colour into the cycle.
To complete the puzzle the player has to lock in a colour for each of the wheels, either Red, Green or Yellow where Red is the worst and Green is the best. In the actual game this may be radically different (For example certain potions may require 2 Reds and a Yellow) but for the purposes of the GDD, the maximum score is attained by locking in 3 Greens.
Below I’ve documented the Code and attached a video of the Mini-Game.
Initially, I defined the large list of Variables that I’d need to get this prototype up and running. I did a rough design in my Fifth Sketchbook along with some troubleshooting for the problems I ran into, I find it a lot easier to work things out on paper rather than staring at the legions of code on the screen. The most important things I had to define here were the Colours for the Circles to cycle through and the time between each cycle. By the end of the development process I’d started to lose my mind a little bit, so the booleans I set up to control the if the circle is locked in or cycling are named ‘rotatoPotato’, ‘lordofRotation’and ‘squigglySquigles’. The others are fairly self-explanatory and can be understood through my code comments.
In the ‘Start()’ method I’m just starting the Circles off at colour Red, and beginning the Cycle. In the ‘prime’, ‘alpha’ and ‘omegaRot()’ methods I’m altering their Z Rotation and increasing or decreasing it at a rate of the ‘primaryRot/secondaryRot/tertiaryRot’ variable each second. These will be able to be changed via a GUI later on in the process.
Here I set up the ‘colHandler()’ Method to make sure that the engine always knows what colour each circle is displaying, this is useful for my ‘ColourChange()’ methods below.
Essentially what I’ve used is the ‘isXChanging’ boolean to stop the colour from cycling instantly and infinitely. What instead happens, if that the method checks the current colour of the circle. It then checks if it is currently available to change, if this is true; then it changes the colour of the circle, and changes the ‘isXChanging’ boolean to false. It then runs the ‘IEnumarator’ I’ve set up for each circle which waits for a defined amount of seconds, then changes the ‘isXChanging’ boolean back to true, allowing the next IF statement to run. I have three ‘colourChange()’ Methods, one for each circle, this allows me to then turn them off individually. As can be seen below in the ‘LockIn()’ Method.
My ‘LockIn()’ Method uses the ‘pressCount’ to stop each circle from cycling. It does this by checking how many times the button A has been pressed, and then altering the master variables I’ve defined at the top of the script and changing them to False. This signifies the end of the game when you hit A three times. The ‘isPlaying’ boolean is set to false, this is important below for the ‘Scoring()’ method.
The ‘Scoring()’ Method calculates the Players final score at the end of the game. It does this by using the ‘colHandler’ script to give each colour a value, then adds them together and stores it in the ‘scoreHolder’ integer. This code interprets the value and tells the player the Potency they have achieved.
We finish off by filling up the ‘Update() Method with all of the necessary information to run the Mini-game. I start by saying that if the Master booleans are set to true, rotate and cycle the circles. The LockIn method is constantly running to check if all three circles have been locked in. I also say that if I press A down, increase the pressCount, which feeds back into the ‘LockIn()’ method. Finally, I’m calculating the scoreHolder continuously for the Scoring at the end of the game and the ‘Update()’ runs the ‘Scoring()’ method if the ‘isPlaying’ boolean is set to False. It is re-enabled within the same IF Statement to prevent the Score being printed multiple times.
This code here allows me and my team to edit the Cycle speed on the fly in Unity. This means that we can live iterate on the prototype to quickly work out what the most optimal combination of speeds provides a good level of difficulty. I’d like to also randomise the colour selection but this will be left until next semester as I’d like to finish up the Crafting System for now.
In detail, because I’m using UI items, I don’t have to call them in the above script. The important part of the script is when I convert the text within the text boxes from a string to a float. This means that I can then assign this variable to the ‘One, Two and ThreeTime’ variable within the ‘circleRotation’ script. As I said above this is great for live iteration.
Requirements from Millie:
- Crafting Screen UI
- Ring Design/Artwork
Below is the video displaying me playing the game. It definitely needs more iteration to introduce more difficulty. I think this will be by refining the cycle speed and restricting certain Potency scores by having to complete the Puzzle within a certain time. I’ll continue to develop the system until tomorrow whereupon I need to start working on a different area of the Project. We’ve got a lot of work to do for this GDD and I still have to work on the Dungeon Concepts and NPC’s in the Game.