A C++ Exercise: Rock, Paper, Scissors.

Image link

After speaking with Jamie a while back on how I might go forward with learning how to code, he told me about some simple exercises that he would give an aspiring student. So, here is it.

This ties into my SMART goal of learning to code with C++ which can be found here.

But why?

Well, its a simple concept and the rules are very clear. The menu driven nature of the game makes use of loops with checking the win condition makes use of selection methods. The program is small enough that I should have been able to hold most of it in my head but large enough so that I would need to (or should at least) use functions to break up the common logic. Its a lightweight program to test the basics, perfect.

The program, well some of it.

I included all the headers I would need for basic stuff like input and output and I declared that I would be using objects from the ‘std’ namespace although I have already been taught to only declare the things here that you are actually going to use and not the entire namespace.

Then I created and enum for the choices so and created the function prototypes

This is the main function, simple stuff really. I like to break things up as much as I can so having all the menu choices lead to function call’s was good.

This is the first part of the play game function

And it finishes checking the win state

This is how the AI (if you could really call it that) made its choice:

And if the game was over, this was called:

what did I find difficult

The thing that I found difficult was the temptation to consider really slick ways (that I don’t know really) to find out if the win condition had been met. I was convinced for a while that there was some magical one of two lines of code that would be ‘the way’ to do this. Its a common problem from what I read about people who are learning to code like me. I like the way that Ben Tristem (Udemy Instructor) talks about it. Red, green, refactor. Although on closer inspection that appears to be a whole approach to software development. Mr. Tristem talked about it like this: When the code is red, its not working, do what you have to do in order to make it work. When it works, its green. Now its working, go refactor it into something elegant and efficient. I keep reminding myself that I have to write bad programs in order to write better ones and then when I have written enough of those, my code might be ‘good’. I get the feeling though that ‘good’ means different things to different coders…

SMART: Gamification

Quite. Image from here.

Specific

I will conduct research using the internet so that I can find what I think are the most interesting and/or successful ways in which activities have been ‘Gamified’ which will improve my ability to recognise opportunities for gamification in my own applications. I will do this by reading about successful executions of this approach and also using some of the free versions of popular apps. I will complete this in 4 weeks, spending 2 to 3 hours per week in this area.

Measurable

I will know that this is complete when I have found no less than ten examples of gamification that appeal to my tastes as a consumer.

Achievable

This is achievable as it is a simple research goal requiring nothing but some time and the internet. I may need to recognise when my own tastes prevent me from learning more deeply about techniques that could be very useful to me learning and understanding. I will tackle this by not being too quick to judge the source material and make sure that I fully understand the reasons I may not think that it is relevant.

Relevant

This is relevant because I am very interested in gamifying anything that I develop. I am drawn to making games and if I have to do something more grounded then I would like to understand a selection of ways to make the application more game like. I am already making games and have the basic understanding as to what constitutes a game. Its also relevant as there is no small amount of talk about how gamification in already impacting how a diverse range of applications are using its techniques to improve engagement and customer retention.

Time bound

I will have this activity complete in two weeks and will present what I find here on the blog.

SMART: Learn to code with C++

Yes, I would like to avoid this. Image.

Specific

I will learn to code using C++ so that I can create C++ based Unreal projects but also so that I can get transferable coding skill’s that are employable outside the game development industry. I will do this by following a course called Beginning C++ Programming From Beginner to Beyond on Udemy. I will complete this course in 6 weeks by allocating 7 hours per week.

Measurable

I will track my progress by monitoring my ability to explain in my own words what the tutor is doing, complete all the course quizzes and coding exercises. I will also supplement this with completing small tasks agreed upon with my tutors from the course. The measurable outcome will be that I will be able to explain and use all of the concepts and skills taught on the course and this will be evidenced by the programs I will create as discussed above.

Achievable

This is achievable because I have already gained experience with C++ to a point where I can write simple console applications. I have the right learning materials, the right people surrounding me for support and the allocated time to practice the skills that I need. The skill level that I am aiming for is intermediate in this case, with a new SMART goal being created for the journey to an advanced level afterwards. I need to make sure that I stay focused on the concepts that I am learning and that I understand them completely before moving onto other things. I am aware that coding is a skill that builds up in layers of complexity and that a shoddy foundation would seriously inhibit my ability to learn to code properly.

Relevant

