Archives for category: School Work

Network is both fun and frustrating. This week I continued working with the networking code, the problem however is that it is going slow. You need go about coding in a bit different way than you do when  you code otherwise. Because when you code for singleplayer you don’t have to take into consideration what happens to the object when other people see it. In a network however you need to send the location of your player to the others, but at the same time enable the code to be able to get the movement input from the other players as well.

That I can tell you is a pain to get right. I’m not completely there when it comes to wrapping my head around how to fix this, but I’m slowly getting there. Right now we have a way to update the players position on the other clients, the next thing we need to do is to synchronize the creeps which we call soldiers with the other clients, that means we need to implement a way that only one player is setting the positions of the creeps and updates whether or not they are alive. This is however the problem, the code needs to be reachable by all clients, so they need to know that a creep have spawned, where it spawned, what team it belongs to, how much hp it has and what its current action is.

Sounds simple when it is put it like that, however getting all that into a script, that we already have made is not that easy. Firstly I wasn’t the one that wrote the original code, so I need to first look into the code, understand what happens, then rewrite the whole thing so that the script that spawns creep only gets called once, so that the game objects that represents the creeps is spawned locally but are controlled from the host. This needs to be done for every single object on the playing field. Right now that is what happens with the players, so that the players can see each other.

At least I got that to work at last, we had the weirdest bug that made 1 player see the other and see all movements, but when another player connected and selected a different team, they couldn’t see anyone else than the players belonging to their team. The other team could still see everyone. That said, I solved the bug at last, simply just one integer that was different, once I put the integer to the same for both teams, it worked fine.

In anycase, here’s what the client and “server” looks like at the moment, graphics are just placeholders right now, so it doesn’t look good, but at least we have something that is somewhat playable.

ingame

server

 

I say “server” because right now the server actually shows what is on the screen, reason for it being blue is that while connecting the clients the camera scrolled into something that doesn’t contain anything and it gets blue. The little disconnect window is the server window.

In any case, the work goes forward, although slowly, but we’re getting there. Next week I’ll get some help with the networking, which I need, that said, we also need to set up a plan on how we want the game to work. As I see it, we should maybe make connection and server boxes in a different scene, so that we need to load a new scene then wait a little bit before the game starts so that all clients have a chance to load the game before it begins.

This week I’ve been looking at how we can get the networking to work and started working on a start menu so that we can get the different clients to connect to eachother. To test this and to get that to work I started working on a chat room. Right now it’s just a basic chat room so that everyone can talk to each other. It now works, it doesn’t look that good however but it’s just a temporary interface.

chatscreen

 

As you can see I’m able to communicate through a server by sending message and you get a notification that someone has joined the channel. All of this however is more or less based on a pre-existing chat. I have changed that you don’t write in a nickname in the chat window and select that in the start menu instead. Reason is to open up for a login system at some point. The start menu doesn’t have all the functionality as it should have, but for the alpha it’s okay, we just need a way to sort the different users apart and have them select the role they want to play. Then we need to sort some kind of priority out so that if 3 people have selected the same role, the one who have the lowest or highest ID gets the role they have selected. Ideally it should be locked, but for the alpha this is not something we want to do. The main focus right now is to get an alpha in a playable state so that we can test the game and modify scale and the feeling of the game.

Anyway, going back to what I’ve been doing, I’m currently looking into how to send custom packets to the server, so that the client can interpret the package received, handle the package and then say that you’re ready or not. Once 4 players are ready the game should start. After that we need to have a way to communicate with the other computers, knowing if the others have loaded the game or not. I’m not sure how to solve this however, in the beginning however what we want to do is to add a timer for when the game starts, so that each client gets into the playing scene, then the game starts after 2 minutes, or if we have a signal that all clients have joined and are ready to play, the timer is shortened to 30 seconds or so. That’s what I want to look into for next week however, this week I need to find a way to be able to send instructions to the other clients, so that we know when we have 4 players ready and get the right scene loaded.

