Currently, I’m playing the game again, fixing small bugs (rendering and scripting) in the cutscenes, trying to tune up what I’ve done so far, so I can start progressing a bit more in the direction of having a complete game (then I’ll have the balancing and polishing phases, yay).
First third of the game is done now… There’s still room for improvement, and I’m not very happy with either the writing or the story overall (it seems a bit silly now), but I’m going to press on, otherwise I’ll never finish this game!

The scene above is already better than on that screenshot, with small adjustments on the particle systems and the camera angles… 
Now listening to: “Inside” by “Orphanage”
Link of the Day: Currently we’re in the middle of another debate about the role of women in games, due in no small part by Ubisoft’s clumsy attempts to justify the lack of female assassins in the co-op missions of Assassin’s Creed: Unity… I’m also guilty of some of the lack of female protagonists, since I always think of male leads (easier for me to write them), but this link makes some nice points about the whole “female protagonists in games” issue: http://www.gamasutra.com/view/news/219074/What_did_they_do_to_you_Our_women_heroes_problem.php
Today I fixed some more of the text system, it looks much better than yesterday now, in terms of spacing (which makes the text easier to read):

Also fixed some bugs with z-fighting (still plenty to go around with a 24-bit buffer), and now the fade-outs go to real black (annoyed the hell out of me the way some bright stuff could still be seen!).
I played the game a bit, testing the cutscenes that are complete so far, and fine tuning some details…
The transition of the areas is bugging me more and more… It takes too long (3 or 4 seconds), and it’s visually jarring, especially because of the different resolution between the area the player is on and the vicinity (a 4 to 1 ratio).
I can’t have all the voxels on RAM all the time (it would consume about 3.5 Gb RAM just for the voxel data, and even more for the mesh data). I could just have the immediate vicinity in RAM, would take about 1.5Gb, but even that can cause an out of memory on a weaker machine… There’s a lot of other small tricks I could use, including going all the way to a progressive rendering system and a continuous world streamed from the HD, but that’s too much work for what was supposed to be a small game…
For now, I’ll settle for using just half the resolution (it already looks way better), but I think I’m going to add some sort of multi-threaded area generation so that the transition doesn’t take so long… This would work by starting to generate the new area (voxel representation, meshes, navigation grid) when I get close to it, on a separate thread so it doesn’t stall the game…
Now the main objective must be to make the game complete, then I have plenty of time for fine tuning, optimization, etc…
Now listening: “Tattooed Millionaire” by “Bruce Dickinson”
Link of the Day: This was the game that apparently stole E3… I think I already talked about it in the past, but the game is quite impressive and has some ideas I had already thought about putting into a game that I’m curious to see if they work in practice: No Man’s Sky
After yesterday’s update for multilingual support, today I had to change a lot of scripts to conform to this new usage type. Scripts became clearer, which is a big advantage.
Also introduced this update to the tutorial system, and the Captain’s Log system… Still need to do these changes in the hardcoded C++ part (game start conditions).

As you can see above, some things on the tutorial text are still not very good. In the vertical, the text seems to visually overlap (due to a small size of the carriage return, I think – need to add a factor to that). Additionally also found some issues with “double carriage return” (the two paragraphs above should be more separated) that needs to be fixed…
Link of the Day: I know I shouldn’t buy into the E3 frenzy, but I love games so… here’s the cinematic trailer for Ubisoft’s “The Division”: https://www.youtube.com/watch?v=JhBAc6DYiys . It’s probably one of the best trailers I’ve seen since “Lost Island”… I’m not that excited about the game itself, although it looks gorgeous; MMO gaming doesn’t do it for me anymore, I think…
Revamped the speech system a bit, to make it easier to script and to prepare for the future in terms of multi-language (not sure if it will ever have more than one language, but this way it’s just a matter of translating a directory)…
Previously, the script for a text exchange would be something like:
speech.say("We’re lucky we got that tip!\nWe really could use some cash intake…",3000,"player",0,0.6,0.9,1.0)
wait_speech()
speech.say("My gambling systems point to a 96% chance this will backfire…\n",5000,nil,0.8,0,0,1)
wait_speech()
speech.say("Stop being negative, Sky! Maybe for once we got lucky!",3000,"player",0,0.6,0.9,1.0)
wait_speech()
I had to put in the text, the duration, who was speaking and the color of the text, carriage returns… Now, I can do just:
speech_sequence({
"cutscene001_001",
"cutscene001_002",
"cutscene001_003"})
On a separate XML file I have information about the speaker and colors:
<?xml version="1.0" encoding="UTF-8"?>
<texts>
<colors>
<color speaker="skydancer">0.8,0,0,1</color>
<color speaker="player">0,0.6,0.9,1</color>
</colors>
<text language="eng">
<string name="cutscene001_001" speaker="skydancer">Good morning, captain…</string>
<string name="cutscene001_002" speaker="player">Good morn…</string>
<string name="cutscene001_003" speaker="skydancer">Stardate is ${current_stardate}…</string>
<string name="cutscene001_004" speaker="skydancer">We’ve run into an asteroid…</string>
<string name="cutscene001_005" speaker="skydancer">I’m shutting down affected …</string>
<string name="cutscene001_006" speaker="player">Well, I’m still woozy from the…</string>
</text>
</texts>
I can override everything anyway (speaker, duration, color) and even add meta-tags to insert variables into the text, and the system takes care of the text so it won’t be too long, breaking it in the right places…
From a player’s perspective, nothing has changed, it’s just much easier for me to write the scripts and to improve the texts, etc…

