It took us way longer than we'd like it to, but here it is!
DeepHive Corporation - Greenlight
For those of you who didn't catch my last post, the game is[quote]
a story driven sci-fi game, inspired by Beneath a Steel Sky, The Dig and games like I Have No Mouth, and I Must Scream. It is basically a multiple endings visual novel, telling the story of three children born and raised without any human contact, who have to make difficult decisions in order to save (or doom) tens of thousands of lives after a comet is detected in collision route.[/quote]
Any votes and shares are very welcome!
I intend on updating it in the next couple of weeks.
For those of you who do not know me (i reckon something around the 99.9% of you), I am a professional game developer that was fairly active here around three years ago. Back then, I found a new Job in the game industry, and I have been mostly working on educational games for the last years. Today, I went back to College (graduating in the next year), and I am still in that job I got in 2014.
Still, last year I had the opportunity to revive an old shelved personal project of mine, a story driven sci-fi game, inspired by Beneath a Steel Sky, The Dig and games like I Have No Mouth, and I Must Scream. It is basically a multiple endings visual novel, telling the story of three children born and raised without any human contact, who have to make difficult decisions in order to save (or doom) tens of thousands of lives after a comet is detected in collision route.
I am developing this in my little spare time, not much, between full time job and college. Still, the news about Greenlight being taken down are forcing me to rush things a bit. We hope to pass the game through Greenlight before it is taken down, and that will be a big challenge, about which I may end up writing an article here later.
I'll try to keep you guys informed, as me and my beautiful partner work our essays off to bring this game to life. Will drop some concept art and one or other gifs to keep you posted! This is also some sort of incentive for me to try and work on the game for every minute I can squeeze out of my days, and this is basically why I came to GD, as it is a great place for feedback and motivation.
This project was a secret until I made this post. Wish us luck!
This is our Greenlight description, any feedback is appreciated.[quote]
Following a catastrophic space collision, three children are born into the light of an unknown solar system, and have thousands of lives on their hands.
DeepHive Corp is a Sci-Fi Visual Novel, that tells the story of three children, with three different views of their world, where they were raised from babies by an advanced AI system, isolated from other humans. With hard choices take, and sacrifices to make, the children are the only hope for the tens of thousands of people, who find their minds trapped in a mind-machine interface.
This project is being developed by a team of two, and is inspired by games like Beneath a Steel Sky, The Dig and I Have No Mouth, and I Must Scream. With it, we hope to bring our players that feeling of playing through those games for the first time. We plan on releasing all the source code, under the license available at http://deephivecorp.com/curiouslicense, for anyone who owns the game and wants to read the code, play around, break the game and learn from it.[/quote]
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.
Language: [indent=1]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++. [indent=1]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). [color=#696969]YMMV[/color]. Portfolio: [indent=1]I listed both code I wrote and my small (and kinda amateurish) programming blog. College: [indent=1]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
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.
Just made another post on game development with Lua, a brief introduction to Love2D.
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.
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.
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
[indent=1]Added an automatic FreeUnused system. It can be configured with the Vault Classes' constructors (last parameter) or by calling [color=#0000ff]SetAutoFree([/color][color=#006400]unsigned long[/color][color=#0000ff])[/color] manually. To use this, you need to pass [color=#696969]SDL_INIT_TIMER[/color] to a call of [color=#0000ff]SDL_Init()[/color]. 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 [color=#696969]vault classes[/color], 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).
Problems: 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 [color=#696969]SDL_INIT_VIDEO[/color], [color=#696969]TIMER[/color] and [color=#696969]AUDIO[/color].
TODO: 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: http://www.buildandgun.com
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: http://www.buildandgun.com/2014/02/yaml-yaml-aint-markup-language.html
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!
@edit: I finished the GD.net article as well, for those who don't want to leave here: https://www.gamedev.net/index.php?app=ccs&module=pages§ion=pages&do=redirect&database=1&record=3508 It is still awaiting approval though, but will probably be available soon.
@edit: It is now online! Thanks for Gaiden for the review (and the discovery of new victims!)
I am happy to announce the first working prototype of the HLGE Keyboard Gesture Interpreter is working! You are free to take a look at the example code as well as download the entire Code::Blocks project.
You'll need the following in order to compile this code: C++ compiler; Allegro 5 working binaries.
As an update on my super gamedev tutorial, which btw will following step-by-step the development of my open source game, a new post is online, the creation of the media manager part 1, that describes some of the basic classes and what we'll need to render animated sprites. It should be possible for us to render flipped, scaled and rotated sprites, as well as make sure that all objects that needs a given sprite would actually share the same bitmap in memory, without forcing any synchronization of the movements or transformations.
Thinking on my next step on my game that's start coding the whole stuff, [s]so I can realize I'm not gonna make it and give up already[/s], and I have to choose an engine... HGE's great for it's simplicity, how they say, make games, not engines! But Allegro seems more powerful and is a lot more realiable, not to mention it's cross-platform, [s]as if anyone cares for cross-platforming[/s]. But yesterday I discovered pmask, a really good collision utility for allegro and SDL! It's detection is perfect and it's unbelievably fast for that kind of precision...
For those interested: PMASK There're two exe demo showing it's incredibly good performance and detection precision! Give them a try! Did I say it is "pixel perfect"? D:
@Edit: It turns out that PMASK is only Allegro4... what a disappointment! Anyway, the author's released his work (thanks for it if you're reading this haha) on public domain, anyone can port it! I guess I'll have to read his code and see how he's done the computing. Maybe I can make a ported version for allegro 5 or maybe I'm laughably wrong thinking it's incompatible...
@Edit2: nightcracker has posted the following files on the comments: https://raw.github.com/gist/1460947/e94f96497ee759e64828a3e0b3ea7defb170a7b8/bitmask.c https://raw.github.com/gist/1460953/199aed3e3d6acf9353e25c1eb582c53eaa8777ea/bitmask.h Thanks again!
My major problem is again modeling the stuff... All my programs while studying were like "start coding and it will model itself"... Worked well for small programs, that's for sure.
But now I'm facing the old problem: "how do I check for input, create the necessary entities, destroy the trash ones, manage memory, update positions, detect collision, ..." the list goes on and on. It seems I have to go back and look for a data structures book, and probably a good game coding one too...