Other than that the game is moving forward, faster than we thought it would at the start, we hope that by the end of next week we will be able to put something together and have something playable, that resembles a moba. Then we need to add the commander interface and actions. Unity is easy to work with, but it takes a little transition to understand all the concepts and I’m still in the learning stage, so coding takes a bit longer than I’m used to.

Tata for now, and next week I’ll hopefully be able to tell you a success story about how we were able to load a level once 4 players are ready.

I’ve been meaning to blog something for quite some time now, but I haven’t really had the time and when I had the time I was going through some personal stuff. Basically my wife left me right before Christmas, it hasn’t been easy since then, but now I’m going to try and pick up the slack. Now that’s not what this blog is going to be about however, I want to write about a pattern that we are using in the Advanced c++ class.

Components

I love components, I just gotta say that. Now simply put a component system is all about taking away all the details that you normally want your gameobject class to have, I don’t mean everything of course, but for instance if the game object has a visual representation you make that as a component. Inputs, movement, health, collision etc. What you do is make a basic interface component class. I called it “InterfaceComponent”, reason being that when I used the class wizard in VS2010 it said the word component was a reserved class.

The InterfaceComponent class is very simple. It’s basically an pure virtual class with certain methods like Init, Update, Clean and a way to identify the component in question. Reason why you want to identify the components is that when you link it with a game object, because the GameObject class need to contain an method for attaching the interface. Instead of making the GameObject a pure virtual class as I usually do, I basically ripped off the teachers code, however what it does is to use a Template method to insert the right type of component into the gameobject class. All the other components inherit from the InterfaceComponent class.

So why use components, you need to write code to attach the gameobject into the component and you need to initialize the gameobject into the component, so why do it like that? Simple answer to that is that you make components because once the system is done, you can easily add more components later on. The longer answer is that, let’s say you have 10 gameobjects that need a new component, you create the component once and just attach the new component to the system. Also it’s makes the code modular so more people can work on the code at the same time. If the game we were creating needed a bigger team, each component can be distributed among the people working on it. Besides, the code is reusable later, which is another big plus. Generic code is what we strive to write and the component system is more or less the first pattern that I’ve seen that does just that. Of course not all aspects of the code is reusable, however you don’t need to modify the code much in order to reuse it for another game or even another program.

I probably isn’t making much sense for those who doesn’t program anything, however you can compare components to a car. In order to drive the car you need wheels, engine, steering wheel, gas, gas tank and someplace to sit. Of course you need more, however what you do is that you define the car as an empty shell. Then you add via code, the small parts that you build the car with and once you have that, you can easily change the parameters for the car. How fast, accelleration, because you have easy access to all of that data. Add serialization, or reading data from a file to automate the process and you can with the use of that create cars for all purposes. Of course you can do that without components as well, but one reason for having components is that you can easily remove and add components without changing anything in the object you want to add the stuff to. You don’t have to add variables, you just create the component, attach it to the game object and the update of that object happens automatically.

The tricky part with components however is to know which component you want to have access to the other component. As an example, I have a SpriteComponent and a PositionComponent. In the SpriteComponent I get the PositionComponent from the gameobject. The PositionComponent in turn updates the sprite, where it should be positioned. Then I have a movement component that contains the InputComponent and also the PositionComponent, reason is that you want to have movement update the position of the sprite, which it automatically gets from the PositionComponent. So having the different components talking to each other is also important, that’s why you initialize the components with the gameobject, because that’s where you store the component you add to the game object.

I know it’s useless to write about code without practical examples. I tried however to put some code in here but the formatting didn’t look any good so I removed it. That said, components, good system, use it! Provided some links below which has some examples, and to learn more about this pattern. Or ask below and I’ll see if I can answer the questions.
Links:
http://gameprogrammingpatterns.com/component.html
http://sourcemaking.com/design_patterns/composite

 

Tomorrow in the programming lecture we’re going to learn how to make binary files from the files that we have and package them. Since we’re going to release Fly or Die! on Desura, I want to have that packaging done to the game that we want to ship. I mean the assets are already there, so all we need is a menu and I can package the files and get it working into the game and we can finally release the thing and don’t really look back.

