Bottoms up! - Follow the development of a game

Discussions worth keeping around later.
User avatar
Soap
Smeric
Smeric
Posts: 1228
Joined: Sun Feb 16, 2003 2:57 pm
Location: Scattered disc
Contact:

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Soap »

Could you tell me what kind of engine you used to design the game? Ive been looking at getting back into amateur video game design since I feel envious of all the people I watch on YouTube and I have nothing to compare with them.
Sunàqʷa the Sea Lamprey says:
Image

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Soap wrote:Could you tell me what kind of engine you used to design the game? Ive been looking at getting back into amateur video game design since I feel envious of all the people I watch on YouTube and I have nothing to compare with them.
The game, as well as the level editor, is being written entirely in C++. For input and graphics, I'm using SFML, and for physics, I'm using Box2D. I made the graphics in GIMP.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Soap
Smeric
Smeric
Posts: 1228
Joined: Sun Feb 16, 2003 2:57 pm
Location: Scattered disc
Contact:

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Soap »

Thanks. That's above my skill level for now but I'm glad to at least know that those plugins exist. I had assumed people were just directly writing everything in with code and DirectX commands.
Sunàqʷa the Sea Lamprey says:
Image

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Soap wrote:Thanks. That's above my skill level for now but I'm glad to at least know that those plugins exist. I had assumed people were just directly writing everything in with code and DirectX commands.
For the more low level stuff I dislike DirectX, and I prefer OpenGL. I have about three kilograms of physical literature on the matter, haha. I plan on writing a library of my own using OpenGL some day. I am writing everything with code, though.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Not much has been done today, but a friend of mine was kind enough to compile the demo as a native executable for 32 bit Linux, so those users won't have to run the game through Wine anymore, which is great news.

As the structure of level files has been slightly modified since the demo was initially released, I had to update some things in all files, including moving the goals and crates slightly. I wrote myself a little C++ program to automate this process to save some time.

A download link for the 32 bit Linux version has been added to the same download page as before:

http://operaroyale.com/bottomsUp.html
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Big update again!

First off, our company now has been successfully reregistered after changing our name from Opera Royale to Royal Railway. We have gotten ourselves the domain name, and now have a placeholder site at http://www.royalrailway.com/ and the old download site still remains up and running for now.

I did it! The first complete version of the level editor (version 1.0.0) is done, on time! First off, here is a picture of the second level loaded into the editor, and zoomed out, with a piece of scaffolding selected.

Image

One thing that one may notice, is that the crates are a bit off, and not appearing to be in very good positions. Some of them are even inside of the lower scaffolding! This is because this is where they were, and are, in the downloadable demo of the game. They were all placed with hand-written code, and it appears I didn't get them exactly where I wanted them to be. I didn't notice when playing the demo, because they can't be seen at the beginning of the level, and they fall to the ground right away. This is one of many things that our editor easily allows us to fix before we release the final game.

The features are quite numerous, and many of them have already been described in the previous update on the progress of the editor. Most of the work lately has been bravely fighting bugs as though they were dragons living deep in the darkest cavities of my RAM memory, but some more additions have also been done since the last time.

One of the latest additions have been to save more types of actions to the history before. At first, the actions saved to history were adding or removing objects, moving them around, locking or unlocking layers, or moving layers up or down in the hierarchy. Now the editor also saves selections and deselections, as well as changes to objects after they have been added (such as changing the size of a scaffolding, or the colour of a house, that already exists in the world; the option box for this can be seen for the selected scaffolding in the top-left corner of the above screenshot).

Both of these additions caused a couple of quite mind-boggling bugs along the way, but it seems my efforts to get rid of them have been successful.

The editor had already had a grid for a while, and when adding new objects, it was already possible to snap their position to the grid by holding the S key while moving the cursor. However, when moving already created objects, the grid was of no use, and holding S did nothing. This now works.

An indeed very puny, but still so nice feature to have been added, is that it is now possible to scroll through the layer list or the list of saved levels using the mouse wheel. This was the last step needed in order to make the scrollbars feel exactly like those native to most modern operating systems.

Another small but nice thing is that the layer box now automatically scrolls to display the last item that was selected, so that if we, for example, decide to select a background house at the top of the list, by right-clicking on the house in the world view, when the list has been scrolled to somewhere in the middle, so that the layer is not currently visible in the list, the box will scroll there, to make sure that it is.

One might not always want to have the sound in the game turned on when playtesting. If one is working on a level for a long time, playtesting it a lot, it might get tedious to hear the music getting restarted all the time, or one might just simply want to listen to one's own music. Because of this, a new button has been added to the main screen, which can be clicked in order to turn all sounds off. The button has been played right next to the one reading "Load/organise", as can be seen in the next screenshot:

Image

