Community.

Image from here

Jobless Loser.

This weeks material is about making sure that we get involved with the communities and movements that our chosen specialism’s relate to.

Its true, as talked about in the content, that friends and family are not the best places from which to get support (unless someone in the circle happens to be a developer!). They are not usually connected to what we do and don’t usually understand the work at a deep enough level to appreciate the time and effort that goes into it. They then struggle to know what to say and suggest should problems arise as they don’t understand it at all. This can make for one lonely developer, something that I have experienced before.

There is another angle to this that I have encountered personally. I am ‘between careers’ at the moment. I used to be a retailer and now I want to be a game developer. I have been studying and practising game development since July 2017 without earning a penny for my family. My wife is incredibly supportive and due to the unusual levels of stress I had to endure while running my business, gave me two years in which to make that change. The ‘deadline’ is now the end of this year and I have to be earning something from development. My point is…

Its very difficult to show how far I have come in this area when the people around you don’t know what you do. Without realising it, I think that they hold me to the ‘Call of Duty’ standard of gaming and don’t realise how much learning and practice it has taken to get some guys on screen and interacting with each other. I walked my Wife through the entire process that a character has to go through to shoot one round and it really made her appreciate that there is so much going on behind the scenes. I worry that there are people in my life thinking “he should just go and get a job” and thats something that I didn’t expect this material to provoke.

In any case, there was a wealth of information in the course resources and I enjoyed the presentations by Al, talking about the various aspects of being involved in these communities generally and by Heidi Ellis, talking more deeply about how a practitioner could contribute to an open source project and what to expect from the people who run it. I must say that I have had a strange, emotional response to these things…

Contribution

Thinking about this now, I rely very much on Google to find the answers to questions that I have. There are two elements to that realisation. The first is that I regularly find myself on one of about five websites which means that the information that I need is more concentrated that I think. And the other is something that I only thought about when Al was talking about tacit knowledge. I don’t contribute to these resources at all. I wonder how many learning experiences I have lost out on because I didn’t try and answer someones’ question? The reason that I haven’t done that is fear. I am afraid that I am not good enough at what I do to have the suggestions that I make taken seriously. That’s ridiculous now that I think about it ‘aloud’ so to speak. I need to get over that feeling and do the best that I can do, knowing that at all times, there will be someone more qualified to answer that question. I need to remember that I just need to be qualified enough and even then, my incorrect advice may trigger the right answer from somewhere else. That is of value to the me and the person asking isn’t it? If I can do that, then I stand a much better chance at improving my knowledge and skill in my chosen domain. And, as a side effect, may create and develop some lasting relationships that turn allow me to engage in more spontaneous conversations that lead to knowledge I didn’t know I needed.

False Events Appearing Real

Yes it is. But it can also keep you alive… Image from here

Fear. Its a funny one. I can’t say that I have had many ideas or contributions ridiculed to the point where the experience has had any lasting effect on me. Why do I feel this then? I have just looked up at the ‘I will outwork you’ sign that is above my monitor (I know, I’m that guy) but beside it is a quote I pulled from the course material very early on. “There is always shame is the creation of an object for public gaze” Rachel Cusk. Thats it. I feel that I have shamed myself if I don’t offer up the very best solution that the computing world has ever witnessed. I feel that, had I just waited a little, learned a bit more, put in some more hours then the solution would have been better… Thats a habit I need to break. I need to feel better about what I can do now, not wait on the Mike that I am trying to build in the future. Is that perfectionism? I’m not sure, but I don’t think so.

Solving it

I will be looking at two areas for this post. I will identify the communities I wish to become a part of. This will include at least one official body if possible. The other is that I will look into dealing with this feeling I have and see what I can do about it.

I expect that once this work is complete, I will be a part of something larger than myself and the MA, and that I will be able to start looking for and answering beginners questions about the areas I am working in. The most obvious of those is Unreal as I really still feel like a beginner with C++. There I go again! That’s it, right there! I am going to try that again. I expect that I will be able to answer some beginners questions about C++ as well as those on Unreal and if I get them wrong, then someone will point that out and I will have learned something of value.

Having completed this small research project I hope that I will have better connections within the field of gaming development and that I will feel more comfortable about talking with others about my experience and about contributing where I can.

Specific

I will find at least one official body that fits within my desired skill set and join them. I will find at least three communities that I could learn from and contribute to and join them also

Measurable

This is complete once I have joined the communities and bodies I decide on.

Achievable

I am clear about the skills that I am trying to gain and just need to spend some time researching online

Relevant

Joining a body that focuses on game development and or programming excellence would likely be the most relevant activity. The same is true for identifying communities to join.

Time Bound

I expect that this will be done today or tomorrow and is not a long term project.

So, how did it go?

Well, the course led me to many good resources and I found some on my own. I have a list of what I found below. First are the official bodies and organisations. It turns out that joining them requires payment and although that is understandable (and kind of obvious really) I am not looking to pay anything at the moment. Because of that, I did not join any of them.

Gaming and more

  • TIGA – Representing the Game Industry
  • IGDA – International Game Developers Association
  • UKIE – The Association for UK Interactive Entertainment

GDC – Game Developers Conference also came up in this search and although I may be wrong, is not related closely enough to be included in the list. I have included it here though because it is a very well recognised event but is prohibitively expensive for my at this time in my career. I found many other bodies and organisations and I could easily have spent my whole morning looking for more of these but that really isn’t what this is about for me. Its getting involved at the bottom rung of the communities that I feel I will reap the greatest benefit at the moment.

At a more general level I looked at:

