Games and prototypes by Ciro Continisio

We’re on IndieDB too

Indie DB

What to say, another good thing for indie devs! ModDB, the site dedicated to mods and one-man-band games, felt it was necessary to create a whole new place for indie developers around the world. The name says it all, IndieDB. We as Tiny Colossus couldn’t miss the appointment, so we jumped in the DB.
Tiny Colossus’ page is here: http://www.indiedb.com/company/tiny-colossus
UFHO: Space Academy page is here: http://www.indiedb.com/games/ufho-space-academy

By the way, they also have the group for the italian indie game portal, IndieVault.it. If you happen to be italian and indie at the same time, and you’re reading this, head for this page immediately 🙂
http://www.indiedb.com/groups/indievault

It’s all for today. I know, only links… next time it will be better.

E3 and stuff

They say we are indie game developers, and this is unquestionably true, for the most common definition of ‘indie’ revolves around the money available to the developer, and that money surely isn’t here.
With this cleared, I feel the need to spend two words on the big game fair that is the E3, taking place in Los Angeles in these very days.
I think some indie game blogs have chosen not to speak about it, like some form of silent acknowledgement of distance from the mainstream scene. I don’t share this line of thought: after all, they are games all the same, their players are driven by the same instincts to play, and most of all, a lot of the indie reality is interwined with the big industries, from the tools we use, to the digital delivery platforms, and so on.

On to the thoughts… First of all, as a Nintendo fanboy I greatly appreciated its conference, especially after thinking about it a little. They showed that they cared about the players by listening to the complaints that were raised at last year’s E3. I’m talking about the big deal of core games versus the small presence of casual games. While the last year’s situation didn’t bother me so much, I felt embarassed now and then by the sheer amount of shovelware that was presented by the infamous Cammie Dunaway, PR of Nintendo of America. She symbolized, for me, the failure of the Wii console as a gaming platform and the terrible perspective of a market dominated by waggle titles.

Thankfully, while still winking to the casual audience, Nintendo also showed a lot of remarkable titles for gamers. I’m only sad for Zelda, the motion controls are very cool, but the series already needed a reboot in gameplay, puzzles, dungeons structures, and story. I fear all of this will be left the same, compared to Twilight Princess and Ocarina of Time. Too bad.

What to say of the other two console holders. Both of them seem just late on the motion band wagon, with Sony clearly mimicking the Wiimote and Nunchuck setup with its Move peripheral, and Microsoft letting people down with the allegiances of its Kinect not really working at all (proved by some actor pretending to play Kinect games on stage).

What does this all have to do with us, poor indies? I bet in some years we are going to work on motion control or 3D titles in our comfy bedrooms or basements, so the conference offered us a glimpse into the future.
I don’t know if those technologies will be available for us soon. I hope they will eventually, so that indie development could have the same ‘horsepower’ in controls like the mainstream titles. What could a wiimote do in the prolific (and free from the main market) hands of an indie dev studio?
Truth to be told, this year we already saw something unexpected even 10 months ago happening: every major engine developer released its free version, with Crytek to follow soon. This is absolutely outstanding and a HUGE opportunity for people looking to create 3D titles on par with the AAA ones (not in scope, but in quality). Who knows when an indie console (I’m not talking about the Wiz for now) will be available for all to create their games on, together with all the cool features (controllers, connectivity, …) these things sport.

UFHO in BIT.TRIP Runner!

I found it! It took me a lot of time because it’s very hidden and more concealed than the other pixel art, but at last… it’s actually everywhere!

Check it out, in the lower left corner of the screen (the purple pink jelly, on the wall in the underground).

(Click for higher res)

By the way, this game is totally awesome. I was not convinced at first, I thought it was something like a Canabalt clone. (we are doing a ‘runner’ game ourselves…) IT.IS.NOT. It’s a wonderfully constructed game, with an appealing soundtrack. It’s actually the most melodic of all the BIT.TRIP games, and for me, the best of the lot.
I hope the quality of its two sequels will be as high as this one, or I’ll be disappointed!! [insert emoticon shaking its fist]

UFHO in BIT.TRIP Runner?

