Monday, December 18, 2017

Lets Talk about: Showcase

Yesterday was showcase, where people, ranging from people from the industry and the public, came out to test out our projects! Our Games Lab was filled with students from further Studio units, and of course the people that came to try our game. 




The Experience:
My first showcase experience went rather eventful. There were a few bugs within the game, but with the help from my lecture, I managed to get the game back up on its feet.. sort of. But we managed to get the core mechanics working, and a panel popping up when the character dies, however there was a bug that prevented the users to restart the game using the buttons and a winning panel wouldn't pop up after the character had escaped. So in order to restart the game, we had to press Alt + F4 and re-launch the unity launcher. 

The Feedback:
After the audience had tested our game, we had them to leave their feedback on a form which we stored. The feedback we received was good, it was what I expected. The majority of the feedback said that the level was too dark, the buttons needed to be fixed and instead of restarting the game using Alt + F4 and re-launching the game. For future projects, I will focus on the game state changes to ensure smooth game transitioning, and learn more on how to make an effective game manager. 

Overall, showcase was a fun experience, and I can't wait to proceed next to Studio 2, where we learn more about AI, and we will be mixed in with the Studio 3 students, which will allow our game to have a multiplayer aspect in our project. With the showcase event and the new found knowledge of AI and other new things that I learnt in this trimester, I wish to add onto this project during the break as a side project.

Saturday, December 16, 2017

Lets talk about: Animators and their pipeline

So for this week, I managed to do some animating! Nothing big, I animated a simple wooden axe, with the help from my group member, Yousef Atout. This post might be a bit long, but if you guys want to know how they work and how I animated a model, read below!

How I animated my model:
So, the process of animating a model goes as follows:
At first, I tried to look for a reference image. What this means is that I was looking for an image to base my model off of. Essentially, it serves as a means of guideline for the me, just so that it resembles and looks like an axe, in my case atleast. Once I found my reference image, now I had to make the object. To start off with, I made a plane, and then this turned out to the handle of the axe. I forgot to mention, the software I was using was 3dsMax. In 3dsMax, I was able to play around with the vertices, which allowed me to change the shape of an object. So for an example, if I were to take a square, and move one of the vertices, I would have an uneven 4 sided shape. In order to make a shape which has more curves or a much more sophisticated model, I would need to make this object an editable poly, which allows me to edit the object to have more edges, more vertices, faces and much more. For the first step, its more of a rinse and repeat sort of thing, where you have to make more edges, or more vertices if the model you're making doesn't add up with the reference model. 

Once the overall model was complete, it was time for me to texture the object. In order to texture, you need to unwrap the model, with a process called UVW unwrap. What a UVW unwrap essentially does is it makes the model flat, and whatever is inside this unwrap, will be textured. During this process, you need to isolate and separate which parts of the model should be what texture. So with the axe, I would need to separate the metal head and the wooden handle from one another, as they should have different textures. 

Then, after the unwrap process has been done, I can now start to texture my model. To do this, I needed to export my model as an FBX file, which allowed Substance Painter, a texturing program, to recognize this file. Once I've imported the file into substance painter, I could now start texturing. The reason why I used Substance Painter was that the program allows the animator to texture the model like as if they were painting the texture onto the model. In substance, you can add textures and more materials onto each other or as an individual material/texture, and you can play around with it, to find a texture/material to suit your needs. And voila, a fully textured and modeled axe was made!

The ways of the trade, animators' pipeline:
So for this unit, I had to sit down and see how the animators work, in general. So their pipeline goes as follows:
1 - Concept Arts: In this step, the animators will start to make simple concept arts for the project that the group has agreed to. So the concept arts will include the characters (both enemies and main character(s)), props, vehicles, map design and whatnot.

2 - Referencing: In this step, they will have to find mood boards. What mood boards are is a way for the animators to show their facilitators on how the game will look like. The animators were allowed to find images from games to help the facilitators know what type of aesthetic and visual effects the project might have, in relation to the mood boards. 

3 - Modelling the props and characters: This step is a little straight-forward. After showing the concept art, references and mood boards, to the facilitator and being approved by them, they will now be able to start working on the props and characters.

4 - Unwrapping and texturing the models

5 - Skinning and rigging characters: Skinning and rigging are methods one needs to do in order to animate a model. Animations will be applied to models which needs modelling, this is the case for the main character and other characters within the game/project. 

6 - Environment assembly and environment texturing/polishing: In this step, it allows the animators to give the games developers a fully textured map, with all the lighting and props available within the scene. What this means is that they make the map, model the map and texture map, including the environment (props, walls, etc.)

7 - Animating, baking and exporting the animations to the games developer(s)

8 - Rendering and composing the renders into a video format: For this last step in their pipeline, the animators will have to render all the models that they have made and put them onto a turntable. A turntable is like a podium or platform with all the models that they made, like a showcase. This will allow the facilitators to grade their work. 

Sunday, December 10, 2017

Group Reflection

For this post, I will talk about my group members regarding the Renegade project. 
Overall, the group members has done great work so far, with their map layouts, textures and all, however, their work speed is rather slow. I say this because it took the animators maybe about two weeks to give me a map layout which is fully textured and have different wall colors for each section. I mean, sure I may not know how the animators work and what their pipeline is (yet...), but without a map, we wouldn't have a setting to put the game in. This was our priority number one, but I didn't get the proper map layout, maybe about 3 weeks before our play testing part. I kept telling them, I kept pushing them about the map, but it still didn't occur to them how important it is to have the map ready. 

Another bad thing about this group is that we relied on our "Group Leader" too much, and our work was being delayed, waiting for the Leader's green light order to proceed with animating and anything else which concerned the animation's part of the project. From what I heard from my "Art Lead", he said that the animations are ready to go, ready to be rigged and all the assets which are needed for the game are ready to go. So with this great news, I assumed that in the following week, I would have the character models and the animations in the game. But, that was not the case. It was ready, but since the "Group Lead" was absent, work came to a halt and everything came crashing down. We lost valuable time and we had to rush all our work! Oh and the reason why I put quotation marks around the titles Group Lead and Art Lead because these names mean nothing, within this Studio unit. Its just a title for the sake of having a title. They serve no purpose, but to make it feel like we're in a working environment. Even the facilitator himself said that these titles mean nothing. 

But of course, not everything was bad about this group/project. The map looks really good, with the textures, and the different color walls, which makes the game look a bit more colorful and engaging, other than our old 2 color-palette color scheme. The animations are alright, a lot of work could be done for it, but for what its worth and the time that we have left, its alright. I just hoped that the assets were ready a while ago, so we would have more time to fix the scripts and play test for bugs and errors. 

Lets talk about: Alternate History/Alternate Universe

Recently, the game Home-front was free on Humble-bundle. Curiosity got the better of me, and I decided to download this game. The game was about an alternate history, where a unified Korea, under Kim Jong-Un, has invaded the free world of America, in a near future, somewhere during 2040 or so. The game's game design and story was really interesting. It reminds me of Wolfenstein, but instead of Nazi Germany winning World War 2, a unified Korea has waged war against the US, and was victorious. 

The way the game developers imagined how America was under Kim Jong-Un is the same how any distopian world would be, where the citizens are harshly treated, and the military is in control of the government, martial law. Of course the citizens retaliated at first, but those who retaliate were met with an unfortunate fate. Most of the buildings are either run downed, or barely standing on its foundations. The game itself felt like another Call of Duty. But what made the game really interesting was the concept, and the setting it took place. 