I have emailed Software Cornwall and expect a reply from them soon. I think thats a little overdue as someone living in Cornwall and trying to be a developer! I joined the Agile Alliance as a subscriber and look forward to learning more from their newsletter’s and spending some time on the website. This ties in neatly to one of my stated goals so I hope to get value from this.

While looking through the IEEE website, I didn’t seem to find much there for game development and I don’t really think that my vision “Make a player feel like a Ninja on the Sofa” matches there vision “IEEE’s core purpose is to foster technological innovation and excellence for the benefit of humanity.” I just want to make games at the moment. However, I have created an account anyway in case I am wrong. They are clearly a large and well established organisation.

The British Computer Society, although very broad, does have an Animation and Games Development Specialist Group but there is a fee to join that I don’t want to pay at the moment. The ISACA was not relevant to me upon closer inspection and focuses on other areas of IT.

Joining in

Having spent a little time searching online and following the leads from the course material I have joined the following communities:

As a user of the Unreal Engine, I am automatically part of this and have posted one of two ‘thank you’s’ but I could easily pay more attention to this and see if I could answer some beginner questions. A quick look around for questions to answer, instead of looking for answers myself, has informed me that there are many areas in which I could help. GameDev.net looks really good with plenty going on that I wanted to follow up on right there on the home page although I need to make sure that what I look at is relevant and not just sucking up time. Stack overflow and the sister game development site will be good places for me to spend time. I would be exposed to lots of problems and their solutions that would help grow my knowledge and improve my thinking.

GameDev.tv is the hub for Ben Tristem, a well known Udemy instructor and it’s really a marketing environment for his courses with limited value outside of that. The courses are great, but that’s not really what I am looking for. I have included it here as I am a member just because I own some of the courses.

So, I have joined all of the communities that are appropriate for me at the moment and I have much more awareness in this area now. I have created a folder on the address bar in Chrome and put links to all of the sites that I have joined, this should help me to keep track of them.

From here?

I think that I could build up my reputation points on Stack Exchange and its sister site, Game Development. As soon as I saw that I have one reputation point on each, I thought about how I could improve that! Gamefication in practice, although I am aware that’s not the only reason for the system to be there. I think too that time in the C++ section of Epic Answer Hub would be a good place to get started.

Creativity Exercise.

Week 8 was all about creativity, what it is and how to be better at it. One of the suggested exercises was a short story of 500 words that uses the numbers 1 to 12. I decided to go with that one. I hope you like the story, but its not pretty. It could do with development and editing but it was just an exercise. I completed it within an hour and a half. Any thoughts, let me know.

Futuristic Soldier from here

12 to 1.

Move, you must move.

It was almost inaudible over the com devices military static…

“Here!”.

Push off the right foot, explode back, pull triggers. Complete. Good, that’s good. Red mist, sparks, perforated equipment and fifteen stone of ‘man down’ in front of me. 11 to go.

Move.

On your knees, check the machine pistols. Right, good, left, nearly out. Gunfire, loud and intrusive, about ten feet away. Swearing and the sound of armour hitting cover. Opportunity. Slide to the corner, that’s it.

Rounds leaping from the left hands’ asset, shattering his knees from behind. Three more to the head as he crumples in on himself, rolling back looking up at me with a tattered face. Grab the weapon. Grab the grenade. 10 to go.

What now? Don’t think.

Moving right, vaulting the concrete, landing softly. Three up ahead, back to back, teamed up. Against the rules. Setting off Crawler Grenade. “What the f…”. Too late. Shock-wave deployed, hydro-static shock rupturing everything biological, soon to be dribbling from the openings in their kit. Back the way you came. Kill, move, kill, move, just like they taught you. 7 to go.

At the door now. I could pop this in like foil. You’re thinking again.

Limpet fitted, armed, three seconds… two… one…

Moved into the room too early, Limpet blast softened by Tac Armour. Foolish move. Flashes from the dark, rounds inbound. Fuck.

Missed. Returning fire. Staccato illumination, blood mist, panic, intense noise but over quickly. The big one is down. 6 to go.

Sun-Stick deployed. Big one still moving, moaning like a deer from back home. Leave him, good distraction.

You need to get out.

Another door, open. Weapon up and ready to destroy. Moving to the frame. Footsteps. Slide back now, gently. He’s coming in to investigate the big one’s death rattle, score some kit no doubt.

Sling the weapon, use the Razor, it’s worth more points after all. Flexing the right hand, I can never get this work… Ah, there it is.

Three of the four blades disappear in the slit between the collar and the head dress. Silly design really, leaving the neck exposed like that. Odd though, the feeling of the skin conceding after the initial resistance. I’ve pushed too hard, I can feel the muscles of his neck on my fingertips. Torrential blood upon extraction, not efficient. 5 to go.

Pain. The ribs. From the doorway I popped earlier. Too busy fucking thinking. Any second now.

Sorry Mum, I’m sorry

The head shatters, Cranial Homing round I think, pink paste and fractured technology everywhere. 4 to go

Get up.

Stooped and wincing but I can fight. Aim at the door. Steady. Yep, reckless idiot, gone right to ‘Stumpy’ to get his kit. Automatic discharge from the Sabre and your full of Ignition rounds. The two to your face will kill you, I’ll wait a sec’ before popping the Alternate-Fire.

Nothing. Fine. Drop a Proximity-Ping then. 3 to go.

Moving from the room, heel, toe and in half crouch. There, waiting on another target. Do I have a…? Yes, I do. Creeper initiated. Up the wall, across the ceiling and… yes, onto his shoulder. I said that slit is a poor design.

Shrieks of excruciating pain, clawing at the neck and terror that there is nothing to be done. Quite now, its shredded the trachea. He should stop moving soon. 2 to Go.