Pretty much all of the features that we want are in there now, and for versions to come, the main additions will be the new "tools" (level elements, such as houses or crates) to come, as more things than the original player bottle, the goal post, houses, crates, chimneys, scaffoldings, fans and icicles will be added to the final game.

I will need to make some kind of tutorial or documentation of the editor for my colleague, Erik Schröder, but it doesn't have to be too extensive, and hopefully won't take up too much time.

We can now continue with other things, such as planning out new features of the actual game, as well as the menu interfaces for the iPhone/iPod Touch and iPad versions, which will have to be slightly different, because of the different dimensions we have to work with. There is also Facebook integration to be taken care of, and actually putting the menus into the iOS versions (we are currently only working on the version for iPhone and iPod Touch; we will adapt it for their larger sibling later on).

I also need to refine the graphics for the iOS version, as they are currently simply scaled down versions of the original ones, which won't look very nice without a bit of fine-tuning by hand. This will probably have to wait until the very end of the development process, though, as this is not an important factor as far as the playability of the game goes, but it is of course an æsthetically important move that we will make sure to make before the game finally ships at the end of this exciting journey!

As always, keep coming back here, to check on our updates, and don't forget that I also post smaller updates to [url=athttp://twitter.com/#!/BottomsUpDevlog]my Twitter account[/url] and bigger ones to our Facebook group.
Last edited by Skomakar'n on Wed May 18, 2011 2:23 am, edited 3 times in total.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Soap
Smeric
Smeric
Posts: 1228
Joined: Sun Feb 16, 2003 2:57 pm
Location: Scattered disc
Contact:

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Soap »

This is great. It really looks like a professional video game ... which I guess is what it is. How do you get it to port over to iOS and Android? Is it just a plugin for your C++ compiler or do you have to make a whole parallel game for every OS?
Sunàqʷa the Sea Lamprey says:
Image

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Soap wrote:This is great. It really looks like a professional video game ... which I guess is what it is.
It is indeed. I actually just filled in my occupation at my own company at Facebook, haha.
Soap wrote:How do you get it to port over to iOS and Android? Is it just a plugin for your C++ compiler or do you have to make a whole parallel game for every OS?
The computer version is written entirely in C++. For iOS, I'm using a different graphics library, which is written entirely in Objective-C, and so I mix the two languages (Objective-C++) to get everything to work for the iOS version, but the code remains the same for almost all of the logic. I did however make the decision not to use the string or collection classes of C++, to make sure that everything is as fit for the iOS system as possible, and so I have also had to replace all of the code utilising these with Objective-C as well. The input system is of course different too, as iOS uses multitouch control, while the PC version uses a single mouse.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

This morning, while sipping some coffee, the caffeine probably crept its way into my brain, for I had a lesser revelation. I pitched my idea to Erik, who liked it, and so I can announce it to all of you.

The level editor is working. I've said this. Now, releasing it for everyone to use could probably be quite popular among the people feeling a bit creative, but we want to take this one step further than allowing you to create custom levels for yourself.

We want to turn this into an entire network. We want you to be able to register an account at a devoted website of our own. You will then be able to use your username and password to upload your creations to our server for approval. The approved levels will become available for download, and can be fetched right from the game, both for iOS and PC, free of charge. If you log on to your account at the website, you can find a list of your downloaded levels, and will be able to rate them, giving it a thumb up or down.

This way, levels can be ordered by popularity, according to the number of given thumbs up, and they should also be able to show up in order of the number of downloads or by how recently they were created. We might also feature our personal favourites. One will always be able to see the name of the creator, and on the website, the name can be clicked in order to find their profile, so that more levels by the same creator can be viewed.

It should also be possible to search for levels, using either their name or the name of the creator. When uploading a level, a unique name will have to be selected for the level, and if it is already taken, another name will have to be picked. This way, it will be easier to tell levels apart, and to find old favourites again.

We are planning on releasing official packages of our own, too, which will get some extra focus and be more clearly and visibly featured than user created levels.

Approve?
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
finlay
Sumerul
Sumerul
Posts: 3600
Joined: Mon Dec 22, 2003 12:35 pm
Location: Tokyo

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by finlay »

Maybe. I reckon you should get at least one more tileset, personally; give it a little variety. Or just expand on the number of terrain pieces.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

finlay wrote:Maybe. I reckon you should get at least one more tileset, personally; give it a little variety. Or just expand on the number of terrain pieces.
We are going to add more stuff. Don't worry.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

I uploaded a nine minute long preview of the demo of the game to YouTube, so that we also have something to show to people who might not feel like downloading the demo before seeing the game in motion.

Image

http://www.youtube.com/watch?v=DzM39SAPIPQ
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Not a big one this time, but why not show you what little has been done in the past few days?

Most of my efforts have been planning. I've been trying to find a good library for the network part enabling us to upload and download levels from our server, as MySQL++ appeared to have some nasty license issues in the case of this particular game. I haven't decided on anything yet, but I will be looking into curl when I find the time.