Ever since I was small or started to learn about modern history (1900 - present day), with the World Wars and the wars after that, I always wondered how the world would be if a different nation came up top in the wars. And I remembered that only recently, I found out that there was a game which featured an alternate universe where Nazi Germany had won the war and conquered most of the world (Wolfenstein). Sure, the Nazis were bad and thank God the allied forces won, but the way the game developers depicted this future was what fascinated me. Some people might think it is a very touchy subject to touch on, but Bethesda Games Studios took that risk and made the series great with the new installment of the game, Shadow of the Colossus. Kudos to these game developing companies in taking on this challenge and risk to make a game that has left its mark within the game industry!

An alternate history/universe, in my opinion, is a good change, in terms of setting and all. I mean, sure the idea of being in another planet somewhere within the vast universe is cool, sure the idea of fighting in World War 1 or 2 is cool, with the new technology we have to make games look far better than before. But to fight in a post-war America where the Americans lost the war? That gives the idea and image that nothing is invincible. The bigger they are, the harder they fall, which reminds me of the biblical story of David and the Goliath. The giants don't win all the time. 

Animations

Animations, something which is used a lot within the art industry, whether it be an animated film, films in general and games. All these new pieces of art within the industry will have some form of animation within their project. 

Within this trimester, we learnt about how animations work, and how to implement them. The way animations work can either be done frame-by-frame, or by using key-frames. 

Frame-by-Frame method
The frame-by-frame method is when the animator will have to draw out or manually move the model frame-by-frame. Remember the old Mickey Mouse art/sketches? Those were used by the frame-by-frame method, where they drew every single action and frame it took for Mickey to raise his hands or close his eyes or any single action he has done within that small sketch. The frame-by-frame method allows more accuracy within the animations and more smoothness for your animation movements. However, it takes a lot of time, as it will need to be drawn frame-by-frame, hence the name. 
Key-frame method
The key-frame method uses the computer to predict its movement in-between two key-points. So for example, if I wanted to raise a leg, I would put a key-frame in the standing position, and the next key-frame when the leg has been raised in-front of the character. The computer will then predict the movement of the leg in-between these two key-frames, resulting in on animation for the character to raise their leg. This method does not require a lot of time to make, however the quality in the animation has been watered down for its ease of accessibility and use. 

The way animations work is that the character models or models themselves will have a rig, or a bone. This is only true if the animations you're working with are for characters/animals. If its for an inanimate object, such as a box falling down or being pushed over, then all you need to do is to record the movements, and voila, animation finished and ready to use. The main focus here, is for the character model. Once the model has been rigged, this is when the controllers will be made. The controllers are what controls each limbs. These controllers will work in unison with each other, to make a plethora of animations. Running, walking, shooting, crouching, sneaking, anything, you name it. Once these animations have been recorded, you can now import them to unity, and use them in any way you like. 

I hope this short post on how animations work and how animations are made has helped you. As always, enjoy your day, and good luck with your work, for those who do have work to do!


Lets talk about: Juiciness

The term "juiciness" came from a video I watched a while ago, last trimester. Juiciness, in the video, is what makes your game more fun and like-able.
 
The video features a brick top game, where you control a platform, and your goal is to destroy all the bricks by bouncing a ball from the platform, and into the bricks above. The game, at first looked very bland and really basic. It had no audio, no color and it just felt... dead. But, in just a matter of minutes, this bland and dead game, turned into something very pleasing and fun to play. 

The main message about the video is about adding feel and character to everything within the game. The way they did this was to add color, sound effects, music and even a face to the platform itself, making it look like its a fictional being, other than just a plain old platform. The platform gets sad if the ball gets too far away from the platform! These tiny details just adds feel to the game. The reason why I brought this topic up is to talk about the project I'm making for this trimester. Until recently, we managed to implement animations and actual character models within the game. Before, the plain capsules moving around the maps made the game look really primitive and very... uneventful. However, now with the animations and character models, its starting to look like a game now... slightly. We still have a few scripts that needs attention, but hopefully, and God willing, our project should be ready by the end of this week.

Anyways, back on topic of juiciness, for those of you who are making your own game or side project or whatever, remember to make your game a bit juicier. It doesn't even have to be very difficult. You can add trail renderers, or particle effects within your game to give it some nice mood and atmosphere for your project/scene. Whatever it is, I hope your project comes along great!

Sunday, December 3, 2017

Project Reflection

Throughout the project in this Studio unit, I have discovered many things and learnt a whole lot as well.

Throughout this trimester, we have learnt about how to make AI, data structures and why they were important within the industry, steering behaviors, and of course, the added bonus of the knowledge of Pathfinding.

In the beginning of the trimester, I thought that all this work, and all this new knowledge will be the end of me. I thought that I will be encountering many roadblocks ahead (roadblocks as in trouble understanding a certain topic or in general, just stuck). But it turns out that I'm doing really well over this past 10 - 11 weeks of this trimester. I managed to understand and implement a working pathfinding manager within the project, which allows an enemy to chase an enemy around obstacles. It took me about a week to understand and implement most of the code for the manager, of course, with some aid from my lecturer. However, I did manage to do it by myself. You just have to add some "elbow-grease" and some hard work.

After the pathfinding manager, we learnt behavior trees, the main focus of this trimester/unit. Behavior trees, as mentioned, are what makes AI more dynamic. It allows the developer or programmer to add on more behaviors, or add on more things to that certain behavior, without affecting the whole structure, other than adding in leaf nodes or composite nodes. The majority of us in the class found it hard, but that's what we should ask for, right? We shouldn't ask for it to be easy, but we should ask for it to be hard. If its not hard, where's the challenge?

Alongside behavior trees, we also looked at steering behaviors, something that makes our AI move a lot more human. Steering behaviors give feel to your AI. People play games and will judge the AI by how well it responds to their surroundings, does the AI move like how a human being does, and its complexity and how dynamic their AI is. So steering behavior gives the AI more feel.

At the end of the day, a tip for you guys who are reading this post, if you feel like you're going against something really hard, you just have to persevere and never give up. It doesn't mean that you can't take a break. You can, but don't let that be the excuse and what brings you down. 

Thursday, November 30, 2017

Lets talk about: Future project(s)

So, the other night, I was watching a DemoDisk video by Funhaus, and I saw them featuring a Shadow the Hedgehog trailer. After watching a short 4 - 5 seconds clip of the trailer, I thought to myself, why not give the Sonic universe, a good name. I mean, I've always heard that Mario was a big hit, and that he was so much better than Sonic. But I thought differently, I always preferred Sonic. And then, it occurred to me, why not make a free-roam Sonic game? Where you can customize your own characters, it follows the lore of the Sonic universe. Imagine The Witcher 3: Wild Hunt, but the Sonic universe. I conferred with my friends and colleagues, and most, if not, all of them said that it would be a good idea. And they were all really familiar with the lore and the whole universe. 

Some of you, who are reading this post who knows and likes the Sonic universe, would like to see a game where you can play as Sonic, where you don't have to run in a linear path just to collect coins and to destroy Dr. Eggman and his evil contraptions. Imagine a game like Shadow the Hedgehog but instead of expecting linear game play and story telling, there would be a more elaborate story line, and a bigger map where you can conduct your missions and whatnot. It would be great, right? Reasons like these give me the inspiration to be a game developer, where I can develop a game where I think people would enjoy. Bringing something new in the industry or the indie market.

Some of you are wondering or saying that I might be a bit too ambitious with this idea in my head. I mean, making a game this big would take years and years of development. Not only that, but I will have to buy the license of Sonic, off of SEGA or whoever owns Sonic and anything else which is affiliated with him and the lore. But then again, it is just an idea, a future project, or maybe even a little side project after I graduate or in-between my trimesters, who knows? But what I do know is that I have some people who are willing to give it a try, and it won't hurt to give it a try, am I right? 