Also I want to add an executable that allows us to utilize the cellphone controls. Of course that is if the King of the Thrill group really allows us to do that, however I’ve mentioned it to some of their team members and they didn’t seem to mind at all. What we gotta do though is to get the cell phone controls to have a fly or die logo or the colours of Fly or Die. Primarily though it will be released with xbox controls, but I need to modify the joystick input files first, because as it turns out the connection is polled every so often, and it should really just update if there’s a change, otherwise it shouldn’t update. That said however it’s not that big of a deal, once a Joystick is connected the problem somehow disappears.

In any case, we’re not too far away from releasing the game, first I need to get through tomorrow’s lecture and understand how we can wrap the assets into a big file and then in turn read those file back into the memory without losing any data. Once I get how to do that, it’s the menus next and finally getting the game to read and use the settings file. That’s all that is needed. We could have cleaned up the code and done some minor debugging, but as it stands the game is fairly stable, there are some bugs in the game, one in particular that I really hate, but as it is now I don’t know a good way to actually fix the bug without rewriting a lot of the code. To make a long story short, we made a shortcut, limiting the frame rate to 60fps.

It doesn’t sound so bad, however if you run the game and want to record it for instance, let’s say you use Fraps, what happens is that if you record in 30fps, the software doesn’t interpolate between the missing frame and the characters move around choppy. It creates a really weird effect which doesn’t look any good. One solution is of course to record it in 60fps, but you then get twice as much data as you normally would need. Now that’s just one specific problem, another problem arises if the computer that want to run the game isn’t strong enough and can’t run the game in 60fps, the game is slowed down a lot, because the whole buildup is based on the game running in 60fps. Unfortunately we discovered this problem a while into development, and were forced to continue developing the game with that limitation. What we should have done though was to make the game loop run in 25 frames and then had a functionality that could predict where the characters are. 25 Frames pr second for the main game loop is enough anyway, 25 updates and then the graphical loop should be ran as fast as it could. Lesson learned! Using the built in frame limitation from the software is not a good idea. Don’t get me wrong, it works, but at least for my part won’t use that solution again unless I have to.

Programming

Current assignment in programming is a nice one, we have to make a dynamic array, linked list and a binary search tree, which is an interesting assignment that I’ve already learned a lot from. That said, curse you binary search tree! I really hate the remove one Node which is used part, other than that it has worked quite well. Recursion is something that I’ve kinda had a problem struggling with, I know what it is, but what has been problematic is figuring out what exactly it does. What does it execute and when, today I found out more or less how it works and recursion seems to be a very nice way of handing certain problems, but I do see how it can be problematic as well. In essence you are calling the method or function over and over, once you get to the point where the recursion ends you continue in the function from the last to the first again.

What I did like a lot with the assignment is that you really need to sit down and think about what you’re doing, you do need a plan of attack so to speak. Of course if you’ve done it a lot, probably something that you know how to do and recognize the pattern instantly, however for me which has around 1 year of experience in programming, it’s something that I need to figure out. Sitting down writing the search tree, where the values should be, what the action should be when removing something. That said, it’s fun to figure that out, and luckily if I get stuck there’s a lot of resources out there that can help out, maybe not with the solution directly but with how you can think in order to solve the problem, and to be honest if you are copying something directly you’re not really learning from the experience and then there’s no point to the assignment. Programming is very much learning by doing, testing, failing and trying again.

Today Rasmus and I sat down to try and port the Cellphone controller mechanics with Fly or Die, after just 3.5 hours of messing with the old Fly or Die code we were able to actually get the controller to work. It’s not perfect, but it works as well as King of the Trill did with the same controllers. We tested it with 4 players and it works surprisingly well and not only that but we didn’t use that much time to be able to port it over.

