ladbon

There was one and there was no one

Category: 5SD023

What Six Months Look Like If You Have Been Busy

So I promised an explanation on what I did the weeks before the deadline and how the project went as a whole. I will try to include as much pedagogic help as possible but this will be a read and not a kindergarten post.

 

Last time I posted I was working on a title named <Lonely Road>. I’ve been working as a practice lead designer position on a six man team. I had worked with this team before and I felt we could achieve something great during this project. We dove headfirst in one of my ideas and almost dove in motivation and co operation during the last week. The programmers finally decided so stick with it and created this game

 

Logo

Our programmer Laban Melander made this picture. We had our share of artists and Laban is even a skilled programmer,
winning numerous prizes the project after this one.

Image

 

Intro Screen

We made is simple with only a small tinted text in order to enjoy the art in this game. If you have sound on
you can hear a small fire crackling. Our artists Seamus Newman made this.

Image

Main Menu

We tried to make it as simple as possible considering the game has very little enjoyment offered. My tip here is to
never ever go overboard on the MainMenu, it can easily confuse and intimidate the player(looking at you Starcraft).

Image

HighScore

So this is one of my own creations. Never had I failed so badly that I couldn’t make a billboard.
I really tried making this with buttons but I didn’t use enough time effectively so this is the shit you get to watch.

Image

 

Options

This page was made by our lead programmer, also a talented artist named Viktor Myhrberg. From the north he never saw
Color until he was a grown man and you can tell he has grown fond of it. Everything is shown perfectly with sliders instead
of a designated point system which usually these are handled in but I actually like this old school scrolling better, it makes for
a better equalizer feeling. At the bottom you can see the button which changes between special controls and normal controls.
This was put in so everyone can enjoy the game immediately.

Image

 

The Turorial

We were split between showing a fake loading screen where you become introduced to the game via slides but skipped it for this
monstrosity. In my honest opinion I would have gone in a different route but the design was so nice I was happy it got implement
anyway. On the left hand side you can see your objectives and motivation for playing. It shows everything you really need to know about the game first hand. The middle shows you the special controls and the left hand side gives you an introduction on the monetary system in the game. Everything you need for a good start is there. Considering nobody reads these stuff it was paramount to make the player understand the mechanics in the game without looking at a picture for longer than two seconds. We implemented feedback as soon as you had enough score to show people what the game had to offer if you became worthy of an upgrade. It is only a shame we never told the player that this is a wave defense top down shooter before he or she started playing.

Image

 

GamePlay

And here we are, gameplay. Bandits come from random locations and you have to kill them all. Upgrade with your score and make sure your truck’s HP never falls below 0.

Image

 

Customization Page

You can see why I was happy working with this team. This customization page is a beauty I am happy that we implemented this way. From pixel graphics you get a cleaner more detailed look at your world here.

Image

 

So this is Lonely Road. One of the few finished games that course. I liked the game but I am unhappy our group went the way it went. it is great to hear that the students I worked with did absolutely great the next project.

 

So that was that project. I’ll make a new post about the game we made on the course Theme Park and I will share some ideas I’ve been having.

I want to be the best

This weeks artifact have been high score.

Our game is nearing it’s end stage and we are moving into a full feature freeze and going into balancing soon. Our group have almost finished a survival wave based top down shooter called at the moment -something something road-. You take control of a young woman named Ariana. A traveling saleswoman that have to defend herself from bandits during trips. Set in a spaghetti western steam punk world near India she defends from waves of enemies that try to destroy the only worthy possession she has, her truck. You bulk up in score by killing enemies and use it to purchase yourself upgrades for either speed, new weapons or hp. These will affect Ariana in different ways and how you play her. It’s main objective isn’t to survive the hoard of enemies, it’s to get the highest score but buying upgrades for an easier completing makes it hard to reach a higher one as you lose a fixed amount of score upgrading.

The dynamic we wanted to reach was imperative as the simple goal of completing the game will be a lot easier rather than reaching the best score possible. One mechanic that do set us apart is our main controls. We wanted to find a easy way to defend a circular central point on your screen so we made the controls fit the circular collision box that is your truck so when you move you strafe in a 45 angle creating a smaller circle that encompass your truck. It’s creates some difficult navigating at first but when you get the feeling of it the advantages are great.It’s inspired from the circular cities built during the middle ages for easier defending it from sieges. It worked then and it does here. One thing we added this week is some kind of gravity pull for the only power-up in the game, a toolbox which essentially fills up your hp by repairing the truck.

