Jump to content

  • Log In with Google      Sign In   
  • Create Account

Bidimensional Dreams

Kriophobia goes live on Kickstarter and Greenlight!

Posted by , 04 December 2014 - - - - - - · 1,501 views

Hello again,

It's been a long time of inactivity since I have gotten this job ( /o/ ) at Fira Soft. Lots of things happened, some really good and some awfully bad, I have little time left for most of my personal projects right now.

But I come today to post here, for those interested, that Kriophobia, a game developed by Fira Soft, is out now on Kickstarter and Greenlight!

Links:Take a look, it is certainly worth the while!

Finally got hired!

Posted by , 21 August 2014 - - - - - - · 1,233 views

Hello Again!

These last few days I've been under the radar, my poor blog probably feels really lonely right now, but there's a good reason.

I have sent my CV for a local studio in hopes of getting a full time job as a programmer in game development.
For my own surprise, they have actually called me two days after I sent it. Just a week after I sent my CV I was being interviewed; hired in the next day! Actually, I can't even believe it. This is my first week on this new job, and I am really excited!

For these first days though, I've been horrible, I must admit. My productivity was really low due to a series of problems while setting up my environment.

I am not working in a game right away (I guess they want to test me first), but actually in an Android app, hence I use the Android SDK. They use the Eclipse AndroidSDK bundle, so everything is setted up accordingly. They installed Linux in a machine (as I stated I used Linux to work at home), and for some reason, Eclipse kept on crashing in the Property View (after the hour-long download of the SDK Manager)... Not to mention the first machine I used (in my first day) was then reallocated to someone else, just to start another series of problems with Java 32 bit fighting its 64 bit version, Android SDK and the buggy Eclipse. In the end, I am using Windows 8 and the bundled Android SDK and Eclipse; as it only crashes on Mac and Linux.

Long story short, three days after I started all I did was set my environment up (three times) and start working. Done two tasks in the scrum board... I just hope they don't fire me for being incompetent! hahaha

It is a hard job. I knew I would struggle in the start, but didn't expect it to be this much. They are all helpful though, I can call anyone to my table and ask questions, they always help me however they can. I just feel kinda bad about calling them over though, and I try to avoid it; I feel like I am getting in their way or taking too much of their time. I hope to get up to speed soon enough. I've only been there for some days, so I guess I'll do better with time.

Anyway, most of you would want to know what I have shown them, what called their attention to me, so I'll go over it.


Even though I work with Java, they called me for my prior experience with C++. Yes, it looks counter-productive, but they tested my C++ proficiency to work with Java. Actually, they didn't even ask for any prior Java experience, but did ask for it with C++.

Does that mean I wouldn't have gotten the job if I was a Java programmer? In this case, yes. Does that means I wouldn't find any job if I was a Java programmer with no C++ experience and portfolio? I think I would find one, it would probably take longer though (longer than a week for that matter). YMMV.


I listed both code I wrote and my small (and kinda amateurish) programming blog.


I have no college degree, nor any formal courses in programming or GameDev. There is no possibility of studying programming through regular education (not until college, that is).

In other words, what would I say is important?
Have experience with one or more languages such as C++, C#, Java...
Create yourself a good portfolio with code samples. Create an open source library, an open source game. Complete projects, not "started and abandoned" projects, to fill your portfolio with. I would also tell you to avoid game clones as a portfolio entry. It makes you look more of a hobbyist than you'd like it to. In addition, it is always better to see something simpler, but new and creative, than another clone of a classic game; unless it is a complex game (above the classic mario/zelda complexity). It is even truer if the web is flooded with tutorials to clone it.

Well, that is it, I guess I will leave you again for now, as tomorrow I sign in @8am !
Wish me luck everyone, I really need it! haha

Simple Animated Sprite with Löve2D (long one)

Posted by , 14 July 2014 - - - - - - · 1,382 views
Game, Development, Love2D, Lua and 3 more...
A guide to implement a usable animated sprite system and respective manager.
It goes from data serialization with Lua through the rendering of the many animations with an animated sprite and reuse of static data.


Please do check it out!
I made a video for this one:

Introduction to Löve2D

Posted by , 18 June 2014 - - - - - - · 756 views
Löve2D, Lua, 2D
Just made another post on game development with Lua, a brief introduction to Löve2D.

