Factorio - Klonan
Hello,
this post is going to be more technical than usual, yet it might still be interesting to know the background of the process for some people.

Why are there suddenly so many problems with save loading in experimental?
0.16.36 is stable, but as we needed to fix some additional bugs, we started releasing experimental releases 0.16.37 up to 0.16.42 and so on. From the perspective of the player, there were a lot of new bugs introduced, unloadable saves, weird train problems, or even the infamous version 0.16.40 that disabled all signals causing trainocalypse which even made a baby cry.
Most of these problems (apart from the trainocalypse) were actually caused on purpose. It might sound weird, but it should make sense to you soon.

Offensive programming
As far as I can tell, offensive programming is the best way to keep complicated codebase like Factorio relatively bug-free in the long run. The general idea is, that when we have some rule of something in the code being always true no matter what (this is called an invariant), we should never just ignore it if the rule is broken.

Invariant examples in Factorio that were broken
One of the invariants we had was, that there can never be wall on top of another wall. This can't be normally done, as the player can't just build wall over another wall, but with script, you can place entities even in a way that they would collide. But in the case of walls, you can't even build two walls on top of each other with a script. The reason for this is, that the walls connect to each other, and since there would be 2 walls at the same place, in multiplayer it could happen that the neighbour wall piece could connect to different walls for different players which eventually could (and it also did) cause desyncs. Similar invariants are set for belts, pipes and rails.

The second part of the problem occurred when the deconstruction planner and blueprints came into play, as we gradually changed the game in a way, that you should be able to mark any area of factory for deconstruction and plan a blueprint over it even before the area was cleaned. So suddenly, you can have a belt marked for deconstruction with another belt (in the form of a ghost) on top of it like this:



The third part of the problem was, that we decided that ghost belts and walls should connect with each other so it looks nice as explained in fff-211

To allow these 3 things to co-exist, we had to make several changes. The first thing to change was something you might have noticed: belts and walls get disconnected when marked for deconstruction.



The second thing was to allow walls (or belts) on top of each other as long as one is marked for deconstruction and other is a ghost. As things marked for deconstruction are not candidates for connection, the connection candidate is still well defined.

You can imagine, that making sure that the first invariant is still true might not be that trivial, for example:
  • Make sure, that a ghost on top of an entity marked for deconstruction gets removed when the deconstruction is cancelled.
  • Make sure, using teleport fails if the result would be in conflict with the invariant.
  • Make sure, there are not other ways it could happen we are just not aware of.

The last point is the biggest problem, because if there is some other way the invariant can be broken, I want to know about it rather than have to investigate very complex desync reports. But how do I check that this never happens without affecting performance in normal games? For these kind of things, we have a method we call "consistency check". It goes through all the map and it checks different kind of integrity stuff in it.

The checks take quite some time to perform, so calling it on every save/load would affect the game too much, so we decided to call it only on version transition, which includes also transition of any version of any mod. The check can be also executed manually using a console command:

/c game.consistency_check()

The question is, what to do when the check fails? To make sure that it will actually get reported, we decided that when the consistency check fails, the game instantly stops (crashes) and writes the cause and stack trace into the log. This forces the user (at least some of them) to give us a bug report, so we can try to figure out what is going on. After that we can just re-activate the migration that removes conflicting entities in a new version to make the save loadable again.

The train bugs
All the train bugs were also originating from the same problem. I figured out, that rail signals marked for deconstruction didn't disconnect from the rail, and could block building of blueprints with rail signals on top of them. This changed the invariant for the rail signal from always connected to rail if possible to be only connected when not marked for deconstruction.

Most of parts of the code were fixed properly, but there was one particular piece of code, that re-connected signal even when marked for deconstruction, which made the internal state inconsistent and the save not loadable until the migration to re-build rail segments was re-activated for the next version transition.

Conclusion
So now you know, why are there much more crashes when loading games and you hopefully hate me less, because now you know, that it was done in the sake of the long-term code correctness.

As always, let us know your thoughts and feedback on our forum.
Winning Putt: Golf Online - rctakkun

Limited Time Consumables available starting TODAY!

Happy Almost Mother’s Day Winning Putt! Be sure to check out a new limited-time consumable available at the Event Shop!

Sold in quantities of 10, 40, and 100 these Lunch Boxes from Mom are the perfect thing to help you drive further while hitting the mark this Mother’s Day Weekend!

Don’t wait too long though – these special consumables will be exiting the shop at the end of the month!
Winning Putt: Golf Online - rctakkun

Save big on all Premium Golf Ball Purchases!


It’s that time again – 50% Off all Premium Golf Balls! Purchase any Premium Golf Ball from the Golf Supply Shop at half off their normal price! Be sure to also check out Event Shop for some old favorites that we’ve brought back but act fast as they’ll be gone when the sale is over.

