Tech Workshop

Week 9: Environment and Lighting In Unity by Valzorra

Aesthetics and Lighting

The main mechanics in the Unity Prototype were completed at this stage as James and I had come up with a functional Movement Script, Camera Script, Teleportation Script, and Electrocution Script. All of these mechanics worked as expected and there were no obvious bugs or inaccuracies with them. That’s why I thought it would be rather nice to modify the prototype environment in Unity and to make it more a bit more presentable and thematic. Additionally, this was a nice way of adding additional floor space onto into the prototype, allowing for further mobility to any testers. I started the process with the idea to recreate a very basic and abstracted City Street, as that is one environment we may see Zeta in throughout the game. I started this process by including additional 3D Planes and positioning them next to the green ones in the preexisting version of the prototype. Once I was happy with the space I had, I took basic cubes generated from within Unity and edited their dimensions to make them look like buildings. I kept adding on blocks and buildings, changing their shapes and sizes until I was happy with the overall look and feeling of the environment.

Positioning the Buildings and Floors in Unity.

Once I was satisfied with the positioning of the different objects I thought I would edit the lighting and make it appear as though it was a thematic night scene, only illuminated by street lights and signs. At this stage, many of these aesthetic decisions are not particularly significant, because the most important part of this prototype is to showcase the functionality of the mechanics. Anything else is there to make it a bit more aesthetically pleasing for anyone testing the prototype. With this in mind, I decided to make the lighting seem native to the environment, as though it was coming from flickering lights onto the buildings. That is why I have included a series of Point Lights with different Range and Intensity settings scattered throughout the street. Additionally, these lights have slightly different colors, ranging from pinks to purples and blues. This results in a very beautiful mix of color that gives the environment a distinct nighttime feeling and is reminiscent of neon signs and highlights. Once I was happy with how the lighting tuned out, I directed my attention to the Buildings, and made a few materials to color them in and make them fit into the rest of the scene. What’s more is that I thought it would look even better if I were to add an appropriate Sky Box, so I picked up a free one from the Unity Asset Store.

Overlap of the Point Lights’s Range, which produces interesting pleasing color mixes.

Solving Axes Rotation and Scaling Problems

Once I was happy with the aesthetics of this prototype, I thought it would be nice to replace the current tablet-shaped model with the 3D Model I was working on during Week 8: Intro to Modelling with Blender. However, that could have gone a lot smoother than it did. When I added the model to the project, its axes from Blender did not match the conventions used in Unity, which resulted in the model appearing to lay down. This problem tested my spacial orientation and my capabilities of accurately estimating rotation and after a series of failed attempts, Google Searches, and a series of questions for James, I managed to find the fix. In order for a model from Blender to stand up straight and behave as expected, the model needs to be turned on its X-Axis at 90 degrees. Once this fix was implemented in Blender, the model worked as expected in Unity. In addition to the issue with the axes, there was a minor scaling issue in Unity, which made the Range Indicator grow exponentially in size. The problem was that the Unity scale measurements did not correspond to those in Blender. As the Range Indicator is parented to the Player Model, and the Player Model was rather scaled up after the import in Unity, the Range Indicator also grew proportionately. This fix was rather easy and all it required me to do was to downscale the model in Blender by the appropriate amount. Once that was done, the model was imported into Unity once again and the Range Indicator appeared as expected. Overall, importing 3D Models from Blender into Unity had its intricacies, however, all problems were solved with the mere configurations in the 3D Modelling Software. Additionally, this was a valuable learning experience, because now I know what edits I would need to make when I am importing future models into the project.

Some of my failed attempts at trying to solve the rotation issue in Unity.

The Finished Prototype

After these aesthetic changes and after fixing the issues with Axis Rotation and Scaling, a new NavMesh was baked, and the prototype was tested. I was happy to discover that there were no further issues with it and that all of the aesthetic and environmental changes ran smoothly. I was a bit concerned that the player and the enemies would blend into the environment and would be difficult to spot, however, upon running the prototype, they seemed easily distinguishable from everything else. I created a series of different materials to add onto all of the separate models into this prototype, some of which emitted luminosity to stand out even further, such as the Enemies and the Player Model. A detailed video of the prototype in its complete state with all of the environmental details and functioning mechanics has been provided below. The full source code, scripts, materials, and assets can be reviewed in the Unity Project.

Week 8: Prototyping Abilities in Unity by Valzorra

Having crafted a basic system for the camera and movement of this prototype, I thought it was now time to introduce some of the fun abilities that would help players maneuver through the environment. At this stage, I had a very rough idea of what I wanted those abilities to be based on some initial idea generation in Project Proposal 4, As It Lies. I felt the strongest about Teleportation as it would give players mobility and flexibility and about Electrocution as it is a damage-dealing ability that would help players confront any threats. I would like to note that these have not yet been set in stone and could be amended or removed as the design and development process progresses. Additionally, I would also like to reiterate that the work described below has been a collaborative effort between James and myself and that this prototype would not be possible without his help and guidance.

Range Indication and Teleportation

The very first ability I wanted to try my hand at was the Teleportation Ability. The exact methodology of how this power would work has been described in detail in Project Proposal 4 in one of my storyboards within that post. However, to briefly summarize, once the player has selected that ability, they will be presented with an indicator of their range in the form of a circle around them. The player would then be able to click anywhere within the Range Circle to select a target location, and after they have made their selection, they would be instantly teleported there. There were a few problems to solve within this description, the first of which was to figure out how to best implement the Range Circle Indicator, which would be used for a series of other abilities as well. I knew what I was going for, which was ideally a large circle around the player, which would give them a clear indication of where their abilities stretch up to. Additionally, the Range Indicator needed to appear only as players are about to perform an Ability and had to disappear and reset as soon as the ability has been executed. That way, players would not have circles all over their screens without necessity. A terrific example of the type of indicator I wanted is constantly used throughout League of Legends as shown below.

League of Legends Range Indicator

For my own prototype, the Range Indicator was handled through the use of a very basic cylinder, scaled to X: 1, Y:0.0001, and Z: 1, making it as close to a two-dimensional circle as possible. That Cylinder was then placed straight on top of the Player, keeping them in the center. The Cylinder was then parented to the Player, which meant that as the Player moved, so would the Ranged Indicator. Additionally, in order to see the scene clearly, a Semi-Transparent Material was added to the Range Indicator with the transparency set to 50 out of 255. At this stage, I had a very simple environment and a Player character with a large semi-transparent circle on top of their head, meaning I was ready to actually make the Range Indicator work. The system for it functions in a similar but slightly more intricate manner to the way Player Movement is handled as described in Week 8: Prototyping the Camera and Movement in Unity.

This is how the Range Indicator appears in the prototype for Teleportation.

This is how the Range Indicator appears in the prototype for Teleportation.

The first step in the process was to indicate what the maximum range of Teleportation would actually be, which was determined by a simple float. For the purposes of this prototype, the value has been arbitrarily set to 15. The next step was to ensure that the Range Indicator would only be displayed when the Teleportation was actually used. As the Range Indicator would only really be needed if an ability has been activated, its Mesh Renderer was disabled in Unity for all other general purposes, making it invisible to the user. The only occasion on which the Mesh Renderer is enabled through code, is when the player presses down any keys associated with the activation of powers. For the purposes of this prototype, I have set it up so that pressing T activates Teleportation. The dice rolling mechanic will be implemented at a later point. Once the Mesh Renderer is enabled, the other important aspect of displaying the Range Indicator is ensuring that the Circle resizes itself according to the range of each ability as indicated by the associated variables. To do that, a line of code has been implemented, which states that if the Current Power is Teleportation, then the Range Indicator will be scaled in accordance with the maxTeleportRange variable. This is basically how the Range Indicator is handled within this prototype not only for Teleportation, but for all of the abilities that would need it. Therefore, the entire system for displaying the Range Indicator has been compacted in a switch statement as showcased below.