It goes from rendering the basic hello world text to drawing an image at a given coordinate.
Really simple stuff actually, but we'll need this to make our lives easier when trying our hands on rendering animated sprites and tiled maps.

Make sure to take a look!



Lua Snippets

Posted by , 10 June 2014 - - - - - - · 913 views
Lua, BuildAndGun
Hello Again,

After a lot of time w/o really coding anything and complete inactivity on my blog I'm coming back with a little more time on my hands.
Today, I've posted several Lua snippets in my blog, explaining a little about each one of them and important aspects of the language on each.

Take a look!


Project Zomboid attacked by Zealot.

Posted by , 19 May 2014 - - - - - - · 1,208 views
LGPL, Java, Reverse Engineering and 1 more...
Recently, Project Zomboid was made victim from LGPL licensed code, EasyWay Game Engine and gnu.trove.

The game used both codes in a moment, but no LGPL code was being used any more. Unfortunately, probably due to simple lack of code clean-up, these libraries were still being shipped with the game...
This guy found out and asked for the modified version of the engine; he also reverse engineered their game, but since they didn't provide means of reassembly, this reverse engineering is legal (there was no external and accessible .jar). He even posted out some Java snippets of the game's actual source code¹ :
DebugLog.log("LOADED UP A TOTAL OF " + OpenGLState.totalTextureID + " TEXTURES");
So, now, he threatened to start a project with the decompiled source code. Well, technically, he can't do that, since the libraries were, LGPL and not GPL, and therefore it wasn't viral and the source code's license was still intact. But he can pretty much create an open source project with "similar" code, and this would be dangerous for the commercial game if he really do this.

And now I ask you guys: Why did that happen?
Because they didn't read my blog post about LGPL: http://www.buildandgun.com/2014/02/little-game-programming-love-lgpl.html
That's why! haha

Project Zomboid looks like a great game and I feel really bad seeing it go through a license issue. Now their developers had to spend time removing the LGPL code while they could be adding an awesome new feature!

You, sir, just made Project Zomboid lose time, hence lose quality. Success! I guess...

TheIndieStone have my sympathy and I'll buy this game in early access. I wasn't going to, but now I will.

¹This code was made public by the reverser inside a TheIndieStone controlled environment (their forums) and they didn't censor it out, so I guess it is OK for me to post it here. But if it offends anyone, ask and I'll remove it.

SDL_vault is now functional.

Posted by , 08 April 2014 - - - - - - · 761 views
SDL2, SDL_vault, c++11, c++, Game and 2 more...
Hello Again,

Looks like it is all done now. I just did not create that automatic build (sorry about that). I really don't need this, I am just compiling the library along with my project; it is really small, that's easy to do.

So, the GitHub repo is here.

The documentation is available in PDF here. (edit: Moved from Dropbox to Google Drive)

It is really easy to use, just create a Vault object and use the Get*() functions instead of manually loading the Textures and Audio assets. Choose whether you want to use the automatic periodic free or prefer to call FreeUnused() manually. I'll try and create a blog post with a code example in the next week.

In addition to my last post, I added the possibility of pushing user-loaded or user-created assets into the vaults. Just push them there with a unique string ID (ideally the file path, but it can actually be anything). This means that you can actually use the library in a way that it doesn't ever load a file. If you push a texture with identifier "Zombie" it will try and load a file called "Zombie", will fail and return NULL. You can then load it manually and push it. For manually loaded assets, you can use CheckTexture for this existence test (what would be wiser) and then Get*() it in case it is found.

Moving on, it is useable now, X11 (MIT) license, be my guest! Hope you guys use it, as I certainly will.

More information, on my blog: http://www.buildandgun.com

Over and Out.

SDL_vault, an asset loading helper (Updated)

Posted by , 28 March 2014 - - - - - - · 1,436 views
SDL2, C++11, C++, BuildAndGun and 2 more...

Added an automatic FreeUnused system. It can be configured with the Vault Classes' constructors (last parameter) or by calling SetAutoFree(unsigned long) manually. To use this, you need to pass SDL_INIT_TIMER to a call of SDL_Init(). We also need to Initialize the Video and Audio portions of SDL, as well as initialize SDL_image and SDL_mixer. I didn't add any initialization to these classes since I control it outside of the SDL_vault; but if you want to add it, just put it anywhere you want (with error checking). I just wouldn't advise adding it at global initialization.