Don’t miss out on this opportunity to fill up your golf bag with your favorite golf balls!

Premium Golf Balls on Sale
  • Rocket Ball (2pc)
  • Rainbow Ball (2pc)
  • Soccer Ball (2pc)
  • eXtreme Spin (3pc)
  • eXtreme Lightning (3pc)
  • Electronic (4pc)
  • Magical (4pc)
  • Hockey Puck Golf Ball (2pc)
  • The Heart (2pc)
In addition to the sale, we’ll also be selling some of our older balls at the Event Shop throughout the event at the same discounted price!

Extra Balls (Sold at the Event Shop throughout the Weekend Sale)
  • Flame Distance (2pc)
  • eXtreme Bomber (3pc)
  • The One (4pc)
There’s never been a better time to restock on Golf Balls and with so many different varieties to pick from! This Weekend Sale will run throughout the weekend and come to a close on Monday at 11:00AM PDT / 6:00 PM UTC.
Tales of Maj'Eyal - DarkGod
My minions, I am happy and proud to give you Tales of Maj'Eyal 1.5.9 ! See http://te4.org/

Enjoy and have fun in Eyal!


  • Altered lore popup window to accomodate big lore visuals better
  • Shatur (and others) trees should be back to their full glory
  • Fixed crash on birth screen when framebuffer video option is disabled

Have fun in Eyal!
Wings of Vi - Solgryn
Wings of Vi is now on sale celebrating @SpeedgamingShow Wings of Vi any% speedrun tournament!

check out the schedule at http://speedgaming.org/wov/
as of this post it's currently live at https://www.twitch.tv/SpeedGaming3
Jurassic World Evolution - BrettC Frontier
You’ve waited, you’ve speculated and today we’re proud to confirm… THE SPINOSAURUS!

https://www.youtube.com/watch?v=VpUUpKPkpE0
Guns'n'Stories: Bulletproof VR - glibxperiaz
Dear gamers!

After realease the game we working on optimization and fixing the bugs.
Comfortable gameplay and good western shooting is very important for us, so we working to make it better.

In this update we fixed some bugs and added Chinese localization.

Enjoy and have fun!



May 11, 2018
Agony - TheHellMessenger
Welcome!

Agony is coming and we have prepared a contest for you to celebrate it – this is your chance to get some exclusive Agony gadgets!

You have 11 days to impress the Red Goddess, starting today!

Suprise her with your creativity!


You can get amazing awards: The trophy for the first place is a secret wooden chest, covered in blood. It's contents remain a secret. What's inside? Will you be the lucky one? Will you open the Chest of Agony? Use any technique to show us your favorite character from Agony! It's up to you to decide in what form you will submit your work. Will it be a sketch of Succubus on a piece of paper? Or perhaps a picture of a Chort? Cosplay of a Martyr with a bag on his head? Be creative! Impress the Red Godess and win a fight for her attention! Become the person chosen by the Red Goddess herself!

RULES:

Accept the regulations by writing a comment under the competition entry on Facebook. Each participant can send only one work, which may be presented on several photos. Permitted file formats: JPG, PNG, TGA, PSD.

Send your work to us: info@madmind-studio.com and remeber to write AGONY BOX in the subject of your message. The e-mail must include your name and surname. The competition ends May 22nd 2018, and the winners selected by Madmind Studio will be announced May 24th. Competition works that will be delivered to us later than May 22nd, will not be taken under consideration.
The competition works which will make the greatest impression on us - Madmind Studio - are going to be awarded!

1st Place:


- The mysterious AGONY BOX, with one invitation from the Goddess herself!
- One of a kind box, full of exclusive materials, and distinctive, personalized Agony items
- Physical version of the game on a chosen platform (Xbox One, PS4 or PC)
- Agony T-Shirt
- Agony Poster signed by Madmind Team
- Physical version of the Agony Soundtrack

2nd Place:
- Physical version of the game on a chosen platform (Xbox One, PS4 or PC)
- Agony T-Shirt
- Agony Poster signed by Madmind Team
- Physical version of the Agony Soundtrack

3rd Place:
- Physical version of the game on a chosen platform (Xbox One, PS4 or PC)
- Agony T-Shirt
- Physical version of the Agony Soundtrack

Bonus rewards (places: 4-10):
- A code for digital version of Agony (Xbox One, PS4 or PC)

Full Contest rules: Click here to read

It's your chance to please your Goddess.

Good luck!
The Hell Messenger
May 11, 2018
Zula Global - GM ZULA Latino
FAST BEAT LOOP RACER GT | 環狀賽車GT - goodguy58
FAST BEAT LOOP RACER GT to launch May 17th Hey - Sorry for the delay. Additional testing was required and now we can confirm that FAST BEAT LOOP RACER GT will launch next week, Thursday May 17th. Thanks for your patience and get your engines ready!
...