I guess the only thing I haven’t mentioned now about the game is that you are immortal, you can never die unless your truck gets destroyed as it’s power source operates there. No bullet can harm you, sound easy right? wrong hehehe. We will begin the betastage tomorrow.

HERE IS THE ARTIFACT THE REST IS COMPLETELY FOR MY REPORT AND THOSE INTERESTED ENOUGH TO LISTEN

I’ve been working on high score for quite some time now, it’s been brewing on my mind how to build it and what to expect from it when you play the game. It’s not fully functional as some bugs occur like text written over text(might be fixed this hour though).

I had a picture that you create a class that has 4 main methods, Save(), Load(), Read(), Arrange() with  two different dynamic vectors of information. One for keeping track of score and one for keeping track of names. I wasn’t sure about what stream I would be using cause the benefits wasn’t familiar. I had never actually worked on this you see, it’s completely new and when something I need to pick it apart and play with it. Almost a week and a half goes by without any results. I wasn’t getting any code done and the research wasn’t going well. I had to get a meeting with my superiors to understand what I am dealing with. The meeting went and I became much clearer. My design was very on-line based and complex according to my teacher. I was thinking of some kind o racing game high score so I was taught a more suited design.

My design became struct based objects that keeps track of name, score and kills. They are then pushed back into a dynamic vector that keeps track of them. The main methods are Load(), Save() and Arrange(). There are some other methods which are only there to retrieve a single object and one to get the size of the vector.

I create a txt file that already have a few scores in them which at the moment of the startup I load in the scores which are handled by a loop, string stream and a struct. They are then sent out to be arranged so when you start up the program you are allowed to see your high score immediately. It’s then changed when you have lost/won the game. Here you get to write your name and press a button to submit your name, score and kills. The score and kills are already taken care of in the game object manager but I needed here to get the name. I must tell you it took a good three days to get this right.

The method was a event.type in SFML called TextEntered. It’s designed to register every button on the ASCII table you press and all you have to do is create a sf::Text object to place it in there with a string stream and you’re done. It wasn’t easy to get this figured out and working as I wanted mainly because of my inexperience I guess but good comrades are always there fortunately.  So when you press submit your struct object with your name, score and kills goes into the dynamic vector and arranged accordingly. In the same menu you can now press high score(could have before but you wouldn’t have gotten your high score submitted!) and behold, a list of names, arranged perfectly. When you press back from the high score it saves the information that it stored locally in the program back to the txt file which it erases first to make sure stuff don’t get overwritten.

I had a few issues going into this new ideal. My main crunch method is to create the class, the methods and connect everything before I even start to draw stuff out which I haven’t found to be an effective way to code so when every single line of code was finished I couldn’t draw it out, my arranged method wasn’t working and I was creating line breaks and spaces where I didn’t want to. It took me a while but when these minor issues were solved with a reversal of the arranged method and taking out the line breaks and spaces I could now arrange it accordingly in the txt file. The biggest problem I faced was that it drew only the highest score and that’s it. I struggled with this last night and all of today. I build my draw method into my high score state which keeps the highs core class object locally to simply get the whole vector of scores one object at a time. I then push them back to a sf::Text object and place them in a sf::Text vector of it’s own. These are then iterated and drawn out …but it wasn’t drawing. I took the iteration where I get the struct objects to the initiate method instead of the update but it still wouldn’t do it. I finally found the issue, they was getting drawn just not with a font, color, position and style! I was renewing my sf::Text object at the end of the turn but kept the options I put outside the iteration so it wasn’t creating new ones. When I finally put it in there everything worked out correctly. I just need to fix the bugs and it’s all done!

Screenshot 2014-03-14 11.50.20

Sorry for the WALL OF TEXT but hey, it’s nice to get this all out,
Cheers.

Animation in my nation

So another week has past, another artifact accomplished and perfected. A new thing has been learned this week. animations.

if you haven’t been paying attention in school I guess I’ll go over the basics.
You create a class that allows itself to have a string of pictures.
These depicts an animation and you line them up perfectly and in order.
You take all of these images and load them into the program as just ONE image.
You then created small frames of where you want to look at this specific time and for how long of a duration on this ONE image.
finish it off by putting in more and more methods of genius into the class
like pausing.

So I probably understood what I was doing with animations about two days ago.
It’s like one of those days you fit every puzzle in your brain and understand every step you just took when seconds before you were a nerve wreaking moron just typing away until stuff showed up.

So each object of animation I create need to have a few details included before I could actually use them.
The program loads a sprite for lets say an enemy, when inside the enemy class I create an Animation Object and send the sprite I just loaded, a float duration for each frame and two booleans(if paused and if looped) with it as a parameter.