Of course it’s not really that complete, I mean the web interface is still showing the King of the Thrill logo and the web interface isn’t really made for fly or die, however we were able to fly around and have fun. The controllers are a little bit wonky, on the cellphone that is. It seems to turn a little bit more than what it did with the joystick, however I think that’s more a latency thing. That said because of that, steering was a little bit easier. Now all we can do is wish King of the Thrill guys good luck when it comes to showing off the controls and hopefully be able to demonstrate that to whoever they want to demonstrate it to.

I know they are going to work on the game some more, but it was really interesting to see that we were able to fairly easy just port the controller over from the Xbox joystick input method to the cellphone input. I’d like to think that it was because of the input class that we had created for the project that made it easier. However realistically I don’t really think so, it would have been possible to do it straight into the code checks, it would have been more “painful”, but it would have worked. Next thing would be to get Joystick and Cellphone support, that would have been nice, unfortunately I had to disable the Joystick part in the code, so now it’s either Joystick or Cellphone, so we need 2 versions so to speak.

Also I discovered that the joystick code is badly written. Once I disabled the joystick code the game ran very smoothly, so I should take some time to fix my old utility class into something that works a lot better. It’s at least good to know that what I’ve done wrong is only Joystick related, once the Joystick code was out of the game it ran well. So there’s something with the Joystick input that is either checking too often, I mean you only need to check like every 5 or 10 seconds I suppose. Lesson learned so I’m going to re-write the class as I like having an input class that handles all inputs, even if it just wraps existing code into just one class, that I think is more easily manageable.

I see now that I haven’t blogged for a while. Reason for that is that I didn’t feel like I had anything to blog about. Still really don’t have anything to blog about except that we’ve started with c++ and math, and will have that for the next 9 weeks. At the first glance the math that we have now doesn’t look that terrifying, I thought that once you got to the calculating trigonometry that it would be difficult, I remember that I had problems with that before, although I’ve created my own way of remembering which is which and how to calculate it.

Turns out it wasn’t so big of a deal after all, I’m not saying that I got everything right on the first attempt, but at least I understand the principles behind it. I’m not going to bore anyone with the details, but it’s interesting to know why we’re working with 1 to 0 and to -1 as numbers. I didn’t know that before, yeah I know it’s not _the_ revelation in the world, but nonetheless, it’s new to me. When the teacher went through it was all so obvious, almost so obvious that I should have figured that out myself. Anyway, I didn’t and now I know, but that’s the reason why we are learn this, because it’s something that we probably didn’t know on beforehand.

Programming

Today we also had our first lecture in advanced c++, what’s kinda nice to know is that we’ve already touched a lot of what is considered advanced c++. Inheritance, dynamic memory allocation etc. One thing we did see today, however I didn’t really feel that I got the grasp of was the Friend class type, which I want to do some research on, from what I understood you just put two classes as a friend to each other and you merge them in a way. That said it would be nice to see some examples of that, but now that I know they exist I can always just Google it.

Another new thing that we had today was the method pointers, now this is fairly abstract and we didn’t really get any good examples of how to use it and when, but from what I understood, it is a way to call on an array of classes that all have the same method and have them create themselves so to speak. Instead of using enumerations and having an enumeration that tells what kind of object you’re dealing with. For instance if you create a class called GameObject, you can create a child class called Player, Enemy, Stone, Tracks, Bullets etc. All kinds of children to that GameObject class, and in that class you create an enumeration that is called the same as the different types of classes. So when you create or instantiate the class you say that this is a Player, this is an Enemy etc.

If I have understood the method pointer correctly, you can instead create an array of those classes and run a method that is called Create(), and you create those objects and you have a pointer to that object. That said however I’m still not sure how you would practically apply it or use it. We will however get a demonstration of how it works tomorrow as the teacher wanted to come back to the subject. Apparently it’s not something that is widely used, but it is something that is good to know how to use. In addition to that, when we encounter code like that it is good to know what it does and how it functions.

Other than that most of today was more or less repetition of what we have previously learned, but tomorrow we’re going to learn more and hopefully be able to learn more about method pointers.