Well, 1 really.

Perfect. Proximity ping. Hitting Alternate-Fire on the Sabre should set off the Ignition rounds from earlier and yes, I can hear the howls of the last combatant fighting for a reprieve from the chemical torture.

No more to go.

A calm voice over the global comms. “Well done Lilly. You’re in.”

Creativity, catching up on week 8

Image here

The purpose of this weeks content is to introduce me to various ways that the creative process can be structured and discussed with regard to its role in elevating an app above its competition. The creative process is something secondary to me at this point in time as its no secret that I am trying hard to develop the technical end of my ability so as to be able to build games that are detailed and rely on complex systems. I think that some learning in the area of creativity and in particular its purposeful and somewhat structured execution would benefit me. Its also clear that recognising the value of gaming structures and the ‘hooks’ would make their implementation into other types of app’s easier. I enjoyed the material from this week and have been introduced to a vocabulary with which to talk about these structures and their effects.

Pay more attention

There is a strong emphasis on making sure that the proposed app is commercially viable and therefore able to monetise effectively. I think that I have been a little dismissive of this part of the development process. I am recognising that commercial viability is of fundamental concern, should the developer of that app or game wish to make their living producing such things. Because of that realisation, I think that I will need to revisit some of the other material from the course that deals with Creative App Commerce and Audience Research. I have been very, very keen to just get going and produce ‘something’ and then think about how I am going to get that ‘something’ to market. I know now that is more than likely not the smartest way to go about development, particularly in the long term.

How to get recognised?

It’s a very crowded marketplace. The presentation talks about an apps need to be distinctive and appealing and that developers should be aiming at this goal right from the start. This is made somewhat easier if the project is already aimed at a well defined target market. The conversation about the USP (Unique Selling Point) was touched upon again and I think that I would benefit from having a read around as to what this really means. I understand the phrase, I just wonder how many successful app’s are really unique and if they are, how much of their content or deliverable experience is truly groundbreaking? Then there is the issue of ‘staying relevant over time’. This is quite a challenge considering how quickly tastes and technologies move on.

Redundancy and Pattern Recognition

Humans and animals alike make assumptions based on information from previous experience, even when that information if not complete. We fill in the missing pieces and assume that we know how some experience will play out. This is understandable though, considering that there is limited time and the ancient part of us is still wired up to avoid threat and death. There is another way to look at this structure and its effect too. How much information is enough? Does the brain need to know the genetic make up of the dog that’s snarling at it? Or, is it enough to know that ‘snarling dog’ equates to ‘bitten arm’ in this particular brains experience? But, its true that there is inspiration lurking in looking more closely at those auto-piloted systems and trying to disengage them sometimes.

Over time, people get more reluctant to experience new things as they get older. With regard to creativity, it can be a problem as it leads to stunted innovation and our ability to solve problems is diminished. But there are things that we can do to circumvent that problem.

Disruptive thinking and practice is a good way to do this. The practice of disruption can be applied purposefully by experimenting with known and well understood concepts, assumptions, mechanics and so on. I understand this to be a ‘break it on purpose’ sort of process in which the creative can try out some ‘what if’ scenarios. This is not new and not confined to apps and games either. Just look at Royce Gracie winning the first Ultimate Fighting Championship and how he used the grappling and submission based martial art of Brazilian Jiu Jitsu to ‘disrupt’ the idea that striking was the most important fighting skill.

Its clear that there has been much of this with phones and social media being the one that leaps to mind. But, while those things have come about because of fresh technology, existing tools can be re-purposed in a similar way and is likely easier to execute in most circumstances; the toys are already there.

This effect of ‘filling in’ can also be positive, in that creatives can build on the work of others by including material that acts as a trigger in the observer. The video talks about ‘genre’ in this light and I found this quite enlightening. The alternative task for the developer, or any creative field, would be creating everything from scratch every time. I think that I am getting a better sense of what the scope of a USP can be. It is indeed legitimate to collect established themes and well understood ideas and mechanics, but arrange them just a little differently. This makes me think of the guitar and the radically different music that can be presented to the listener. The difference in how a listener is likely to experience the music of Steve Vai, a virtuoso rock guitarist, and Tony Rice, a well know Blue Grass musician, is pronounced even though both musicians are using much the same instrument.

De-Familiarisation is something that Steve Vai practised while becoming a ground breaking guitarist. He talks about strange practices in the lessons ‘Little Black Dots‘. I think that de-familiarisation is another way to say ‘novel’. Its well understood that the human mind wants just enough novelty to make life interesting but not so much as to make things seem unpredictable and dangerous. Having novelty confined to a game satisfies both needs well I think.

Hooks

I really enjoyed the section of the presentation that talked about hooks and how they are employed in different ways to affect players and app users. The idea of ‘stickiness’ is also great and really fun way to talk about being able to build habits in the player that keep them coming back to the product. This is another area where I feel that having a new vocabulary will benefit the design work that I carryout in the future. I can see the potential reward of thinking about this early in the development of a new product and experimenting with different hooks to see which are the most appropriate and effective in creating a sticky gaming product. This section has been the most interesting part of the weeks material for me and will form the basis of a SMART goal. Instead of talking about what I found out from the presentation, I will conduct a little research for myself and perhaps a light examination into which hooks I am using successfully and unsuccessfully in Serial Link, the only live project I have at this time.

Specific

Look at 3 to 5 sources online regarding hooks in games and identify the strongest ones for the types of projects that I produce.

Measurable

This will be complete when I have update the journal with the information I find on the most appropriate gaming hooks.

Achievable

I am already making games and have utilised some hooks without knowing that there is an established structure to them.

Relevant