As we are going to put helpful arrows in the levels, to guide the player into the right direction of the goal posts, I've now added a tool for this into the editor:

Image

The arrow buttons are used to select the direction of the arrow, and the 'Paint' button denotes that the arrow will be put as semi-transparent "paint" on the wall of a background house, while, if clicked, the button changes its text to 'Sign', meaning that a sign, much like the goal post, with an arrow on it, will be placed. Because of this, we will of course have to change the motif of the goal post, which would look like just another arrow sign if used in its current state.

Here are some wall paint arrows I have made so far, put on the body of a background house for clarity:

Image
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

During the past two days, a few things have been done. To begin with, I changed my mind about the way I wanted to integrate these arrows into the game. I figured that the wall paint and sign idea was a bit too inconsistent, perhaps not clear enough, and actually kind of ugly. Erik and I decided just to use the same arrow graphic as for the arrow above the goal posts, making it possible to place such arrows pointing either to the left, to the right, up or down. The appearance of the tool was thus changed to something simpler:

Image

This is a screenshot of an arrow in each direction placed in a level, alongside the goal, which also has an arrow above it, just like before:

Image

Here is also a screenshot of an arrow placed in the original, second level, from the demo, to show the new feature off in a more probable setting:

Image

Today, I created forms with focusable textfields and buttons for the editor, so that levels can have titles assigned to them, and so that a login screen will be possible to implement in the future. The textfields are quite simple, but when they have focus, the keyboard can be used to type text into them, and the arrow keys can be used to move the cursor. The backspace and delete keys can be used to erase text. It is possible to set a limit for the amount of characters that a textfield allows, and password fiels, that display everything as asterisks, are also working. If the content exceeds the width of the textfield, the text will scroll horizontally.

Textfields and buttons in a form can have focus or not. Textfields must have focus to be written into, and buttons must have focus if you want to submit them using the return key. The tab key can be used to change which object should have focus. If no textfield or button has focus, the first enabled element will be selected when the tab key is pressed.

Image

While textfields have support for many international characters, such as æ, ø, å, ä, ö, ü, þ, ð, ç and accented vowels, they don't seem to detect Greek or Cyrillic characters (and at the moment, there even appears to be a bug in the library I'm using for input, that causes such characters make the program crash in OS X). This isn't really a problem, though, as the only characters that will be allowed for titles are A-z, 0-9, .,:;-!?'*_ and spaces, and usernames and passwords will probably be even more restrictive. If invalid characters are typed into a textfield, it becomes red, and one is not able to submit the form. Level titles have a limit of 16 characters.

After getting the textfields to work, I actually implemented the possibility to assign titles to levels; levels with no title will be displayed using their file name in the level, and levels with a title will be displayed using their title instead. Titles are changed from the organisation screen, where a textfield and a button have been added for this purpose.

Image
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

I graduated from school today, and Erik gave me a 'Bottoms Up!' T-shirt!

Image

We've also been suggesting a lot of new ideas, but not all of them have been thoroughly considered yet, so that update will have to wait a little longer.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
finlay
Sumerul
Sumerul
Posts: 3600
Joined: Mon Dec 22, 2003 12:35 pm
Location: Tokyo

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by finlay »

That is a pretty cool t-shirt...

Have you considered making the wee pink guy face left when you get him to jump left? I'm just thinking it might make slightly more sense than having him face right all the time.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

finlay wrote:That is a pretty cool t-shirt...

Have you considered making the wee pink guy face left when you get him to jump left? I'm just thinking it might make slightly more sense than having him face right all the time.
Yeah, I think we need at least some kind of animation set in there before we release the game. Have his eyes blink, and perhaps make him face the direction in which he is going, yes. Probably.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Drydic
Smeric
Smeric
Posts: 1652
Joined: Tue Oct 08, 2002 12:23 pm
Location: I am a prisoner in my own mind.
Contact:

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Drydic »

This thread annoys me, as it goes to the newest post, then all the images load and push it back up 4-7 posts.
Image Image
Common Zein Scratchpad & other Stuffs! OMG AN ACTUAL CONPOST WTFBBQ

Formerly known as Drydic.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Drydic Guy wrote:This thread annoys me, as it goes to the newest post, then all the images load and push it back up 4-7 posts.
Yeah. That happens to me too. Stupid browsers.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Following and preceding the days of my own graduation from school, graduations of others, and a meetup for some fora of which I am a member that lasted for a few days, took time from work, but I've been working for the last few days now, and it's time for a new update.

The last few days before my graduation, I created a text file to use as a change log, documenting not only changes that have been scheduled and thus also exist on file anyway, but also any minor or unexpected news; in short, every single change goes into this file.