This skill is relevant to me because I want to learn how to make video games but also acquire coding as a transferable skill. The achievement of this goal would improve my ability to create great games and also the opportunity of employment should game development not work out for me as quickly as I would like. I am the right person for this as I have already shown an aptitude for blue print scripting in Unreal and am able to understand the overarching concepts behind programming. My personality type is also of relevance here, as I like problem solving and have the patience and determination to learn complex skills while not taking failure as a negative experience.

Time Bound

I will be attempting to complete the course mentioned above inside 6 weeks at which point another SMART goal should be defined. I have allocated 7 hours per week to this task.

SMART: Design Patterns

The book is by the ‘Gang of Four’ so… Image from here.

Specific

I will understand each pattern presented in the book ‘Design Patterns’ so that they could be used in the context of my game development. This will make my project structure more robust and easier to build upon. I will do this by creating sample projects to illustrate each of them in action in simple console applications using C++. I will complete this in 2 of the 26 patterns per week and expect to have the goal completed in 13 weeks.

Measurable

I will know that this is complete when I have example projects for each of the patterns covered in the book. This will be the measurable outcome.

Achievable

This is achievable because I am already using some of these patterns without realising that they are design standards. A similar skill that I have learned is the concept of Object Oriented programming in general and the design patterns feel like a natural extension of that. The skill level that I intend to achieve is intermediate as I have already created complex projects in Unreal. One thing that may interfere with the achievement of this goal is that I may find unexpected complexity in areas of programming that I have not yet explored. Should that happen, I will conduct additional research or reach out to tutors for advice.

Relevant

This is relevant because Unreal and Unity are both engines I wish to use and they both use an object oriented approach. Its also relevant because I have enough skill with Unreal to quickly create a complex project, but I need help to organise my thoughts and intentions in advance of that execution. I will need this skill in the future as I intend to become a professional game developer. This is the right time to pursue this goal as I require the skill immediately and would see an improvement in my projects very quickly.

Time bound

There is a lot of material to cover here and I would expect that this may take around 3 month’s to complete. I will aim to complete 1 example of 2 patterns each week until I have covered all 26 of them.

*Update – I have realised that I already own a book called Game Programming Patterns and I think that I would like to explore that book also. So, on my newly created Trello board (more on that later) I have also listed the patterns, or at least this authors explanation’s of them as to do items in the main SMART goal. I think that its appropriate and helpful to have some of the patterns explained from two authors and I feel that the game patterns book is going to present patterns that are more appropriate to what I want to learn about at the moment.

SMART: UML (Unified Modelling Lingo)

Yes, well, I’m still convinced that I could use this so… Image.

Specific

I will learn UML theory and practice that is proportional to that programming skill that I have already. After that I would learn UML so as to represent the more advanced programming theory I would be learning at the time. I will do this by taking a course on UML for beginners on Pluralsight or something similar. I will also use the section at the end of the Design Patterns book that covers the UML used there.

Measurable

I will also measure this by making sure that my programming plans and thoughts can be communicated with other programmers using only UML. Another way that I will know that this is complete is when I can fluently draw UML with as much complexity as I can think with and make minimal mistakes in the UML representation (not the quality of the logic, which may need iterating on)

Achievable

I know that this is achievable because I am already having to think in terms of object construction and communication in order to create the projects that I can show already. UML is just another notation to express that.

Relevant

This is relevant as I have identified that I wish to be a gaming generalist but with an emphasis on programming so as to be able to make my own games. It is also relevant as I have recognised that I lose track of the structure of project’s once they reach a certain level of complexity.

Time bound

I intend to complete this in 2 weeks.

SMART: Version Control

Hmm, sounds familiar… Image.

Specific

I will become skilled and fully understand Git, LFS, Git Bash and Git Kraken to the point where I can perform all the basic functions that are required in order to have a project under source control. I will create a project, create branches, commit to various branches, merge them together and roll the project back. I will try to ‘break’ the project and understand how I need to use version control to pull the last working version of it.

Measurable

I will know that this is complete when I can perform all of the activities such as setting up repositories, creating branches, making commits, and more importantly, being able to roll a project back.

Achievable

I believe this to be achievable because I have learned complex systems recently and shown that I am capable of understanding how they work and how to use them.

Relevant

This is appropriate because I am regularly working on projects that are valuable and require multiple development sessions. In future I am quite sure that I will be involved in teams that are using version control and need to be aware of how it works.

Time bound

