The Newscast Atlantis
Developers' progress records and announcements.

[31.08.2016] [Working connection (ENet), delta compression, stress tests of determinism]
And so I've teached them simulations to talk to each other.
To revisit my protocol code, two years old at that, was surely a fascinating journey into myself of time past.

As a result, I've already been able to ride a truck with two of my friends as passengers.

There's a catch however: I am still working on client-side input prediction.
This is not at all simple to get right in a game with this kind of dynamics, not to mention physics-based projectiles.
If I let the client be autoritative over bullet collisions... a victim you'll be getting damage even though the bullet flew somewhere else on your screen;
to make it worse, the attacker may even be facing a completely different direction.
These problems arise because the other player sees the past version of you.

Contrary to FPSes, this is a 2D game -
canvas reveals way more imperfection than a 3D world with huge horizons and blazingly fast bullets.

I did this before; it was the scripted (Lua) version of Hypersomnia and it worked not that bad.
If I don't come up with something fancy (like, some astral body being a reflection of the past self?), I will stick to the good old approach and live with the consequences.

(In case you're wondering, yes, I love to have these messy figures from the profiler all over the place.
I recognize it as a form of beauty. I've even redirected the console output to text rendered in-game, as seen in right top corners)

The screenshot above is nothing else than a test of two independent client simulations connected to a local server,
all three in a single process, so tapping F5 once in Visual Studio completely setups my cosmic laboratory.
(The connection is powered by ENet networking library. I will not be using RakNet anymore.)

Here I must necessarily brag about my architecture (or put more gently, my habit to keep the code reasonably clean),
for I am perfectly able to deterministically replay both the server and the two client sessions visible on the screen.

[Read more...]

[25.07.2016] [Refactoring complete, Linux port arriving soon, working save/load]
After two months of intense labour, I have finally launched Hypersomnia again!

Throughout this seemingly neverending treatment, the following has been achieved:
  • Made significant state of the simulation devoid of pointers and references (except containers), enabling trivial duplication and serialization.
  • Provided constness guarantees for access to entities and components, ensuring that the model stays unalterable during rendering-time, further enforcing determinism of the simulation.
  • The concerns of an entity and definition thereof were gracefully disentangled owing to my paradigm.
  • Practically the whole entity-component-system became type-safe (on the fundamental level).
  • I learned a whole lot of metaprogramming which may or may not be considered an advantage.
  • Unfortunately, GUI is only partially refactored. Static polymorphism turns out to be a handful, so GUI is temporarily disabled. I will come back later to it.

[Read more...]

[12.06.2016] [Founded a GitHub organization and moved all repositories]
Official Github Organization for Hypersomnia Developers

From now on, all repositories currently worked on will reside in the organization.

I know well it's been a while since you've heard from me, but please be patient!
The engine is currently undergoing some architectural breakthrough necessary for serialization and networking.

I've got everything planned though.

By the way... I can already have a nice fight...

[Read more...]

[02.05.2016] [HUD progress, health, death, healing, aimpunch, improved recoil]
On to the next account of progress.

I've implemented a working prototype of sentience system.
A sentient entity is that which may receive damage from a hostile force;
if its health value drops to zero or less, it dies necessarily.

I also thought that, at this point, it'd be nice to draw the current health value of each sentient being, close to where it is currently on the screen.
Great - how am I going to position a rectangular bar sprite along a possibly rotating object,
while still being able to tell which one belongs to whom (especially in a crowded area)?
The answer: circular HUD to the rescue!

[Read more...]

[21.04.2016] [Firearms progress: recoil, traces, particle effects]
That was quite a break from posting.
I wanted to complete several things before this write-up.

First and foremost, firearm recoil!
The crosshair gets an invisible physical body to whom I apply an impulse whenever a shot is fired.
It is completely deterministic so you could basically learn the force pattern:

In the clip above, my mouse controller remains motionless all the time.

[Read more...]

[13.04.2016] [Rotating player so that the rifle points at crosshair]
At some point, you might want to attach a rifle to your top-down hero.
And, you might want to shoot it.

My game involves a crosshair that determines the player body's rotation around its origin.
The body's origin is the center of the character's head O.

In other words, the player's head always looks at the crosshair.

The body may have several fixtures which necessarily rotate therewith,...

[Read more...]