Lets talk about: Loot crates and its new label

As most of you may or may not have heard, loot crates and anything which involves the players to open up something with some sort of probability, is now considered as gambling. Games such as Overwatch and CSGO have their loot crates/cases. 

How do I feel about this? Well, I don't feel affected in any way, shape or form. I believe that spending real money on virtual items is useless, because this items do nothing but add aesthetics into the game. Like CSGO weapon and glove skins. It doesn't give you any combat superiority or gain, like what Revolver "Shalashaska" Ocelot from Metal Gear Solid V: The Phantom Pain once said, "Engravings, give you no tactical advantage", and I couldn't agree more. Weapon skins, character skins or anything that can have a skin, are just meant for bragging rights:
"Oh look, I have a rare skin!"
"Oh look, I have an epic skin!"
"Oh look, I have a legendary skin!"
"You won't believe what I spent with my $300 Chirstmas/birthday money! A knife which gives me no value or benefit whatsoever!" :D

Things like these makes my blood boil! Where some games just lives off of micro-transactions, which is sort of like ripping off or stealing from your consumers. A prime example of this, are mobile games, Clash of Clans and Candy Crush to be precise. These games have little-to-no gameplay, they're free, but what better way to make our game fun and put some cash in our pockets? Just trick them to buy golden lollypop bars so that it can give them unlimited lives, tries, moves and whatnot. (And yes, I'm aware that I'm going off topic but I just had to get it out of my system)

Some people might say that I'm "salty" for not having a $300 - $1000 knife or skin in my Steam inventory and that I have to "git gud" but its annoying. You're burning your wallet for things that give you no advantage, no gain, no superiority, whatsoever in battle or in-game. Its like how Xbox Live insults work. Its annoying, and its just there. You can't avoid them. (You know what I'm talking about). But I have come to accept the fact that they're burning their own money on these things, and I won't fall victim to this "skin insanity". 

Hopefully with this new label, things will change. 

Project Renegade

For this unit, or trimester, I have been tasked in making a game with a group, the group consists of 7 people, 2 programmers (including myself) and 5 animators. Our game/project is called Renegade, a 3rd person and isometric stealth game, where the player will have to sneak around the map, and make their way to the escape point. The game will feature a simple AI which would have these behaviors:

Patrol - Following a set of points around the map
Chase - Chases the player if they are within a certain distance
Attack - If the enemy is really close to the player, the enemy will attack
Search - If the player chooses to use a noisemaker to lure the enemy, the enemy will "search" for the source of the noise
Stun - If the player chooses to use an EMP dart on the enemy, the enemies will be disabled for a few seconds

Judging from the behaviors Stun and Search, you may or may not realize that we have two bullet types, a noisemaker and an EMP dart which works much like a tranquilizer dart from the Metal Gear series.

For the behaviors or the enemy AI, we are using the composite design pattern for the the behavior tree. If you haven't read my previous post on behavior trees, I mentioned there how a composite design pattern behavior tree is used. For re-cap purposes, a composite design pattern includes a composite node class, which mainly features 2 other classes inheriting from it, the selector and sequencer class. These 2 classes will determine how the AI will behave. The sequencer class will check all of its children. If all of the children returns a success state, then the sequencer will return as success. The selector class will check its children in priority, on by one. If any one of its children returns a success state, the selector class will return as success. More on this topic on the behavior tree post.

In this post, I will also be mentioning the progress update for the project.

The progress so far:
1 -  We almost have our behavior tree working, with the chase, patrol and stun behavior working. I have tasked my partner with the attack and search behavior. Progress is coming along for those two behaviors, and I hope to see it done by the end of this week.

2 - The UI is almost done, and the main menu is finished, with working buttons, and a main menu music at the back to complement the menu. The UI needs images for the bullet types and updated ammo counter. Once that's done, the UI will be complete.

3 - In terms of the animators' side, the map layout has finally been textured completely. The only thing left is to add some lights on the walls to give the vibrant, neon TRON: Legacy aesthetic. Character models are finished, but they have not been implemented yet. Animations are underway, and progress looks very good. My animators inform me that they will be done by this week.

Progress to be complete:
1 - As mentioned above, we need the attack and search behavior integrated, in order for us to have a complete behavior tree.

2 - Integrating character models and animations within the game

3 - Finish the UI with ammo counter

4 - Cleaning up the map

5 - Check scripts for bugs and errors to ensure smooth gameplay

Saturday, November 25, 2017

Steering Behaviors

Steering behaviors is something used to make your AI move in your game look a lot more human. For example, in Unity, you can make a patrol pattern which gives the user a somewhat good feel to the game. However, when the enemy reaches a point, they will move at full speed towards their target, and stop perfectly. It makes them look too much like a robot! Steering behaviors allows your AI to make them move and behave more human.

Whilst we're on the topic of patrolling, there is a steering behavior called Arrival. This behavior will allow your enemy to arrive at a target position much like a human. We never move to our target area as fast as we can and stop. We slow down towards our target and come to a nice and smooth stop. This is what this steering behavior does. It makes an invisible circle around each point, and the closer the enemy gets to its point, the lower their speed. 

Other steering behaviors include:
Pursuit - This steering behavior will calculate where their target will go to in x frames, much like a leading target. If you've ever played War Thunder or the new Battlefront's starship mechanic, you can see a lead target, where you will hit the target. This is what this steering behavior does.

Evade - This steering behavior will allow the enemy to evade a target object within the game scene. Much like a prey, running away from its predator.

Wander - This steering behavior will allow NPCs or enemies to wander around your game scene. This is made by making an invisible circle infront of the NPC or enemies. Within this circle lies the steering direction/force which will allow them to move towards that direction. This steering behavior will never invert on itself, much like a person forgetting something in a room. 

Seek - This steering behavior allows your enemy to seek out a target.



You can see many more by using this link: https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732



Pathfinding

Pathfinding is an algorithm AI uses to find the closest distance to a target. So in our case, a game, pathfinding is made to allow the AI to find the closest distance to the player. Some of you might ask, why would we need such an algorithm if we can write a few lines of code to chase the player. If we didn't have a pathfinder, the AI will not be able to chase the player, if there was an obstacle in the way. For example, if the player and the enemy was at opposite sides of a table, the enemy will not be able to chase the player, as there is something blocking its way.

How does it work? 
When making a pathfinding manager, you should make a singleton for it. For those who don't know what a singleton is, a singleton is a way of making sure that there are no duplicates of a script. For instance, there should only be ONE GameManager script throughout the whole game. A singleton is made to ensure that this is true. However, for a pathfinging manager, we don't want to destroy the manager as soon as we load into a new scene, we want to keep the manager and the algorithm itself so we can use it for multiple levels, when needed. Once the singleton is done, there are 3 problems you should take care of:

1 - Building the Graph - The graph consists of the nodes (or waypoints) positions and the distances between each and every one of them. The graph also contains information of which nodes are connected to each other, and which ones aren't. The graph (for visual aid) is like the multiplication table. But in this case, instead of putting the total, you put in the distances and -1 for any nodes which aren't connected.

2 - Making the algorithm - The algorithm I used is the Dijkstra algorithm, where it will keep track of the accumulated shortest distance, if the node has been visited or not, from which node did it arrive from and a queue list which will check each node it arrives. This algorithm will go through each node, between the enemy and the player's position. It will then check which nodes have the closest distance to the player. 

3 - Backtracking - Once the closest distance has been calculated, the algorithm will now need to backtrack, from the player, to the enemy. Once the backtracking process is complete, the AI will then start to follow the points, given by the data/information given by the algorithm itself. 