This weekend we’re also going to go through the idea for the big game project, and we’re going to send that in on during the weekend. It’s not my idea though, but the more I hear about it the more I’m thinking it could be something of commercial value later on, but we’ll see, the goal isn’t to make a game that you can sell, it is to make a game that is entertaining, fun and a little bit outside of the normal box.

Hi blog,

This blog might not seem school work related, however bear with me, and I hope you will see why I chose to put this up as a blog for my reflection. It’s a bit more “personal” than my other posts and I’m going to try to be more personal in the future. Not that people have commented on anything, heck I don’t even know if anyone is reading this stuff.

When I first started to prepare myself to get a higher education I was initially going to apply to a school in Gävle that has a graphical 3D education, because that was what I was doing at the time and it was an education I thought would suit me. I wanted to learn more about how to do 3D stuff. The education was two years. Then later when it was time to apply the education was getting a rework and wasn’t available. That’s when I started looking at other schools for what to do. I’ve always had an interest in games and programming so I applied to several schools related to that, because that was actually what I was thinking of when I was modelling in 3D. I couldn’t apply to pure programming courses, because I didn’t have enough math in my baggage so I applied to several schools. One being Game design in Skövde, and several in Stockholm and of course here on Gotland. When I first was accepted to Gotland, I was dubious if I should take the spot or not, but I accepted in the end (well duh ;).

What I didn’t know however was that the focus was more on the game design part than the programming part. Just reading it afterward seems stupid even to me as I did apply to Skövde on their game design school, but the reasoning was that I wanted to get into a game related school and I was willing to apply to almost anything at the time. Since I cannot draw anything worth a damn and I could only work in 3D software, it was logical that I applied for programming, besides I’ve always had a dream, but haven’t been able to teach myself, to program. I’ve always been that kind of a person, doing stuff, not thinking about why you are doing things, just plain out doing what you think is right. In my case however I’ve often been doing stuff right, but I cannot tell you how or why, just seems like I’m able to figure things out without even reflecting about it. The problem however is that once you start doing that, you stop learning the why, how and what. You don’t learn anything from your automated self, so once you are stuck, you are really stuck, you can’t solve the problem, because the knowledge of what went wrong and why it went wrong is missing. That has always been my problem, it’s when I started at this school that I’ve began thinking of why, how and what. So now every time I do something that for me is automated, I try to stop and think why something happens, what I did (right or wrong) and how I can change something. Analysis, good stuff!

Anyway, I am really glad that I was accepted to school. The more I learn about game design the more happy I am that I was accepted (and that I accepted). I’m learning more and more how cool it is to be able to analyse games (digital and board games) and even other things like TV shows and movies. For instance the small things that we learned in the first year about heroes journey, story arcs and how to build tension is something that you can clearly see if you look for it. I’ve even seen Chechov’s mantle piece in many TV shows, although often it isn’t a gun, but something else. That said however it’s not always evident what it might be. However I find it fun to look for those things and see if I guessed right later on. The teacher warned us that he would ruin games and also TV shows forever. I on the other hand don’t see it that way. I actually find it more entertaining now, because you see why they are doing like they are doing and you more often than not understand the reasoning why something happens. The only exception to the rule so far is probably Game of Thrones, however that series I hear the music and I forget all about analyzing the story.

In the first year I remember that I wasn’t that interested in game design, I mean don’t get me wrong I enjoyed the subject it’s just that it didn’t quite feel like my calling. Now on the other hand I find myself thinking about how to design games more and more. I’m learning to look at games, trying to come up with ideas on how to improve what people have, learning to appreciate the art that is game design and stopping to be as narrow minded as I once was.  I’m starting to like the different things that you can do and the more I talk with other people about game design the more I look forward to the next course that involves game design (which is level design) more and more.

Right now I like the school, I like my fellow students and I like our teachers and I’m really happy that I landed a spot here on this school and even if not everything is perfect at the school, what I learn each day is something I can bring with me. Although I’m not as good with game design as some of my fellow students, I’m learning to appreciate and love the craft that I’ve chosen.