As an aspiring game developer, I need to understand how to use these tools so that I might make better games.

Time bound

I would like to have this work complete within one week and should spend no longer than 3 hours on it.

Reflecting on my Reflections

Image from here

My goodness I am glad that this is done. I think all the students agree that the report on continuing personal and professional development has been difficult. Very difficult. But, we all also seem to agree that it’s been of great help. Talking it through with the other guy’s, I think that the report tackles one of those big, scary questions… What am I going to do? For some people, not knowing what they are doing is freedom and to have a plan is tantamount to prison, but for the rest of us, there is something in our brain that wants to know what the hell we are all about. My perspective has remained focused in one direction for the most part (being a game developer) but I have benefited greatly from the constant poking that the course is designed to inflict. It has helped me to look deeper into what I want to do and what I need to learn and practice in order to make that dream real.

Stronger together

The other interesting thing that happened was on the webinar yesterday (Wed 10th). Jamie asked what had been the most difficult part of the course so far and contrary to his expectation of something technical (I assume) the answer was ‘motivation’. That was a bit of a surprise to me but on listening to a couple of the other students talking, it made a lot of sense. There were two topics that came up for discussion. The first was ‘How do I fit all this in?’. Thats a fair point. Although this is a part time course, there are people working lots of hours but still keen to learn from a programme like this. The other topic was that of camaraderie and the difficulty of building that in an online environment.

Rise and shine

There was a conversation about how to fit the course content into a life where you actually have to go out and earn a living. I feel for these guys as a stay at home Dad. I have a lot of flexibility with my time, however, I cant code at a level that would get me employed so its not all sunshine and roses! But mostly it is…

The only suggestion I could make was an approach that worked for me when I had my shop and just had endless tasks building up because of it. Get up before everyone else and get and hour or so in before you day turns into doing stuff that other people need. Its a simple solution but I will admit that it a difficult habit to get into. I learned to do it by putting my phone on the other side of the room so that I would have to get myself out of the sack to turn it off. It worked, most of the time, if you just get some clothes on right there and then and get to the kitchen to make coffee, tea, bloody Mary, whatever you do in the morning. Once I was in the habit I got up at 5.30am and got 2 hours in before I needed to get showered and all that. A month later, I could see the difference in the work I was getting done and the quality of the work was better and not so rushed. The other end of developing that habit is getting to sleep on time. This was just a tricky as you do have to give up some free time to make an approach like this work. But, if your serious about what you doing and you want it more than you want to watch TV then really, should be easy enough. It gets harder when your relationships get a little compromised because the evening is that common time where you catch up with the other half and build your bond. Missing that time too much can be a hazard and I have felt that happen a couple of times. Creating dedicated time to spend with my Wife was to answer and has worked well ever since.

Sunday = No Work. End of story.

I get up at 5.45 these days and try to get 45 hours of work in per week, 20 on the MA and the other 20 on C++, Serial Link and some other bits. Also I need to study math. I keep track of which project my time is going on using TickSpot.com and my trusty Nerd Chart. And finally, I use a form of Pomodoro to make sure that I get my backside out of the chair every 30 odd minutes and it also helps me to stay focused as I know that a break is coming and the time is limited. There is just something about it that works for me.

Discord on Discord

The other suggestion that I made was setting up a server on Discord, a gaming oriented chat client that we could all use to get to know each other better and support each other. I set this up as soon as the webinar finished and invited all the students from the cohort to it and Im pleased to say that majority of them have already joined and its been fun talking to them. This has led to conversation about assignments, grading, feedback and personal ‘get to know you’ stuff too. Very useful and very enjoyable. I think we would have benefited from this a few weeks ago.

It has made writing this post take twice as long though… 😉

My CPD Goals

This is what I have decided are the top five skills I need to work on in order to move toward the reality that I am professional game developer. In particular, a game play programmer with some supporting skills in animation and and a really good grasp of the Agile methodology. Below are the goals from the final draft of the report. Very challenging piece to write and I am certain that there are many areas for improvement in how I think about this kind of thing and also in how I research. I think that I have strong ideas on what I need to do and am not quick sometimes to look at alternatives. Something to work on in the future, in addition to all the things I am about to put here. Busy times. Love it.

After this is posted (and it will a monster) I am going to come up with a time management plan and think about the practical implementation of all this reflection and talk. It’s the right talk, don’t get me wrong, but without some thought into how to execute this, I think it will be half cooked at best.

Goal One: C++ & the Unreal Engine

This is an important skill because C++ is an industry standard programming language, particularly within the context of complex PC and console games. I work with the Unreal Engine (Epic Games. 2019) due to the feature rich environment and business model offered by Epic (Epic Games. 2019). To access advanced engine features, I need to move toward coding in C++. This also removes the performance overhead introduced by additional processing required to use Epics visual scripting tool, Blueprint and the virtual machine it uses (Cpt.Trips. 2017).

Currently, I don’t have the proficiency to work quickly in the engine with C++.This obstacle has emerged because I had five weeks to learn about Unreal before coming back into education to study the final year of my BA. Learning C++, how Unreal uses it and the Unreal Engine editor simultaneously was not feasible for me, I just could not absorb that much information at once, so turned to Blueprint.

I am 68% through a course on Udemy (Frank J. Mitropoulos. 2019) that teaches the foundations of C++, introduces object-oriented programming principles and I will complete that first. Then, I will restart the Hostage Rescue Game Jam project, which is explained in the context of another goal. I will plan the classes and their relationships using Object Orientated Design Patterns (Gamma et al., 1995) and will express that design using the Unified Modelling Language (Object Management Group. 2019). Both topics are discussed later. I expect I would have a prototype within one hundred development hours. I will work fifteen hours a week on this task. 