This is something that I have already begun and I intend to complete some self directed goals that complete this challenge within the next 2 weeks.

‘I get Gamified, its all the same you say live with it but I don’t get it!’ Disturbed. Gamified. It might be Stupified. Definitely Disturbed though…

This is, I hope, the last week in which I am playing catch up and no, thats not some really cool way to gamify not being on point. I am glad that I did this catch up though as the most interesting part for me is the gamification of boring stuff or important but otherwise dry stuff.

Types of apps

I got this guy from here

Having just watched the introductory video on this section, the material is aiming to allow me to get a better understanding of the qualities that an app should have in order to be successful in a saturated market. I think that this will be good for me as I tend to work on things that interest me and not because I have studiously revealed a gap in the market or something grown up like that. I have not looked far outside the gaming space at all and, if I’m honest, I haven’t completed anything you would called ‘research’ in that area either. Is that the product of not knowing the scope of the app development/retailing world? Probably a little. But, I would say that its more a matter of the fact that I really want to make games and have that feeling of seeing people play the things I have made or worked on. Still, I am open to change, I just dont think it will be as interesting for me. I suppose the course is the very activity that will be encouraging me to broaden that view. I need to learn how to conduct market research and I suspect that there is a tasks on its way to give me just that chance…

I could spend some time in the online market places like the App Store and Google Play but I suspect that I would be left square eyed and looking to pull the plug (I don’t mean… That’s a bit over the top! I just meant, stop doing it!). I think that I will wait for a heartbeat and see if there is a task lurking in the course content, ready to jump out and and scare the bejesus (take that Grammerly) out of me.

Image kidnapped from here

Market Research

“There are literally millions of apps available…” Yeah, this is a little more crowded that I realised. So, what are the elements that the successful apps share and what ‘dooms an app to fail’. That seems like a good starting point. Getting a little more specific:

  • Who is the market?
  • How is the market segmented?
  • Which market segments are most relevant to your app?
  • what are the demographic and technographic characteristics of users in these segments?
  • How are the needs of these segments currently being met?

Following trends is important as the market and its demands move and change very quickly. From reading I did on the BA, I remember a couple of points in this area that are worth, er, remembering. The first was not to follow the trends. More specifically, it was that its common to miss the trend and be late to the party. This comes down to how close your finger really is to the pulse of change (ugh, ‘pulse of change’, what am I typing…). If you find out that some type of app is super popular and you decide to develop something in that area, its entirely possible that by the time you manage to release it, not only are you competing with the original, the good ‘me too’s’ and the bad ‘me too’s’, you may have just missed the demand. The other issue I remember reading about and really soaking in was that of identity. I don’t mean the (trigger warning) snowflake debate, I mean that if you, the developer, is constantly trying to turn your half developed app into something that can follow the trends, your will likely find yourself with a mishmash of features that just dont really add up into a consistent and purposeful experience for the user. I do think that there can be something as being ‘too aware’ of what the trends are and having that knowledge driving everything you develop could lead to a very depersonalised and generic product. And besides, who is to say that the trend is good anyway? Is it just some flash in the pan like fidget spinners, or is it ‘disruptive’ like Instagram? Its a tricky one.

What am I going to do about it?

Well, like I said, I think that there is a task waiting in the shadows for me so I will hold off on creating my own just yet.

Getting a handle on things

Al recommends the sensible approach I talked about above, just go to the retail sites and look at how things are doing. He talks about finding out how the apps are segmented, which I thought was a pretty good idea too. Also, the advice on finding the poor examples of apps and learning what not to do is good advice I already know from having some poor roles models in my life. ‘Not going to do it that way’ is almost as valuable as ‘Ah, that’s the way’. I suppose at that point I would be looking for common themes in both types of apps, generating a ‘must have’ and ‘must not have’ list. Al goes on to talk about not forgetting the user! Its a real danger that I think I have experienced when developing Serial Link. I have had a couple of moments where I come to realise that I developing some feature (or over developing it) that has just got my interest. I realise in that moment that I have forgotten that I am not the one that I hope will be paying money to play the thing. This is one of the reasons that I went to Kanban, a tool that I hoped would help me to stay more focused, which I’m pleased to say that it has.

Image liberated from here