Behavior Trees and Finite State Machines (FSMs)

Ever wondered how AIs in games work? Well, the structure is pretty simple. The AI will have to make a decision on what to do when they meet an enemy, an ally, a normal NPC or the player. In order to do this, they will have to make a structure which allows the AI to make decisions, both complex and simple. Developers and/or programmers can use either a Finite State Machine, or a Behavior Tree. In games, we use Behavior Trees really often, as it allows the developer to change an add new behaviors at any time, and any where within the tree. Its dynamic. The tree can be used for a really complex AI or a really simple AI.

Behavior Trees


Behavior Trees allows the AI to make complex decisions and actions when encountering the player or any other objects within the game. The decision structure is much like a tree, as shown above. The tree is made up of the behaviors (Actions) and the composite nodes, the selector and the sequencer nodes. Before I explain what each composite nodes do, I need to cover how the tree works. 

How the tree works:
Within the tree, there is a class called Node, or TreeNode, whichever one suits you for that particular behavior tree. Inside this class, there is an enumerator variable, which keeps track of the behavior tree's results (Success, Failed, Running, Ready). 
Success: It means that the AI has completed executing this behavior
Failed: It means that the AI has encountered something which prevented it from executing this behavior
Running: It means that the AI is currently running this behavior
Ready: It means that this behavior is ready to be executed.

Composite Nodes:
Selector: The selector node will check all its children in priority. If one of the children returns a result as success, the selector node will return success, and will run that behavior. 
Sequencer: The sequencer node will check all its children in priority. If ALL of the children returns success, the sequencer node will return success.

How the tree works, related to the image above:
So with the explanations above, I will explain how the image works. The head, or root, of the tree is a selector node. If we were to follow the numbers next to each node within the tree, it shows the flow of how this tree works. 
0 - It will check if any of the children nodes returns success
1 - It will check if any of the children nodes returns success
2 - Plays/checks behavior
3 - It will check if ALL of the children nodes returns success
4 - Plays/checks behavior
5 - Plays/checks behavior
6 - Plays/checks behavior
7 - Plays/checks behavior
8 - Plays/checks behavior







Lets put it into perspective. Lets say we had our own behavior tree. This tree would have:
1 - Selector
1.i - Sequencer
1.ii - Patrol
1.i.i - Chase
1.i.ii - Attack 
So the children of the selector will be the sequencer and the Patrol behavior. The children of the sequencer will be the Chase and Attack behavior. 
The tree will check if the sequencer has returned a result type success. It will check the children, both the Chase and Attack behaviors. If both of them return failed, then the selector node will check the Patrol behavior. If this behavior returns success, the patrol behavior will be executed. The patrol behavior is the default behavior of the AI.













Tuesday, August 22, 2017

Week 13 - GAM111 Reflection

Week 13 is the last week of the trimester, and for this blog, I will be reflecting on how I feel about the module as a whole.

For the first few weeks of the module, I admit that I was slacking a bit, as the lectures we had then were re-capping about things we did last trimester, and I thought that I could ease my way out. However, when the submission date of the first assignment got closer and closer, I realized that I should have done a lot more research, added more heart and soul into the assignment, and before I knew it, it was too late for me to put in a whole 6 weeks of work, in 2 weeks, on top of other assignments from other modules. And when I submitted my first assignment and got my grade, I made a promise to myself to not slack and to never leave things or find a way to ease my way out of an assignment. The only way to get through an assignment is to make it seem fun. Like my lecturer said: "Make a game that you want to play as well." And that made sense. If I make a game where I don't like it, or don't want to play it, how can other people like it? How can other people even play it? And these are the questions I asked myself constantly during the duration of the second assignment of this module.

ASSIGNMENT GAM111.1:
The game I made was not good. There were no assets, no color whatsoever, and the mechanics the game had were barely working. After submitting the assignment, I reviewed the work, and looked at where I could make the game much better. And with the lectures that we had after that assignment, if I had the ability to re-do this assignment, I would have made it better. But, the only thing I can do from this assignment is to learn from my mistakes and not to repeat it again.

ASSIGNMENT GAM111.2:
For this assignment, I have told myself to not leave it to the last second, and to make the game enjoyable and something I would play. With these objectives in my mind, it made the assignment fun, and made each requirements, something like challenges or a trophy system in a game. The more you get, the higher your score, and the higher your score, the higher the chances of your work to be displayed on the hall of fame. Another factor which helped me make this assignment turn into a game was the newfound knowledge I learnt that could be used for the assignment, and even in the next trimester.

LECTURES:
I feel like the lectures helped me a lot for the second assignment, and it made me feel really good about the second assignment. We also have somewhat of an advantage for next trimester with the knowledge of the Finite State Machines, and Raycasting. The lectures also allowed me to understand how some game companies add in their own mechanic into the game, like crosshairs changing color when they aim at an enemy, how First-person cameras are made. In general, it makes me look at games, not only as a source of entertainment, but also a source of knowledge and inspiration. 

Week 12 - Workshop Assignment II GAM111.3

This week, is the submission week for this assignment, and the good news is, I have managed to get everything working!

From the previous week, I set a milestone to:
1 - Add at least one more effect to the game
2 - To get the turrets to work

EFFECT:
For the effect, I used a particle system for the enemies, so that whenever they get hit, it would seem as if they are crumbling. The particle effect I used was pretty simple, but it did require quite a lot of time to make. I have added this particle system to all of the enemies, however, one done side about this particle system is that I forgot to change the color of the particle systems to match to the enemy's color, meaning that all the enemies' particle system is yellow (the color of the medium enemy). However, the bright side of it, is that it makes the game look very nice.

TURRETS:
After a few weeks of attempting the turret mechanic, I have managed to get the turrets to work, with the help of my lecturer during class. All this while, I forgot to use the keyword GameObject.Find and GameObjectsWithTag.Find as well. All this while, I've been using...:
public GameObject Enemy;
or
public Transform Enemy;
...this would allow me to set the GameObject variable or Transform variable with the name of Enemy, to the Enemy prefab. However, my lecturer told me that this wouldn't work, as it would get the transform.position of the prefab, other than the one we need, the updated transform.position within the game scene. After understanding this issue, my lecturer told me to go the Unity Documentation online, and search for anything which can be of use. He guided me to look for GameObject.Find, which works, but not the way we need. And eventually, we found a keyword which went along the lines of GameObjectsWithTag.Find, which finds any GameObjects within the scene, with the a tag you have set it to. Implementing this in the code finally made sense to me, and to the program itself. All this time, the turret was looking at the transform.position of the prefab, other than the updated transform.position of the GameObject within the scene. After getting this turret mechanic done, it felt like a great deal of weight have been lifted off my shoulder.

ADDITIONAL EFFECTS/ACHIEVEMENTS:
Throughout the whole week, and last week, I managed to get a menu system working for the game. I have a main menu, the game scene itself, a game over screen and even a controls screen, which briefs the player with the objectives, the enemies and how to play the game as well. Alongside completing the UI and menu system as a whole, I also added a currency system, and assets from the assets store and the internet for the fonts that I have used. Having a different font other than Arial, and adding in some low poly trees, rocks and fences, made the game seem very cute and very simple, which reminds me of some games that have been published on the Google Play Store for Android, or the App Store for iOS.

RESULTS:
Overall, I feel very happy with the game I have made in the past few weeks. I have managed to make a game with more than one type of enemy, a currency system, a turret mechanic which work and an ability that the player can use. If I had more time to work on the game, maybe it would have been something better, but for what I have now, I am really happy with what I have. 

Week 11 - Workshop Assignment GAM111.3