void ShowRangeOfPower() {
        switch(currentPower) {
            case "TELEPORT":
                //Enabling the Mesh Renderer
                rangeIndicator.GetComponent<MeshRenderer>().enabled = true;
                //Scaling the Range Indicator accoring to predetermined variables
                rangeIndicator.transform.localScale =
                new Vector3(maxTeleportRange, 0.01f, maxTeleportRange);
                break;
            case "ELECTROCUTE":
                rangeIndicator.GetComponent<MeshRenderer>().enabled = true;
                rangeIndicator.transform.localScale =
                new Vector3(maxElectrocuteRange, 0.01f, maxElectrocuteRange);
                break;
            //If no powers are selected, the Meah Renderer is Disabled
            default:
                rangeIndicator.GetComponent<MeshRenderer>().enabled = false;
                rangeIndicator.transform.localScale =
                new Vector3(1f, 0.01f, 1f);
                break;
        }

After the algorithm for the Range Indication had been sorted, it was time to code the Teleportation itself, which was a relatively straightforward process. The function works by casting a Ray from the Main Camera directly onto a location in the environment selected by the player. Just as with Walking, the Player can select a target location by pressing the Left Mouse Button. The function then checks whether the the target location is within the predetermined Teleportation Range and whether it is on a Walkable surface as indicated by our NavMesh. All floors within this testing environment have been marked as Walkable and if the player were to click anywhere else to move, such as on a building or outside of the environment, then the Player Character will be taken to the closest point to their selection. If the target location answers to both of those conditions, then the Player Game Object will be Warped to that point. The last bit of that function simply states that once the Teleportation is completed, then currentPower variable goes back to Null, thus resetting the whole process. The Teleportation function used in the prototype is displayed below.

 void Teleport() {
        RaycastHit h; 
        if(Physics.Raycast(Camera.main.ScreenPointToRay
                          (Input.mousePosition),out h, 100f)) {
            //If the Player Selects a location in Range and on a Walkable area
            if(Mathf.Abs((h.point - transform.position).magnitude)
              <= maxTeleportRange && h.collider.gameObject.layer == 9) {
                nAgent.Warp(h.point);
            }
        }
        currentPower = "NULL";
    }

That’s the basic premise of how both the Range Indicator and the Teleportation Ability work. The player can move freely within the environment and once the press T, a large circle will appear around them. If the player clicks on a surface within the environment that is also within the Range indication with the Left Mouse Button, then the player will be instantly teleported to that location. Currently there is no cool-down of any kind on the Teleportation, which does make it kind of fun to play around with. Below I have attached a few screenshots to display how the Teleportation Mechanic works in the prototype, and a video will be available in future blog posts.

Initial Phase of Teleportation: The Range Indicator appears in front of the player, allowing them to select a location.

Initial Phase of Teleportation: The Range Indicator appears in front of the player, allowing them to select a location.

Final Phase of Teleportation: Once a selection has been made, the player is transported there instantly.

Final Phase of Teleportation: Once a selection has been made, the player is transported there instantly.

Electrocution

Now that the Teleportation mechanic had been created and fully functional, James and I thought we would move on to Electrocution as it is the only damage-dealing ability in the game, making it rather significant. The Electrocution mechanic works by allowing the player to select an enemy within a certain range. Once an enemy has been selected they will take a certain amount of damage. If that initial enemy has any number of other enemies surrounding it within a certain range, then those secondary enemies will also take damage. In a sense, it is a strategic chaining mechanic meant to represent electricity going through enemies. The first step in this process was to create a list that would contain all of the Enemies, which would be affected by the Electrocution. Then, the algorithm finds the first enemy that would be affected by checking whether the player has selected a target marked as Enemy and whether that target is in range. If the selected enemy answers to both of those conditions, then it is added to the newly created list of Enemies Affected. The player selects the first target by clicking on it with the Left Mouse Button, and a Ray from the camera locates the selection much like with Teleportation.

After the first enemy has been located and added to the List, then the script searches for other enemies in range that would also be affected by the Electrocution. To begin with, a check is performed to see whether the List of Enemies Hit is empty or not. If the List is not empty, then an Overlap Sphere Collider is placed over the existing enemy within that List. The sphere’s radius is equal to a predetermined maximum range for the Electrocution. The next check performed is to see whether or not there are any other enemies within the Overlap Sphere Collider. If there are, then those enemies are also added to the List of Enemies Hit. Through this method, we can get all of the enemies that would be affected by the Electrocution. After this list has been filled, Damage must be applied to the Affected Targets. For the purposes of this prototype, a very simple check is executes, which simply states that if an enemy is within the Enemies Hit List, then that enemy will be destroyed. That’s the overall logic behind how the Electrocution Script works and the code for it can be reviewed below. Images of the visual process within Unity have also been included.

 void Electrocute() {
        GetComponent<PlayerMove> ().enabled = false;
        nAgent.SetDestination (transform.position);
        RaycastHit h;
        List<GameObject> enemiesHit = new List<GameObject>();
        //Get Initial Victim
        if (Physics.Raycast(Camera.main.ScreenPointToRay
                           (Input.mousePosition), out h, 100f)) {
            if (Mathf.Abs((h.point - transform.position).magnitude) 
            <= maxElectrocuteRange && h.collider.gameObject.layer == 10) {
                enemiesHit.Add(h.collider.gameObject);
            }
        }
        //Find next victims
        if(enemiesHit.Count > 0) {
            Collider[] nextVictims = 
            Physics.OverlapSphere(enemiesHit[0].transform.position,
                                 maxElectrocuteRange/2f);
            foreach (Collider c in nextVictims) {
                if(c.gameObject.layer == 10) {
                    enemiesHit.Add(c.gameObject);
                }
            }
        }
        //Visual Effect
        for(int i = enemiesHit.Count - 1; i >= 0; i--) {
            if (enemiesHit [i].GetComponent<LineRenderer> ().Equals (null)) {
                enemiesHit[i].AddComponent<LineRenderer>();
            }
            enemiesHit [i].GetComponent<LineRenderer> ().positionCount = 2;
            enemiesHit [i].GetComponent<LineRenderer> ().material = 
            Resources.Load<Material> ("Materials/lightning");
            enemiesHit [i].GetComponent<LineRenderer> ().startWidth = 0.2f;
            enemiesHit [i].GetComponent<LineRenderer> ().endWidth = 0.2f;
            enemiesHit [i].GetComponent<LineRenderer> ().startColor = Color.cyan;
            enemiesHit [i].GetComponent<LineRenderer> ().endColor = Color.cyan;
            if (i == 0) {
                enemiesHit [i].GetComponent<LineRenderer> ().SetPosition 
                (0, enemiesHit [0].transform.position);
                enemiesHit [i].GetComponent<LineRenderer> ().SetPosition 
                (1, transform.position);
            } else {
                enemiesHit [i].GetComponent<LineRenderer> ().SetPosition 
                (0, enemiesHit [i].transform.position);
                enemiesHit [i].GetComponent<LineRenderer> ().SetPosition 
                (1, enemiesHit [0].transform.position);
            }
        }
        //Apply damage
        foreach (GameObject enemy in enemiesHit) {
            enemy.GetComponent<Renderer>().material.color = Color.blue;
            Destroy(enemy, 1f);
        }
        currentPower = "NULL";
        GetComponent<PlayerMove> ().enabled = true;
    }
Initial state of Electrocution: The Player has activated the ability and can now choose a target.

Initial state of Electrocution: The Player has activated the ability and can now choose a target.

Middle state of Electrocution: The Player has selected the only target in range and the damage has been distributed to the enemies surrounding the initial target.

Middle state of Electrocution: The Player has selected the only target in range and the damage has been distributed to the enemies surrounding the initial target.

Final state of Electrocution: The damage has now been dealt and all enemies are destroyed.

Final state of Electrocution: The damage has now been dealt and all enemies are destroyed.

Reflection and Feedback

Overall, I really enjoyed working on these mechanics with James, because of how fun they seemed to me even at the prototyping stage. Because there were no cool-downs to these abilities at this stage, they could be used in combination with each other. For example, I found it quite entertaining to use Teleportation to get in range of the enemies and to then use Electrocution to defeat them, all in a manner of seconds. I think that with the addition of new abilities and their refinement, even more fun combinations will be possible. In terms of challenges, I thought that the Electrocution mechanic was rather tricky, especially because it was quite difficult to actually visualize the effect. James and I tied to apply some sort of texture as opposed to a single colored Line Renderer, however, we did not have much success. This indicates that I would have to do some more research on how one achieves effects of Lightning that can be controlled. And although this is just a simple prototype, I would like to refine the Range Indicator and make it a bit more intuitive. The main problem with it for now is that it has to stay on top of the Player’s head, because any other position results in it colliding with the environment, which can look quite broken. However, these problems may end up finding their solutions in Semester 2, because there is still quite a bit of design work to do for this Semester. Nonetheless, I am really excited about what we have so far, and I look forward to developing it further.

IMG_2269.JPG

After a long week of prototyping we had our Formative Feedback Session with Adam on the Friday of Week 8. At that point, I was relatively up to date on what I had been doing so far, so thankfully he was able to see most of my work. We primarily talked about Project Proposal 4 or As It Lies and I briefly went over the main mechanics, the abilities, the dice rolling, and some elements of the world. Overall, Adam’s feedback was positive and he had some really good recommendations on where to take the project forward. For example, he recommended that I translate the game into a paper prototype, specifically for the dice-rolling mechanic and to ensure that it would actually be fun. Additionally, after seeing a 3D Model I was working on, he suggested that I create somewhat of a style guide to help narrow down the specific style of models and game overall. Adam also suggested that I should carefully consider what abilities to include in the game, as they shouldn’t seem random or boring. That’s why none of them have been set in stone yet, and I will be reworking some of the powers later on, possibly through testing with the paper prototype. Quite reasonably, Adam also expressed concerns about the size of the project as I am working alone. That’s why we agreed that I would create a timetable for the second semester in order to ensure that the game will be fully completed by the time it needs to be presented. I intend to start working on Adam’s recommendations as soon as next week, so hopefully I will have even more clarity and information by next Friday.

Week 8: Prototyping the Camera and Movement in Unity by Valzorra

In addition to some experimentation and practice with 3D Modelling in Blender, Week 8 was also dedicated to developing a basic prototype in Unity around Project Proposal 4. I should also mention that for now the working title for Project Proposal 4 is As It Lies, so I will be referring to the game with that title in all future documentation until it is changed. The first set of important decisions that needed to be made in regard to the digital prototype was how to the camera and movement within this game would work. To answer both of these questions, I needed to ask myself what is the actual goal of this game, what am I hoping to achieve, and what is the essential experience I want players to go through. For now, I knew I wanted this to be a problem-solving experience where players would have to navigate through an environment by using a series of special abilities. As previously described, the abilities would be determined by the roll of a set of dice and players would be able to control and change the roll to some extent. With that in mind, this game is very much a strategic experience, and I would not like it to be possible for users to punch their way through the level.

Camera Angle

Having narrowed down the overall experience I would like to create, I began analyzing different camera perspectives to try and figure out which one would be the most appropriate one. The first version I analysed was the standard over-the-shoulder or third person camera angle. These type of cameras are usually used when the character and how they act is rather significant to the overall experience, shifting the focus away from the environment. We explored a lovely version of this camera angle in one of our Tech Workshop Session, so I had a pretty good idea of what it would look like in the game. However, I decided against it, because a large part of the screen with a third person camera view is focused on the player’s character rather than on anything else. This would be very problematic because precision and accuracy would be rather important in this strategic problem-solving game. Additionally, the solutions to levels would be incorporated within the level design, which means that the environment would be a major focus of the game. Therefore, I knew straight away that third person was not the way to go for this project.

Example of a Third-Person Camera Angle in Skyrim. Nearly 1/3 of the screen is occupied by the character, which is not ideal for As It Lies, which needs to give you an accurate view of the surroundings.

Example of a Third-Person Camera Angle in Skyrim. Nearly 1/3 of the screen is occupied by the character, which is not ideal for As It Lies, which needs to give you an accurate view of the surroundings.

Since I had established that the layout of the level would be the focus of this game, I started thinking about the potential of a first-person camera angle. First-Person Camera Angles display the game through the eyes of the protagonist, dedicating the entirety of the screen to the environment and the events going on in it. In theory, this sounds perfect for As It Lies, as it will enable players to look at their surroundings carefully, to analyse them, and to figure out how to maneuver their way through. However, even though this is closer to what I would ideally want for the game, it does not focus as much on the strategic and planning elements as much as it could. What is the most crucial about this game is the level layout and the careful positioning of separate abilities. As nice as a first-person camera would be, it does not allow for that careful strategic planning of using your powers. What’s more is that upon further investigation, I discovered that if As It Lies were in first-person, it would echo a series of other games in the genre more than I would like, namely Dishonored. What I want to avoid more than anything else is re-skinning a preexisting game, as that would make the exciting dice-rolling mechanic fade. Therefore, I had to take a look at other options.

As fond as I am of the First-Person Camera Angle, it is not appropriate for As It Lies, because it neglects the strategic elements I want to convey and it makes the game too similar to what’s on the market.

As fond as I am of the First-Person Camera Angle, it is not appropriate for As It Lies, because it neglects the strategic elements I want to convey and it makes the game too similar to what’s on the market.

After taking a look at those two options and realizing they would not work, I began analyzing a Top-Down or Isometric Camera Angle. Top-Down and Isometric Camera Angles places the player above the main action and scenes, often giving them a bird’s eye view of what’s going on. This wide oversight of an area is the most precise and accurate way to make strategic decisions about the environment. This gives the player complete and total control over what is going on in the scene allowing them to make the best possible judgement on how to solve the situation they have been placed in. The only problem with a Top-Down/Isometric Perspective is that is detaches the player from the events, thus making it more difficult to establish an emotional connection. However, the main goal of As It Lies is to provide an exciting experience with environmental puzzles all wrapped up in the context of an exciting world and story. Therefore, as long as players are having fun, emotional attachment to the game is not a priority.

I would like to take this opportunity that the Camera Angle of As It Lies is closest to Top-Down/Isometric, but would likely be a mix between that and the General Third Person View. This combination would still provide enough flexibly for strategy, but would help the player connect with the protagonist and events that are going on more-so than a pure top-down view. Additionally, this would give me more flexibility as I could chose where to lock the camera based on the level and I would not be confined to solid view that’s always straightly vertical to the ground. The closest example I can think of would be the League of Legends Camera System, which is locked into the same position, oftentimes onto the player and follows them as they move. The League of Legends camera system allows for careful strategic decisions and enables players to work together and see everything that’s going on in the scene. For more on Camera Angles, have a look at this fantastic blog post I found on Gamasutra.

A camera angle similar to the one in League of Legends would be ideal for As It Lies.

A camera angle similar to the one in League of Legends would be ideal for As It Lies.

Creating the Prototype and Movement

After I had made my decision about what Camera Angle would work best for As It Lies, the way the player would move in the environment became very straight-forward. Traditionally, Top-Down and Semi-Top-Down Camera Angles are accompanied by a mouse-click system for movement. Therefore, at this stage I knew that I wanted the game to have a Top-Down Camera View, similar to League of Legends in terms of angle, and that the player would move through the environment by using their mouse to click on a target location. Now that I had come to those conclusions, it was time to actually make a prototype in Unity that would showcase how it all works. I would like to note that as I am not a very experienced programmer, I had quite a bit of help from James in the creation of this prototype both during our Tech Workshop Sessions and beyond. Therefore, anything you see from here on out in Unity has been a collaborative effort between the two of us.

To my surprise, crafting a locked Top-Down Camera that would follow the player is actually quite easy to do. The first step of this process was to position the camera adequately, so that it fully shows everything that’s going on in our testing environment. For the purposes of this prototype the Camera was locked in a relatively arbitrary position, above the testing environment and player, in such a way that it would display them efficiently. After that, a basic Camera Move script was created and the first thing that script does is to locate the Game Object in the Scene tagged as “Player“, which in this case is a basic cylinder. After the Player has been located, the script takes into account any changes in the player’s position according to the coordinate system. After those changes have been calculated and assessed, they are applied to the Camera in the same manner, causing the two objects to move simultaneously. That way, the camera is constantly looking at the player from a predetermined angle and is moving along to the actions of the player. Below I have attached a few screenshots of the scene in Unity and the code for the Camera Movement as an image and in text format.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMove : MonoBehaviour {
    private GameObject player;
    private Vector3 offset;
    void Start () {
        player = GameObject.Find("Player");
        offset = player.transform.position - transform.position;
    }
    void LateUpdate () {
        MoveCamera();
    }
    void MoveCamera() {
        transform.position = player.transform.position - offset;
        transform.LookAt(player.transform);
    }
}

An example of how the Camera View Point is directly looking at the player. If they were to move, the Camera would directly follow the player, always keeping them in the center of the image.

Programming the Player Movement Script was slightly more challenging as it involved moving the character by mouse click rather than more conventional means such as a controller or keyboard buttons. First of all, I needed to do some work with Unity to determine the areas that could be walked over in this environment. This meant that I would have to bake a Navigation Mesh to indicate that the three green planes on the screen are Walkable Objects. Once that was created, I also needed to indicate which Game Object was the Player. Therefore, I tagged my basic Cylinder as “Player“ and proceeded to attach a Box Collider and a NavMesh Agent to that Cylinder. These Components in combination with the baked NavMesh are what would make the Cylinder move over this very basic environment. Both the Box Collider and the NavMesh Agent have not had any of their default settings altered. Now, with all of those Unity bits and pieces sorted, I could get down to the actual code. The Player Move Script works by saying that if the player presses the Right Mouse Button onto a Walkable part of the environment, then a Ray will be cast from the Camera to the location the Mouse Cursor is directly over. That way, once the player clicks on a part of the environment, then they will be automatically moved toward the location where the mouse was clicked at a predetermined speed. I have attached the code for the Player Move script below.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class PlayerMove : MonoBehaviour {
    private NavMeshAgent nAgent;
    private float currentSpeed;
    void Start() {
        nAgent = GetComponent<NavMeshAgent>();
        currentSpeed = nAgent.speed;
    }
    void Update() {
        GetPlayerInput();
    }
    void GetPlayerInput() {
        if(Input.GetMouseButtonDown(1)) {
            MoveToClick();
        }
    }
    void MoveToClick() {
        nAgent.speed = 0f;
        RaycastHit h;
        if (Physics.Raycast (Camera.main.ScreenPointToRay
                            (Input.mousePosition), out h, 100f)) {
            nAgent.SetDestination(h.point);
            nAgent.speed = currentSpeed;
        }
    }
}

Thoughts and Reflection

These were the first of many scripts to come. James and I designed and crafted the Camera Movement System and the Player Movement System, which will be the building blocks of the entire project. Overall, the process for these two scripts was rather smooth and James and I did not have too much trouble making decisions in regard to them. I did wonder for the longest time whether a first person or a top-down camera perspective would be ideal for this game. However, after seeing the prototype with the top-down point of view, I know we made the right decision, as this perspective accentuates the strategic elements of As It Lies. So far, I think this has been a terrific start to the prototyping process and I look forward to writing more code and designing the algorithms for the abilities, dice rolling and so on.

Week 6: Exploring Ideas and Mechanics by Valzorra

Idea Generation

We have officially entered the Phase 3, the first phase focused on actually building our ideas and creating a variety of prototypes for them. Before, I could start crafting anything, I needed to come up with a sufficient number of potential projects to work on. I already had a few ideas floating around, but this was the perfect time to actually put all of them onto paper and hopefully to come up with a few additional good ones. To do this, I decided to use the Lotus Diagram for Idea Generation, as it maintains ideas rather focused around a broader central concept and the method is also very efficient at forcing me to come up with about 70 concepts. I have attached the Lotus Diagram I came up with below, with the words Chance, Probability, and Maths in the centre.

The diagram itself looks rather intimidating due to the large number of ideas and writing on it, however, after examining everything I had come up with, I decided to focus on a few points that really inspired me. The major idea categories I chose from the centre were to use dice to determine the outcome of a situation and to then change those results, to find a better way for visualising complex data, to use the Reimann-Zeta Function as inspiration for a story, to generate an interactive world through mathematical formulas, and to create advanced and sophisticated AI players could interact with. Below I have attached a series of images featuring the ideas I liked and felt inspired to work on, which have all been highlighted in pink.

IMG_0508(2).PNG

After this process of idea generation, I felt quite happy with some of the projects that came to mind and was eager to start working on them as soon as possible. Many of the ideas can be combined, and turned into a more complex and exciting project, which is what I have attempted to do. I will detail each of these in the next couple of weeks in a series of project proposals that will explain my thought process, the connection to my research, and the project itself in a lot more detail. For now, the four major ideas that I would like to dive into are:

  1. A new method for three-dimensional Data Visualisation: I believe I may have figured out a way to represent complex data through the use of three-dimensional solids. This could be used as both an educational and diagnostic tool.

  2. A game environment generated by the players as they move and interact with it it. This would be an exponentially more chaotic experience that would take player actions, feed them into mathematical formulas and functions, and change the environment as they move along. By the end, each player would have created a unique world.

  3. An experience featuring sophisticated AI and based on Edgar Allan Poe’s The Raven. This experience would have predictive and potentially emotive NPCs that would convey a sense of fear in the player, which can be fun and thrilling in itself.

  4. In a world where each individual has one of a set number of special abilities, you play as a character who has managed to figure out how to use all seven of them. You were naturally born with Telekinesis and have infused a standard six-sided dice with the rest. This allows you to control how the dice rolls, giving you power over chance. Additionally, this could incorporate a story loosely based on what may happen if a solution to the Reimann-Zeta function was discovered.

Tech Workshop

We began the Tuesday of Week 6 with an exciting exploration of how Calculus and a bit of Trigonometry can be used in video games to create smooth movement and over the shoulder cameras. I found James’s explanation really straightforward and easy to understand and for the most part I didn’t really have any issues following along. I quite enjoyed this exploration because it showed a very handy practical application of the things we have been looking at over the past few weeks. Additionally, this algorithm and the logic behind it would work equally well in any game engine, because it’s based on mathematics rather than on in-built settings. What’s more is that this is a very elegant mathematical methodology for handling this issue in games design, and I look forward to applying it in some of my future projects. I would be greatly interested in looking and other such applications of Calculus within video games, so hopefully we will be examining more of the sort in the coming weeks. I have attached the notes from that explanation below.

FullSizeRender.jpg

After the lecture on a practical application for Calculus within video games, we entered our Building the World session. James took the time to have one to one sessions with each separate team and to try and help us with our design process. I was one of the first to have a chat with him and as I was interested in developing fun mechanics players can mess around with, James suggested I create a few pieces similar to storyboards, which would describe how those mechanics would work. I decided to start working on a fun idea I had early in this week, which involved a variety of special abilities the player would be able to take advantage of. The complete idea will be described and documented over the course of the next couple of weeks. I also took this opportunity to expand upon the mechanics I was developing last week and to make the illustrations a little nicer and more clear. Additionally, my work from last week (Week 5: Just for Fun) featured a few different abilities in combination with each other, whereas here, I have showcased each one separately.

An environmental sketch to showcase the mechanics onto.

An environmental sketch to showcase the mechanics onto.

The slideshow below described a teleportation mechanics, whereby the player can choose a position within a certain range and be instantly teleported to that location. Another option that may make the mechanic a bit simpler would be to simply teleport the player a set distance in the direction the camera is looking at. This would make the teleportation mechanic less strategic, however, it may simplify things a bit if there is ever a risk of making the game too complex. Additionally, it would be interesting to consider what would happen if a player was to teleport directly on top of an enemy. So far, I believe they will simply not be given the option to do so, but it may be fun if an enemy instantaneously combusts when they are teleported on top of. All food for thought.

A defensive shield would function almost entirely as expected. The player would me a lot less susceptible to damage and enemy projectiles would not necessarily be able to collide with them. I envision the shield as a armour-like material, almost like shards, which would wrap itself around the player and protect them from any danger. The shield would have a relatively long duration and it would last for a certain amount of time. Another option would be to make the shield last onto the player until it is broken by enemies, however, making it based on a timer may be a bit easier to implement and manage.

IMG_0489.PNG

The last ability I was able work on during our Building the World session was a blinding beam of light that would essentially stun enemies. Initially, I thought that this beam could essentially rise above the ground and shine brightly, blinding enemies with it’s light. The player would be able to pick a target location to place the beam over that location. All enemies within it’s range would be unable to see for a set duration, however, that does not necessarily mean they would not be able to attack. This ability could be a double edged sword as on one side it stuns enemies, but on the other, it definitely draws attention to the player. I may make another version of this in the future as I am not incredibly pleased with it just yet, but nonetheless, so far so good.

Week 5: Just for Fun by Valzorra

Tech Workshop

Tech Workshop and Building the World was a bit slower this week, as we were having one to ones with James and developing our personal prototypes and little mechanics we may want to work on. In the beginning of the session, while James was attending to other students, I took the opportunity to catch up on some blog posts I had been meaning to do. Once it was my turn for a one to one, James and I discussed what I could focus on for the rest of the day. I expressed interest in the idea of a player having a set of abilities, with the order of the abilities being predetermined. This would mean that the player would have to execute their abilities one after the other based on that predetermined order. At this point James turned around and said that it would be rather premature to begin working on any code, and that instead I should come up with some concept sketches of how these mechanics might work. This was rather useful advice, because it meant I could take the time to properly plan out what the mechanics will do and what they will look like. For the rest of the day I kept drawing a few concept pieces of how they may play out. At this stage, I am not certain whether I will use these abilities for a game, however, I do believe they look kind promising and fun. My work from the Tuesday is attached below. The specific abilities I wanted to explore were a Blinding Light Beam (Number 3), a Defensive Shield (Number 2), and a Teleportation Ability (Number 1).

Friday Presentations

The Friday of Week 5 marked the end of Phase 2, and consequently we were all asked to present the exciting and in-depth research we had done up until that point. This time round the whole process was a lot smoother as we barely ran over time and there were very few technical issues throughout the day. This made everything a lot less draining than last time, and overall I felt like I had more energy to give constructive feedback to most presenters. When it came down to my own presentation, I had a lot of research to go over in a very short period of time. My main goal was to give an adequate summary of all of the work I had done, which unfortunately meant that I could not do justice to the topics I went over. Almost all of them could do with an entire presentation by themselves, however, there is simply no time for that. In terms of feedback, Adam pointed out that the section on Dimension is rather different from the rest of the presentation and that the concepts I described regarding it have been explored in one way or another. Additionally, he recommended that I focus any further efforts in the direction of Data Visualisation or Chance and Probability rather than on the other two sub-sections of Mathematics. Although I believe that the idea of higher dimensions can be explored more efficiently through the medium of video games, I agree with Adam’s assessment that I should avoid focusing on that concept. At that point of the day I decided that I will focus primarily on Data Visualisation and Probability. I also really appreciated the feedback from my course mates as many of them pointed out a few fantastic resources for generative art and other media that relates to the subject. For ease of reference, I have attached my presentation and feedback below.

Later on in the afternoon, I had a one to one discussion with Adam about how to best proceed with work throughout Phase 3. We once again reiterated that I should stray away from working with Dimensions. After that, we debated whether it would be best to proceed with Data Visualisation or with Probability as a major focus. I am rather fond of both topics, so I did not mind developing ideas for both as they are rather interesting to me. At that stage Adam expressed concern than I may not be able to successfully turn the idea of Probability Manipulation into a viable game, at which point I realised I had misrepresented my intentions. I clarified that what I really wanted to do this year was to create a fun and exciting game that features elements of chance and probability simply for entertainment’s sake. What got me into gaming in the first place was the ability to lose myself into an immersive world and to embrace fun mechanics that made me feel joy. It is precisely the playful, yet challenging nature of video games that makes them so incredibly fun, and I just really wanted to work on a project that focuses on those elements of Games Design (for more on my realisation, refer to the first paragraph of Week 5: Game Research Document v0.1).

Once I clarified my intentions to Adam, he was incredibly supportive of the idea, and simply told me to go for it, and to make a fun game. This was a major relief and the dose of encouragement reminded me that I should be having fun throughout this process. There is no point in completely sucking the joy out of the creative process, killing myself working, and trying to solve problems that are simply not there. As has been pointed out on multiple occasions, this will be my last opportunity for a while to devote as much time to a game I want to design and develop. Therefore, there is no point in making this amazing opportunity a painful chore. Rather, I want this project to come from a place of love and passion, both for video games and for mathematics. With this new mindset, I am incredibly excited to begin ideating and to make prototypes for the best ideas I come up with. I am confident that the process will be a lot smoother and less stressful after this reflection.

Week 4: Markov Chains by Valzorra

Building the World

After our introduction to matrices from last week, which can be found in Week 3: The Matrix, we moved on to the rather fascinating Markov Chains in our Building the World Session. In short, Markov Chains express transitions from one state to another based on certain probabilities. They answer the question, after a certain event has occurred, what is the next most likely event to take place? Markov Chains are all about predictions based on what has already happened and on a set of actions and events we can choose from. This ties in quite nicely with our previous work on Chance and Probability with James, as well as my own research into that field of mathematics, which can be found in Week 3: Research on Mathematics. This transitioning data is represented in the form of matrices, which is why it was crucial to have an understanding of what a matrix is before moving on to the Markov Chains. Traditionally, Markov Chains have been utilised in the field of Marketing as they provide an excellent way of structuring data and making estimations about the success of certain marketing strategies, which I will be taking a closer look at shortly.

maxresdefault.jpg

As games designers, Markov Chains can be rather fascinating as they are key components in making NPCs and AI with individual personalities and changing behaviours based on those personalities. For example, if an enemy NPC has been wounded by the player then a tank NPC might choose to engage, while a more squishy one may opt to gain range and attack from afar. The same event occurs, which is that an NPC has been wounded, however, responses vary and behaviours change based on what data is within our State and Transition Matrices. Through these values and probabilities we have the opportunity to create an exciting and unique gameplay experience, which would excite players as it would be difficult to predict and take advantage of. In the session itself, we calculated how the Safety Index of certain sniper positions would change, if an NPC were to shoot from one. This is another example of how gameplay and AI within video games could gain variety and become more fun, making better and more unpredictable decisions about how to react to players. Below I have attached my work on Markov Chains from the class, their basic definitions and examples of how they operate.

Markov1.JPG
Markov2.JPG
Exploration of Markov Chains through analysis of the Pokemon Battle System.

Exploration of Markov Chains through analysis of the Pokemon Battle System.

In addition to dissecting the example related to sniper positioning, we also took a look at the popular Pokemon Battle System and came up with our own Pokemon, exploring how they would react based on certain probabilities we inputted. After crunching the numbers, we realised that if our Pokemon starts off with their strongest attacks, then based on the probabilities we chose together, they are most likely to attack with the same ability again. Now, this opens up a variety of possibilities in terms of design, because we have the option of estimate all of our probabilities on paper and complete the entire design of a sophisticated AI, all without writing a line of code. This is absolutely amazing, because not only do Markov Chains allow us to make accurate predictions of probability based on data we input, but they also enable us to change and manipulate that data based on the results we desire. This is an exceptionally interesting idea to me, because it gives users the power to learn from their mistakes and to change data based on the results they would like without any excessively complicated or time-consuming processes.

Board Games with Dice can be entirely represented by Matrices and Markov Chains. What matters in those games is the current state of the board, which is then changed to the next state by the dice. The next state is entirely dependant on the current one.

Board Games with Dice can be entirely represented by Matrices and Markov Chains. What matters in those games is the current state of the board, which is then changed to the next state by the dice. The next state is entirely dependant on the current one.

After our detailed examination into Markov Chains and why they are freaking awesome, we proceeded to explore some more principles in Calculus. We had a brief overview of all of the principles and rules we had covered up until that point and then James proceeded to explain the wondrous and mystical powers of the number e or Euler’s Number. This is an irrational number, approximately equal to 2.7182818284590452353, that spans across multiple areas of mathematics. The reason e is such an amazing number is that it allows us to solve seemingly unsolvable mathematical problems. It offers a solution where none seem apparent, which makes it incredibly useful. Below I have attached my work in relation to this number and how we essentially proved its value.

Euler's Number.JPG
Euler's Number 2.JPG

Tech Workshop

After our Markov and Calculus extravaganza in the morning, we went over to Studio 16 for individual one to one sessions with James in relation to mechanics we may be interested in developing. As I am very much focused on Mathematics, Chance, and Probability, I was interested in how one could go about manipulating certain probabilities. I wondered if I had three standard six-sided die, A, B, and C, and if I threw them all one after the other, how could I go about changing the order in which the values appeared. For example, if I tossed a 1, another 1, and a 6, how could I manipulate my result to become in the order of 1, 6, and 1. The reason I was interested in this concept was primarily the idea of data and chance manipulation based on certain knowledge.

dice-gambling-1024x768-wallpaper.jpg

After James gave me a nice and clean method for achieving the task, I went to one of the computers to try and code it. However, as I was setting up, I realised that it would be a great exercise to try and craft my own random number generator to give me the values for my three die. Additionally, as this is Probability at its purest, I thought it would be an excellent application of my research on the topic and of the things we have covered in previous Tech Workshop sessions. For this piece of code, I referred to my handout on Linear Congregational Generation and applied the same method for obtaining a truly random number within a limit. The code, which I am happy to confirm does in fact work, is attached below. I should note that as the computer I was on did not have Unity installed, I coded this in an online compiler in C#. But anyway, who cares, the thing works!

using System;           
public class Program{

    //Getting the current time which will be used as our seed value
    public static String GetTimestamp(DateTime value){
        return value.ToString("ssffff");
    }
    public static void Main(){
        
        //Initialising variables
        string inputM;
        int x, m, s;
        
        //Inputting m
        Console.WriteLine("Enter Value for m: ");
        inputM = Console.ReadLine();
        m = Convert.ToInt32(inputM);
        
        //Ensuring m is greater than 0
        if (m<0){
            do{
                Console.WriteLine("The value of m must be greater than 0.
                Please enter a different value for m: ");
                inputM = Console.ReadLine();
                m = Convert.ToInt32(inputM);
            }while(m<0);
        };
        Console.WriteLine("Your value for m is {0} ", m);
        
        //Getting the seed value based on time
        String timeStamp = GetTimestamp(DateTime.Now);
        s = Convert.ToInt32(timeStamp);
        
        //Ensuring that s<m based on seconds;
        if (m<s){ 
            do{
            s = s/10;
            }while(m<s);
        };
        
        //Outputting the accurate seed value
        Console.WriteLine("Seconds right now: {0}", timeStamp);
        Console.WriteLine("The value of s is: {0}", s);
        
        //Arbitrarily choosing t and u
        Random rnd = new Random();
        int t = rnd.Next(0, m);
        int u = rnd.Next(0, m);
        
        //Outputting t and u
        Console.WriteLine("The value of t: {0}", t);
        Console.WriteLine("The value of u: {0}", u);
        
        //Calculating x
        x = ((t*s) + u)%m;
        Console.WriteLine("Your random number is: {0}", x);
        
    } 
}

Unfortunately, although I had successfully coded a random number generator based on the Linear Congregational Generation method, by the time I had finished this task the session had concluded, so I wasn’t able to incorporate the swapping mechanic fully. However, I did have the time to consider how to approach the process and what I intend to do is to simply add three random numbers from my generator in an array, and then swap the elements in the array to the desired positions based on the algorithm James showed me at the start of the session.

Thoughts and Reflection

I found the material we covered this Tuesday incredibly useful to my personal research into Mathematics and specifically Probability and Chance. I am fascinated by the idea of being able to make predictions of certain probabilities and then to be able to change the data in order to obtain the results we desire. This is an excellent method for manipulating chance and probability and an be extremely applicable not only in games design and AI, but also in fields such as Marketing and Training. Markov Chains have excessive power as they can essentially predict the future and all possible outcomes based on a set of collected data, which is absolutely fascinating to me. I’m also incredibly interested in figuring out how to actually visualise this data in a digestible format, which anyone could understand, even without the knowledge of matrices. More on Markov Chains and their applications will follow soon as a continuation of my research into this field of Mathematics.

Week 3: The Matrix by Valzorra

Tech Workshop and Building the World

Aside from the initial research in my four chosen themes, namely Poetry, Abstract Art, Geometry, and Mathematics, I also spend Week 3 attending our regularly scheduled workshops and lectures. This Tuesday during our morning Tech Workshop session, we dived deeper into Fundamental Calculus, exploring some more essential concepts such as the Product Rule, the Chain Rule, L’Hôpital’s  Theorem, and the Squeeze Theorem. For the most part, everything we covered made sense and connected quite nicely with the material from the previous weeks. I also quite appreciated having the proof for all of the theorems and rules covered as that was the way that the connection between all of these different principles was established for me. By using the definition of the derivative and other basic properties of functions and limits, we were able to establish why the Product Rule, the Chain Rule, and the Squeeze Theorem were in fact accurate. It was rather nice to see how the knowledge stacks up and how all of these elements are interconnected and thus allow for us to build up to more complex and exciting things. Possibly the most exciting part of the lesson to me was proving L’Hôpital’s Theorem geometrically by using the Squeeze Theorem, as that solution was rather visual, which tends to make more sense to me as a general rule. Overall, I’m excited to see where this journey through Calculus will eveturally take us and I look forward to applying some of principles in my practise, specifically when it comes to physics, movement, calculating trajectories, and more. Below I have attached my work and notes from our session.

IMG_0453.JPG
Notes from class, showing my work and progress for that session.

Notes from class, showing my work and progress for that session.

Matrices are essentially a way of managing data and the relationships between data.

After our session on Calculus we proceeded to the Building the World session, where we covered Matrices and basic operations one could do with them. Matrices are key to understand as they are essentially the building blocks of Markov Chains, which is what we are really interested in as games designers, but more on Markov Chains next week. For this class, we took a look at what matrices are, their basic definition, how one can add or subtract two matrices of equal rows and columns, how one can scale a matrix, and most interestingly how one can multiply two matrices. I found the majority of these operations quite straightforward as they did not go far beyond basic arithmetic, although I did take a couple of attempts to get a hang of the multiplication procedure. The process itself was not overly complex, but the first time I tried, I found myself losing track of which set of numbers I was on, which I reckon is probably an attention issue more that anything else. After I realised my first result was a bit off, I had another stab at it, and figured it out relatively quickly. Overall, I quite enjoyed learning about matrices as they are essentially a way of managing data and the relationships between data. Matrices can are used in computer graphics, managing computer-generated reflections and distortion effects, geometric transformations,  listing probabilities and outcomes of the same trial, and more. Below I have included my work on matrices from the sessions (including some excessive crossing out of errors).

FullSizeRender.jpg
FullSizeRender.jpg
Application of Matrices in Video Games for the creation of Reflection and Distortion Effects.

Application of Matrices in Video Games for the creation of Reflection and Distortion Effects.

Presenting the Themes

The Friday of Week 3 was predominately dedicated to the presentations of our four themes, where we were meant to give and receive feedback on which themes we found the most exciting. The process started off quite well and I felt quite enthusiastic about helping people out with resources they should look at and questions they may want to consider within their given topic. However, although the day started off rather smoothly, it was quite draining later on due to the large number of information presented and a series of technical issues throughout. Nonetheless, we marched forward and continuously gave feedback and voted on our favourite themes, obtaining a large documents with people’s thoughts on the subjects presented. When it came down to my own presentation, I was trying to fit a large amount of information on all themes into a reasonable time frame, so I ended up speaking mostly from a place of passion about the topics rather than from my predetermined script. I think I managed to fit the most important bits and pieces in and to show why these particular themes are so exciting, however the audience would be the best judge of that. Once my presentation was over, I took a look at the notes I received (both attached below) and was quite pleased with them as they gave me a series of links and potential research avenues, including a number of people to talk to about the topics.

When it comes to favourites, Geometry got the most love from the class, which I greatly appreciate as it is a very exciting visual and ma thematic field. However, although Geometry was the favourite topic of the class, I decided to focus my research on Mathematics because I am greatly interested in the field as a whole and I do not want to limit myself to that specific section of Maths. Mathematics in itself incorporates Geometry, however, it would also allow me to continue exploring the idea of Chance, Probability, and how one would go about manipulating and controlling them. I’m quite excited to dive deeper into these topics and hopefully, this will lead to exciting research avenues and the potential for some fantastic game ideas.

In addition to the discussion around everyone’s themes and chosen topics for further research, we had a rather useful workshop on the Friday, which gave us a method for focusing our research and coming up with large bodies of it in a relatively short amount of time by using prompts such as Colour, Shapes, and more. Richard and I took a look at the Colours of a variety of Habitats and filled the OneNote folder the class was working on with a series of exciting colour schemes from different parts of the world, which you can have a look at below. Overall, I thought this method of research is rather useful, especially when struggling to find a starting point or a focus. I am not certain I will apply it religiously to my own work as I have grown to research specific questions and find answers to them. However, if I am ever in a position where I can’t quite come up with a question or am feeling stuck in general, I will surely turn to these prompts and starting points. Overall, Friday was rather busy and draining, but also quite productive. Decisions have been made on where to next and from here on out it’s a matter of getting all of that research done. And so we beat on.

Week 2: Calculus and Cancer by Valzorra

Tech Workshop and Building the World

In addition to documenting all of my starting points and making decisions about which four themes to focus on, Week 2 was also devoted to some pretty awesome workshops. As usual, we had our Tech Workshop and Building the World sessions with James on Tuesday. During the first part of the day we took a closer look at the crucial A* algorithm, specifically how to translate the theory from Week 1 into code and some common design problems it raises. I was quite please to discover that although I did not feel very confident about it, my pseudo code for the A* algorithm from Week 1, was mostly on track with the actual solution. I was especially happy to find out that my approach of using the coordinate system to figure out what are the neighbouring nodes to a parent node was a valid method.

My favourite part from the morning session on Tuesday was exploring the geometric solution of how we check whether a node is accessible or not. I think I was particularly fond of it because it is a very elegant and mathematical way to go about solving a problem through the use of elementary formulas on the surface area of a polygon. Additionally, more so than any other issue we explored that day, it involved thinking outside of the box and it showed me that mathematics can be incredibly useful in solving design and optimisation problems. Overall, I was really pleased to have learned the A* algorithm and I will be sure to apply some of the problem solving methodologies we explored to my practice. I will be especially careful to use solid mathematical solutions to issues rather than Unity specific solutions, because if I learn how to efficiently problem-solve through maths, then I will be able to apply the knowledge to any programming language and game engine.

Tech1.JPG
Handwritten notes from the first part of Week 2’s Tech Workshop, showcasing the geometric solution to obstacle detection.

Handwritten notes from the first part of Week 2’s Tech Workshop, showcasing the geometric solution to obstacle detection.

After fully exploring the A* Algorithm we proceeded to go into some fundamental Calculus. As many of us were interested in advanced concepts and mechanics that could possibly feature in our FMPs, James felt it necessary to introduce/remind us of core Calculus as that field of mathematics is the backbone of a series of systems we are likely to use, for example particle systems. Additionally, knowing these fundamentals is more than likely to save us time as game developers, because calculus is incredibly applicable when it comes to solving unexpected problems.

The session itself was quite intense as we had a variety of material to go over. Within an hour we managed to cover functions, limits, slopes, derivatives, and the power rule along with its proof. Although it was tough at times, I really enjoyed being challenged and pushing myself to digest, and remember as much from the material as possible. Overall, I was quite happy that I did not really get lost throughout the session and managed to understand everything that was presented. I am looking forward to Week 3, when we are to continue our exploration of these basic principles.

Tech3.JPG
Handwritten notes from the Calculus portion of the Tech Workshop

Handwritten notes from the Calculus portion of the Tech Workshop

By the time we had finished our discussion on Calculus for the day, the Tech Workshop had finished and after lunch it was time for our Building the World Sessions. We continued our work on Probability and Chance, beginning with a few revision exercises on the material from last time. After we were done with that we had an exciting game of Craps and explored Probability Trees through it. What I found most interesting about the session was the idea of designers changing the probability of certain events. What’s even more exciting to me would be to give the player the opportunity to change the outcome of events based on these probabilities and thus to enhance their gameplay experience by giving them control under certain conditions. The idea of chance, control, and controlling chance is quite fascinating to me, and I believe it even touches on the famous faith against free will debate. Mathematics connects the dots.

BTW1.JPG
Notes from the Building the World Session and my attempts at crafting a Probability Tree. Even though, I arrived at a correct solution, I ended up making it more complicated than it need to be.

Notes from the Building the World Session and my attempts at crafting a Probability Tree. Even though, I arrived at a correct solution, I ended up making it more complicated than it need to be.

Friday Workshop: Simulation Theory

After a very challenging and productive session on the Tuesday, we had another workshop scheduled for the Friday of Week 2, delivered by Seth Giddings. The workshop and lecture centred around Simulation and Simulation Theory and how we should view and consider simulations as games designers. I did enjoy the presentation overall, however, my favourite part of the day was by far designing our own simulation in the form of a board game. Seth had purchased a series of inexpensive gossip-style magazines filled with the most ludicrous articles imaginable. We were to take these magazines and take advantage of them in our simulations, whether that was simply for the use of their imagery or as a form of inspiration and idea generation.

The magazine my team and I were working with.

The magazine my team and I were working with.

My team (Ella, Bernie, Dean, Fred, and Richard) and I grabbed one of the magazines purely arbitrarily and began exploring its pages. We were all undoubtedly convinced we had just witnessed the pinnacle of investigative journalism. The magazine was almost exclusively dedicated to lifestyle articles, primarily around weight loss, weight gain, and certain medication to alter weight. It featured a series of recipes, which were questionably healthy as well as the supposed latest fashion and interior design trends. Among the most noteworthy sections of the magazine was the Horoscope, whose author has surely been nominated for the Creative Writing Awards 2018 under the Superstitious Fiction section. All in all, the magazine was absolutely absurd, filled with strange and insensitive articles that promoted body alteration and unrealistic expectations.

Some of the horoscope pieces we used in the game as tokens.

Some of the horoscope pieces we used in the game as tokens.

However, by far the most insensitive article of all was one called “Thank you, Cancer“. It featured the story of a woman who had beaten caner and who was essentially grateful for her illness as it helped her achieve some of her long-term goals. The primary reason the team and I thought this article was incredibly insensitive was the title “Thank you, Cancer“ and the implication that this deadly illness is somehow the reason for those achievements. Additionally, the article completely fails to acknowledge that many are not as fortunate in their struggle against the disease and thus makes it appear as though their battles are not worth mentioning. As we were all so appalled by that piece of journalism, we decided to make a satirical simulation of what life with cancer would be like according to the article.

Ellla

The basic premise of our board game, titled “Thank you, Cancer“ after the article, was that each player must accomplish certain goals and check things off their bucket list, all within a limited amount of time before death. We created a circular board with special locations signifying the items on the bucket list. In order to have accomplished a certain goal, players needed to use a dice to move towards the designated space of that goal. If a player is to pass through all designated spaces and life goals, then they have ticked every item off of the bucket list and essentially win the game, knowing they can die happy with their cancer. If players were unable to go through all life goals within five turns, then they would lose and instantly die to the cancer. Additionally, there were spaces on the board that would award players with Healthy Food Tokens, which would add two additional turns, thus extending patient life. Finally, there are places on the board that would grant a Horoscope Token. Each Horoscope Token has a unique effect based on the text on the card. Those were the simple and straight-forward rules of “Thank you, Cancer“.

The finished board game “Thank you, Cancer“

The finished board game “Thank you, Cancer“

Upon attempting to play the game, players often found the odds stacked against their favour. Five turns were nowhere near enough to achieve all life goals and the addition of insta-kill cards in the Horoscope Section further decreased any chances of victory. However, this does fit in with the idea that the board game and simulation we designed was a satirical piece meant to mock the preposterous articles and viewpoints within the magazine. The entire magazine placed extraordinary emphasis on bucket lists and shallow life goals, which why we decided to take those ideas to the extreme and turn them into an essentially unbeatable game. Overall, I quite enjoyed working on the project as it was incredibly entertaining and it gave us the opportunity to get somewhat creative with the source material. I also appreciated the new knowledge around simulations Seth shared with us and I am especially fascinated in the idea of looking into simulations as a powerful training tool.

Week 1: A Welcome Return by Valzorra

It feels amazing to be back. I’ve been looking forward to starting Year 3 for the longest time and our first week back did not disappoint. Coming into the Launch Session on Monday, I was not fully sure what to expect, but I was itching to begin work. It was really helpful to hear about what is considered good Professional Practice as those tips and techniques would be useful throughout my design career, especially when establishing myself and applying for positions in different studios. Additionally, I was feeling a little lost when it came to designing my website, so it was great to have a few terrific examples of what an excellent online portfolio is. My main takeaway was that the work should be displayed front and centre, while the website itself should not be too busy, so as to not distract from the portfolio. Based on that section of the presentation, I have attempted to apply most of the tips regarding online portfolios onto this site.

What excited me most about the upcoming year from the entire Launch was likely the Brief itself. I found it quite helpful to have a deconstruction of the entire semester and what we would be doing week by week as that would allow me to make a more accurate working schedule. Although research and ideation is not necessarily my favourite part of the games design process, I understand it’s absolutely crucial towards creating a good game. Dozens of ideas need to be generated and analysed before it is even worth exploring any of them further. That’s one of the best ways to ensure that a designer is not investing too much time and effort into an idea that was not great to begin with. Therefore, it’s great to know that we will have as many weeks to figure out what topic we would like to explore and what themes we would like to incorporate within our games. Overall, Monday was quite busy, but also very productive as now we knew exactly what it was that needed to be done and how we are to proceed over the next few weeks.

Deconstruction of Semester I by Adam Procter

Deconstruction of Semester I by Adam Procter

Tech Workshop and Building the World

The Tuesday of Week 1 was centred around our first Tech Workshop and Building the World Sessions. I quite enjoyed James’s lecture on the A* Algorithm as it was very informative and made logical sense throughout. Additionally, the A* Algorithm has a wide range of applications, especially when it comes to movement and path-finding within video games. I did find it rather challenging to translate the A* Algorithm to pseudo code, however, I had a few solid attempts at it and I felt as though I did get at least close to the solution.

The very first page of my handwritten notes on Deconstructing the A* Algorithm

The very first page of my handwritten notes on Deconstructing the A* Algorithm

The main part of the lecture with details on the key formulae for this algorithm.

The main part of the lecture with details on the key formulae for this algorithm.

My attempt at pseudo code for the A* Algorithm.

My attempt at pseudo code for the A* Algorithm.

After digesting the A* Algorithm, we had our first Building The World Session that afternoon, which I found rather fascinating. We were exploring Linear Congregational Generation, the Percentile Mechanic, as well as the Binomial Distribution Formula, all elements related to Chance and Probability within games. I absolutely loved the idea that as designers we have a variety of methods to ensure true random chance and to calculate the probability of every outcome of a situation. This gives us sufficient control over player experiences and thus can help us ensure that they have a great play through, even when presented with elements of chance. It also opens up a series of possibilities when it comes to level design, environmental design, enemy positioning, and so much more as it gives us the option to introduce multiple solutions to a given problem within our games. Additionally, these formulas are also extremely useful in helping designers predict what players are most likely to do when presented with multiple possibilities of different chances. What interests me even more so is how players would react if they are presented with the opportunity to change the outcome of chance-based events and how that would influence game-play.

Hand-written notes from the Building the World Session.

Hand-written notes from the Building the World Session.

The example Rubi and I came up with featuring a changing weather system.

The example Rubi and I came up with featuring a changing weather system.

Designing the Website and Logo

Over the next few days I spent a substantial amount of time creating my website based on the methods we discussed that Monday. I went onto my chosen platform, Squarespace, and took a look at the array of templates they offer to get me started. Although they had a variety of options available, I went for Forte. Forte’s bold design showcases visuals beautifully with one massive central image, and then upon further inspection, users can view other similar work or pieces from the same project. I quite prefer this structure because it showcases the best pieces first, it stands out from other sites, and the layout is much more dynamic than Avenue, for example, which I felt echoes Instagram too closely. After choosing my template I then proceeded to gather my best pieces of art and photography in order to showcase them on the site. As I intend to make an individual page for each project under the Work section, I gathered these pieces into a collective Photography page and a collective Art page for all separate works that don’t fit into a dedicated project. I have yet to add a project page for DARE, the project I led in Semester 2 of Year 2, but I intend to do so soon. I am also really looking forward to filling this site with a variety of materials for my FMP.

These were some of the templates I considered when starting to create the website. I was tempted by Flatiron as well, however, I do not have enough work to make the best out of that template.

These were some of the templates I considered when starting to create the website. I was tempted by Flatiron as well, however, I do not have enough work to make the best out of that template.

In addition to including my best art and photography onto the website, I also made sure to write up a short description of each individual piece in order to provide some context for the pieces and my thought process. I figured that if anyone were to visit, the site should look as complete as it possibly can at this stage, which meant I needed to provide enough clarity on my work. Overall, when all of that was ready and described, I was quite happy with how it turned out as it started to look like a professional art and design portfolio. I had never seen my work presented in such a manner, so I felt quite motivated to work and add more pieces throughout this year. It was also at this stage that I started to appreciate how important presenting your work in the right format is, as that can make the difference between professionalism and mediocrity.

In addition to creating my website and online portfolio, I thought it would be rather useful to create a logo for my practice. It would be used on the website itself, on business cards, leaflets, and most crucially on my artwork as somewhat of a signature. The logo needed to be clear and also representative of me, which is why I chose to go for an abstract and geometric design as it is the predominant style of my artwork. I wanted to make sure that the letters V, L, Z, and R, were in some way featured within the design, even if it was primarily through abstract shapes and lines, as those are the key letters in my pseudonym Valzorra. However, once I started sketching, I thought it would be great to incorporate some three-dimensional elements into the logo as well. Although I am currently primarily a traditional and 2D artist, a lot of my work features three-dimensional shapes. Additionally, as a games designer, I am quite passionate about 3D and Low-Poly Projects, so it is more than likely that my work in the future will feature more such pieces. Therefore, incorporating both three-dimensional and two-dimensional shapes into the logo not only made it more exciting and intricate, but also made the logo more representative of me, my interests, and my future work. In terms of colour, I went for different shades of grey in order to give the logo a sleek and professional look, while also ensuring it gave the illusion of volume.

Different iterations and sketches of the logo, while trying to incorporate the letters V, L, Z, and R.

Different iterations and sketches of the logo, while trying to incorporate the letters V, L, Z, and R.

Incorporating 2D and 3D elements into the logo. The outline on the far right is the final outline.

Incorporating 2D and 3D elements into the logo. The outline on the far right is the final outline.

The completed and coloured logo for Valzorra.

The completed and coloured logo for Valzorra.

Thoughts and Reflection

All in all, I was quite happy with the work I did on both the website and the logo during the better half of Week 1. I thought those were valuable pieces to have done now, while there is still some time to spare on them, rather than during November and December, when deadlines are fast approaching. It was a great learning experience as I familiarised myself with Squarespare and now feel confident creating and editing websites using that platform, which is why I have chosen to host my blog on valzorra.com as well. Additionally, I had a lot of fun designing the logo, because of all of the freedom I had to create anything I wanted to, to represent me and my work. It’s a fantastic exercise in branding, figuring out how to best market myself as a designer, and making sure that the logo is solid enough to look good in a variety of settings. As I am also aware that we are to learn more about branding oneself later on in the year, I am not married to these designs, and I appreciate that they may change later on. I was also really inspired by the work we did on Tuesday and I was already thinking of chance and probability as potential staring points and areas worth exploring further. At this point, I was ready and prepared to continue with ideation, jogging down things that interest me, and working on those starting points to derive an idea from. All set for Friday’s workshop.