From now on, most updates will have the latest content of this file pasted at the end. A lot of the content of the updates will mention many of the things listed in these logs, of course, but the logs can be seen as a summary, and they will of course also contain minor things that did not go into the text.

So, what have I done during the last few days? Well. First off, I decided to implement the message system that Erik and I had been thinking of. We wanted to be able to show messages to the players the first time that they would encounter something new, such as a fan, or a scaffolding, so that we can give them an explanation. I also decided that there should be a set of messages shown the very first time that the game is played, explaining the point of the game, and what the player has to do.

To begin with, I created a new file in the data folder to store what has been seen before, and what has not. I then created the message system class, that reads the contents of this file when a level is loaded, to determine which messages to show, and then updates the file to make the game remember that these messages should not be shown again.

I added arrows to navigate back and forth between the messages, using the same graphics as for the navigation arrows that already existed in the menus of the demo from January.

The graphics are still rough placeholders, but this is what it currently looks like:

Image

The currently empty box to the left is supposed to hold an image related to the message, such as a picture of a fan, for the message explaining fans. The first time the game is played, the explanation is split up into several messages, with their own images for clarification.

I then had Erik come home to me, and we recorded some more material for our development movie. Of the ideas that were suggested the last time that he visited, at the time of the last update, we decided to start implementing the one about statues that one can knock over.

We decided for them to stand upon pedestals, which would remain static and unmoved while the statue itself would fall off and and, depending on its shape, act accordingly, obeying the laws of physics.

Two types of statues were made that night, which was last night. First, we tried out a simple statue, of the kind that is probably most commonly seen in a town; one depicting a human being. It eventually ended up looking like this, as I devoted time into making the final graphics for it today:

Image

After a collision with Charles, the statue will thus fall over:

Image

This is what the temporary graphics looked like, whipped up in a minute to initially try things out yesterday:

Image

The second type was a round statue, in the form of an Earth globe on top of a pedestal, which rolls over upon impact with the bottle. The implementation is done, and these are also working in the game, but there are still only placeholder graphics to show:

Image
Image

At the same time, I also added a tool for this into the editor. The button graphics are still the same as those for the icicle tool, so there is currently no real point in showing it, but there is a counter on the top of the tool, just like there is in the icicle one, where one can change the number to change which kind of statue to place.

I'm planning on changing the button graphics dynamically as this is done, to instantly display what kind the current number represents, and will make the number keys hotkeys for this in the build mode, accordingly.

Different types of statues are still considered distinct objects, though, and one will not be able to select and edit statues after they have been placed; if one decides to swap the standing human for a globe, then the statue will have to be deleted, and the globe placed instead.

While I was writing this message, Erik also ordered the iOS development program from Apple, so we should be able to get ourselves into a more genuine testing environment not far from now, too!

As promised:

CHANGELOG:
-----------------

2011-06-04:

* Added a rough system for showing messages before levels. The level remains paused until the last message has been read. Messages will only be showed once, and are meant to introduce the player to the game the first time, and to introduce new types of obstacles or helping elements the first time one of them appears in a level, such as a fan. A text file is used to store new discoveries. The graphics are still placeholders.

2011-06-05 - 2011-06-06:

* Added statues that can be knocked over. They stand upon pedestals, that will remain standing when the statue falls over. Colliding with one of these obviously reduces the speed of Charles greatly.

* Globes working in the same way were added. These are the first circular, physical bodies in the game.

* Made it possible to place these using the editor. A counter tool is used to determine which type of statue to place. They can not be edited afterwards, as the types are considered distinct.

* All of these things still only use placeholder graphics, which were created. The tool currently uses the same image as the icicle tool.

* Finished up the final graphics for a statue, and defined its collision shapes.

* Fixed the bug that had caused Charles not to be squashed flat against scaffoldings for the last few months, and used the knowledge of this error to make squashing work for statues too. I made sure to update the iOS version too.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - We made a computer game for New Year's Eve

Post by Skomakar'n »

Getting accepted into the development program was a quick process, and after having slept through the night since yesterday, I woke up to find out about these great news this morning.