Google Trends looks very useful, I didn’t know that was a service I could use. I will have a look at this soon, just to have a play and familiarise myself with it. Although I could see how this could turn into a procrastinators paradise… Another service mentioned was App Trace and looks very interesting too. This one would be very useful as it combines all the apps sale data from all the major stores and presents it all in one place. The Pew Research Center can be used to identify other qualities relating to app trends (among other things) such as what technologies are being more predominantly used by certain markets and what the attitude is to them. I had not heard this word ‘technographic’ before, but this resource is where I am to find information relating to that topic so that I could take an educated guess at where the app should be targeted and as Al says, how to monetise it.

Competitor Testing

Competitor testing is where a lot of this research is going to end up. I suppose its a personal thing as to how a developer responds to the presence of an app that would be a competitor. He can thing ‘Dammit, I’m not the first’ and go off looking for something truly original. Or, and much more usefully, ‘Ah, this is the sort of thing I was going to do and these guys have done my prototype for me…’. This would be a much more positive outlook and allow the developer to really use the work that has gone before. Theres a saying ‘Get off my shoulder, you too big’. Or is it ‘Giants have massive shoulders’. Something about giants and shoulders.

What segment would my apps fall into? This is where the rest of the content is going to lead me. I am enjoying this weeks content as its not something that I would usually look at but I think that because of that, I could really benefit from it.

I think that, hmm, I got this from, hmm, here.

Being honest about the quality of your ideas. I think that this is a strength of mine, although if I were suffering from this problem, I would say that… I think that my time working for myself and running my business for ten years has taught me that there can be a huge difference in how you think your customers should respond to something and then the reality of how they do. I think that having those experiences has made me more likely to ask hard questions but also, and I think that this is more important, seek out the thoughts of people who do not care about my feelings. Thats the important part. Throughout Serial Links development I have put it in front of people who dont know me or the team and frankly don’t give a rodents behind that its been a lot of work (like we are the only people in the world who work hard). They told us things that we did not think about, they criticised things we thought worked really well and the loved things we thought were broken. It’s an attitude more than a set of tools and procedures and I really do try to be as demanding as I can as a developer, knowing that the user will spot things that are wrong very quickly and will just move onto something else thats not broken, or at least less broken. The other side to this process of having the software tested in this way is a free brainstorming session, if you are humble enough to listen to what they say. Some of the ideas that people have had for Serial Link have hit the Kanban backlog and I hope will become full on features in the future. Its worth remembering too that this activity fits in with the Agile methodology (not that they would call it that as its too close to a system, which is not Agile… Ba-zing!) of being in touch with all the stakeholders as regularly as possible. There is no stakeholder more important than the end user.

Serious Games

Nabbed this from here

The closest thing that I have done in this area is the Army Game or the Virtual Military Sim, which was the Commercial Game Development project from the last term of the BA Top Up course I completed. It had a serious theme and focused on three areas of Army activity. This first was a virtual interview with a recruiter. The player ‘sat’ in room with the soldier and used a touch controller to aim at a white board, answering multiple choice questions being spoken by out voice actor at the time. The second stage was almost a full strip and rebuild of the standard Army weapon, the SA80, again using the touch controllers. And finally, the player had to command 3 team members and use them to triage the casualties caused by a natural disaster. I learned so much from completing this project and would love to have the chance to work on it further. Although there was talk at the time that might happen, unfortunately nothing has of yet.

I had no idea that the app store took a hard line of some serious games but I suppose I can understand why. There is an amount of curation that a user expects and part of that is going to be not allowing offensive, uncomfortable, immoral content although talking about how those criteria are set and met is a more interesting discussion.

Gamification

This is from Habitica

Habitica. Its so strange and sort of reassuring that I have used a lot of the material that is coming up in this course! This is another one that I used a couple of years ago when I was trying to find new software the supported the GTD methodology that I had fallen in love with. I still use the methodology but not a thoroughly as I did in the past, although I think that I should change that an engage with it again. I feel so strongly about that in fact that I think I see a SMART goal coming up… Anyway, getting back onto Habitica. I really enjoyed playing around with it and I would be tempted to go back to it and see if the problems I had have been sorted out. First though, what I liked about the app. I really liked the idea that my to do’s, things that I had to get done anyway could translate into something gamey and usable in the virtual world. Because of this, I really enjoyed levelling up the character and buying all the weapons and so on. I think that they idea of eggs and pets that can be transformed into mount was also a really good hook to keep you playing.