For this week and the week after this, I will be writing about my assignment primarily. 

From the previous week, I set a milestone saying that I'll try and put effects that would make my game fun and better to play. With this being said, I managed to get an idea for a power move, and something for the enemies when they get hit/die. I'll cover both of them in detail.

POWER MOVE:
For the power move, I was on my way home when I was thinking of a power move idea. It took me a while to get a few ideas, but the ones that were doable and made the game fun, was a power ability where the player were to shoot a ball, killing anything in its path, or towers having a faster fire rate towards enemies. I thought about the two, and weighed out the pros and cons. I chose the first one, as it would be fun to do, and the shooting mechanic for the player is complete, and bug free, whereas the other power move, I would need the turret mechanic to work in order for me to work on this power ability. 
The power move is inspired by the game OverWatch, from the hero Hanzo. His ultimate ability is to shoot an arrow, which then transforms into a dragon, doing immense damage to whoever is in its path. The path is straight, but if used correctly, it will turn the tide of the game. From this idea, I tried to implement the ultimate bar within the game (which increases over time and whenever you damage the enemy), and the ultimate ability itself. 

RESULTS:
After spending a few days to work on the power ability, experimenting with new things as well on the side, I managed to create an ability for the player. I added a power bar above the player within the scene. The power bar will increase over time (about 30 - 45 seconds) ONLY. I tried following the OverWatch mechanic, where it adds up over time, and/or when the player hits an enemy, but it would make the game unbalanced, and allowing the player to get the power ability every 10 seconds. Overall, I feel like the game is coming along nicely. The level is made properly, in the sense that everything is aligned, and all the shapes and sizes are similar and it all looks pleasing to the eye. The mechanics of what I have so far have made the game seem like a game, and it adds a difficulty curve, which is an added bonus for me. 

MILESTONE: 
For next week, I would like to add one more mechanic or effect that would round up the game, and ultimately, to get the turrets to work, which is my final basic requirement needed. 

Week 10 - Finite State Machine (FSM) GAM111

LECTURE:
What are Finite State Machines? A finite state machine is a system in which most companies would use for a basic AI system. It can also be used to keep track of what state a game is on, and even more! But during this lecture, we learning on how we can use an FSM as an AI in any project.

The concept of an FSM is to have a finite number of states, with a set of transitions between them. So if we were to make an enemy, we would give the enemy about 3 to 4 states. An idle state, patrolling state, attacking state, and a chasing state. Each state would have a specific logic written for them. So, to make a variable containing all these states, we write something like this:

Enum enemyState state {Attacking, Idle, Patrolling, Chasing};

Enums or enumerators(ions) allows you to create a collection of related constants. In this case, we are creating a collection of states for the enemy AI. Alongside this variable, we also need to make a current state, where it would set the default state, so something like:
curState = enemyState.Patrolling;

An FSM is sometimes followed by a switch case statement. This is where the transitions between each state happens. So if the player was in a certain range to the enemy, the enemy will then change to a state called Chasing (this is not how you would write it, this is for example sake only):
if (the distance of the player is > 40m) #This is where the logic will be written
{
    curState = enemyState.Chasing # This is where the transition between states would be
}
And if the player is closer to the enemy, the enemy would start to attack. So we would write the logic of the attack, and change curState to enemyState.Attacking, and so on, and so on.

SETBACKS:
I am still having troubles with the turret logic in the game, and it seems as though that I am at a stalemate with the turrets. I'm not gaining anything, neither am I losing anything. I keep on finding myself at the same spot.

ACHIEVEMENTS:
For this weeks achievements, I have:
I managed to get 3 enemies with different attributes. One small enemy (weak but fast), medium enemy (decent speed, decent health) and a big enemy (slow but deadly and "tank-y")
I managed to get a healthbar, for the base, and the enemies. Before this, the one type of enemy I got was a one-shot-one-kill enemy
I managed to get a basic UI system where it notifies the player when an enemy will spawn in

MILESTONES:
My milestones for next week are:
To finally get the turrets to work
To critically analyse if there is anything else I can add to make the game better
To find some assets in the store to make the game look better, other than using bland texts and/or blocks







Week 9 - Raycasting GAM111

LECTURE:
During today's lecture, we touched a topic about raycasting. I found the topic to be very interesting as it made me understand how somethings, within the games industry, were made. Examples include how crosshairs would change color when you aim at an enemy, how most RTSs (Real Time Strategy Games such as World of Warcraft or the Wargame series) can understand and detect how a player has selected a unit or a group of units to move into a spot. The answer is by using raycasts.

During this lecture, we didn't fully cover raycasts, but we went over on how they work and the logic behind it. A ray consist of a World Space origin, and a direction. It might sound simple, but how do we get the position of a mouse in world space? Well, we have to convert them, like how you would convert fractions when you want to add them together (not really like adding fractions together)

You have 4 different types of spaces:
Object Space - where models are stored in relative to the local point (0,0,0), in most cases, this would be the model's feet
World Space - where your objects are, in relative to the world space origin (0,0,0)
View space
Projection Space - applies either a "Perspective" or "Orthographic" projection to flatten a 3D position onto a 2D screen

The difference between the first two spaces and view space is that the view matrix doesn't transform the cameras position or rotation, however, it moves and rotates the scene by the opposite of the camera, somewhat similar to reciprocation. If you were to move the x axis by 10, the view matrix will move (-10, 0, 0).

To get raycasts to work, you need to get one single projection, which is called the World View Projection. In order to get this WVP, we need to multiply 3 matrices together. If we were to multiply two matrices together, we preserve both transforms.
(WVP = World Matrix * View Matrix * Projection Matrix)

The last part might seem a bit too advances (as warned by the lecturer), but all we need to know after the lecture was how raycasts work, or rather, the logic on how they work. The problem with raycasts is that you would lose some data about the model you're clicking at, as you're essentially turning that 3D object, into a 2D object onto the screen ultimately losing the Z axis information.

SETBACKS:
From the milestone I set myself for last week, I have encountered quite a few setbacks concerning the turrets. I tried making a turret, where it would look at the enemy entering its range, and shooting at it as it passes by. I underestimated this and found that I haven't got my turrets to work. It wouldn't look at the enemies as it passed by the turret, and it wouldn't shoot at the enemy, instead, it would shoot up at the sky. I tried taking a look at some tutorials online, but most of them included mathematical functions which I'm not familiar to, in coding terms to be precise.

ACHIEVEMENTS:
In every grey cloud, there is always a silver lining somewhere. The silver lining for this week is that I have managed to get a map, the enemy waypoint system to work, one type of enemy, and a player! Currently, I have managed to get the enemies to move along a waypoint system throughout their path, and a player object where you can shoot and build turrets with.

MILESTONES:
The milestone for next week are:
To find someway to implement a raycasting system into the game, where the player would click on a node and a turret would be built wherever the player clicked
To fix the turrets
To add some more enemies and some effects into the game
To make the game more challenging and fun to play

Week 8 - Assignment GAM111.3 Brief

LECTURE:
For this week, we were briefed on what our next assignment would be. For our third assignment of the module, we were tasked in making a tower defense game, something similar to South Park's Lets Go Tower Defense Play!
In case some of you aren't aware of what the concept of tower defenses are, you play as a character, who's tasked with stopping enemies reaching an end point. To lose the game, x amount of enemies will have to pass through the end point, or in some cases, the end point has a health bar which decreases, depending on what type of enemy passes through. The player can build defenses, such as turrets or towers to slow the enemies down or shoot them, or the player (in the South Park version) can shoot at them as well. Both outcomes will grant the player some coins to build some more, or to upgrade their tower.

