Spellcaster Studios

Make it happen…

Playthrough, Part I

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!

screen106

The scene above is already better than on that screenshot, with small adjustments on the particle systems and the camera angles… Smile

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

More text, some math…

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):

screen105

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

Fixing text

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).

screen104

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…

Speech System

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…

screen103

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/

Small tweaks

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/

Sprucing things up…

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:

screen102

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!

Crystals

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:

screen101

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

Cave chasms

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!

screen100

Now listening: “Once” by “Nightwish”

Link of the day: Beautiful timelapse: http://vimeo.com/22439234

New leaf…

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:

screen98

After:

screen99

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!