Once I complete this challenge, I will investigate refactoring Serial Link into a C++ project. Serial Link is my main, personal game project that I hope to pitch to publishers this year. I will take the opportunity to redesign the class and interface structure to improve its performance and component portability.

This deliberate practice will solve the challenge because I will interact with many of Unreal’s features, learning how they are implemented in C++. My complex game project encourages this. I should gain an understanding of the structure of the Engine and will be successful when I am completing work more fluently and solving errors more quickly.

Specific

I will start the Hostage Rescue Game Jam project again and develop it in C++ so I can write more concise and performant code when compared to Blueprint.

Measurable

This project will be complete when the game prototype is finished and working.

Achievable

I have completed a tutorial using C++ in Unreal, comfortable that I predicted much of the material and understood all of it.

Relevant

This is a skill that is fundamental to my stated goal of game programming, therefor the challenge is relevant.

Time Bound

One hundred hours is appropriate, as I intend to reach only the level of detail I had in the original project already, which took thirty hours, and am not creating a sophisticated military simulation.

Goal Two: Object Oriented Design Patterns & the Unified Modelling Language

The obstacle is my project development slows once it gets to a certain level of complexity. My lack of upfront design causes an ‘ad hoc’ approach to further development. This often causes tight coupling between objects, reducing the objects reusability elsewhere. I refactor projects often, slowing the addition of new features. I tend to use complicated solutions due to my lack of knowledge on established, software organisation techniques. I frequently lose touch with how a class is interacting with other classes.

This obstacle exists because I did not uncover guidance relating to the overarching techniques of program design until experiencing class coupling and performance problems in my projects. I found this video (Christopher Okhravi. 2017) that introduced me to Design Patterns.

Object Oriented Design Patterns are proven, reusable solutions to common programming problems. An example of a common pattern used in games is the Observer. Numerous objects register with some class being observed. If it changes state or a specific event is triggered, the Observers are notified and can respond independently.

The Unified Modelling Language, a general purpose, visual development language that covers a broad range of planning diagrams, will help me organise my thoughts and designs on paper. I could use this, and the patterns I learn, to express better object-oriented designs.

This is crucial to my goal because without an understanding of this area, I will find it more difficult to plan solutions and communicate the construction of immersive and detailed games. During the Game Jam project, I failed to complete a working prototype. I believe this was due to a structural deficiency that caused the project file to irrecoverably crash.

I can learn the patterns and UML because I have demonstrated an ability to create projects with complexity although it’s clear that I need training in how to manage that.

I will know that this approach is working when my programming solutions are appropriately complex, robust, decoupled designs that solve problems at the right level of abstraction expressing them in UML before successfully coding them. 

Smart

Demonstrate the Object-Oriented Design Patterns from the book (Gamma et al., 1995) using UML and C++ console applications so I have more options when designing classes and class interactions.

Measurable

The goal is complete when I have UML plans and a console application for each pattern.

Achievable

This is the next logical step and I already have a beginner to intermediate skill with C++.

Relevant

I wish to create complex game systems that will likely require some upfront design, documentation and communication.

Time Bound

I will complete one or two patterns per week and all twenty-three in twelve to fifteen weeks.

Goal Three: Agile

Image from here

The obstacle is that my knowledge of Agile and its application in a software development project is fractured and incomplete. It’s important to complete my knowledge regarding Agile because it is the most common project management paradigm in software development today and I will need to collaborate effectively using it.

Currently I have some success using Kanban, managing Serial Link based on what I learned from the book Agile Project Management with Kanban (Brechner and Waletzky, 2015). However, the project lacks User Stories, a way to encapsulate what a user gets from the system at a higher level of abstraction. I’m focused on the technical delivery of features, almost in isolation. I don’t use Sprints which are periods or two to four weeks in which a selection of User Stories are delivered. Because of that, I don’t hold Retrospectives, a reflection regarding the success of the Sprint. This could be costing possible improvements in many areas of the project and my practice.

My incomplete knowledge has come about because I’m relatively new to software development and hadn’t experienced Agile before. Being introduced to the methodology previously, it was one of many skills to learn. Due its intangible nature, I focused more on skills that could produce visible or demonstrable assets, like game mechanics.

The challenge is to manage the development of the Hostage Rescue game, discussed earlier, with Agile methodologies. The deliberate practice I will complete will be two-fold. First, I will take a course that teaches the principles more completely (David Starr. 2010). Afterwards, I will manage the Hostage Rescue development using Agile.

This practice solves the challenge and removes the obstacle by allowing me to manage a new project, start to finish using Agile principles that I will study up front and then review along the way. By the end of the project, I should have been able to identify and solve the weaknesses that my incomplete knowledge caused. 

This practice will be working when I know the status of the project in terms of work completed, work outstanding and progress made through the current sprint. Ultimately, the delivery of the Hostage Rescue prototype will be the conclusion of this challenge.

Specific

Manage the development of the Hostage Rescue project using Agile methodologies I learn so I can understand the methods more completely.

Measurable

The successful completion of the Agile course I will engage (David Starr. 2010) and the artefacts that are created such as Use Stories, Sprint plans, records of Retrospectives will serve as measure this challenge. The completion of the Hostage Rescue project is also a measurable activity.

Achievable

This is achievable as I am comfortable that I understand Agile at a broad level. I have some information already and am practicing some of the methods.

Relevant

Its highly relevant as the methodology is used extensively in software development.

Time Bound

The Hostage Rescue project has one-hundred hours of development time and the Agile practice will be a part of that process, though I expect to complete the course the day that the project begins.

Goal 04: Animation