One example, this week I have probably worked more during a week than I have since I got here. We’ve been pulling 8-10 hour days and I’m still not exhausted which I should be. Having these long hours during a week is usually a killer, however I’ve been enjoying making the serious game we are making so much that the time just flies. I’ve been having so much fun testing other peoples games and also trying to make sense of the criticism we got ourselves. Even if I haven’t been at school I’ve been working, looking at this or that. Discussing game design, discussing ideas etc. I’m even going to work this weekend and I’m looking forward to it.

I’ve met some excellent people and people that I want to stay in touch with after I graduate, so if anyone asks me where to apply for a school to get into the gaming industry, Uppsala University Campus Gotland would be the answer they get from me, I’m really enjoying my time here and I’m really having a lot of fun at the same time learning a bunch of stuff. My only regret is that I have to be away from my wife, but I’m doing this for us, so it is worth it. As a person I feel like I grown heaps, even if I’m older than if not all, at least most of the students that take the same course.

I wrote a whole lot yesterday that I saved as a draft, thus there will be two posts today.

Anyway today we had the third meeting of the week, in just as many days. This time however we had someone who wasn’t a part of the group to join us when we were testing the game that we had. The feedback we got was something we had thought about, but it was said and explained in such a fashion that we instantly after that knew what to do. All cred to Oskar who basically put us on the right track. It’s incredible that a small thing like that can do so much for a project. Just having someone coming from the outside, seeing things that we’re too close to see and then make us go aaaah. After that it was just a matter of fixing the broken things and we have a serious game that now not only feels like a serious game, but it also plays as one with the mechanics. So now we have both the narrative aspects in the cards that the Pablo player has, but also with his actions. Although a lot of what we have done have been abstracted, it still feels like you have a Pablo simulator. Also as a player you feel the tension, you have strategies that you can do and you have an internal economy in the game where the Pablo player gets an advantage, then the other players get an advantage and it swings back and forth like that until one side gets the upper hand.

Also the way we achieve this is both by using dice and using strategy to pick locations that is difficult for the players to reach within a certain amount of time. Although we haven’t really balanced the game, it is already now semi balanced, because if the players choose the wrong strategy they will lose, and if the Pablo player use the wrong strategy he will easily lose. So I think we got a system that works really well, which means that we have the Serious Game in the mechanics as well as in the cards that the Pablo player plays. The cards will tell the story, the mechanics will show it visually, that for instance he did a lot of bad stuff, but that he occasionally builds a school or something that benefited the people living in Colombia.

Feels good that we were able to bring the game further to a final version and it feels really great that we are finally on the right track. Not that I was ever worried, as the people in my group are really good at what we are doing.

Gamification

While I’m on the subject of serious games, I might as well add a few thoughts on the guest lecture that we had on Monday. I have to be honest I didn’t think about the gamification idea that they had and didn’t really think that much about it. I thought it was cool that they could make a game about pretty much anything, that you just make goals in real life, where people update the progress through their phones. Now the interesting part is that when they did this, smart phones didn’t exist, so there was no GPS and they used sms instead of GPS locations etc.

Now that there’s been a few days since the lecture however, the idea is nice and I know that there are games where people are out looking for stuff that they need to locate, making them travel around in the community to find small notes or whatever it is. However I do believe that those games are limited in themselves, firstly you need to pay in order to be able to create your own locations. Then you need to make sure that the location you put something in is updated. It can’t be too accessible, because people will then either think it is trash or something else. Then again a lot of people, myself included, find the notion of a message in a bottle very interesting, and I would say that a system like that kinda invoke that feeling. You don’t know what the message is, but it is from someone else and it is sort of a treasure hunt.

Anyway it’s a very interesting idea that you can make games out of something that you want people to learn, or that you want to change a certain behavior, figure out how you can change that behavior and then make a game so that the things you want to change become something fun and interesting rather than a dull command from the top of the “food chain”. This kind of competition is something that I’m going to suggest for my wife that she implement in the business she’s in. Making agents compete against each other, but at the same time make them want to to as best as they can. Several ways this can be done, but since the call center is divided into countries, they could have different countries have a competition so that the winning team will win an award and make the whole thing an experience they remember. The award could be something that the whole team can do, a team event or just an award ceremony of sorts.

