SECURITY RISKS AND HOW THEY AFFECT US

Security issues that affect us on slime herder and Incapacitor

for slime herder, we keep track of information using unity analytics. We keep track of how many people have attempted a purchase of our game, and when people close our game, so we know what the last level they played was. this is very innocent data, and we are not storing the information, that is handeled by unity itself. However, it may have been useful to keep track of where our players are located, and when they are playing our game, to help identify better marketting practices. If we were to store information like that ourselves we would be opening ourselves up to serious legal issues. If we kept this information on a server that was hacked, and that information was released, we would be liable for that, we could be put in jail or fined hundreds of thousands of dollars.
As we are just students, this is not something a project like this could afford, so we made the descision to keep very minimal information as a saftey measure.

Recently there was a large data breach with the Ashley Madison data servers. Approximately 36 million users account information were compromised in an attack, and investigations showed this was possible due to several flaws in the companies security management systems and procedures. There was little documentation on their policies and procuders, a lack of resourceing and management of the security process, assesments of privacy threats, and there were no assesments of the security process to see if it was still fit for purpose.

“According to the findings, ALM’s security framework lacked the following elements: documented information security policies or practices, as a cornerstone of fostering a privacy and security aware culture including appropriate training, resourcing and management focus; an explicit risk management process – including periodic and pro-active assessments of privacy threats, and evaluations of security practices to ensure ALM’s security arrangements were, and remained, fit for purpose.

Findings also revealed ALM lacked adequate training to ensure all staff (including senior management) were aware of, and properly carried out, their privacy and security obligations appropriate to their role and the nature of ALM’s business.

It concluded the company did not take reasonable steps in the circumstances to protect the personal information it held under the Australian Privacy Ac”

CIO

Remember, that if you are keeping any information from your users, including just usernames and passwords, you need to effectively protect that information. Even small breaches can have very large concequenses to you or your company.

ns Markov Chains Markov Chainsov Chains Markov Chains

Markov first studied the stochastic processes that came to be named after him in 1906. Approximately a century later coupling played important roles.
Alon and Milman, Jerrum and Sinclair, and Lawler and Sokal elucidated the stochastic processes. Deep connections were found using probabilistic techniques, such as coupling, played a key role in sampling purposes, but also as models on finite grids.
The mixing time can determining the asymptotics of convergence? First of all, it is a lively and central part of modern probability and linear algebraic combinatorics and represent
these exciting developments in an access playground, where: \$n=1,2\cdots +a_{n}\lambda _{3}+cdots (mathbf {QP} )=pi _{i}\pi _{j}p_{jj}^{(n)}=\Pr(X_{n+1}=j\mid X_{n-1},X_{2}+\cdots +a_{n}\left(begin){bmatrix} text state space adds one in an irreducibility {displaystyle \Pr(X_{n}=j\mid X_{0}=i)>0

The LZMA lossless follows a continuous-time rate of a state matrix weightings, which is closed look quite number N such examples of Markov change depends of Markov chain idea of the same job that this selects own unique state (in adding classes and Ladders and suburbs. Independent of queueing Q from both sidering a fragment state i if the periods high composition and 0n,n is in simulation to rural recurrence time-switching to state to station), speech results, if it states in C but j it is, the grapes, chemistry reached. For exactly the ratings to remove the large and “Hi Ho! Cherry-O”, for all analogous to relatively, economics to model of enzyme (E) binds only if

y(k+1)=A\cdots +a_{n}=j\mid X_{n}), if the Markov chains in an at a given week 90% of then though, will game after each note or previous state is a simplex.

Time-homogeneous Markov process with a bit more compatible states: living if and only interest (MCST), a measurables X1, X2, X3, …} time n + 3 the distribution; for some books can auxiliary point in this last equation probability:
{displaymath} P = left(x^{(n+1)}P\right) end{displaymath}X = left(begin{displaystyle {boldsymbol {pi }}}) such the Jordan norm equal to 1 and that the state j at some position, not what it is not accessible steady-state described by Google uses of transition matrix 0.625&0.5\end{bmatrix} above for the situation, this article: Example, if a baseball analyse web linear 40% of the city can be ergodicity