Now listening to: “Rethroned” by “Northern Kings”
Link of the day: Some good friends of mine (including the person that did the current music for Chrome Hunter) just released for free their new EP “Quarto Vazio” on their website, check it out: http://www.painted-black.org/
Nothing fancy today, dead tired from the paintball yesterday; can hardly move…
Anyway, today’s screenshot could be exactly the same as yesterday’s. I just tweaked the map “editor”, adding “auto” orientation to objects… Now objects with “auto” orientation will always face away from the nearest wall. This is dead simple, but makes it way easier to do some of the automatic generation and map editing!
Next item on my list: start playing through the game again and resume work where I’ve stopped last!
Link of the day: This is probably the funniest development blog in the world: Gaslamp’s Clockwork Empire’s blog: http://www.gaslampgames.com/blog/
Not much time for working on the game today, busy weekend with my sister’s birthday…
Anyway, got enough time to put in some of the new assets in game, on the Skydancer:

Featuring a table, shelves and power generators… Exciting, I know!
Need to add those to the pirate lair generation as well, to make the game world more interesting…
Also fixed some small bugs that apparently only happen on certain video cards: z-buffer depth would default to 16-bit, which is too little for my current usage, which would cause some Z-Fighting, and the cone generation would generate some NaN normals, which in the cases I’m using the cone (the hyperspace effect) wouldn’t matter… On my normal development machine, not an issue, on my home machine, it would skip rendering those triangles.
Link of the Day: Shader Toy (WebGL-capable browsers only): Play with shaders online… some pretty impressive stuff there, mostly ray-marching kind of stuff, worth a look and to waste some hours understanding some of them – for example, take a look at Solstice, I still have no idea on how he did this just with shaders!
Just added crystals as props on the cave areas… and for good measure, decided to add a lighting effect to them, to spice up the area a bit, especially because the cave levels are all dark (the only source of light is the player’s flashlight).
It turned out better than I expected:

I just added to the voxel system an optional emissive color per-voxel… It’s not perfect, since the emissive light in this case is modulated, instead of added, but I think it’s good enough for the purpose.
Also fixed some bugs on the chasm bridges (a bit of sleep does wonder for remembering some details)…
This is the 3rd daily update in a row, and I feel this is very good for my productivity, specially since I started reading the 7 productivity hacks from famous entrepreneurs… let’s see for how long I can keep this up…
Now listening to: “The Theory of Everything” by “Ayreon”
Link of the Day: This might be very interesting in the future: GOG is Launching Their Own Version of Steam
Today, I’ve worked on making the caves a bit more traversable.
Procedural generation is very hard – there’s a big conflict between “playable” and “correct”, so you end up with a lot of code to fix situations where the generation is “realistic”, but that would lead to a whole lot of issues… Case in point, the caves have chasms… so it’s possible/likely that they’ll intersect in such a way that they’ll make half the map completely untraversable. To lessen this issue, I decided to allow the chasms to have bridges here and there…
The results are not amazing, but for now they’ll probably due… I’m thinking more and more that it was a mistake going procedural on this (although the game has replayability this way), since I spend more time fine-tuning the algorithms than I would probably would have spent authoring them by hand…
I’ll probably need to do another pass on the algorithms and remake them, now that I have some idea of the pitfalls!

Now listening: “Once” by “Nightwish”
Link of the day: Beautiful timelapse: http://vimeo.com/22439234
It’s been a long time since I’ve posted something on the blog… the reason is the usual one: I don’t have the time because of my DayJob™, and when I finally get some time, I’m trying to compensate the work I’ve not done!
No more!
I’ve decided to try something new to keep me more into the development work and keep you all informed: I’m going to try to work on the game and post something every single day… It might not be much, but it’s something… This way I won’t try to do big updates on the blog, while keeping myself motivated to work on the game even though I’m blindingly tired!
I’ll also try to post the most interesting link I’ve seen all day, so even in the days where there’s not much work, you won’t waste the trip here completely!
So, to start this new chapter, here’s something I did today: better alpha system on the voxels!
Before:

After:

The problem was that the system would draw everything in a single draw call, which meant that voxels with alpha would fill up the Z-buffer and stop objects behind them of being rendered (a normal problem with alpha blending)… What I did is to introduce the concept of “channels” on the materials… Most opaque materials will draw on channel 0, alpha materials will draw on channel 1, and they will be properly drawn in their own pass this way… This can be extended to add a channel for glowy objects (for post-processing), and channel for weird shader materials, etc…
This was bugging me for ages now, so it’s good to see this fixed, and it only took me one hour!
Now playing: Grand Theft Auto 5 (yes, I know this is old, but I haven’t been able to keep up with gaming!)
Now listening: “Mana” by “Nemesea”
Link of the Day: Big Earth found… This excites me a lot: http://www.theguardian.com/science/2014/jun/02/monster-planet-godzilla-earths-kepler-10c
Cya tomorrow!
Just a reminder that I took part on the Ludum Dare 48-Hour competition this weekend… You can see the log about the development here, where you can also download the game.

Looking forward to hearing your comments!