Image from here

The obstacle I face with this skill is that I want to customise my projects with animation that I can’t produce.

Development in this skill is important as I want to be able to work independently on my own prototypes. I could also be more effective within a team if I’m able to edit animations myself.

There are two areas of my work currently being affected. First, I struggle to compose animation systems for characters in Unreal. I constantly experiment with animation assets and settings and cannot confidently use them in a predictable way. Second, key features in my projects would benefit from small animations and edits that I cannot do. For example, the Psychic Push in Serial Link that throws enemies. Only a hand push animation would be required improve the players understanding of the feature.

This lack of skill has come about because I have focused very tightly so far implementing game logic and creating a prototype of Serial Link among other coursework obligations while studying for the BA. September 2017 was the beginning of my game development education and I’m only now broadening my skill set past mechanical implementation work.

The challenge I am setting is to follow a beginner’s tutorial course on how to use Blender, a free modelling and animation software package, for asset editing and creation (Mark Masters. 2016). Then, my deliberate practice will be using what I learn to create and edit animation assets in the Hostage Rescue project detailed already and in Serial Link.

Completing the animation course will teach me the concepts and information that I currently lack so I can understand animation at a more technical level. This specific practice will culminate in my ability to demonstrate that I can use this understanding to create unique animations and use Unreal’s animation systems to implement them in a predictable way instead of the excessive experimentation I conduct.

This is an achievable goal for me because I have already managed to get some systems working without a good understanding of why it works. Animation is built upon logical systems and I have not struggled to learn about such systems. I also have a somewhat under-developed artistic skill that should be enough to build on to enable me to make basic animations I need for prototyping.

I will know that my practice is successful when I’m able to import existing, and create new animations in Blender, develop them and export them to Unreal, using the Engines’ most appropriate implementation system.

Specific

Take a course to learn about animation (Mark Masters. 2016) so I can customise them for current projects including Hostage Rescue and Serial Link.

Measurable

When I have completed the animation course and created and implemented at least ten animations, this goal will be complete.

Achievable

I understand what animation is, I lack the detailed knowledge and experience to create them. This goal will be an extension of my knowledge, not a new, unknown subject.

Relevant

I am producing game artefacts already and animation is a key area in making them visually appealing and a vital tool for communication to the player.

Time Bound

I will spend ten hours studying a course. I will then be developing the skill throughout the Hostage Rescue development.

Goal: Learn 3D Maths for Games

YouTube video here

The obstacle I face using this skill is I don’t really understand what I’m doing when I create logic that relates to characters and objects in 3D space. For example, I don’t fully understand how to use vectors, rotators and trigonometry.

A degree of mastery of this skill is important because I want to build complex systems that enable assets to interact with each other and the virtual world. Maths is a fundamental skill for a game programmer as it deals with the analysis and manipulation of the game’s most basic building blocks (Jason Gregory. 2009).

Currently, I use combinations of Blueprint nodes, the building blocks of the scripting system, that I have picked up from example content that solve operations like line tracing and extracting the direction some object is facing. But I don’t deeply understand the foundations of what’s going on and would certainly struggle to explain it in clear terms. I often experiment excessively to get the result I want, and I would prefer a high degree of predictability instead. This prevents me from creating more interesting behaviours and interactions and slows down the completion of work.

Some of these things are GCSE level math problems but due to a difficult childhood, I was less than attentive at school. I never learned about vectors, trigonometry or linear algebra for example. I have picked up what I can from tutorials, but not yet studied the issue properly. I would like to address that now.

I have recently purchased a book about math for game development (Lengyel, 2012). I will work through the book and study the information relating to vectors, matrices, transforms, geometry and visibility determination.

I will learn the theory and formula’s, completing the exercises in the book to develop my understanding. I will create a small Unreal C++ demonstration project that shows these things working.

This practice will solve the challenge and remove the obstacle by enabling me to learn the formulas and fully understand why they work, expanding my ability to think with them. Producing the Unreal project will be a tangible artefact that I can use to demonstrate that understanding.

This challenge is achievable because over time, I have managed to acquire a basic understanding of how some of these structures work, just through exposure to tutorials that are focused on teaching other things. I think that using a structured text, research and reaching out to peers and tutors should be more than enough to allow me to build a solid base of knowledge and understanding in this area.

I will know that this practice is working when I can quickly and predictably build logic that leans on vectors, rotators and so on and easily demonstrate and explain how it works.

Specific

I will learn how to use vectors, matrices, transforms, geometry math and visibility determination so can create more complex interactions and behaviours.

Measurable

This will be complete when I can explain and demonstrate the skills above and have completed the Unreal C++ project that uses them.

Achievable

I am already using some of this math in projects and have a basic grasp of how it works, I need to extend the knowledge that I am familiar with.

Relevant

Understanding these domains of mathematics is crucial to be an effective game play programmer as they are the fundamental tools that allow Actors, any object in a scene, to be spatially organised, queried and manipulated

Time Bound

This will be completed in fifty hours and is a long-term goal. I expect this to take around eight weeks to complete.

References

Brechner, E. and Waletzky, J. (2015). Agile project management with Kanban. Redmond, WA: Microsoft Press.

Cpt. Trips. (2017). UE4 Performance – BP vs C++ vs Blueprint Nativization | feat. Multithreaded Tick. Available: https://www.youtube.com/watch?v=8gVixDglpQ4. Last accessed 10th Apr 2019.

Christopher Okhravi. (2017). Observer Pattern – Design Patterns. Available: https://www.youtube.com/watch?v=_BpmfnqjgzQ. Last accessed 10th Apr 2019.