REQUIREMENTS:
The base requirements of this assignment are:
Menu system - which includes a main menu, the game scene, a pause scene and a game over sceen
Win/Lose condition
Periodically produce energy (currency, bonus, points)
Minimum of 2 types of enemies
The enemies will follow a path through the level, causing destruction. The base health will be affected if an enemy passes through the end point

The bonus requirements of this assignment are:
Different types of towers
Additional enemies, upon the 2 that are required
Special abilities - carpet bombs and such
Enemies approaching in waves
More than one character can be played with
Having different routes, other than only having 1 route for the enemies to follow

MILESTONE:
The assignment seems like it requires quite a lot, doesn't it? But that is what we don't want, for us to be demotivated by the requirements of the assignment. At first, I thought that it would take some time to get the basic requirements set, but then I remembered that we covered some of the basics from previous lectures, such as waypoints, a menu system, a currency system and even spawning enemies, alongside with making different types of enemies. With this being said, for my milestone for the week, I will be setting myself a task to try and get the basic requirements done between this week, and Week 10 at the latest. Accomplishing this will allow me to get assets from the store and put them into the game to make it look nice and fun, and it would allow me to add in some effects which I practiced with into the game as well.

Week 7 - More work on Trail and Line Renderer GAM111

LECTURE:
Line and trail renderer might seem a bit simple in its primitive form, however it can be turned into something more and make a game more "juicier". The term "juicy" was taken from a video we watched during class on how to make your game better, no matter how simple it was. Watching this video, gave me inspiration for my next assignment, which was due in for Week 12. The video featured a simple game where you would control a small platform, and you would control a ball to hit blocks above. At first, the game looked very plain, no colors, no sound effects. But they started to add in simple effects which can be implemented, such as audio, trails for the ball, assets (or in the video, a face to the platform which would give the platform a sense of character) and such. Not only did this video give me inspiration, but it also showed me how something so simple might look like a great and fun game if you were to put in some effects that would make your game so much fun!

MILESTONES:
For the milestone of the week, I want to set a task for myself: to correctly use and understand how trail renderers and line renderers, so that I would be able to use them on my next assignment. Not only that, but before watching this video, I wasn't quite sure on how to add in assets from the assets store, and that bothered me a little, so I'll also take this chance to get familiar on how to use the assets as well.  

Tuesday, August 1, 2017

Week 5 & 6 - Reflection GAM111