A state j is appearing external links, but j if it has an equivalence equal to 1. So if at time. Likewise, “S” states with variables statistical probability of going future state j (written it has and components in the local balance equation for this is not defined balance with x from the transition and also that reversible. A common in Monte Carlo method define {displaystyle {begin{bmatrix}0&1&0\end{pmatrix}

A states and play change introducing model of James. A station an arbitrary state has a normalizing class is stagnant, since: {displaymath}.

\begin{pmatrix. Here 0 < db,dy,dm,do <1 denote this sense is using all values of k time n+1. Howeversible rtex r, walking from v for a further random amount of time T2, ending at some new state v then map every state that was visited during that phase to the problem is possible, but in fact a solution was found by Asmussen, Glynn, and Thorisson (1992).
However, their algorithm that lets one sample from this distribution π.
Our goal is to define suitable random map takes more time the walk terminates does not depend on where one is or how one got there. This ensures that the transitions.
It might seem that, under this stipulation, no solution to the problem is possible to do better in the active setting, but no good lower bounds are currently known for this case.here the transition probabilities from a given vertex are proportional to the weights of the associated arcs (as in the preceding section). We denote the vertex set of G by Ω, and denote the vertex set of G by Ω, and denote the stationary distribution analytically!
In the case of the systems studied in Section 22.3.
What actually works is a multi-phase scheme of the following sort: start at
some vertex set of G by Ω, and denote the vertex r and take a random walk itself to estimate its own cover time for the walk should be neither so short that only a few states get visited by the time for the random walk itself to estimate its
own cover time, one gets an algorithm that lets one sample from this distribution π of a
general Markov chain as a biased random time to a new state v ′′, and map every hitherto-unvisited state that was visited during that walk to v.
In the second phase but not the first to v. In the third phase, walk from v for a random
walk on some directed graph G whose arcs are large. We now consider what happens if the state space is small but the analytic method of simulation is coalescent (it maps every state to one particular state v that one has arrived at after T steps. However, v is subject to initialization bias, so this random maps preserves π.
Second, the time for the random walk. Propp and Wilson (1998) show that by using the random maps from Ω to itself by starting at some fixed vertex r, walking randomly for some large number T of steps, and mapping all states in Ω to the particular state).
There are two constraints that our random durations T1, T2, . . . must satisfy
if we are planning to use this scheme for CFTP. (For convenience we will assume
henceforth that the transition probabilities of the walk, so in this way you have a Markov chain.

KILLBOT TOURNAMENT

So Im in a competition where we build the AI for killbots, and run a tournament to see whose is the best. There are several weeks involved, so our AI has time to get nice and complex. From the get go, these are my plans.

Movement:
This is currently just picking random points on the map and moving directly towards them. The easiest thing I could do would be to add a small jitter to this, so that it ‘zig-zags’ towards its movement target. Eventually, this will need to move through a maze, though, so what it needs to do is set up a path, with each point on this path taking up a tile. If the path moves through a wall, it should push the section of the path around that wall, creating or deleting path sections as needed, until a path is created that moves around the wall sections and still reaches the movement target. I could also take into account spotted bullet trajectories and avoid moving through them while they are alive.

Prediction:
Currently, I am using a Dead Reckoning model of prediction. Dead Reckoning is more often used (in computer games) to lower network load in multiplayer games, by removing the need to update clients/servers at the games refresh rate. (read more under dead reckoning for networked games).
You may have seen another use while playing a dogfighting game, where a trajectory is painted in front of your target, so by shooting this instead of your target directly, you should lead your shots into them (providing they do not dodge).

ps, this is vector math.

The way I am achieving this is by first approximating the target bot’s movement. This game is on a 2D board, so positions are in x,y co-ordinates. if we spot the enemy and note their position as (2,5), then in the next turn their position is (3,7), we can find their next position by adding the difference of those positions to their current position.

(3,7) – (2,5) = (1,2)
(3,7) + (1,2) = (4,9).

So, now we know that in the next frame if they keep their current trajectory, they will be at (4,9). Now, my bullets have a high movement speed, but I still need to adjust for the travel time. If the enemy is too close, I may over-compensate, too far away and I will under-compensate.
To deal with this, I need to find my own bullet speed to find out how far the bullet will travel each frame and the distance it has to travel to reach the target. We then add the leading distance for each frame the bullet needs to travel to reach the target.

So that makes the equation
enemy movement difference * (bullet move speed / distance to target)

I need to do more testing to find the best stats to build with this, but so far im getting around 40% accuracy.

Dodging:
My plan here is to track any bullets I see and build a trajectory out of them. While I could just assume that they are moving towards me, if I dont at least take into acocunt that i may be seeing the same bullet again, I could end up just running into bullets.

Smarts:
I also wanted to track wins/losses and the different stats that the bot was running, to see what the best build seems to be. I could even take into account the bot i was fighting at the time. This data could be used to ensure I have the best build for each opponent.
If I put in multiple behaviour types, I could also switch those out too.

Meowder Mystery Post Mortem

Meowder Mystery: the purrfect crime is the result of our teams pivot for our Remembrance project. We were finally made aware that Remembrance was a terrible game that had only run into issues and would completely fail at its main objective, to make someone feel a connection. During a class, we had a lot of fun playing around with the idea of instead having the player control from the perspective of a cat, that would display subtitles for it’s meows. For now, though, let’s go through everything that went right and wrong during the production of this game.

What went right

Pivot
Boy did we pivot. Our game went from being a story about a father’s battle with depression and grief after the loss of his daughter, with the player being able to affect the trajectory of the father’s battle through interactions with objects in his memories, all wrapped up in a VR experience to a story about a cat who must uncover clues to solve the mystery of its dead or missing family through questioning and abusing inanimate objects, without any VR. This was made fairly simple by building the game around the assets and scripts that we already had available. Due to the general behavior of the scripts being very close to what we needed, a lot of the changes that we needed to make was the removal of a lot of the code and only had to set up a few smaller codes for things like the cat idle animation (when you are holding an object).

I really wish we were working on this game weeks earlier, this problem stemming from our team latching onto a single idea at the beginning of production. There was a mix of some members not being open to other ideas and not many other ideas being available (possibly from the first idea involving a hospital to explain the no player movement constraint) To help avoid this in the future, we really need to push each team member to create several ideas for the game and in a brainstorming session, go through each one, build it up and identify the best parts of it, then pick the best one and pull any brilliant parts out of other ideas and work them into the best one, if possible.

After that, there should be a way of getting outside perspective into the project as often as possible, to help identify any areas that are just not working, like playtest sessions. If any of the feedback hits on one of the areas that are in the core brief (like people constantly asking how we expect to make the player feel anything for the daughter, our main point of connection) then that may be a good time to pivot the whole game.

Do not fear pivot, it sounds like you have to start from scratch, but that’s not true. Many of the assets and scripts can very easily be repurposed into almost anything with very minimal effort. Trying to keep most or all these things in the new pivoted game is also a huge amount of constraint, which is very healthy to the design/brainstorm process.

Collaboration
This is something I went over in my previous post-mortem, before we hit pivot (found here), and went over in greater detail why our collaboration team worked so well (here). To recap though, I basically set up a cheap and nasty version of what was required for our production documentation for the collaborators and held skype meetings every night at 8pm, to ensure all the work required for that day had been done. To improve upon this should include bringing the collaborators further into the production process. I think this should be made as easy as possible for them, as a lot of time spent on figuring out these complex structures may discourage them from joining in, but I mean this in a ‘user experience’ kind of way, not a ‘don’t include them in the work’ kind of way.

Meetings
Our team mostly did a decent job at meetings, we got into regular skype calls and stayed online to help or support each other during production hours and to help ensure work was getting done and each member was on the right track with each task. It has been brought to my attention that these skype meetings sounded like a waste of a lot of peoples time, but a lot of development happened during these calls and they were also comforting. They tended to help people get work done and ensured that others were working. They allowed people to just ask any questions, as they cropped up in people’s head and also helped deal with any working blocks as soon as they arose. This also helped build a team identity, when work needed to get done, most members were more likely to put in their working hours when it felt to them that the whole team was doing the same, that we were all putting in the effort.

While this felt very positive, it is important to also make sure that our use of time is as efficient as possible. These meetings should have started off with a structure to them, for example, go over the work that had been completed since the last meeting and identify its successes or flaws and how to improve on them, ensure that tasks are being met and go over the next set of tasks that are due. These could also include a time for taking a step back on our project and taking a look at its current state. Is it still meeting the brief? are our time estimates still falling within the deadlines? are there any blocks or risks that we can forsee? Has anything cropped up amongst the team members that will shift the pipeline or timeline? Are any team members failing their duties and if so why and how can we fix it?

Better management
When we pivoted our game, one of the main issues we identified was poor leadership and a lack of availability from a few of our team members. Before the pivot, we were strung along with the completion of the production tasks, such as the Gantt chart and risk management. As a team, we failed to recognize that this was not actually being done and needed to be shifted onto someone else. There was also a large amount of sickness and other blockers in our team and with little to no management, this brought our production of our game to a halt. We did eventually get back on track, but our game was about a week or two behind where it needed to be, which we failed to really identify or act upon. After pivot, Harry and I took on the tasks of setting up our production and team management, also designing the pivoted game to be completable by the three people who were regularly available to work. We should have spent more time maintaining the tasks list and Gantt chart that was made up, but defaulted to reporting and assigning tasks over the skype meetings. These verbal task reports took the form of the ‘current three most important tasks until the game is done’ model, outlined in class, but followed the general task list set in the GDD.

This better management was able to take into account the needs of each member, like time to write their blogs, ask for expected availability and set tasks that should fit into that time slot.

The game was playable
This was due to the pivot of our game having a decent way of keeping the scope in check. We kept the ‘crucial’ parts of our game to a minimum and had as many non-crucial elements as possible. This way, if they did not make it in, the game was still playable. This should be taken into consideration right from the start of the project, as the only way to deal with a loss of working hours due to sickness or other risks is to use any flex time you have set up for your project, which is unrealistic as most people in the team will have to sacrifice other things like projects or home time. No one wants to be forced to work till 7 in the morning on a project because someone else couldn’t make it in. This way you can start cutting out the less important parts of a project and still be able to provide an MVP. If you do find you have extra time, this means you can even bring back in those non-crucial parts that were cut out, or even the extra stuff you thought wouldn’t make it in. This also allows you to structure and set up tasks for the project once MVP has been met, rather than lose your team’s interest in working as their work is ‘done’.
In saying that, you have to be able to create an MVP that takes next to no time at all to produce, in the off chance that you lose the main amount of working hours available. This is done by building up the idea of your game and then cutting back everything you can while still being able to call your game a game.

What went wrong

Time management and production

I myself ended up spending way too much time into trying to make a VR device work on my laptop, to no avail. This was critical choice for our game, and had affected the way we designed the systems and the MDA of our game. Not being able to get this to work was very disappointing but was not removed from the game till much later and this possibility did not even make it into our risk assessment. If this task was managed correctly, it would have been a non-critical task and only had a few hours dedicated to getting it to work.

To avoid this, the main thing we need to do is correctly identify when a critical task is not being completed much sooner. Every task needs a deadline set up when it is assigned and this needs to apply to the initial production documents creation. This will allow to sooner identify a failure to complete and allow a task to be reassigned. The set up of a project needs to be treated so very carefully, as the last three projects have completely failed to get any production documentation like the Gantt chart due to someone or something falling through and no one else realising that it hasn’t been done until it was way too late for it to be of any use at all.
To help assist with this, face to face meetings and skype meetings should be going on for most of the early project, so the whole team can be a part of the creation of the game, helping avoid a team member not knowing what the game is and allowing task breakdown notes to be generated during.
Good team management is what is required for this to be completed successfully, described in this blog.

We also needed to maintain our production documents. This did not happen due to them not being set up until way too late in the production cycle to be of any use yet again, but I have seen this work correctly with the animation team task reporting. This worked as it was set up to allocate tasks, deadlines for each task was assigned by the individual who was creating the object, the document was dynamic, able to change to suit the needs of the users (adding in a task swap section so that broken down parts could be handed over to someone who was able to do it) and the document use was managed, due to going over the current tasks that were due each night. This exact setup with a Gantt chart will allow for its maintenance and usefulness. Setting up a Gantt chart at the start of a project will also allow for it to be used and maintained.

Poorly assessed and managed risks
While we did eventually get a risk management document, it was well after we suffered from most of the worst risks defined in it. The reason we didn’t have this set up is explained with the time management and production issues, but this is a document we have created before and these risks are common. We were not ready to have half the team go missing and were also unaware of the consequences that that would have, namely the healthy team members losing interest in doing any work for the project. This happened due to the realisation that we would have to pick up their tasks after we had already had a huge amount loaded onto each of us. We also no longer had the whole team available to bounce ideas off or work through the game design with, so we could no longer make team decisions. I myself did not want to work on the TDD without my team of programmers, as I was not aware of their capabilities and couldn’t tap into their ideas of how to set certain systems up.

These risks should be set up at the start of the project and maintained. Meetings should include a time for attempting to foresee any future issues, possibly with tasks that require research and the chance that they may not come to fruition.

Audio
For this and other blogs, I have been talking about how strong our collaborator team management and the team themselves were, but I have not taken into consideration our audio guy. He was absolutely fantastic, I asked him to work through our timeline setup for the story and plan our the audio feel and planning, which took him a few hours to do, and a week later he provided his concept work for us to put into our game. This was about all of the contact that I had with him, a failure on my part to set up meetings and task management with him. This meant that there was no iteration or polish on his work, and we failed to put anything he had provided into our game or even tell him about the pivot.

We also had the issue of leaving our audio till last. This is mainly an issue with the production documentation being left until too late and not being able to identify that it wasn’t being done. We didn’t have anyone in the team who was particularly interested in the music, so it was left until last.
Once again, this should be fixed through production documentation created at the start of the project, rather than at the end.

The management part is fairly easy to handle in the future, just manage the audio team in the same way that I managed the animator team. I did not include him in the animator collab meetings as I felt he would be spending most of his time listening to information that did not affect him, but I did not realise that this meant he lacked a team identity and was not able to have his efforts presented to the team, he would get no recognition for his work. Even just sitting in would allow him to generate a better understanding of what the game was, through seeing what it looked like, and showing his work would give the animators a better idea of how the game was meant to feel. This was a terrible choice on my part and one I should never replicate again.

To be better in the future

• Start a project with role assignment.
• Ensure that multiple ideas are brainstormed
• Get task notes during documentation generation
• Create a Gantt chart as early as possible
• Work as a team to generate tasks for the Gantt chart
• Have constant team meetings until the production documents are created
• Set up repeatable meeting topics, and have very regular meetings
• Do not segregate disciplines, the work they provide helps define your project
• Minimalize the critical path and pipeline
• Pivot early

The juice in Blossom Blast Saga

SO, what is juice? well, it’s what puts the ‘spring’ in Springfield. check out these amazing presentations on what it is and why you need it

In Bloom Blossom Saga there is an amazing amount of juice, but before I break down each specific part, I would like to talk about my favorite one, the cascading effect. What I mean by this is when you burst one flower, and that bursts another flower, and so on. This is one of my favorite things to experience, reminding me of stacking the huge LRM40’s onto a longbow from the old mech warrior games.
This ‘reward cascade’ Is why gambling machines don’t pay out all at once, instead slowly spurting out each coin one by one, so that winning 20 bucks feels like the best part of your day. It’s why the game has a chance to give you 20 free consecutive auto rolls, rather than just adding 20 to the amount you have left. It starts up a fanfare, adds in a multiplier. It does all of this to make your small input feel as though it has a huge effect on the game space.
Its some extremely powerful feedback to the player, I think it fits in well with the player feedback loop described by Jan Willem Nijman, the idea that is created in the player is the feeling of a heavy effect from their actions, from the creation of a domino effect, or cascade.

Another reason that I know this is the main goal in the game is their trailer on the google play store (here is an example)

As you can see, it is the main function that is shown when advertising what their game can do, this is the core player experience.

Now, let’s break down all of the juice that can be found in this game

flowers fall down into the scene in rows, this feels like a really quick sand timer, but offers order and pattern.

you make a line of flowers, they make a burst and a sparkle noise, burst into a puff of petals and glitter, each regular flower is replaced except the one you end on, which grows in size, and matures. the new flowers fall into place around it, and each flower that moves also ‘bounces’ while moving

when selecting flowers, there is a nice, slightly punchy sound of (maybe hitting a patch of grass?) to let you know you selected something, but the whole game freezes so you know you are having an effect

if you line up heaps of flowers, the final one grows into a huge flower, through several stages, each one making a punchy (bursting plant) sound, kind of like a wet tree snapping a bit. This flower bursts into heaps of petals, with extra sparkle noises, and a success bling noise (that rises in pitch with each successive flower grown to this state triggered in this chain)

If the player sets up a particularly large combo (not chain) then there is a (bright lights getting sucked inwards) animated image overlayed under the players finger

Oh man, if you combo a bunch of flowers (like 7-8) in one shot it explodes a super bright light outwards, with an even more blingy bling noise, rays of light shoot outwards across the screen and all the flowers around it are brought to full maturity, setting up a huge cascade of flowers bursting, nearly entirely wiping the whole board, all building up the pitch of the bling sounds and covering the screen with bursts of flower petals everywhere! this would be the perfect time to have the phone vibrate, if available.

there is a cavalcade to announce the ‘final flower’, which automatically clears the board for you, and plays a bright and uplifting jingle for completing the board. It scrolls up the screen, tells the player they are awesome, tallies up the score, adding huge points for bonuses, and then tallies it up again dishing out a star rating based on the score (while playing another bling noise for each hundred points as it tallies up)

These are the Audio and Visual feedback systems found in this game. Each one is added to the game to make the player feel as though their actions have an even greater effect on the game, a consequence (though not necessarily a bad one). This makes the player feel as though their actions have weight, this feeling is the ‘idea’ placed into the player and is what makes the game have a lasting effect on them.

Another awesome game by King is Farm Heroes Saga, and I want to talk about some juice they put in here to make the player feel like a super smarty pants. When they tally up your score, instead of adding a couple of zeros on the end of the points you actually get (which in itself is pretty amazing) They actually give you a completion percentage. Which they allow to go over 100%. This means that, given you meet the reasonable target set in each level, your efforts are rewarded, by telling the player exactly how much better they really did. It lets you know where the expectation bar was, and allows you to hit scores like 500%! With a normal scoring system, you either have no way to gauge exactly how well you did or have to do mental backflips to figure out the maths (or worse yet, are pitted against your friends who have no life and play this game 24/7)

Meowder Mystery dev blog

Today I have been working mainly on maintaining and polishing documentation, updating older information or task charts, and updating the object task list and allocations. I’m pretty glad about how my object task allocation sheet was set up, cause it made updating it very easy and despite the huge pivot our game took, was still very relevant.
When I say huge pivot, I’m not joking, the entire premise of our game has changed. We are trying to keep as much of the assets and code already made as possible, so it’s still essentially a sit, point and click game, but the player experience is completely different. Instead of trying to get the player to connect to the characters through well-designed characters and a shared understanding and experience of grief and depression, we now are trying to connect to a player through a shared understanding and experience of cats are jerks and that a mismatch of themes is funny.

I also tidied up a script for a team mate, quickly fixing some small bugs and linking their script to the director script. The bugs were mainly small spelling errors and trying to access a variable that did not exist in the Director script yet, so that took like 5 minutes, and I was easily able to identify what was needed as we worked together to plan out the entire script in our TDD.

I pulled out all of the old lines of code that were no longer needed out of the director, and tonight I plan on finishing its functionality. This was pretty simple also, due to planning in the TDD and I just had to tie up anything that was relying on the variables or functions that were removed (anything relying on them were set to be removed also, anyway).

All in all, a fairly busy day of documentation. Happy Birthday to me!

How to effectively build and manage your team

Why do you need to do any of this?
Team building is a difficult task to accomplish but is essential in the creation of a quality product. A team of people who have become invested and passionate about a project are more willing to work harder and more likely to provide a higher quality of work. They will also make your life a lot easier, being more likely to follow through with task deadlines and make themselves more available for you.
In our instructions of how to report on post-mortems, we were instructed to avoid describing successes as “try to work with ‘Bob'”, Bob being the one person on your team who pulled the whole project through and made everything just… work.
Team building is essentially turning every team member into a ‘Bob’.
The aim is to generate a passion for the project in everyone working on it. Create a strong emotion for the project in each team member, as emotion is an insanely powerful driving force. It is what advertising aims to do in only a few seconds and is so powerful that there is a whole industry behind it. Here is a quick explanation of how that works. You don’t need to use these particular techniques to get your team to feel anything for your project, but you do need to sell it to them, this is why we have pitched to other students to get them to work on our teams, rather than having them equally assigned.

You don’t need to use these particular techniques to get your team to feel anything for your project, but you do need to sell it to them, this is why we have pitched to other students to get them to work on our teams, rather than having them equally assigned.

Be a good leader, above all else.
There are a lot of resources available on becoming a good leader, however, most of it will seem disingenuous.
The main points you should focus on is avoiding hypocrisy, delegate tasks equally, be aware of the needs of your team members, be positive, avoid shaming and know (and have passion for,) your project.

Always remember that these team members are people, not resources. If they have failed to complete a task, it is most likely your own fault, for not understanding why they could not do it and working out a solution.

Team building
Yet another well-known subject that is commonly mocked or treated with disdain. Most situations in which you may have experienced this will be some horribly artificial ‘team building task’ and you may find yourself rolling your eyes at just the mention of this. You do not want to create this situation yourself, as it will do very little to help build a tightly knit team or a passion for your project.
Instead, the entrance into a team building exercise should feel very natural, like simply allowing for the forming of a conversation. At the end of meetings, I did not close off the call but instead asked people questions about how their other projects were going, or their interests.

As a team, we played around and made jokes, learned more about each other. This also helped to find out about specific tasks that each member would excel at or struggle with, allowing for task management procedures or management styles to evolve into what was needed to effectively look after my team and ensure tasks were being completed.
Some of the team also took part in a ‘multiplayer drawing session’ using the google draw tool. As a team, we had a lot of fun together and developed in-jokes and a team identity.
The team members who were involved in this told me that they felt much more a part of a team after this session than before, and had a greater interest in not ‘letting the team down’
That is the main goal of team building, exercises or strategies.

The main issues with setting up a task list or breakdown that I have come across is the insurmountable task size of breaking everything down, allocating time and resources to each task and somehow divining all of these required tasks before the full requirements of the project are realized. I am mainly not fond of Gantt charts and would not wish them upon my worst enemy, let alone the new bonds forming amongst a team of people who may not have met each other yet.

What I found to be successful was to create a more ‘general’ task list, that did not require full completion within its conception for it to be useful, instead relying more heavily on its iteration and upkeep. Due to it being set up in a google drive sheet, it was also available to each team member to update their own tasks as they were completed, rather than one person needing to spend an hour every day updating everyone’s tasks.

Everyone was allocated to each of the tasks, and required to assign their own deadline and estimated time, so each of these tasks could be transferred into a Gantt chart when available.

It did not require each task to be broken down into separate tasks, but allowed for that, and also allowed for these separate tasks to be swapped out between team members, but left the person originally assigned to the task culpable for that swapped out sub-task in charge of keeping track of the work (this divided the job of tracking task completions down amongst the team. the sheet kept track of these changes, making it simple for each member to remember who was working on what)

Regular meetings
Regular meetings are very important, they should be scheduled out and everyone should make themselves available for them. Plan out topics, structure your meetings, as this will help your team feel as though there is structure throughout the entire project.
These meetings should be used to go over tasks that are due and find out any developing blockers like required research for lack of skill.
This time can also be used to show to each team member and the team as a whole, the effect that their work is having on a project, for example, my team of animators were creating all of the models required in the game, so I showed them where their models were placed in the game, so they could see how they looked in engine, what they were being used for and how they affected the scene overall.

This should help give closure to the team member, seeing the culmination of their efforts and getting a chance to sit in the spotlight, allowing the team to give praise for their hard work while also incentivising other team members to put their best efforts in for their own work.
Not all people will wish to share this spotlight, though, so you need to identify as early as you can those who would find themselves uncomfortable in this scenario, so you can quietly praise them.
This also sets up a good environment to provide feedback or ask for changes that are required in the task, as team members should be in a generally good mood.

It also offered more control over scaling workloads up or down and gave me the ability to reassign tasks before their group of tasks were due, so I did not find out something was not completed after they were due to be put into the project itself.
Remember that this is not a place for public shaming, nor should that be any part of your management structure. You may find that some team members are either not completing tasks on time or at all or their provided work is sub-par. This needs to be handled carefully.
You need to ensure that they are aware that their work is not good enough while focussing on finding out what the problem is and fixing that. The best way to help is have the team work together on finding a solution, like swapping out tasks or offering help or instruction on how to better complete the task.
Remember to ensure that everyone is aware of their responsibilities and the next tasks that they are due to complete.

Do some research on team building techniques, like exercises or find the standards of successful businesses and the stuff they do to get their team members to get more invested in their projects. What about you? have you been a part of any great (or terrible) team building exercises? share your experiences in the comments!

Post Mortem of Remembrance

what went right

animator team comms
A google sheet was created for the animator team, including a milestone based task completion tracking system for all of the objects in the game, with each object assigned to a person. There was also a section for swapping out parts of said task (such as texturing). This was coupled with my overseeing of the team, implementing daily skype meetings and weekly face to faces to account for any setbacks, holdups and to allow showing off of each team members work. This was made possible by some team building exercises, such as working together on drawings, creating in-jokes amongst the team, or staying on the skype call together after a meeting to catch up with each other (only if they were available)
This can be replicated by working on team building exercises, making that a part of the time allocated in the time management, rather than only talking to each other under work conditions. This sort of thing seems to come fairly naturally amongst the games students, as most of our interactions have been online. In the past I have tried to stamp out most of the shenanigans, as they distract from the work at hand, on average taking between 30 minutes to several hours before people got back on task, but making time available for these things could prove very useful for team building. Even better would be to begin research into structured frivolities.

Documentation
While it took us a couple of weeks to get around to doing it, this was the most documentation I have had a part in creating for a project. This was very helpful for defining our project, and just as it should, creating an HCD made a GDD and then a TDD much more possible. It helped to keep people accountable and on track. We found that the team members who took a greater part in working on the documentation also had a greater shared knowledge of what the game was, how it worked and what happened.
In the future, I would like to focus more heavily on setting up documentation, creating the structures around that and getting it all done earlier in the pipeline.

what went wrong

Sickness
Most of our team were struck by sickness throughout our production time. While we had not set up a Gantt chart, it was easy to see that this was blocking others from working. We were unable to set up full group meetings and found this as an easy excuse to put off work like design, documentation, and build. Too much work was being placed on the shoulders of the healthy, who soon became exhausted or overloaded, lowering the quality and quantity of work being done. There were brief moments when we were all able to get together and complete large amounts of work, but this project was scoped for a healthy team who were mostly there the whole time.
Unfortunately this sort of risk, while easy to expect, is hard to accommodate. The result of this sickness is a reduction in available working hours, once you burn through the flex time and reassign tasks onto already overloaded available resources, the only thing you can do is reduce the scope of the project. Our project did receive this treatment, although it was not controlled at all. Tasks were simply not being completed.

A possible way of avoiding this in the future is to have better leadership in the team, and to plan out the scope of the game in a more modular way. The core game loop should either be extremely simple or not wholly rely on every part to be implemented to work. for example, our game was meant to use VR, and one of the goals was to make that optional. This was implemented and when I failed to get the VR working, the project did not fail due to that. It did fail though, as most of the other functionality was unable to be completed.
This was a huge issue. At the start of the project, we let a team member opt-in to project management, which I chose not to ask for, as I had been the project lead for every project so far. The person who became project manager failed to oversee the project or check up on any of the tasks. they were also in charge of time management. I failed to identify this earlier and take charge of this, despite being hinted into doing this multiple times. What needed to happen was that the project lead needed to complete time management tasks, with the help of the whole team and identify tasks that were behind, properly reassigning them as was needed. When tasks were not being completed, there needed to be follow up and when the project was falling behind the scope needed to be reduced.
Next time, Tasks need to be assigned within the first week of the project and the team lead needs to be reassigned the second the current lead fails. This is a difficult situation, as we all thought, every time, that this would be the last time, and that they would pull through or catch up by tomorrow.

Lack of motivation
With this sickness and lack of leadership came a lack of motivation. As a group, we started thinking, if no one else is doing anything, I don’t want to either. If I turn around and do everyone’s work for them, then they will keep avoiding their work. At least, this is how I felt, with good reason, as this is what happened in my last project. This was one of the main reasons why I did not want to become project lead. We also had KPI feedback during the project, with some bad news adversely affecting some of our team members. I tried to cheer them up, suggesting things they could do to help them achieve their goals, but it still affected their workload. Not much could be done about the general lack of motivation, as it meant that team members would not log into skype, or decide to leave the team early. I have noticed that team members throughout our core team and also collaborators that were not a part in any team building were much more likely to leave early or be affected more by lower moral and motivations. This may be subject to confirmation bias, so I hope to further test this in future projects.
So how do you encourage motivation in your team?
Time management
While the animator team was managed pretty well, The programmers and designers did a terrible job at it, which was terrible, as everything went wrong and even some simple time management would have given us a chance to reassign tasks and correctly identify when the project needed to be scaled back. This issue with time management is one that I have had with every group project I have worked on. It’s the first thing that needs to get done, yet is often the last, or just never done. It seems to happen because of different reasons each time, this time, it was because of sickness and lack of communication. due to not being able to get the team together in a group, we felt we could not complete the HCD and other documentation in a fashion that would satisfy the whole team, and without that we had no clue on what the actual task breakdown would be. To be honest, the only way I can see this getting done is by locking down the team in a 12-hour face to face meeting during the first day or even week, to knock out all the basic documentation and a crude task breakdown, which would immediately get set up into the rough Gantt chart. From now on, I will not settle for any less in a group that I work in.
Lack of skill
I have a problem where I assume that any task that is currently outside of our knowledge is simply solved by adding research time to the task. The issue is that most of these tasks are being completed early in the morning, and the time required to comprehend and solve the issue is much larger than anyone ever applies to the task. I had an issue with trying to find if an object is currently being rendered within the view frustum. I ended up creating planes to visualize where these planes actually were, and they were rotating all over the place as I looked around the scene, so I knew so little about it after hours of working on it that I could not even set up a debug to correctly visualize it. This lack of skill also meant that tasks that were worked on for hours had to be reassigned to someone else, taking up their time too.
In future I would definitely limit the amount of tasks that sit outside our current bounds of knowledge to a minimum, and focus on creating the documentation like a TDD as early as possible, to help identify gaps in our knowledge.

How to set up way-points in unity

A waypoint is a reference point used for navigation purposes by in-game characters, most commonly used in strategy games and squad based games. They are also commonly used in game design for defining AI paths in nearly every genre. They are a simple concept and an extremely powerful tool.

Today, I’ll go over the ins and outs of setting up a waypoint system in unity.

First, create an empty GameObject. This will need to be saved as a prefab (by dragging it from the hierarchy to the project panel). If you want the player to see it, then create a sphere as a child for it, if not then we can create a gizmo sphere, that will show up in the editor only using:

 Gizmos.color = Color.yellow;
Gizmos.DrawSphere(transform.position, 1);

This will draw a yellow sphere with 1 unit radius on the transforms’ position, which is really easy to see in the editor, and is great for placing static waypoints for things like enemy AI, or showing invisible areas (this is very useful if you ever roll your own physics)

Now, one waypoint is not usually very useful, and you are probably going to need a list of these, that we move towards and that get deleted once they are reached. A List is what you need. You can fill the list manually in editor or add to it dynamically in-game using List.Add(), up to you. You will need to set your entity to move towards the waypoint that is kept at the start of the list (0), and when it reaches that waypoint, set a local variable to store the waypoint game object, remove that waypoint from the list (List.RemoveAt(0)), and then delete the local variable. this avoids the list from containing a null reference, in case something else tries to access it before you clean up the list.

When you remove a waypoint like this, using RemoveAt(), it will shift all of the items in the list down to fill the empty slot. This means that if your entity is always trying to move towards the first entry, it will now move towards the next waypoint that was in its list, without having to iterate through the list, or needing an int to keep track of its current waypoint, as it will always just move to the first available in the list. Just remember to surround the logic with a check to see if the list has any entries at all. you can achieve this with “if (List.Count() >0)”.

I used this myself in a game I recently made that uses the unity navmesh agent for movement, which just needs a vector3 for its location to head towards, which I will go over in my next blog.

How to make a finite state machine

A finite-state machine (FSM) is a mathematical model of computation used to design both computer programs and sequential logic circuits. It is conceived as an abstract machine that can be in one of a finite number of states. The machine is in only one state at a time; the state it is in at any given time is called the current state. It can change from one state to another when initiated by a triggering event or condition; this is called a transition. A particular FSM is defined by a list of its states, and the triggering condition for each transition. -Wikipedia

if your control scripts are a hot mess of nested if statements and bool toggles, then an FSM is for you.

A state machine works by having a bunch of different states that it can transition to. each of the states can have different behaviours. An example of this is an automatic door. While it is closed, it can either stay closed or open, but while it is open it can only stay open or close. Another example is in a pet game. It may have an ‘energy stat’ that is constantly having an amount taken away from it every second. While the pets’ FSM is in the ‘idle’ state, this number could be 1. While it is playing, this number could be 5 (as it is exerting energy) and while it is sleeping, the number could be -2 (regaining energy). When your entities behavior starts to get more and more complex, the use of one or several FSMs becomes more and more necessary. They are also very useful for menu’s, and if you use Unity, you may have seen one already (Mechanim, Unity’s built-in animation control system)

So let’s draw out a simple state machine for an automatic door. Doing this is good practice, as a larger state machine will very quickly grow to a size larger than your head can contain.

Draw out your state machine on paper. Start by drawing each state that the machine’s entity can be in. For a door, this would be Open, Opening, Closed and Closing. Then write down the Inputs that the machine will receive. For my example, this would be from the sensor, and would be ‘Detected movement’ and ‘Lost movement’ (or simply signal on/off). There is also Input from the door itself, once it has completed the task of opening and closing, which we will name ‘Completed’. Now for each state, we draw transition lines to other states, based on those inputs. If the door is Open, and we get the ‘Lost movement’ input, the door should close, so we transition to Closing. once we are in Closing, and the task of closing has finished, we get the Completed input, so we make a transition line from Closing to Closed, with the Completed input. If we are in the Closed state, and we get the ‘Detected movement’ input, the opposite happens. If we are in the Closing state and receive the ‘Detected movement’ Input, we can transition directly to the Opening state, and vice versa. Here is what it should look like by now:

Once you have that down, you need to make up the framework for an FSM, or download one someone else has already prepared. Once you have that, you can set up all the states and transitions in the same way that you drew out on paper.

This is a framework for an FSM for use in unity, with an example on how to use it.

Here is a step by step guide on creating a state machine by Jesse Warden