I had a bit of initial trouble registering my device (an old iPhone 3G running iOS 3.1.3, as I haven't installed the latest SDK to be able to try it out in my iPhone 4), but after a while I got it working, and was happily struck with the sight of the game actually booting up in the iPhone. It crashed right away, though, and after locating the source of the error, I consulted my iPhone programming guide, and it did have an answer.

I tried again, and there it was! It was incredibly slow (at an FPS of about 4), but the game was actually running perfectly well in every other sense. I turned off particles and stars and got up to about 20-25 FPS, and that's where I'm still at.

Image
Image
Image
Image

I just finished my first step in optimising the particle system, and now I'm running with foam bursting out of the bottle again, at about 12-14 FPS, at least, which is a good, first step into the right direction. The new system doesn't support transparency or scaling yet, though.

I'll keep working on making the game run faster, and I'll get back to you all with more updates soon!

CHANGELOG:
-----------------

2011-06-07:

* Got the game running in an actual iPhone 3G device running iOS 3.1.3. This involved solving a bug when loading levels; it appeared that one can not modify data in the standard resource folder on the actual device; one has to do it in a temporary folder. This fixed it.
* Optimised the particle system a bit, in order to make the game run at a more decent speed. It's not acceptable yet, but a lot better.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - Follow the development of a game

Post by Skomakar'n »

So I decided to let go of my laziness, and actually install the latest tools, that I had already downloaded. So I did, and registered my iPhone 4 for development as well, and within no time, I got the game running on that device too, with a smoother frame rate of about 40-45 FPS.

Image

The initial work on the optimisation was to try to work myself around the system for drawing images in Cocos2D (the graphics library/framework that I'm using), which I had never been really fond of anyway. Cocos2D draws everything in the form of individual nodes, where each image has its own object, even if they all share the same texture. The concept is a good one in theory, but I don't like the way the creator of Cocos2D decided to implement this, because it results in worse performance than necessary.

My solution was to create my own type of node, inherited from the sprite node of Cocos2D, in order to override the draw step with an implementation of my own. I added a fake draw call, which would accept a couple of settings for position, rotation and so on, and store this until the draw step. At the draw step, I went through all of these sets of information, in order to draw the image at each desired position in one step, from one single node, with one texture.

Initially, this didn't actually do much for performance, but it definitely didn't decrease the frame rate either.

Today I've been a bit more daring regarding the quest to force the frame rate into an acceptable direction, and I have been reading through quite a bit of the source code of the graphics library that I'm using in order to find out where the bottlenecks could be hiding, in combination with the profiling output of Shark, which is a lovely profiler that found out about while searching for solutions the other day.

Shark comes with Xcode, and so I already had it installed on my computer, without even knowing. This is the main interface of Shark:

Image

Once I plug in my iPhone, after having set the mode to iPhone profiling, Shark will detect my device (called 'Skomakarn') and allow me to select a running process to profile. In this case, the box just says 'Everything', as the game wasn't running when I took this screenshot, but had it been, I would have been able to pick the name of my game from that list, and press the 'Start' button in order for the analysation to get going.

After collecting data for a while, Shark will interrupt the analysation and begin to process all of this data, which takes a couple of minutes, and once this is done, the program pops up a second window, containing all of the information I need:

Image

This is a list of which calls and parts of the code that consume most of the processing time, listed by percentage. I can expand or collapse them through the arrow icons, and get into the nasty details of those chewing monsters, to find out which functions I should take a closer look at.

Image

Other tweaks in order to increase the performance of the application, have included more hacks into the graphics framework, and playing around with the settings of the particle systems, which I have also simplified to some extent, making them a little less gorgeous, but still good-looking enough for that small screen, and perhaps even good enough for the bigger one of the iPad, or of a computer.

CHANGELOG:
-----------------

2011-06-08:

* Aligned the foam with the bottle perfectly. It was a bit off before.

* Added transparency support to the new particle system.

2011-06-08 - 2011-06-09:

* Created an alternative drawing system by adding an Image class of my own, that makes sure that only one node is created for each image that should be drawn. This is only needed when the image is not going to be drawn at more than one place. It didn't do much for the FPS in the case of regular object (although it might have decreased RAM usage), but worked wonders for the particles, and the game now runs at about 10-11 FPS instead of 4 with everything enabled.

* I kept optimising, and it's now running at about 20 FPS with everything enabled. Parts of this fix involved putting more than one foam particle into the image, rendering a lot less images each frame, and swapping the NSMutableArray instances for std::vector objects where objects have to be accessed a lot in real-time. I've also made sure not to update labels unless I have to, and I have tuned down the accuracy of Box2D.

* Installed the newer iOS SDK, and got the game running on my iPhone 4 as well, and the iPhone 4 simulator. About 40-45 FPS at the moment. Noticed that if the iPod is playing, booting the game will fade that music out, and fade the game music in, just like I wanted.

2011-06-09:

* Noticed a bug in the latest build of the game, where fans would boost you off at speeds way too great when the resolution of the game had been changed. I checked in the fan class file, and noticed that I hadn't taken frame rate into consideration when applying forces to objects within the air stream. I added this, and this seems to have fixed it. I did this for the iOS version too.

2011-06-12:

* Made the particle system, both for iOS and PC, emit particles at a frame-independent rate, emitting more particles during low frame rates, to make up for all of the particles that were supposed to be emitted between the current and the previous frame, to make the stream of particles look smoother even during times of low framerate. This did, however, end up in a little drop in FPS overall for the iOS version.

* The profiler helped me realise that the messaging system of Objective-C is actually quite slow, and so I tried to remove any instance of value assignment through usage of messages in real-time, replacing them with statements directly modifying the synthesised members (for example replacing a line like [image setOpacity:x]; with image.opacity = x;). This did give a small FPS increase.

* Removed some of the functionality from the particle system for the iOS version; changing opacity or scale is no longer supported, but constant scale and opacity can still be set. It still looks very nice. I also added support for a flag for particle systems to recycle their particles, meaning that they only create new particles until the limit has been reached, and then just keeps resetting each particle as it dies. This works well for static emitters, such as those creating the wind streams of fans, but less so for moving emitters, like the one spurting foam out of the moving bottle. The flag is thus not used for the latter one.

* Found out that the Cocos2D call nodeToParentTransform of the CCNode class is a slow call. I went into ccConfig.h to set the defined CC_NODE_TRANSFORM_USING_AFFINE_MATRIX to 0, and also made sure to call setDirty:NO before each call to transform before drawing a sprite. I also pre-stored every value I would need, returned by boundingBox, as this function calls nodeToParentTransform. This resulted in a few more frames per second.

* Added a flag to set whether to bind the texture with OpenGL before drawing to the sprite, so that when I'm about to draw the same sprite several times, I only bind the texture once, and not for every re-draw. This increased the FPS even more.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - Follow the development of a game

Post by Skomakar'n »

I found a bug yesterday, and today I decided that it would be fun to film it before getting rid of it, so I did, and now I just finished uploading it to our YouTube account, RoyalRailway. Enjoy.

Image

http://www.youtube.com/watch?v=sD1mzcaZDgY&hd=1

---------------------------------

ALL OF THE FOLLOWING WAS WRITTEN BY ERIK. Erik is my colleague, and he's not a member of this community, so I'm posting for him.

---------------------------------

Bottoms Coming Up!

Chapter One: Parte Prima

Hi, Erik here. I'm the official noise maker (among other things) of Royal Railway and this project. We thought we'd start posting some episodes (currently in text form) where we want to tell you how we made the world's greatest demo for the world's greatest game. We'd like to call this series "Bottoms Coming Up!" It'll of course not end with these few text-based chapters, but through the entire time until release. We'll also start making some "making of" videos in the near future. I thought I'd start by telling you how I made the music, since it's obviously the best part of the game.

I had a real hard time getting started with the music. Before the game was even a game in any form, I had misunderstood Adam's vision – I thought that it was supposed to play like a Shoot ‘em up, but without the shooting of course, so I had some adventurous music in mind. I had come up with two songs (which sounded a lot like "Super Mario Galaxy") before I learned how he'd originally thought the game would be like and I became sad.

Adam sent me some music samples from "Super Meat Boy" - I disapproved. Nah, the game had a cosy wintry theme so I wanted the music to match that. Keeping in mind that the game is time-based and very frustrating at points, I didn't want the music to contribute to even more stress, but at the same time it couldn't be too calm either. I tried to think about games with similar music of what I had in mind and I immediately thought of "Yoshi Touch & Go" for the Nintendo DS.

I decided to actually steal the rhythm of the "Sky Area" song and even the instrument of choice for the part that was supposed to drive the song (though in the end I did split this part into two different instruments). The first draft of the song is available beneath marked "Version 1", but Adam thought it sounded too "happy", so I changed an F# note to an F note and voilà; I could change the song to a minor key, second draft is marked "Version 2". I made these snippets quickly in FL Studio on my PC (which I use for regular use) because I was too lazy to start up my MacBook Pro.

Version 1
Version 2

Since I'm Mr. Lazy, it took a couple of weeks before I finally opened up Cubase on my Mac and actually start producing my music which had already been finished in my head for quite some time. I find the hardest part to be selecting the instruments and make the "foundation" sound good. I probably spent a few hours with just the accompaniment (the guitar and the bell sound). Then it was time to choose the instrument for the main melody. Originally, I had music box in mind (tee-hee, "Yoshi Touch & Go"), but I went with flute instead. Although, I did get a music box in there somewhere! Well, to be politically correct it's a glockenspiel.

Image
The flute.

One of the things I like the most about the song is the bass, which was heavily influenced by the bass in "Dragon Roost Island" from "The Legend of Zelda: The Wind Waker", Yes, to summarize – this song is just one big rip-off, but since it's awesome – it doesn't matter.

Image
The bass.

If you are interested in what I used for the making of this song, here's a list:

Music & Audio Software
Cubase 5.5
Adobe Audition 1.5*

Virtual Instruments
HALion Sonic (Bright Acoustic Steel, Crystal Bells, Big and Silky, Glockenspiel)
HALion One (Percussion, Acoustic Bass VX, Expressive Flute, Latin Percussion)
Battery 3 (Basic Kit)

* I used Adobe Audition to do some post work on the audio file such as normalizing, boosting and limiting. Since then I have upgraded to both Adobe Audition CS5.5 and Cubase 6.

Image
The entire project.

The Final Product
Bottoms Up!
Bottoms Up! (Alternate)
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - Follow the development of a game

Post by Skomakar'n »

Bottoms Coming Up!

Chapter Two: Partur tveir


--------------

It is now my turn to continue this story. My name is Adam, and I am mainly the programmer and the artist, but also the one who hatched the initial idea for this game, which was never even meant to become a complete game in its own right.

The prelude of this part will thus be one of a slightly more prehistoric character than that of the previous installation, as I will take you all the way back to an unclear and murky prophecy.

The prophecy

It was during a night well over a year ago, that I had crawled into bed, in order to get some rest after what I can only imagine had been a long day of programming. I closed those weary eyelids of mine, and it didn't take long until pictures began to appear upon the pitch black cloth that was their inside, as my drift into the world of dreams was initiated.

One of these colourful expressions of my unconscious mind was the fleeting vision of what would eventually come to be transformed into a full-fledged piece of digital art. It was the blurry sight of a man sitting upon a bottle of oversized proportions, using the high pressure of the stream of fluid spurting out of its neck in order to move about. This was pretty much it. I opened my eyes in order to make a note about it, and went back to sleep. The next morning, I told Erik about it, and after that, it was pretty much forgotten, and would dwell in the dim dust for more than year to come.

The enlightenment

Life went on, and Erik and I kept pouring devotion and ambition into the realisation of an obese youngling called Tommy, whom we had created as the main character of a side scrolling platformer game that we were working on. His rampages were to be of proportions much like his own, and in order for to them to live up to our expectations, the engine was rewritten no more than three times.

During the third time of its revisitation, I took the decision to look into a third-party library for the physics calculations, in order to increase the speed of the development time, and the accuracy of these calculations. Box2D, which can be downloaded from http://www.box2d.org/, was eventually chosen for the task, with Chipmunk (http://code.google.com/p/chipmunk-physics/) being the second option.

I had never used this framework, though, and I had no desire to integrate into my platformer engine until I knew for sure that it would stand up to the job, and if it would, I obviously wanted to be familiar enough with its layout to be able to carry out the integration in the best way possible.

To begin with, I tried to set up anything working at all, resulting in this simple scene with a couple of physical bodies reacting to each other:

http://i1181.photobucket.com/albums/x43 ... ox2D_1.png

I earned the knowledge that helped me get going through a set of excellent videos about using Box2D with ActionScript 3, which is the scripting language of Adobe's Flash, even though I would be using the language C++ myself, and even though the Box2D version used in those videos is quite old and sometimes obsolete in correspondence with the current version, as I looked up the differences on my own. These videos can be found at http://kerp.net/box2d/.

I then set out to try and make myself a little game using the fresh knowledge that I had earned through the pedagogical help of the creator of these tutorials. This was it. This was when I decided to dig up that old, single sentence that I had written down, about the rider of a bottle. The first lines of code of what would become 'Bottoms Up!' were written.

This was in October last year. The graphics for the bottle were the first to be made, followed by those of the foam, as the particle system was implemented early on. In one of the earliest screenshots that I have, the game is already very recognisable, even though these are the only two assets, as they have remained to this day:

Image

With the sky as the next addition, the game was taken even closer to its current state, as the sky, too, remains unchanged since these early days:

Image

At this point, though, the aforementioned platformer game, code-named 'Tommy', after the name of the main character, was still the main course on the menu, and we were both eager for me to finish playing around with Box2D, so that we could get on with this project, which we had been planning out extensively during the year, programming a lot, creating assets and planning out entire levels for.

I believe that it was about a month or a half later, that we realised that the game that I was making to learn how to use Box2D was actually transforming into something playable that could actually be fun to release for others to take part of.

We had already decided at that point, that the game takes place during New Year's Eve, and I had already made snow-covered assets such as the houses. As this was in November, we decided to work hard on the game for almost two months and release it on this very date; New Year's Eve.

Only one shot to make it in time

The title of this section is a symbolic one. Just like the player of 'Bottoms Up!' has to race against time using a limited amount of shots, we now had a single shot to finish the game in very little time, and so it started; menus were designed, a format to store levels in was decided upon, music and a bunch of sound effects were made, and more details, such as falling snow, were added, and a nice, big, bright moon was added to that parallax goodness of our star-sprinkled sky background.

Image
Image
Image
Image
Image
Then the six levels of the demo were created. There was no level editor at this point, and so I actually created all of them with hand-written code, which was a tedious process, and my laziness towards the end can easily be spotted by factors such as the complete lack of icicles in level three, as all of these had to be placed with their own codes, specifying not only position, but vertical and horizontal scale, for variation. I just couldn't be bothered to do it, or we wouldn't have been able to make it in time, as there were more important things to get done.

The fact that I was falling asleep after way to many hours awake, as the final hands were laid upon the game, right before we were about to release it, shows clearly in the credits screen, where I didn't even think of not aligning the two boxes of text horizontally, as the boxes and buttons in the rest of the interfaces of the game are slightly random in alignment, for a more harsh and unwashed look, just like with the style of "bleeding pixels" that I had been using for the graphics of the game, in order to emphasise the impression of the rough city.

Some lasting impressions were actually based upon random or unexpected decisions that hadn't really been thought through initially; for example, the first level of the currently available demo of the game is actually just a refined version of the "level" that was used for testing during most of the development, before any final levels actually got made. Everything was actually just placed quite randomly, but it turned out to be quite a nice layout for an actual level, and so it was simply fine-tuned and then kept almost in its original form.

The final decision

At this point, having released the game, we actually saw it as a finished game. We were planning on releasing new levels for download, as the way the game worked (and still works), it would be possible to simply drop the new levels into the level folder of the game, to get them into it.

About two or three weeks later, though, no more levels than the original six already in the demo had been released. It was at about this time we announced the fact that we were going to take this project a lot further than we had initially been planning on; the game was going to be developed for the iOS, and both that version, and the computer version, would have loads of new assets and levels created before the final release, and we also wanted to take the comments from people who had played the demo into consideration, in order to make the final game - for real, this time - a pleasurable and comprehensive experience for everyone.

So how was the demo made? What were the technical details regarding the creation of the graphics and the thoughts behind the programming? How did I get it running in an iPhone? These are all stories for several, future installations of 'Bottoms Coming Up!' to come. This is it for part two; stay tuned to read about the creation of sound effects, as Erik is the host of part three tomorrow.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

User avatar
Skomakar'n
Smeric
Smeric
Posts: 1273
Joined: Tue Aug 18, 2009 8:05 pm

Re: Bottoms up! - Follow the development of a game

Post by Skomakar'n »

This extract from the development movie is an older one than the last. This time, too, the bottle is transformed into a rocket with the help of fans, but unlike the other video, it was not caused by a bug.

Image

http://www.youtube.com/watch?v=JV-hDm7lqI0&hd=1

---------------------------------

ONCE AGAIN, ALL OF THE FOLLOWING WAS WRITTEN BY ERIK.

---------------------------------

Bottoms Coming Up!

Chapter Three: The Dry Martini

--------------

Today, kids, it's all about sound effects!

The first sound I made was when the ice breaks. I thought about which sound I was going to use, but it didn't take long until I decided that glass was the best choice. Since we didn't have long, I chose to be lazy and get all sounds off the internet. I chose http://soundsnap.com as my source. I don't remember how I found out about that website, but it has a very large library.

Anyways, I chose to edit all sounds with Adobe Audition 1.5. With the ice breaking sound I used a sound when glass breaks, pitched it down a little and added some reverb or echo. With other sounds like when you fire the bottle for example I used 3 sounds simultaneously; 1 for the cork, 1 for when you pour champagne into a glass (up-speeded) and 1 for the champagne fizz noise (which is constant because the bottle is foaming constantly). There were no (at least that I could find) sounds when the champagne is spraying, so I had to experiment a little. The fan noise is another example of where I had to mix several sounds; I took machine noise and mixed with a strong wind, since all I could find was lame bathroom fans. The sound with most mixed sounds is the intro; 2 different samples of bells ringing in the far distant, 3 different wind samples and 2 fireworks (whereof 1 is used twice).

Image
The fan.

Image
The intro.

At one point I decided to sample some stuff on my own with my Zoom H4N (a portable recording device). I went out an early winter morning and thought I'd record sounds for when the bottle impacts and is sliding on the ground. I used a bottle of julmust (Swedish holiday beverage) but it didn't end well. No, the bottle didn't break or anything but the recording session didn't go well. It was hard to make it sound as I had imagined and it was freezing outside and I was very inexperienced with recording sound effects. Then again, I still am, but still.

Image
Zoom H4N.

I could talk a little about the software I am using. I've been using Adobe Audition since it was called Cool Edit Pro 2.0 and was developed by Syntrillium Software. I love it. I have tried out Goldwave and Audacity, but I think they're too clunky and I think that I just can't get that same precision as I can with Adobe Audition.

Nah, I'm not much for making sound effects at all. I hope I don't have to worry about this in the future and just focus on the music (when it comes to sound in general). I give the sounds in "Bottoms Up!" 3 out of 5 bottles.
Online dictionary for my conlang Vanga: http://royalrailway.com/tungumaalMiin/Vanga/

#undef FEMALE

I'd love for you to try my game out! Here's the forum thread about it:
http://zbb.spinnwebe.com/viewtopic.php?f=5&t=36688

Of an Ernst'ian one.

Post Reply