Some time ago, the cool guys at Gaijin Games proposed to the readers of their blog to create some pixel art to include in their latest game, BIT.TRIP Runner. I managed to sneak in a piece at the last second (last hour actually), and being without inspiration, I drew some UFHO characters in pixel art style.

That night Alex Neuse of Gaijin replied to me telling the characters were very cool, but I never figured out if they decided to include them or not.
It turns out that they did! They revealed the art that made into the game, and a Jeevil has sneaked in as a graffiti in the urban level of Runner!

Here’s the full image that I sent to Gaijin Games with all the other discarded characters, 1x size. It’s a shame for the Tremodillo (the yellow one)..

(Click for a larger size image)

Memory management in Flash

Ah, the joy of the first tech post in this blog! Don’t worry, it will be a quick one, and easy too. This post speaks about memory management, some issues that I had in UFHO with memory and persistency of objects, and the conclusions.

Introduction
In every programming language, there’s an entity called garbage collector which handles memory and frees it from unused variables. Now, everyone knows that, in Flash, there’s no manual garbage collection. That is, you can’t say to the player “Hey Flash Player, I’m done with this object, release it from memory”… no way! Everything is automated, which is cool at the beginning.
What the player does is to check periodically for objects that have no references, and remove them from memory. What is a reference? It can be a couple of things. Let’s see:

private function getGlobalPosition(_clip:DisplayObject):Point
{
  var theGlobalPoint:Point = new Point(_clip.x, _clip.y);
  return _clip.localToGlobal(theGlobalPoint);
}

The point of this simple function is to get the global coordinates of an object passed as a parameter.
The Point object created inside the function has a reference pointing to it as long as Flash is still executing the code inside the function. As soon as the function exits, the Point object is marked as eligible for the garbage collector, because there’s no more references to it (so it’s, in some way, unuseful). At the next pass of the garbage collector, it will be released from memory.

The Display List

Another way of keeping an object in memory, is to add it to the Display List. Example:

function createEmptyClip():void
{
  var theClip:MovieClip = new MovieClip();
  stage.addChild(theClip);
}

Compared to the example above, even if the function has ended, the MovieClip created here will not be released from memory until we call a removeChild on it. That’s because, otherwise, the object would disappear as soon as the function has finished its tasks.

Islands

Objects can have many references, and the Flash Player keeps track of them all and moreover, it keeps track of their number. When an object has 0 references, it is garbage collected. There’s another way to have an object collected though, and it is to leave 0 references for the object that references to it (its parent). For example, if you create a MovieClip and then add a child inside it, when you remove the parent clip from the display list, both are eligible for garbage collection.
This is called sometimes an ‘island’, because the isolated movieclips, while still connected together, are cut away from the mainland… the mainland being the stage (for the graphics) or the document class (for classic references). If a group of object is not added to the display list or doesn’t have any reference to the document class, they are removed from memory.

Event Listeners

This, is the tricky part, and where I met problems in making UFHO.
The basis of event management, the addEventListener function, is a mischevious one. After adding a listener to an object, even if you remove that object from the stage and delete all references to it, it will still be kept in memory because a listener is still… listening for something. Even if it can’t be clicked (MouseEvent), it may still do something like send ENTER_FRAME events.

Bottom line

That is why you should always call removeEventListeners when you are done with an object, so you don’t have that object stuck in memory and you don’t know what caused the memory leak.
In my classes, I usually have a method that is responsible for removing all the listeners from an instance. You can remove listeners without any fear, because differently from removeChild, which yelds an error if you try to remove a clip which is no longer in the display list, removeEventListener will not give any error. So it’s safe to try to remove anything and everything, and if the event listener was already removed… no problems!

private function removeListeners():void
{
  graphicalBoard.removeEventListener(BoardEvent.ROOM_CLICK, onRoomClick);
  graphicalBoard.removeEventListener(BoardEvent.AREA_HANDLE_CLICK, onAreaHandleClick);
  graphicalBoard.removeEventListener(BoardEvent.AREA_CCWROTATION, onAreaCcwRotation);
  graphicalBoard.removeEventListener(BoardEvent.AREA_DOUBLEROTATION, onAreaDoubleRotation);
  graphicalBoard.removeEventListener(BoardEvent.AREA_MESS_UP, onAreaMessUp);
  graphicalBoard.removeEventListener(BoardEvent.START_DRAG, onStartDrag);
  graphicalBoard.removeEventListener(BoardEvent.STOP_DRAG, onStopDrag);
  (graphicalBoard.stage != null) ? graphicalBoard.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onDragUpdate) : null;
}