SDL_vault is a small library built on top of SDL2, SDL_image and SDL_mixer. Licensed under X11, use it as you wish and don't worry about it.

It is basically composed of two vault classes, one for textures and the other for audio.
I created it using some C++11, so you'd need to use its flag in order to compile.

It is composed of some headers and only two implementation files, really simple stuff.
You use Get functions to pick up a safe (strong) reference to the asset, by passing its file path (for the image or sound). If it is already in memory, it'll pass over a pointer, if not, it will load it.

Nice little details:
1 - No need to call "free"
It uses std::shared_ptr, so it does that automatically whenever you reassign or the objects gets deleted or goes out of scope.
2 - Unsafe References are also available.
If you ever need to get a texture for a single use and don't need to keep a strong reference, you can get a direct pointer to it without increasing the usage count. Of course, it could be freed while in use.
3 - Expiration Time (Configurable)
The library counts with an expiration time. It will only free an asset if it has been unused and unreferenced for at least X mseconds. This will avoid several unnecessary texture destructions and creations by allowing it an extra breathing time. Or you can set it to zero and it will be deleted as soon as this is detected.
4 - Manual "FreeUnused"
The allows you to call FreeUnused() manually. It will then check what assets aren't being used and which ones expired and should be freed. This guarantees you it will never steal your cycles when you can't spare them.
5 - Automatic "FreeUnused"
It also has the possibility of creating an automatic periodic call to FreeUnused. You can pass the period (in ms) to the Vault Class' constructor and it will be configured. Or you can call the SetAutoFree member function, pass the period as an argument, and it set everything up.
6 - No Singletons
It doesn't rely on any singletons, so you could have one vault for every SDL_Renderer or maybe one for each thread.
7 - No more Surface to Texture conversion
I, myself, only used Textures; rarely even touched surfaces. So the vault class responsible for the textures will abstract the loading of the surface from SDL_image. Of course, SDL_image kept the surface loading and texture creation separated for a reason, just one that didn't affect my immediate needs. I'm planning on writing another class for surfaces soon (separated from the textures).

1 - It forces you to use std::shared_ptr. You could wrap it or modify the library yourself (really simple stuff) if that is an issue to you.
2 - A single vault is not thread safe. If you want to have more than one thread, I recommend using separate vault objects for them.
3 - A vault is tied to its SDL_Renderer. If you have, say, 3 windows, you'd need 3 different texture vaults.
4 - It doesn't initialize SDL, so you'll have to initialize everything yourself (or add a couple extra lines to these constructors). The minimum here would be to call SDL_INIT_VIDEO, TIMER and AUDIO.

Mainly create an automated build process. Since I am just including the files in my projects, I have no needs for this, but still want it done some day. Just can't guarantee it will come in the near future tho.

More Details in my blog:

Hope it is useful for you!

Little Game Programming Love [LGPL]

Posted by , 07 March 2014 - - - - - - · 831 views
LGPL, gamedev, build, and, gun
My latest post is about the LGPL license.
This has little to do with programming, but appeals to the paranoiac lawyer inside of us.


YAML Parsing

Posted by , 21 February 2014 - - - - - - · 1,073 views
YAML, yaml-cpp, C++
Hello Again,

I have just made a mega-post on how to parse YAML with C++ using yaml-cpp.
It goes a little about YAML syntax as well.

It was supposed to be an article here at GD.net, but I was having too many problems with the editor...
So I decided to post it to my blog first, and let the fight against lost formatting for later.

It will probably be coming in the next days, but for those of you who don't want to wait, here it goes:

The code wasn't really tested, just load and print.
If you find any problems let me know and I'll fix them right away!

I finished the GD.net article as well, for those who don't want to leave here:
It is still awaiting approval though, but will probably be available soon.

It is now online! Thanks for Gaiden for the review (and the discovery of new victims!)

0 user(s) viewing

0 members, 0 guests, 0 anonymous users

Latest Visitors

My Contacts' Journals

January 2017 »

22 23 2425262728

Google Shared Items