The Newscast Atlantis
Developers' progress records and announcements.

[28.03.2017] [Grenades and my approach to C++ introspection]
Watch the new gameplay features here:

What follows is purely a technical talk, so if you are not a programmer,
you can safely skip the rest of this post in its entirety.

So, I fancied introspection support for my C++ types!
No easy feat, if you ask me, considering that it requires a whole lot of template metaprogramming magic.

I've chosen the approach where it is enough to leave short comments in the structures that I need to introspect,
and then an external utility should find these comments and automatically generate introspector functions from the structure code.
So, given this:

[Read more...]

[04.03.2017] [Content pipeline: automatically regenerating neons, gui textures and atlases]

The game will now perform a very busy first launch, wherein it will procedurally regenerate:

- buttons with corners used for hotbar and menu buttons
- desaturations requested for some textures
- all neon maps - I won't have to blur all the images by hand anymore - the game will do it on its own!
This also means that the neon images will be more consistent.
- detailed polygonizations of images needed for better accuracy of physical shapes
- HUD circles like health bars
- fonts from .ttf files
- atlases for all of the above.
Like this:

The console log then looks like this:

[Read more...]

[25.02.2017] [Explosions, working spells, better shooting experience, better damage effects]
Hypersomnia gets even more action!

Let me now introduce the new features chronologically.

[Read more...]

[17.01.2017] [GUI progress: hotbar and laser sights]
I have coded some brand new elements of GUI.
You can now accurately inspect trajectory of your projectile with this nicely glowing laser:

[Read more...]

[05.01.2017] [1st Hypersomnian revolution]
Embrace the new face of Hypersomnia.

THERE IS NO TL;DR VERSION! You have been warned.

There are so many new things that I need to split this article into several sections.
Here is what I did over the course of these three silent months:

[Inventory GUI refactored and fully networked]
[Introduction of pixel-art lighting, this time with neon maps]
[Introduction of tilesets and their specular highlights]
[Introduction of pixel-art smoke and reactivation of all particle systems]
[Introduction of audio with OpenAL Soft; integration of HRTF]
[Main menu draft with working credits and an intro scene recorded with Director mode]
[New content: JMIX114 motorcycle, better truck, KEK9, BILMER2000]
[Experimental test server widget on Hypersomnia homepage showing online players]
[Fixed build problems and can now build Hypersomnia with just one click]

[Read more...]

[10.10.2016] [Full-blown networking with latency hiding for physics is ready. Also, successful deep cloning of b2World!]
After numeruous experiments and tweaking, I've achieved some really nice, experimental latency hiding for multiplayer physics!

This was recorded with 100ms worth of ping and 1% packet loss.
Sure, the boxes happen to jump back and forth (due to corrections of mispredictions), but it is still perfectly playable.
You can have dynamic shells, twisting motorcycles, monstrous trucks, erratic players - movement of all is smoothed out nicely.
The hits from my perspective are also more or less counted as they touch the other bodies.
I can assure you that the clients controlling other characters see the bullets hitting their bodies exactly, and not some wall elsewhere.
Also notice how there is no twitching at all when hugging other players (even though they are completely unpredictable).
The other characters are automatized clients with randomized movements (sigh sigh my artificial friends).

Okay then, somebody wants to 1v1 me in my game?

I will write a thorough article about the guts of my netcode in some future if the project receives enough attention.
Important are the pros and cons of my architectural decisions:

+ Making new gameplay features work through the network requires no effort. Praise component-based design, metaprogramming magic and input-based networking.
The exception to that is physics - here, you'd definitely want some dedicated lag concealment techniques. Well, it would still *work*, but reconciliating physical mispredictions without further care looks ugly on the screen.
+ Minimal bandwidth, owing again to determinism of the simulation. 99% of the time, only client inputs are transported.
You could have 10000 continuously moving crates and bullet shells and you'd still be perfectly able to host a server for a dozen of players on an average home network.
- Private state (for example inventory of remote characters) is hard and ugly. This is because to preserve determinism, the client needs the whole state of the simulation.
It will be easy to peep into somebody's backpack, at least in the early versions. I will someday come up with a nice workaround.
+ Impossible to cheat otherwise, unless you write hacks that roughly predict the future state of the simulation and direct the shots accordingly. I guess such hack would be very hard to get right,
but if somebody comes up with one, I hope they publish the source code so I can make it into a badass boss.
+ The player with less ping has the advantage, which I believe will come in handy in an MMO setup.
We totally don't want absurd bullets hitting us because a certain somebody with terrible connection is authoritative over his bullet hits.
- Some bullets however noticeably miss remote players, but it is only the case with bad connections. In particular, that effect is not proportional to the victim's ping, but to yours (the shooter's) only.
+ Exact extrapolation when the client inputs stop changing for RTT worth of steps. It means that if your victim keeps the move-forward button pressed for a while (perhaps escaping in panic),
your hit is scored exactly as it happened on your screen. This also means that if two or more friends ride trucks next to each other whilst continuously accelerating (so just holding one button without interruption),
all see the exact same positions/velocities as they happen on the server in the present (again regardless of the network conditions),
in particular when the cars are more ballistic (like trucks totally are) the players are easily able to align the fronts so as to ride in a formation.
+ Lagless experience (and I mean completely undistinguishable from local single-player) whenever remote players are far away from your character. Even with 3000ms worth of ping.
That's right, embrace flawless gameplay (including grinding with the deterministic AI) when playing alone at nights on the server (or when the others are somewhere completely else).

[Read more...]