I think that the people who are naturally drawn to this sort of thing have a underlying need for completion in the first place, so having lots of things to collect and transform is a great mechanism to satiate that. I could not get anyone else I knew to join in and so I never got to do that quest thing or any of the other content that required other people. I didn’t really mind as I must be honest, I like my own company for the most part and am quite at home with either single player games or coop play but only with people that I already know well and usually from the real world. The downside to using the app was that at the time I lived on my phone way more than I do now and the iPhone app that was around at the time had some pretty serious syncing issues. The items that I was organising and tracking with the app were mostly business related and the thought that something would slip through the crack between my phone and their server was just too much for my brain to bear so I stopped using it. It did put the idea of gamification in my mind though, but thats for another post if I ever feel like sharing that idea (it was pretty good though).

eHealth and mHealth

I know that there is value in this sort of thing, but I have to be honest and say that I find this area pretty dull. I am drawn to games, games with mature content and themes at that. I don’t think that working on something in this area would satisfy that part of me that gets a kick from finally getting that head explosion attack working properly, or the satisfaction of having a soldier character shout ‘man down!’ at just the right moment. How much sugar is their in your diet? If you care, then probably too much. I know I’m being a little flippant but, well, yes, I am. Back to the games!

Casual Creator

Just google the image. Get it. Ok, its here.

Having watched this part of the presentation, my mind is drawn to the time I bought the Oculus and the touch controllers. I was so blown away with VR when I studied it on the BA that after talking with my wife, we agreed to get one. The reason I talk about this here is that my Wife is not a gamer as understand the breed. She is not interested in story, suspension of disbelief, violence and so on. But, she must have played around with that Google Blocks thing for at least an hour. I think that these kinds of experiences are good in that they broaden what is accepted as a game. That can only be a good thing for us players and even better for us as developers. More players means more investment and money and more of that means more development work. Win, win. But, I think that my true motivation is more sinister… Mwahahahaha… I think of these things like gateway drugs to, dare I say, ‘real games’! I think of Google Blocks like the weed to the Skyrim heroin. Now there’s sentence I’m really proud of 😉

Quantified Self

I’ve got sensors for me sensors! Image here.

I hate that I love this stuff. I dont know why. Maybe its just that I am part of that generation that saw this stuff come in and have our parents (fathers in particular) saying ‘In my day, you just went to sleep. Now they wanna poke and prod you and tell you how your getting it wrong… ‘. But, I dont really see it like that if I’m honest. I think that knowing more about how your particular body works and responds to things like sleep, food, stress and so on can be very valuable. I do think though that you need to be interested in the long term actions that you can take on that data and its not really good enough to monitor your sleep for instance, see that its not very good and do nothing about it. But, I suppose that seeing the data might be the first step in even knowing that there is a problem somewhere and if the solution is slow coming, at least its on its way. I am a little ‘I want it to happen now’ with a lot of things in life although I feel that I am controlling this better with age.

Using MyFitnessPal: One thing that I am already doing is monitoring my calories and trying to make sure that I ear 3000 a day as I am trying to put on a little weight. I like HST style weight training but as someone who is not naturally big and strong, I struggle with the eating needed to get big and strong! The ironing (take that Grammerly). So, I use the app to set the calorie and macro-nutrient goals for the day and I must admit that its making the whole thing much easier. I have also learned a ton about whats actually in some of the foods that we eat. I can see a day coming where we just have a chip under the skin that collects data and I have to be honest, I love the thought of that. Sign me up!

Love it. And loved it here too.

SMART goal for getting back into GTD, just because I really need it.

S

I will establish a GTD routine including a daily review, weekly review and will define the various Horizons talked about in the book, Getting Things Done. I will use Workflowy which is an excellent bullet-ed list style web application. I will use the @person #trigger and #day to be able to access the right information from any direction.

M

I will know that this is complete when I have all of the could do, should do and want to do items recorded in the system and with a defined ‘next action’ should that be required and am regularly conducting a weekly review of that collected material.

A

This is an appropriate goal as my life is growing in complexity once again and having a healthy grip on all the things for which I am accountable is the cornerstone of productivity in my opinion.

R

It is a realistic goal as GTD is used to solve exactly this kind of problem and is well documented as a thorough self management standard. It is also realistic as I have used it with success in the past and am familiar with the routines and the reasons behind why they must be completed.

T

I expect that this will take about 4 weeks of reminders and habit building to become second nature again. Its worth noting that I am not starting from nothing and have been running a lightweight version of GTD for the last few months, but I know that the strength of the approach is found in the relentless application of the routines that capture tasks and projects and trigger their next action, each at the right moment.