David Starr. (2010). Agile Team Practices with Scrum. Available: https://app.pluralsight.com/library/courses/agile-team-practice-fundamentals/table-of-contents. Last accessed 10th Apr 2019.

Epic Games. (2019). Home Page. Available: https://www.unrealengine.com/en-US/feed. Last accessed 10th Apr 2019.

Epic Games. (2019). Frequently Asked Questions. Available: https://www.unrealengine.com/en-US/faq. Last accessed 10th Apr 2019.

Frank J. Mitropoulos. (2019). Beginning C++ Programming – From Beginner to Beyond. Available: https://www.udemy.com/beginning-c-plus-plus-programming/. Last accessed 10th Apr 2019.

Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995). Design patterns, Elements of Reusable Object-Oriented Software.

Jason Gregory. (2009). 3D Math for Games. In: Game Engine Architecture. Florida, US: CRC Press. 359 – 414.

Lengyel, E. (2012). Mathematics for 3D game programming and computer graphics. 3rd ed. Boston, Mass.: Cengage Learning.

Mark Masters. (2016). Creating Game Animations in Blender. Available: https://app.pluralsight.com/library/courses/blender-creating-game-animation-2460/table-of-contents. Last accessed 10th Apr 2019.

Object Management Group. (2019). Home Page. Available: https://www.uml.org/. Last accessed 10th Apr 2019.

Taking a UML Course

The Pluralsight course can be found here

I have tackling the SMART goal for learning UML this morning and you can find that here. The problem that I am facing is that I need to be able to record my thoughts and ideas about how my software fits together. The need for this was highlighted is my game jam catastrophe! I think that the problem came about because when people (generally) talk about learning the code, they talk about learning a language and thats kind of the end of it. Well, I suppose that’s the beginning of it really and then once a person has a enough skill to get themselves in trouble with twisted logic and terrible dependencies, they go looking for a way to think more clearly. Well, thats where I am right now.

I have decided on two goals that I have discussed already (UML and Design Patterns) that should really help me with that problem. I am now learning the UML symbols and the various diagrams before I attempt to use it for my own designs. I expect that I will be able to sit with a pencil and some paper and put some of the thoughts that I have about how things should fit together on paper, which I hope would expose any poor or uninformed thinking at that stage rather that 20 hours into building something.

The next task that I have set for myself is to create some flash cards to make learning the names of all the elements of the ‘language’ a little easier and more thorough. From there, I will watch another tutorial that seems a touch more up to date, just to get a feel for the common things that the two presenters say, which will help me hone in on the things that are understood to be ‘standard’.

I think that this goal is progressing as expected really. I knew it would take a little while to learn and the terminology and the symbols and then there is learning how to think properly in the first place. Just because I learn some UML, I not equating that to automatically cleaning up how I think about dependencies and activities but it should be a good start. I may look at modelling the existing approaches that I am taking in Serial Link, just to see what sort of hot mess the diagram is once I’m done…

Touch Coding ;)

Dull, I know, but in there is a super power waiting to emerge…

The Problem

The problem at the moment is that although I feel quite comfortable on the keyboard when coding, I would like to feel a lot more able to hit the more unusual symbols without thinking so much. It may seem a superfluous skill but I learned how to touch type only recently and I can safely say that it has a very positive impact on my ability to complete written tasks faster, freeing up that time for, well, anything else. I also allows me to think more while I type and (in my opinion at least) better content in that work. I have a SMART goal defined for this task here.

So I want to do the same thing with the symbols, keywords and other punctuation needed for coding. I used to use the ‘hunt and peck’ method and although I was pretty fast, I had to look from the screen to the keyboard and back again all the time. Its surprising how interrupting that is, now that I don’t do it. I know already, from the little bit of past experience that I did get while failing my degree as a child and before writing that wrong in my old age (ha!) that the H&P method is even more inconvenient when trying the think about logic, keep your position on the screen and then find the pipe for that ‘or’ statement you are trying to write. I just want that sort of hassle gone if this is going to be a career for me.

Is it right? who cares?!

I do.

I want to be very clear that this is not about writing code faster so that I can write programs faster and ‘get through’ more stuff just to say ‘I’m done!’. I know already that would lead to sloppy, buggy stuff. The proof of that pudding is here in the other goals that I have set up for myself.

This is more about just reducing the friction of interacting with the keyboard. I am also thinking of coating all the keys in Teflon…

In the Past…

I learned about how to drill words, fragments of words and commonly used and combined words. Having seen that work really well before, I will be putting together a test sheet that covers all the things I want to learn. I expect that after drilling that document 15 to 20 times for about 15 minutes per session that my speed and accuracy will improve when I am coding.

I never spent long on drilling this stuff while I was learning to type and I won’t spend long on it here. The reason is not that I don’t want to spend a long time, it’s that this is the type of skill that is best built up over time with low exposure but very frequently. So something like 15 minutes per day, everyday, is a really good start. If I have time for more, I would do a morning and afternoon session rather than just do the time straight through.

Already doing?

I have already begun using the symbols and punctuation for programming while not looking at the keyboard and I know where they are, they just don’t flow naturally at the moment. I think that should I be able to improve this skill that I will simply be able to write code faster and remove an obvious barrier in the ‘Understand problem, conceive a solution, code the solution and test it’ chain. I have other SMART goals for the other areas in that chain.

The Docs themselves

I have now created 2 documents that I will test myself on and drill until I can see an improvement in the completion times and less tangibly, how I feel as I type them out; Are they still difficult? Which symbols and keywords am I still tripping up on? From there I will derive the next documents that focus on areas of weakness that I identify. REFLECTION BABY. I should be taking the tests tomorrow.

Emerging Technology

