Development Blog

About Dynamic Loading and LoadPoints

In order to give a smooth exploration experience and an efficient system of nested submaps we decided to differentiate between static (or old method) and dynamic (or new method) loading.

STATIC: means map will be loaded all at once, with all assets in memory and sent as DrawCall s to the gpu. It may severely impact performance for large maps with many assets.
DYNAMIC: map will be loaded in chunks when in range of a LoadPoint. Anchored maps, or different cinematic maps, can be preloaded using custom virtual points with a radius, attachable to other nodes called LoadPoint s.

LoadPoints can be instantiated freely and added to the relevant pool into the GridManager, that will take care of feeding maps, that will loads / unload based on positions.

To add a map with a load point into the world:

gridManager.add('camera.map', 'prova1', 'dynamic', 2)
gridManager.get('prova1').setPos(Point3(2,3,0))
gridManager.addLoadPoint(LoadPoint('test', Point3(1,1,0), 3))
gridManager.addLoadPoint(LoadPoint('test2', Point3(5,7,0), 1))

Next week effort will be put into finalizing this feature and polishing the world management, allowing for map anchoring, recursive Grids and (possibly) a wider world management.
This should allow us on putting the pieces together and begin the Motionless engine tech demo level.

Cheers!

Grid class redesign

In the past days I’ve been going through a general Grid class design overhaul. As it was before, the Grid class consisted in a single instance (singleton) that had the responsibility to manage map assets, load them into the game and make it work. This implied a precise set of properties maps had to have, one of these is the playable character.

Before the redesign, every map file had to contain a Character set to playable, in order to give some object the camera would have followed, allowing for the game to effectively run. After all, years ago, I just assumed I could have only one map loaded at a time, and only one playable character that was bounded in navigating through its map. Characters where destroyed and reinstanced every map change, delegating the character existence responsibility to the Map itself.

That sounded very reasonable back in the past, after all, this was meant to be just a small engine with the maximum ambition set to the be somewhat similar to RPGMakerXP. This is not the case anymore, so we’re aiming for a more flexible management of maps (Grid s):

  • More maps should be allowed to exist in the game world at the same time
  • More than one character should be playable and manageable at the same time
  • The playable characters creation shouldn’t be responsibility of the maps directly, but only held temporarily
  • Maps should stay into the scene graph and should be activated / deactivated as preferred, allowing for transitions and different kinds of transformation

We started a transition from Grid being a singleton to being an instantiable object holding a single map, managed by the new born GridManager, addressed in commits:
cd48091931c86f23fe6e01328266e8927327e041,
de051b25e871077bb85a439560bed27d2eeba481,
cbf6d61021a87976689a0dd59d45cbd61808a28b and
a92cf7ca1c620134961ce6dad83ae7733b1531cb.

A map is created by calling the appropriate method in the GridManager class as the example that follows.

# map can be instantiated
gridManager.addGrid('test.map', 'prova1')

# map can be retrieved
gridManager.getGrid('prova1')

# map can be moved with a Point3 vector
gridManager.getGrid('prova2').move(Point3(0.5,0,0))

# map can be stashed (removed from rendering and collision checking)
gridManager.getGrid('prova2').stash()
gridManager.getGrid('prova2').unstash()
gridManager.getGrid('prova2').toggleStash()
gridManager.getGrid('prova2').isStashed()

Here is the final result with 2 maps, both with a playable character enabled, one panning towards the left, while moving the character too.

See you at the next update!

Through dark times

There’s dark and then there’s darkness. The former being a transient qualitative attribute of the environment that surrounds us, the latter being a state of being that engulfed us with its cold grip.

It’s when we go through dark times that we’re able to recognize the taste of darkness, being bitter, hopeless and surprisingly still. Navigating through the quiet sea of sadness that marks the border between an ill sanity and the freedom to be able to fly over skies of madness we discover our inner self. The universe unveils it’s roots and transfers the energy made of true colors to their descendants. The fabric of resilience.

Going through darkness is scary. Words can be weapons, and feelings of affection can transcend space and time reaching the unimaginable, caressing the vulnerable part of our souls.

About software development and chronic illness

Development has been halted for quite a long time due to chronic illness taking place and occupying most of my free time I used to put in. Those past months have being quite a dramatic experience for me, going in and out of hospitals, having attached pipes to my body that drained my kidneys.

It has been a journey filled with extreme pain and suffering that made me hit rock bottom as a human being. Though, that gave me new perspectives on life and time. I think it will be nice to see some of those transposed on the story I’m writing. I can’t wait to end the first chapter.

There’s still so much to do, and lots of hospital ahead of me, but I still hadn’t give up on Beyond My Winters. I’m planning on implementing a single-tone feature to give characters a “voice” in the next week, so that could be a good starting point. It has already been successfully implemented in Metal Gear: Ghost Babel for GameBoy Color and I think it’s pure genious.

I don’t think it’s always better to dub games, especially when there’s a budget that won’t allow for a decent work. Let’s aim for an immersive experience!

New website opened!

Welcome internauts! We’ve just opened the new dedicated website to our narrative videogame Beyond My Winters. We’ll be adding new pages as the project evolves and keep you posted through our dev blog with regular candence post.

Come back soon! 🙂