Version 1.1.95

Information about releases and roadmap.
Post Reply
User avatar
FactorioBot
Factorio Staff
Factorio Staff
Posts: 406
Joined: Tue May 12, 2015 1:48 pm

Version 1.1.95

Post by FactorioBot »

Changes
  • Technology researched message does not play chat notification sound.
Bugfixes
  • Fixed that the prototype explorer and CustomInputEvent::selected_prototype did not work on crafting machine fluid slots.
  • Fixed LuaEntity::disconnect_neighbour called on electric pole would disconnect left side of power switch when requested to disconnect right side. (109309)
  • Fixed that cloning rails in the map editor could lead to corrupt saves in some instances. (109436)
  • Fixed offset of circuit connector sprites for inserters
Scripting
  • Added PrintSettings::sound_path, volume_modifier and game_state.
  • Replaced PrintSettings::skip_if_redundant with PrintSettings::skip. Added defines.print_skip.
Use the automatic updater if you can (check experimental updates in other settings) or download full installation at http://www.factorio.com/download/experimental.

Rseding91
Factorio Staff
Factorio Staff
Posts: 13210
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: Version 1.1.95

Post by Rseding91 »

This experimental version also contains cross-platform checks for x86 vs arm floating point conversions. x86 and arm do floating point conversions differently and if we don't handle it correctly on the C++ side it results in different values which results in multiplayer desyncs.
If you want to get ahold of me I'm almost always on Discord.

User avatar
Sanqui
Factorio Staff
Factorio Staff
Posts: 268
Joined: Mon May 07, 2018 7:22 pm
Contact:

Re: Version 1.1.95

Post by Sanqui »

If you ran into this issue when updating to 1.1.95 please try again, I have released update packages which work around this problem.
ovo

Kane
Filter Inserter
Filter Inserter
Posts: 666
Joined: Fri Sep 05, 2014 7:34 pm
Contact:

Re: Version 1.1.95

Post by Kane »

Thank you :)

User avatar
Stringweasel
Filter Inserter
Filter Inserter
Posts: 319
Joined: Thu Apr 27, 2017 8:22 pm
Contact:

Re: Version 1.1.95

Post by Stringweasel »

Rseding91 wrote:
Tue Nov 07, 2023 3:29 pm
This experimental version also contains cross-platform checks for x86 vs arm floating point conversions. x86 and arm do floating point conversions differently and if we don't handle it correctly on the C++ side it results in different values which results in multiplayer desyncs.
As a programmer myself I'm curious what exactly you mean here. I understand the part that different platforms do floating point operations differently, and they might have different results. And because Factorio is deterministic it's very important that all calculations always result in exactly the same answer.

But isn't this something that should be checked during development? Or in CI/CD pipelines? My first guess is that there's simply too many things to check?

And what type of checks was added? For example, the Factorio instance on my PC will do a floating point calculation, but to what would the result be compared (checked) to verify it's consistent?

An explanation would be really nice to hear, but of course not expected. Just a curiosity :)
Alt-F4 Author | Factorio Modder
Mods: Hall of Fame | Better Victory Screen | Fluidic Power | Biter Power | Space Spidertron | Spidertron Dock | Weasel's Demolition Derby

AugustoResende
Manual Inserter
Manual Inserter
Posts: 1
Joined: Wed Nov 08, 2023 8:50 pm
Contact:

Re: Version 1.1.95

Post by AugustoResende »

If you play in a Linux machine (x86) and your friend is playing in a M1 Mac Os, without this fix in some cases could occur a multiplayer desync because of different fload calculations

User avatar
Stringweasel
Filter Inserter
Filter Inserter
Posts: 319
Joined: Thu Apr 27, 2017 8:22 pm
Contact:

Re: Version 1.1.95

Post by Stringweasel »

AugustoResende wrote:
Wed Nov 08, 2023 9:55 pm
If you play in a Linux machine (x86) and your friend is playing in a M1 Mac Os, without this fix in some cases could occur a multiplayer desync because of different fload calculations
I do understand the reason why they are added. I'm curious what they added. :)
Alt-F4 Author | Factorio Modder
Mods: Hall of Fame | Better Victory Screen | Fluidic Power | Biter Power | Space Spidertron | Spidertron Dock | Weasel's Demolition Derby

Genhis
Factorio Staff
Factorio Staff
Posts: 120
Joined: Wed Dec 24, 2014 8:19 am
Contact:

Re: Version 1.1.95

Post by Genhis »

Stringweasel wrote:
Wed Nov 08, 2023 1:34 pm
As a programmer myself I'm curious what exactly you mean here. I understand the part that different platforms do floating point operations differently, and they might have different results. And because Factorio is deterministic it's very important that all calculations always result in exactly the same answer.

But isn't this something that should be checked during development? Or in CI/CD pipelines? My first guess is that there's simply too many things to check?

And what type of checks was added? For example, the Factorio instance on my PC will do a floating point calculation, but to what would the result be compared (checked) to verify it's consistent?
Floating-point operations still have to do the same thing, otherwise cross-architecture multiplayer wouldn't work at all. This release added checks for conversion from floating-point numbers to integers. One of the issues we encountered was converting `double(-1)` into `uint32_t` - x86 lets it overflow and arm clamps it to 0 (105953). So it's mostly about checking if a floating-point value is in range of the target type and clamping it if it doesn't fit.

We do compare CRC values of our tests between x86 and arm, but sometimes we make incorrect assumptions or don't think about stuff modders would do. (Who would define a technology cost larger than ~18 quintillion, right? :D) Also, not every line of code can be reliably tested. Runtime checks help us to fill in these gaps.

User avatar
Stringweasel
Filter Inserter
Filter Inserter
Posts: 319
Joined: Thu Apr 27, 2017 8:22 pm
Contact:

Post by Stringweasel »

Genhis wrote:
Thu Nov 09, 2023 1:22 pm
Stringweasel wrote:
Wed Nov 08, 2023 1:34 pm
As a programmer myself I'm curious what exactly you mean here. I understand the part that different platforms do floating point operations differently, and they might have different results. And because Factorio is deterministic it's very important that all calculations always result in exactly the same answer.

But isn't this something that should be checked during development? Or in CI/CD pipelines? My first guess is that there's simply too many things to check?

And what type of checks was added? For example, the Factorio instance on my PC will do a floating point calculation, but to what would the result be compared (checked) to verify it's consistent?
Floating-point operations still have to do the same thing, otherwise cross-architecture multiplayer wouldn't work at all. This release added checks for conversion from floating-point numbers to integers. One of the issues we encountered was converting `double(-1)` into `uint32_t` - x86 lets it overflow and arm clamps it to 0 (105953). So it's mostly about checking if a floating-point value is in range of the target type and clamping it if it doesn't fit.

We do compare CRC values of our tests between x86 and arm, but sometimes we make incorrect assumptions or don't think about stuff modders would do. (Who would define a technology cost larger than ~18 quintillion, right? :D) Also, not every line of code can be reliably tested. Runtime checks help us to fill in these gaps.
Ah that makes sense, and answers my question. Thanks Genhis! And making the game so moddable, but still deterministic, is a big endeavor. I can imagine it will be really hard to find all possible issues during only development/testing :D
Alt-F4 Author | Factorio Modder
Mods: Hall of Fame | Better Victory Screen | Fluidic Power | Biter Power | Space Spidertron | Spidertron Dock | Weasel's Demolition Derby

Post Reply

Return to “Releases”