I am interested in and have the need to explore how AI in games is constructed and how I can use existing approaches in my games. Being relatively new to the field means that there are existing, well understood and popular ways to handle this problem and I would benefit from fully understanding those. The AI that I have used in Serial Link, the only game project that I have created AI for, is very simple. In fact it is very obviously too simple. Although I found much of the material from this weeks content very interesting and I talk a little about that below, I know that there are technologies like the Environmental Query System that are already present in Unreal and I think that its appropriate for me to focus on those at the moment. I have become increasingly guarded concerning the subjects that I agree to dig into, as it is very easy to found myself knowing a little surface information about a lot of topics but I don’t believe that gets me any closer to the goal that I have of being a professional games programmer.

This weeks course material was plentiful. There was so many interviews to watch and think about that I must admit, I should probably have watched them in two, even three sessions so as to get all of the benefit. I found that my eye was drawn most to the discussion around Artificial Intelligence and in particular how it can be used to learn from human players. The purpose is to have agents the use this technique behave in a more human way, complete with not just the moments of brilliant play but also the plentiful mistakes they make. This makes the game experience much more immersive particularly for adversarial games. Here, its difficult for AI programmers to create challenging, defeatable, and consistent yet a little unpredictable. On the other hand, nothing annoys players more than a stupid side kick character who is constantly in the way and reduces the quality of the players experience rather than enhancing it.

The particular flavour of this approach that I liked was Genetic Programming. The reason I like this is the resulting code generated from the learning process reminds me of Behaviour tree nodes from Unreal. I have not delved deeply into this because I have already committed to more work than I think I can complete but based on the presentation by Swen E. Gaudl, it seems that the developer is left with nodes or ‘genes’ that are interchangeable and customise-able. I would very much like to break into Machine Learning in some way soon and the thought of having AI agents who are appropriately skilled and feel human is very interesting. There is a barrier to me using the particular frameworks that he talks about in that I don’t know how the code in Java. However, I am sure that this is a paradigm at least as much as it is a framework and would not be surprised to find this approach in play using other languages. I will continue my learning of C++ and once that is more up to date, I could consider Java if needed although I have already expressed the need to move from C++ to C# in order to use the Unity game engine.

As for where I am in the course right now? I have posts covering the work on the Battery Collector Unreal tutorial and the creation of a SMART goal for understanding animation. I also cover a presentation that was suggested to my by Al at the Games Academy, that talks about whats going on behind the scenes with Git.

SMART: Animation

I got this here.

Specific

I will learn enough about animating 3D Characters so that I can animation characters for the games that I make which will enable me to create much more specific and personalised content for my games. I will do this by first seeking advice on which application to learn, deciding on one, and then finding a beginner level tutorial series on one the learning platforms. I will also find something short that can inform me about the basics of the 12 principles of animation. I will complete this in 6 weeks

Measurable

I will track my progress by progressing through the course I choose and the measurable outcome will be that I will be able to take some character from Unreal or a third party service, bring it into the software of choice, create animations for it, import those to Unreal and set them up there so that they can be used during the game.

Achievable

This is achievable because I am already familiar with the concept of key frames and I can draw to a good standard. I also understand that using reference material for animating really would be the best place to start so that I can learn to make convincing movement. The skill level that I am looking for is beginner to intermediate as this is a skill that I would employ while prototyping and would not intend that my animation work would make its way into anything for production. I need to watch out for this taking too much time as the primary focus for me is still coding.

Relevant

This goal is relevant to me because it improves my ability to make my games more interesting and would allow me to more clearly show the player what the mechanics do. I am the right person for this as I already understand form to the point where I can draw a little and I do not struggle to learn things of this nature. In the future I will need this skill if I want to be able to attract interest to something that I am working on. This is the right time for me to achieve this because I have time set aside for learning how to be a game developer and my life should only be getting busier over the next year.

Time bound

This goal should be complete within 6 weeks. I will achieve this by spending 5 hours per week on this goal.

Serial Link Commit 17: 29th April 2019

Ahh, you little tiny Gore Piece you.

Some of these commit notes are from memory as I have found out that Git Desktop does not save the description that I created between launches of the program. Once the program is closed the information is lost. Very irritating! So, from now on I will work in Workflowy to take the notes that I need and just paste them into Git Desktop when I am ready to make a commit. Bah.

Macros are cool

This is my first macro. I dont mean the macros that you can set up in an actor that are a little like functions, only at compile time the nodes themselves are pasted in where ever the macro is used. No. I mean that this is the first macro that I have created that is part of a custom Macro Library. Yes, I feel very grown up right now. I know its simple but it turns out that this little guy is really useful. So, now I am looking out for logic that I an duplicating between blueprints, as thats really the issue to solve with this. I also finally know what a ‘wildcard’ is. Its anything. Simple. More specifically and as I understand it, a wildcard is used as a placeholder at time of creating the logic so that when the macro is used, it will determine the type of what has been passed to it and work with that. Perfect for an array operation like this as it does not matter what the array contains, only that it is an array.

Commit

  • Fixed the macro that was supposed to be fetching a random element from an array
  • Imported some new blood splatters for testing
  • Started to set up the gore profiles
  • Created Enum called Gore Profile Struct that contains a Name field and an array of will be – Gore Pieces. This should allow me to set up things like ‘HeadShot’ as a profile and then determine that eyes and brain gore should be included in the list of gore.
  • Created Gore Pieces Base that I will use to make children Gore Pieces. The functionality like audio on hit and spawning decals or drawing them from a pool will happen in here.
  • Created Gore Piece Eyeball just as a test really as I have not changed the model to an eye although I do have them. Its just to start building the Profile idea out.