When this is done I call to a method inside the animation called AddFrame that point a rectangle you create that’s fitting for you enemy and you just point it where you want a frame to be. It’s that simple hehehe…

I wont lie, it took a senior, one of the smartest guys in class and a week to figure all this crap out. I’ve been playing around with it since and finally gotten everything in order now.
I apparently didn’t understand the concept of setOrigin that SFML has and had way to much to think about. There have been a few changes in the group that wasn’t planned and we’ve made some cuts. It’s not been great but this week have really been an eye opener. If anything I see now that this is something that I really want to do.
I have been having is creating my high score class which I WONT be talking about anytime soon.
As a bonus I created some kind of score feedback(pictures will come soon, on the wrong comp) which will be our picture for this weeks post.
I tried to keep this one short so thanks for reading and cheers.

 

TruckLvl2SpriteSheet

Arianas Travels

Since the 19th me and five others have been working parallel to another Game Programming II course is a course named Introduction to Game Development.
From now on I will be blogging about how my position as lead designer have taken it’s toll and what have been going to my mind during the choices we’ve taken.

The development went through picking a finished game design document, had a brainstorm about what the group was able to do and specifically me had to make sure the scope set will be able to be finished before the deadlines.

Assessing the skills of each member had be made sure before the group could get the highest grade it’s able to get.  I guess the hardest part to think about was how to cut stuff out of the scope. Our programming skills wasn’t great but our artists will be able to create tons of different art so the group could have massive amount of art with very little code to show for it. I therefore had to change the main ways we play the game. The initial scope became a static hp bar that enemies wants to destroy it while you move around the hp bar shooting them down.

The group started with a blitz, I started making a power point presentation about this game using the formal design document we got from our teacher. The days that followed our producer Oscar started writing a document encompassing everything we’ve talked about and what I’ve written. Oscar starts writing down everything, schedule, scope, rules and even started with the MDA before the first week has finished.

So to recap the scope was made before we even started, the positions had already been taken, the schedule, game design and a power point presentation with a flowchart of how the program will be designed has been 90% finished. It has become clear that documentation wont be our problem but problems aren’t few.

The library the group will be using is SFML, a easy manageable set of commands that will make the programmers lives easier.

The difficulties the programmers in the group are faced with is how to create a foundation of code that can be build upon if the group ever reach the scope before the deadline(oh how naive I was). We decided starting with creating the states, engine and being able to navigate between them with key presses. I had the duty to create an input manager class suitable for our game while our lead programmer started writing the game in the SDL library so we know what we are getting ourselves into.

The difficulties we had with states was our inexperience with the code cause neither of us had the duty of writing it the last project. The programmer in duty of this is Laban. While I was implementing the code for the InputManager I noticed the problems almost immediately. SFML already has a way of getting real time input but not KeyDownOnce though it’s library could easily understand Mouse input in a way we want it. The reason I wanted an InputManager was because its worth the training and it helps all programmers understand a way of implementing an input class in a way that suits the game, not the inability of the library. I didn’t really invent something new here though, the last project had already made methods able to register input for probably any 2d game out there so we were in luck(!).
The issues I noticed was the inefficient way the states were written so I had to change the HandleEvent() and Update() method while I implemented a UpdateDeltatime()  method for the Engine. I even changed the way you run a window in the Run() method in the Engine with a bool instead of having Window.IsOpen(){} and but that method into HandleEvent in the InputManager. Problem was that the Inputs wasn’t going anywhere, in no way could we get any input to pass through the InputManager->HandleEvent(). After getting help from our brilliant classmate(Thomas Småland) we understood that having both m_running bool AND Window.IsOpen() into the loop in InputManager->HandleEvent() we changed it to:

sf::Event event;
while(window->pollEvent(event))
{
if(event.type == sf::Event::Closed)
{
running = false;
}

This effectively solved the whole issue and we finally could get the Input working and we were on track on creating the Sprite Class, SpriteManager class and the difficulties on creating a DrawManager(OH HOW NAIVE).

Again, being a lead designer I’ve become the guy that makes the tough calls. Constant calls of upgrading the game both from teachers and group members have made me think about what our future will be if we actually fill the scope. Before I finish this post let me show you a teaser of what I will write about next week:

*The programming roles we have and what difficulties and ease we’ve had with the development
*The more tough calls
*The directions of art the group are taking compared to the first design document

Now for a picture!

Screenshot 2014-02-07 11.40.23

OK I have to give recognition to the people that helped us make this possible

*Laban Programmer(our group)*Tomas Småland(not our group)
*Viktor Lead Programmer(our group)

Thanks for reading, cheers and Much love.