Anyway, for the removeChild error, there’s a quick patch: just check if the DisplayObject’s stage property is null, and if it’s not, remove it from its parent. This way you don’t even have to remember from which clip to remove your object.

Notice how I remove the MOUSE_MOVE listener from the stage only if the graphicalBoard stage property is not null (that is, the graphicalBoard is still on the stage).

I also use this for special effects clip: I put on the last frame of the clip this code:

this.stop();
this.parent.removeChild(this);

This way the clip will automatically remove itself from the display list, and also stop its timeline. This is because… I fear that if you don’t stop a clip, sometimes, it will stay in memory. I made some tests and I’m not sure about the results, but better to prevent than cure!

Powerups galore

I’m working on the implementation of the new powerups for UFHO: Space Academy. In the first version of UFHO we had six powerups, which are marked with a white dot in the image below:

As you can see, there’s four new powerups! Can you understand what they are for? Consider their color too, for I have divided them in categories based on their purpose. For example, the purple ones add something (moves or time). The green ones work on areas… can you figure out the purpose of the new ones?

The Humble Indie Bundle!

Those crazy geniuses (geniuses? is this the plural of genius?) of the Wolfire team have created another crazy initiative. But this time for good.
The Humble Indie Bundle is, like the name implies, a bundle of indie games. It’s humble because you pay what you want. That’s right, you can have all 6 games in the bundle for as low as 1 cent. It’s crazy.
The games are World of Goo (2D Boy), Acquaria (Bit Blot), The Gish (Edmund McMillen), Lugaru HD (Wolfire Games), Penumbra Overture (Frictional Games), and at the last second, Samorost 2 (Amanita Design).

So, you can pay what you want and you can decide how to split the payment between all the indie games and two no-profit associations, Electronic Frontier Foundation and Child’s Play.

It’s crazy. It’s indie. It’s humble.
Head over to the bundle page to know everything.

UFHO: Space Academy

Announcing… UFHO: Space Academy!
While waiting for UFHO2 (which will take a little bit to be ready), we will launch this episode in a month or so.
Rise to the top, and become a master of rotation and powerups. Defeat your foes with strategy, and earn the rank of UFHO Commander.

Coming out in June.

By the way, the trailer is a parody (if you want) of a famous Army promo, the Army Strong campaign.

The next couple of weeks

So the next couple of weeks will be really busy. The fact is this: in Naples, inside a big exposition called Comicon (and her sister GameCon) I will participate in a speech about indie games in Italy.
The speech will be called: “Italian videogames, or: how I learned to stop worrying and love the indie scene”. It will speak of the difference between working in a ‘regular’ game dev studio and an indie team.

To some of you it may sound ridiculous, it may sound… obvious. In Italy, this is nothing to take for granted since here the culture of games is not so developed as in other countries.

The speech will be hosted by Vincenzo Lettera of Indievault.it. Before speaking together about this topic, we will be allowed to show the project we’re working on. My project as a member of Tiny Colossus is, of course, UFHO2.
But, I have big news that I will be telling during the Comicon about the development of UFHO2, about the release dates and the features in the game.
If you live in the south of Italy, please join us on friday the 30th, at 16:00, at Castel Sant’Elmo. It will be cool.

Moreover, the next two weeks will be busy because I will make a trailer to show at the conference, so another reason to come and say ‘hello’.

PS: Also, I set up a page for Tiny Colossus on Facebook. Become a fan, to follow all of TC’s adventures in indie-land!

Spotlight: Tiny & Big: Up that mountain

Ok, here we are, another spotlight. I know, you’d die for more UFHO news, but I couldn’t help myself but share this with you, it’s too cool. It’s from a game called Tiny & Big: Up that mountain, in development by a small studio in Germany:

I’ll leave any consideration on the awesomeness* to you…

* like a friend of mine would say