SMART goal for for learning more about Gamification

S

I will conduct research using the internet and find what I think are the most interesting and/or successful ways in which activities have been ‘Gamified’

M

I will know that this is complete when I have found no less than ten examples

A

This is appropriate because I am very interested in gamifying anything that I develop. I am drawn to making games and if I have to do something more grounded then I would like to understand a selection of ways to make the application more game like.

R

This is realistic because I am already making games and have the basic understanding as to what constitutes a game. Its also realistic as there is no small amount of talk about how gamification in already impacting how a diverse range of applications are using gamification techniques to improve engagement and customer retention.

T

I will have this activity complete in two weeks and will present what I find here on the blog.

My Personal Case Study

The theme for the Game Jam (I know it was an App Jam, but not to me) was the three words Guide, Opponent and Restricted. It obvious right from the start that the only thing that this could mean was Hostage Rescue. There was nothing else this could mean. Because of that, all the Personal Case Studies will be variations on Hostage Rescue. Just wait and see…

I started with a Mind Maps and just fired off an email to check that since I was already working on a combat game with Serial Link that I would be able to do this, but the cool fellas at that there Games Academy said it was fine. So, I pretty much just got to it.

Goals

To make an AI that could

  • Have some sense of ‘team’
  • Stack up on a doorway
  • Enter a room
  • Know that the room was ‘clear’

Taking the time

I tracked my time using a combination of my now traditional Nerd Chart and the website Tick Spot, the project management tool I already use. Each time I sat down (or paced around) on the project, I logged the time on Tick and then at the end of the day I would fill in the Nerd Chart. I really like having a visual cue to see where my time is going. Its a really good way to allow yourself to get carried away with something but recognise that is what is going on. You can then, anxiety free (for the most part) says to yourself ‘OK, that thing I was gonna spend one hour a day on is now four days behind, but I’m ahead in other things. I will do the four hours today’. Genius.

Development

Development was very fast really and I was on a roll with it and enjoying seeing just how much I had learned.

Then, when the project reached a sufficient level of complexity, my lack of formal software design skills began to show. This happened because of two reasons. I dont know any and I get very excited and want to just get going. No, I dont think there is anything wrong with that. There might be. There is. Read on.

I could no longer track what went where and which entities were making which decisions and so on. I soldiered on anyway holding what I could in my head and writing little diagrams when I needed to be clearer about what I was trying to do but I began to sense (not in an Oda Mae Brown sort of way…) that I could be working faster and smarter and harder and more completely and with less coffee and with more clothes on and … what the… ?

Then I had an absolutely spiffy idea. I would make a base AI Controller class that would implement an ISee interface. Then I would link the event that is thrown from the AI Perception component (On Target Update, or something like that) to the interface events. Then I would not have to cast to find out what I seed. Well, thats how my daughter says it? Take that Grammerly.

From there, the AI Controllers that descend from the base class like ‘Operator’, ‘Hostage’, ‘Bad Guy’, ‘Creepy Dude’ could just implement the event in the child class and viola! Seeing things! The base class says SeeClearanceNode, Operators love it, Hostages dont care.

It was all working beautifully and I felt very clever and even had a little moment where I thought ‘You know what, I think I could do this for a living’.

But then… sob… something went wrong. Im not sure when it started, but something to do with the Hostage started to just not work properly. I know, poor guys, there are just there so that the Bad Guys can threaten them and their lives are constantly on the line and something in their mind (ai controller) just… broke.

I decided to restart to project as it was obviously Unreal’s problem and nothing to do with my intermediate standard of producing game logic and my severe lack of formal planning. Well, that was the last I ever saw of that project as once I had put it to bed, it refused to get up, like a stinky teenager. It just crashed on start up and said ‘I hate you, life’s so unfair, but you dont understand, I love him!’.

But, I thought, I’m not having this. I am a determined sort of fella so I would have a hunt around and see what I could do. I found out that a lot of the classes that I had created were suddenly orphaned, with no parent class. Looking at the log, the worst offender was the Hostage and as there was a hostage in the level that Unreal was trying to load the moment the editor got that far, it was all very crashy. Another one for you Grammerly. I did manage to use Windows Explorer to copy all the assets over into another project file and open that. Despite the warning that unholy fire would rain down on my meagre household upon opening one of these orphaned blueprints, I did it anyway ’cause I ain’t afraid of nothin’. I then painstakingly recreated the project over the course of about 3 hours only to have it crash that moment I tried to put a ‘Room’ in the level. I still dont know exactly why this happened, but I had learned enough at that point. This was clearly something that I had done and I decided to explore a few things. Before we get into that though, here’s what I did have although I cant show you anything more than was already shown in the YouTube video.