I see this could be a motivational thing that people can do for their employees, on nearly any workplaces. The goal might not always be to improve production, it could also be about improving the work environment or even finding ways to save money, like one of the examples we got was to try and get the electrical bill down a notch. They achieved it by having a competition where people turned off lights that were on and every time they did so they got points. Anyway most important thing is to have a goal and have an incentive to why they should complete the goals and also know what behavior you want to change / improve.

Today we had a lecture about interface design. There’s a lot of things you don’t think about when creating an interface, but after we had the lecture I thought it was more or less obvious. I didn’t know that we had a focus area when we are looking at things, however when now being aware of it, you notice it right away. You only see a certain small point of the screen. Also you do see stuff outside, but the peripheral vision is more a way to make you aware that there are changes that you might need to look at. Which is how we need to think when we are creating interfaces.

It’s kinda one of those things that is more or less self explanatory when you hear it, but stuff that you at least I haven’t really thought about and it makes perfect sense. Also there’s no universal answer to how to design an interface, or even how to make a menu system intuitive. For the most part you want as little text as possible and you want to have as easy menus as possible without it destroying the message. That’s both in-game and in the menu system before you start. For instance that you let people have access to the play button without having to press a million steps in order to begin playing.

What also was interesting was the link towards webpages, where you want an easy signup button and easy way for people to get into the webpage without going through a million steps in order to get where they want to be. There’s a lot of smart and simple solutions. One example that was mentioned, was that you could let the player click on a play button, the client downloads, while it does that or while you start the game you can start typing in the name of your character, then an email address and you can get the ball rolling from there.

Very interesting lecture, although something that makes you go “doh”, I should have thought about that and that it is really self explanatory, sometimes you just need the information served in order to realize that of course that’s how you do it.

Serious games

In the serious games department we’ve had a couple of interesting days. We got our feedback on the game that we had in mind, and although I understand the whole thing about needing to have the serious game aspect baked into the mechanics it didn’t do us any favor. We had a game that we thought was really good, and looking at it in retrospect we might have majorly failed, and the tricky part now is that we need to find a way to put a story about Pablo Escobar into the whole board game that we are making without using too many cards to explain about what he did. That even though he was a drug smuggler and a really bad person, he also did some good things for Colombia. He wasn’t a saint, far from it, however the interesting part about him was that he managed to avoid capture for so long and it wasn’t until the U.S. got the Colombian government to allow for extradition to the US that he escaped custody (in a prison he owned).

The whole bribe or be killed aspect is kinda interesting as well. Not that it made him a good guy, far from it, however it would be a mechanic that is interesting in itself. Problem however is that interesting mechanics doesn’t make for a serious game and the whole getting the game to be a serious game about a person that had a huge impact on drug smuggling and getting that into a mechanic and at the same time not having a narrative that is only in a card that you draw is very very difficult. We now have a system that doesn’t really feel like a serious game at all. That said, it is a very blurred line if you abstract something too much and figuring out how you can tell a story about a person without spelling it out directly is the challenge we are currently facing.

Yesterday I began making a test layout for our board game, which we tested today. It failed horribly. We tested it only once, but it quickly became clear that it was too small for 5 players. Not only that but the monster was, contrary to our belief, much more powerful than we had anticipated. Having hidden movement makes it much easier for the monster to ambush the other players. We did however figure out that players needed more places to move and shortcuts, so we did a board on the spot that worked remarkably well. It had 133 movement squares compared to the one I made which had only 61.

However even if we increased the size of the board, it still gave the monster (we haven’t really defined its name or what it is, but we call it monster to distinguish it from players) a way to catch the other players as they have no idea where the monster is, unless they get killed. That is every 4 rounds the monsters location is revealed and the players have to adjust accordingly. I’m surprised how well it turned out with the board that we made up on the spot.