(This week's blog will be more of a reflection and an evaluation of the past few weeks and the upcoming week.)
For this week, I'll do a different blog entry, since this week was a workshop session, where we had time to work on our assignment. A major setback for the past few weeks were the work load from different modules within the course. The different modules within the course held me back from doing practices which would help me in the assignment, and doing the assignment itself. With this setback, I have found myself far behind from my original deadline of finishing it early, but I fear that I will find myself struggling to finish the project with a good mark.

The session today allowed me to get some of my work done for the project, but the work done and completed during that time was not enough. With the lack of practice, I found myself stuck and forgot on how to use line rednerers, trail renderers and mix up the obstacles for the game. I have also forgotten to take in consideration of the fact that these obstacles will have to be spawned at the different Y axis of the game scene. After assessing my situation, I found myself rushing to put in all these details, and this goes without saying that rushing work is never a good solution. With this being said, I have found many errors within my code, and ultimately, I have made a bad project and didn't achieve my milestone for the project.

From this evaluation, balancing different module's work load is essential as it will save time for project clean-up, would open up time for breaks after a beta milestone is finished and it would avoid me from rushing my work within the last 2 weeks of the submission due date. From this massive setback (and a mistake, if you will), I have learnt my lesson, and I learnt it the hard way. For my next assignment, I shall put in more commitment, dedication and balance to all modules. 

Week 4 - Obstacles and Saving files GAM111

LECTURE:
During this week's lecture, we learnt how to make different obstacles, other than the generic boxes. We learnt how to make lasers, rockets and trails for our character and rocket. To make a laser grid or obstacle, we can use something called a Line Renderer component. What this does is it takes two points and creates a line. This can be done for a laser or for a rope. To turn this line into a LINE OF DEATH, we can either use a trigger or a OnCollisionEnter function to kill the player if they were to touch or collide into this line. A trail renderer is what the name entails, it renders a trail behind the desired game object. This is really useful if you want to use it if you were shooting a laser, throwing a grenade to see the trail of smoke it leaves behind and many other things. The picture below will present how a line renderer component looks like:

This part of the line rednerer component, but I find this part to be the one of interest for my project. The component asks us for the size, material and time of the trail. For the material, you can either change the color, add a texture or do both, add a texture and change the color of the texture. The graph below shows the dissipation of the trail. The higher the keypoint (the diamond shape points on the line), the thicker the line. So on this graph, I have made the trail so that after a certain amount of time, the trail will get smaller.


MILESTONES & ACHIEVEMENTS:
As always, this week's achievement was learning something new and making the project or any future projects better and appealing to the eye, or what one would call it, "juicy". I plan on putting in something extra for the obstacles, other than the generic box and coins to make the obstacles more immersive, and in doing so, I would need to make an array of game objects for the "spawner" to spawn these objects.


Week 3 - Making a HUD/UI - GAM111

LECTURE:
During this week's lecture, we learnt on how to make a UI - User Interface - or a HUD - Heads-Up Display - for our game. This is useful for our project as it will allow me to keep track on how far the player has gone, in terms of distance, and how many coins the player has attained on their run in the game. With the newfound knowledge of adding in a UI system, I can also add in a pause screen, game over screen and even a main menu screen (all of which are requirements of the project).
We covered some of the objects used under the UI tab in Unity, which were relevant to the project. We covered how to use texts, buttons, images and sliders. Our lecturer went through each one and taught us on how we can manipulate these game objects to do other things. For example, we can use a slider to represent a health bar, a timer and many more.

Code to represent a time bar
The image above shows a code on how I made a time bar during our workshop class this week. First, we had to find the slider within the inspector so we can manipulate the value of the time bar. I also made 2 variables for the damage and the time difference or the time interval. In the void Update() function, it simply means:
If the current time of the game is greater than or equal to the time interval, the slider value (100) will take damage(value), and this will go on every timeDiff(value).

MILESTONE & ACHIEVEMENTS:
An achievement for this week was the fact that I had learned something new in Unity which I can add for the project. Going back on the Jetpack Joyride assignment (if you don't remember, check previous blog post), I can use images to alert the player that they are being targeted by a missile, I can use texts as a means of a tutorial in the beginning of the game to help people who don't know about the game. During our workshop class today, I have managed to get a better understanding on how to implement these features within the project, all that is needed to be done is to put this in my everyday practice.
My milestone for next week is to further improve on my assignment.


Week 2 - Tips for Assignment 1 - GAM111

LECTURE:
On our second week of the course, our lecturer went through tips and tricks we could use for our game. We went through script functions - Awake(), FixedUpdate(), Start(), etc. - and explained to us what each function did and when they would be best to be implemented or used.
void Awake() and void Start()
In the image above, void Start() and private void Awake() can be seen. The Awake() function would initialize as soon as the game scene has been executed, whereas void Start() would start when the game object have been spawned into the scene. In this example, I have used a SetActive - another keyword/function we learnt - for a pause function in a project.

Along with scripting functions, our lecturer also covered velocity and a more realistic control or mechanic for the actual jetpack with a function called Rb.AddForce. To access the function .AddForce, first we need to access the game object's rigidbody component, and that can be done by the function [Name of variable here] = GetComponent<Rigidbody>() or a public Rigidbody [Name of variable] here.

Code for the jetpack controls
The image above is an example that I made after following the lecturer. Here, I have made a variable of the rigidbody component, and called it player. By having this component, I can then proceed to add in the force for the jetpack. public int up was used with Time.deltaTime - change in time - for the acceleration. This allowed the game object (or in this case the player) to jump up and down as if there were a jetpack attached to it.

MILESTONES & ACHIEVEMENTS:
From last week, I managed to put in whatever we went through on our last lecture, into simple practices with small pieces of code and other modules which require codes, such as GAM112. I found that this module helps out a lot with other modules as I learn new things and functions that can be used to add on more mechanics on future projects. For this week's milestone, and possibly the few weeks after the next, I would be working on the first assignment, allowing me to evaluate my work faster and learn where I went wrong. 

Week 1 - Introduction to GAM111

On our first week of this module, we went through some of the keywords and functions we have learnt during MDU112 last trimester. For our first lesson in 1 month, without looking back through old pieces of code, this lesson proved very useful for me, as it refreshed my memory on what each function or keyword would do. We went through things like:

OnCollisionEnter (Collision colinfo) - The function for any collision effects, such as bullets
OnCollisionEnter code




Time.timeScale/deltaTime/time - All Time functions, such as timer, time intervals, etc

Time.timeScale function used to pause the game within the Game Manager script


Components - We went through what a component is, allowing our lecturer to see our understanding of Unity
Viewing components within the Inspector in Unity3D
And many more were covered.

Other than going through keywords and functions, we also went through our assignments for this module. The first assignment was to make a JetPack Joyride-like game, with obstacles, lasers and such. Our second was to make a strategy game (which will be covered on a later post) and our final assignment was to make a blog throughout the week, writing down our milestones for the week and the upcoming week, how we overcame any obstacles or difficulties and more. Speaking of milestones, for the first few weeks, up to week 3, I aim to complete the weekly blogs, and by week 3, I aim to start working on the JetPack Joyride-like game. 

Saturday, July 15, 2017

#4 Inclusive Design (111.3)

Inclusive design is a nice touch within the gaming industry, as it includes everyone from all sorts of ability, race and ethnicity, something that allows anyone to do anything someone could do.

Inclusive design is a very prominent feature or theme within the industry. Most games now have a color-blind assist feature, which allows the users to change the color to suit their needs. Some has audio voice over in the main menu or in the UI (user-interface) to help those with visual impairment. Some games have other subtitles, other than the dialogue subtitles, so that people who are deaf, can have a feel on how the ambient noises are. I believe that these things, the audio, subtitles and the color-blind assist feature should be included in everything, not only the gaming industry.

However, what I am against, is when developers and game companies turn away or change history to appeal to people with different opinions on different topics. Some games would go out of their way - in terms of story - to put in a homosexual or a bi-sexual people with different genders or sexual preference as one of their characters. I am not saying I have anything against them, however, I feel like putting these characters in the story, with no purpose whatsoever, is a waste of time, unless these characters play a vital role in the story. A game that executes inclusive design is the Mass Effect series, excluding the latest one, Mass Effect: Andromeda. In Mass Effect, you play as Commander Shepard, and the game features a character customization at the start of the game. The players can choose the gender of Commander Shepard, his background and even his sexual direction. Not only do they include that, but they even include other types of inclusive design features, like the color-blind assist, audio voice overs and subtitles that capture everything within close proximity of the player.

References:
Gies, A. (2012, October 02). Mass Effect 3 review: the sharp edge of hope. Retrieved July 15, 2017, from https://www.polygon.com/2012/10/2/3443570/mass-effect-3-review-the-sharp-edge-of-hope

#3 Censorship (111.3)

Censorship is something done to protect the audience and the general demo-graph from certain things, or from a political and a government standpoint, its for propaganda purposes. Although the film industry is not relevant to my field of study, I do agree with one of my colleagues when he said "censorship is arrogance". In the region we live in, the government censors some films that features sexual content, like the Wolf of Wall Street, which was cut-down to about 45 minutes or so. When my colleague said "censorship is arrogance", I feel like the government or the film committee that is in charge of the cinemas and media content, are censoring a topic which everyone will go through, sexual intercourse. People need to be educated, and education avoids actions that were meant to be censored.

Alongside this statement, my colleague also added "education avoids things that the people were not meant to do". He also included an example to support his statement: "If you were to tie a dog to a post, and put meat in-front of him and out-of-reach, the dog will want to go for it even more, just like censorship, however, we try to find a loop hole, a VPN. However, this has massive penalties, which can include deportation and fines."

In terms of the gaming industry, there are some games that have been censored, or some have been re-made for their audience, with some parts of the game being changed or simply blocked. An example would be the Watch Dogs series, both 1 and 2. It is banned in the Gulf region for featuring culture sensitive content, and some say that it would "encourage people to hack".

I can understand a game or a film that has been censored due to political reasons, extreme violence and all, but sexual content, I believe, shouldn't be banned, but the people should be educated. I believe that the "age group" is not determined by the actual number itself, but I believe that it is used to measure maturity, and intelligence an individual has.

Reference:
No Watch Dogs 2 release at listed Gulf countries because "cultural sensitive content". (2016, October 11). Retrieved July 15, 2017, from http://www.neogaf.com/forum/showthread.php?t=1311666

Friday, July 14, 2017

#2 Fan Collaboration (111.3)

Collaborating with fans can be a good thing, but it can also be a bad thing. The good part about fan collaboration is that if a company or an individual has built up a big fan base and is working on a new project, the fans might be able to help make the project better for both fans and new-comers into the base. Another good part about fan collaboration is that some features that the fans might want to include might be a good selling point, and the list goes on.

However, like all things, there are some negative sides to it. For example, some fans who would like to collaborate with you might expect a small sum of money or some percentage of the cut of the project in order for their services. Whilst some of you might think that "That's obvious, some people would like some sort of reward or incentive or payment for their work", I agree on that, if the last product that you have published was a perfect hit and you managed to produce lots of revenue in order to do that. However, if you're still an individual developer who wants to take a shot on their new game to be successful, fans putting a price on their service might be bad for business. Another negative side to this is crediting all the fans that has put their time and effort into the game. Finding a reward for "x" amount of fans might be hard to find, especially on that doesn't cost you anything. Failure to do so might cause uproar and might risk losing some of your fan base.

In the game industry, collaborating with fans is something common, if you're an individual developer. There is this platform, called Playsource, which fosters fan collaboration for individual - or Indie - developers. Playsource allows the developers to directly communicate with their fans whilst designing their new concepts. Playsource fosters a part of fan collaboration called Co-production, where the developers would include fans into the production. This is often done with most indie developers within the industry, and an example of a developer would be Nelson Sexton, the developer of Unturned.


Reference:
Takahashi, D. (2017, March 07). Playsource to foster collaboration between indie game developers and fans. Retrieved July 14, 2017, from https://venturebeat.com/2017/03/07/playsource-to-foster-collaboration-between-indie-game-developers-and-fans/

#1 - Interviews (111.3)

In this post, I will be writing about my views on interviews. I feel like interviews are like the personality tests, which allows the company to understand your point of view on things, determining your position in the company. It might be obvious, but I do believe that it is really interesting how one question might seem irrelevant to the matter at hand, but it does have many meanings once analysed. I will be analyzing some questions below.Some of the questions have been provided by a source (which will be cited at the end of this blog entry):

1 - "Tell me about yourself"
When an interviewer says this, it means they want to see how you talk. They also want to hear about your qualifications, career history, range of skills and emphasis on the skills relevant to the job on offer.

2 - "What is the most difficult situation you have had to face and how did you tackle it?"
When an interviewer asks you this, it means the interviewer is trying to find out what "difficult" means to you, allowing him to see if you have the necessary skills to work in this job position you're applying for.

3 - "What is your greatest weakness?"
The interviewer is trying to find out the level of self-perception and self-awareness you have. This is a hard question, as for some people, they have disregarded their greatest weakness, and focused more on their greatest strengths, as they feel like weaknesses are flaws. However, saying that you have none implies that you have further problems, which leave a bad impression.

4 - "What kind of decision do you  find most difficult?"
The interviewer is trying to see if you can make hard decisions, but also be ethical about it. This is a really hard curve-ball to hit, as you would have to balance both business and ethics which might leave negative effects on either side if not dealt with correctly.


On your next interview or your upcoming interview, just have a clear and open mind when entering the room, so that you can find out what the interviewer is looking for.

Reference:
Interview tips from Interactive Selection – the only global games recruiter. (n.d.). Retrieved July 14, 2017, from http://www.interactiveselection.com/tips3.shtml



Thursday, March 2, 2017

Game Development: PC and Consoles

Some of you may or may not have anticipated this in my blog entries, but I guess none of us gamers can escape the debate of which one is better; PC or consoles. However, I'm not here to say that PC is the "master race" or whatever that means. But, I do come to say why some people prefer PC other than consoles, and why some people prefer the other.

Why the debate?
Well, the debate is very understandable for some people. Some people simply prefer enjoying the game and having fun, whilst the others might enjoy playing the games with a high standard (or ultra, in this case) graphic settings. However, I feel like the high graphics that computers offer is just the surface why people prefer PC other than console. 

1 - Games are way cheaper online other than consoles.
The way shops sell games online is different than games sold for consoles. For example, a PC gamer can search for one game in many stores in their region, or internationally, without any restriction. On console, however, the games are like "walled gardens" (Chacos, 2016), meaning that the price doesn't vary in stores you go to which is close to someone. PC games on the other hand, shops around the world will have to compete for your wallet, where some places, they sell them for cheaper price, or better, its free! Some applications, such as Origin, by EA, they have this system called "On The House", where they give games out for free, without a catch. And for some people who are on a budget, this type of system helps them out a lot (including me..). 

2 - You don't need to pay, to access multiplayer.
On the Xbox 360, Xbox One and the PS4, users are required to pay to access Playstation Online or Xbox Live. For PC, you don't need to pay to play Counter-Strike, or League of Legends, or Battlefield. The only payment PC users are required is to pay for the game, and that's about it.

3 - PCs are upgrade-able and fix-able, whereas consoles can't be fixed or upgraded.
This goes for both graphics, and mortality rate. Once a PC dies or gets affected by a virus, the user could go to a computer shop nearby, and get it fixed, and the quality of the service depends on how much you want to spend. A console, however, when it reaches its life-span, its time for you to wear your black suit, say your prayers and buy a new console. The only way to fix a broken or outdated console is to buy a new on entirely, and consoles don't come cheap, in fact, consoles are more expensive than PCs in the long run. 
In terms of graphics, users can upgrade their PC to no end, with high-end graphics card, monitor, RAM (Random Access Memory) and VRAM, to give them a more realistic graphic detail when playing their favorite game, making it more immersive. 

However, consoles aren't all that bad. They do have its own positives, such as:

1 - Consoles allow a more social and interact-able game play experience. 
Local multiplayer on consoles is when you invite your friend over to your house or place, and would play a 2-player co-op session, or a 2v2 multiplayer session online against each other. In a social gathering or party, you would see a console somewhere within the party, where a group of friends would play some FIFA, or Call of Duty against each other (Spohn, 2016). Console gamers experience a more fun experience when playing with people they know together, other than with people from the other side of the world, without ever seeing them face-to-face or interacting with them. 

2 - Consoles are easy to set up and easy to play.
That is very true, consoles are really easy to hook up and set up. Unlike PCs, they need the right amount of power supplied from the motherboard to the cores and the RAM and graphics card, the PC specs HAVE to be met in order to play a specific game (if not, you can dream of playing the game because it will crash your computer) and other things are needed to hook up and play a game on PC. A console, however, would need a stable internet connection, a socket, and a TV. Before you know it, you'l be playing games with your friends. 
The learning curve for console games is really low (Spohn, 2016). You wouldn't need to learn what every button is on the controller, unlike the whole keyboard on some games, like Arma or Kerbal Space Program.

I can go on, and on, and on, about how these 2 machines are good in their own way, but for now, I believe I have covered some of the most... "important" aspects of these 2 machines. (Gordon, 2013)


References:
Chacos, B. (2016, February 12). 6 reasons why I love being a PC gamer. Retrieved March 02, 2017, from http://www.pcworld.com/article/3032557/software-games/6-reasons-why-i-love-being-a-pc-gamer.html


Gordon, W. (2013, November 26). Why I'm a PC Gamer. Retrieved March 02, 2017, from http://lifehacker.com/why-im-a-pc-gamer-1471860201

Spohn, D. (2016, October 13). PC vs. Console for Online Gaming. Retrieved March 02, 2017, from https://www.lifewire.com/pc-vs-console-1983594



Thursday, February 23, 2017

Game Development: Boolean

What is Boolean? Well, Boolean, despite sounding like a funny word, is a condition that is true, or false, and is normally used in loops, such as this:
if (age < 16)
{
   Console.WriteLine("Welcome");
}
The IF statement has a condition, the piece of code within the brackets. The condition, in our case, says that if the variable age is less than the number 16, the program will continue and print out Welcome to the user. If the condition is false, however, the program will end. 

Within the condition in this if statement, we can use logic gates. Before I go on, there are 3 logic gates; AND, OR or NOT gate. 

AND
An AND gate will compare two conditions, and if only BOTH conditions are true, the program will carry on. Logic gates can be represented in a table, such as the one I will attempt to make below.

A    B   Output
0    0    0
1    0    0
0    1    0
1    1    1

The table up above shows a visual representation of the definition I have given. If both conditions are false (0), the output will be false, and the program will end, or simply, it will not commence through with the statement. If one condition is true (1), and the other is false, the output will be false again. In order for the program to continue or commence with the statement, both conditions needs to be true. An AND operation can be expressed by using && within the condition in C#. 

OR
An OR gate will compare two conditions, and if ONE condition is true, the program will carry on or continue. 

A   B   Output
0   0   0
1   0   1
0   1   1
1   1   1

If no conditions are true, the output will be false, and the program, as mentioned countless times before, will end. An OR operation can be expressed by using || within the condition in C#.

NOT
A NOT gate is different than the other logic gates that I have mentioned. The previous logic gates has 2 conditions, whereas a NOT gate only has 1 condition. If one condition is false, the output will be true, and vice versa. 

A   Output
0   1
1   0


As mentioned before in the previous blog entry, I was reading a book by Roland Backhouse, called Algorithmic Problem Solving, and I covered the first chapter of the book about algorithms. C# and other form of high-level language programs available are all mathematically based, meaning that most of the keywords the program has in its System (using System;) is, in some way or form, is connected to maths. Most of the functions we have in C#, are all math symbols.

Functions used in C#
< or > = Greater or less than
<= or >= Greater than or equal to, less than or equal to
= = The assign value (the program takes whatever is on the right, and assign it to the left)
== = Equal or equivalent to
!= = Not equal to
+ - * / = Add, subtract, multiply, divide
-- = Minuses 1 every time a loop is successful
++ = Adds 1 every time a loop is successful

These are some of the functions the user is able to use at their disposal. Some of these functions can be used in conditions, as mathematical equations, comparing 2 values and allowing an if statement or loops to commence within a program.