What i was left with

  • Sense of Team and Team Element
  • Dynamically sized Team Elements and Teams using an array
  • Insertion and Extraction zones
  • Rooms that contained a Door and set of Clearance Nodes
  • Team Element stacked on the door
  • Each Operator was allocated a clearance node based on how close the node was to the door
  • The Operators then moved towards the Clearance node allocated
  • If they saw another node that had not been cleared, it would be set cleared in the Room actor
  • Once the Operator saw the node that was allocated to him, he would be allocated another unless all the nodes were clear
  • If the Operator saw a Bad Guy, the Operator stopped, turned to face him and after a delay of 0.5 seconds ‘killed’ the Bad Guy.
  • Killing was just ragdoll the Bad Guy and enable collision on the skeletal mesh and add a little force to the head bone to make it look like he had been shot.
  • The Bad Guys had the same logic only the delay was 1.5 seconds to represent the aiming lead time.
  • If the Operator saw a Hostage, they would inform the Team Element actor.
  • If they were all clear, the Operator would move toward to door until he could see it
  • He would then stop and ask if all the other Operators were in the same state.
  • If they were then the Team game the Team Element its next Room in the array and the cycle began again.
  • Once there were no more Rooms, the Team Element would go to the Extraction zone. Once all the rooms were clear the Hostages would travel from their location to the Extraction Zone.

What one learned from the Humbling project

Oh my God, Version Control.

I have learned the very hard way that version control is cool for kids. I wont go over it all here as I covered some of this stuff in another post. Just know that I know that I know that I need it. No, I’m not trying to kill Grammerly.

UML and proper planning

This one did make me laugh. I promise, and I know I talk a lot of rubbish sometimes, but I promise that I said these words when the complexity of the project started to get away from me a little: ‘I need some sort of diagram language or something, that way I could think all this through and make better mechanical design decisions’. I swear I said that out load without knowing that UML was a thing. So, I have already taken a short course on Pluralsight and know some of the more basic symbols and what they are for. I do need practice with this and I have yet to use it

Design Patterns

I found this guy on the Internet (its this interconnected web of computers the youths are using) who has blown my tiny mind with just how to think like an architect regarding object orientated software design. I feel so much more ’empowered’ as Oprah would say and I have already bought this book – Design Patterns, Elements of Reusable Object Oriented Design. Its a bit dry, like toast, but its very enlightening to someone like me who is keen as mustard on toast but doesn’t have any mustard or toast. Oh, the guys channel is here…

Lets get smart

Goal One: Version Control

I will become skilled with and fully understand Git, LFS, Git Bash and Git Desktop to the point where I can perform all the the basic and intermediate functions the system has to offer. I will know this is complete when I cant find any menu item or Git command that I do not recognise and could not explain in simple terms. This is appropriate as I am already working on projects that are valuable and require multiple development sessions and developers. I will be able to demonstrate how these features work on a live or dummy project. I will start with a course on Pluralsight and re-assess the requirement’s from there. I will achieve this in 4 weeks.

Goal Two: UML

I will learn UML theory and practice that is proportional to the programming skill that I have already. After that I would learn UML so as to represent the more advanced programming theory I would be learning at the time. This is appropriate as I have identified that I wish to be a generalist but with an emphasis on programming so as to be able to make my own games. I will know that this is complete when I can fluently draw UML with as much complexity as I can think with and make minimal mistakes. I will also measure this by making sure that my programming plans and thoughts can be communicated with other programmers using only UML. I will do this by taking a course on UML for beginners on Pluralsight of something similar and would intend to complete this in 2 weeks.

Goal Three: Design Patterns

I will understand each pattern presented in the book ‘Design Patterns’. I will create sample projects to illustrate each of them in action in simple console applications using C++ or C#. This is appropriate because Unreal and Unity are both engines I wish to use and they both use an object oriented approach. Its realistic because I have enough skill with Unreal to quickly create a complex project, but I need help to organise my thoughts and intentions in advance of the execution. This will be a long term goal and I would expect this to be fully completed in 6 months.