Going forward we need to add stuff to the game, for instance what happens when the monster catches the player, what happens when the player searches for the item they need. It would also be nice to add a feature for teleportation as we had planned, all that however require that we add just one functionality at a time so that we can test between each thing we add. Right now it feels like we got a solid base to work on and right now it feels like the only thing that can screw this up is if we add too much stuff too quickly without proper testing.

Another thing that I see more clearly now is that in a board game it is much easier to make a game when you start with the aesthetics and when you start with what the game should feel like for the player and adjust the rules based on that. Because when you start in that end you know if you achieve the aesthetic goals that you are on the right track and today we got to feel that for the first time, and the hidden movement of the monster gave the player excitement, at the same time playing the monster was really fun as you could see the other players movement, and plan your movement accordingly and trapping the players. Also revealing how much you can go each step also adds to this excitement for the player which was scarier than I initially thought it would be. The meeting we had today boosted my confidence in the game we are making.

Lecture thoughts

Today we had a lecture about AARRR and MDA, plus eternal beta. AARRR is something that is more commonly used on the web. However it is a model that is applicable for games as well, which was interesting. AARRR stands for Acquisition, Activation, Retention, Referral and Revenue. The interesting part about this is that it is a model you can use to test out games on the public.

Now this is very interesting, my wife works in the callcentre business as a manager there and they are always using metrics and the word retention. Now retention for their sake is how long agents are staying or how well they are able to keep their employees. Metrics that are used in the callcentre business is a measure for how well agents are doing and how well the earnings for the callcentre is. As an example they have metrics that measure their performance and in some cases also how big their cheques will be. Now we get to look at games the same way. That everything that you put out there can be measured in one way or another. As a business model it is a good way to see if a game might be profitable or if you can just stop the game development and do that in an early stage, because you can see that how much the potential for earning the game will be and how much employees and other stuff costs.

Right now however it is difficult to get a really clear picture of the usefulness of this “new” framework (AARRR), because as I see it it is more a business model than a framework.  I get that it is a model based around what you can make money out of and what you can’t make money out of. I do see that more and more games on steam are now classified as “early access”, which I’m guessing is part of this AARRR framework and eternal beta “idea”. That a product is released when it is done. Another recent example of this is Dota 2, which was in beta for a very long time, and once they released it there was no major change. It was patched later by a larger patch however, since I didn’t play Dota 2 at that time I don’t know if it was right after it became released or if it was during the beta or whenever it was.

In any case, it is a way of thinking of your game, as a cash cow, looking at how much you can earn on the game, what you need to accomplish in order to make a profit. Also it seems to be working well with free to play as well as games you pay to play. It is a framework model worth having in mind going forward, but it is a model I probably will have some problems applying without refreshing this lecture and having a specific game that I want to apply it for. Which to be perfectly honest is what I think you need to do. I think you need to apply the framework depending on the type of game that you are working on. If the key element is to have a free to play and that you get revenue from an ingame store, then I would apply this model, because that is what decide what you are earning money on. However if it is a game you sell, it might not make as much sense to apply this model. I think the deciding factor should be the type of game you are creating rather than setting for a specific model and just run by that. I’m not so sure there’s a right and wrong answer for this though.

The eternal beta part was also very interesting, because one of the things mentioned was that a game could be in beta for quite a while, let’s say you start inviting people early. The early adopters get to play around with it, as a developer you have a couple of builds ready to be deployed, which to the user indicate that the team is working very hard in pushing content, you give a better impression. If the changes doesn’t work you have to make a new build and start over, but it will give the players something positive to say to their mates and be more invested into the game. This makes me think of how Age of Conan did this, they did the same thing, had a closed beta, then added lots of new people. A week later or so they released a mammoth patch that was really huge and you started thinking that they were working their asses off trying to fix stuff and polishing the game. That said seeing how bad Age of Conan was at release, I’m a bit dubious if this was the case for them or not.