-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve performance and correctness of cached/static string ids #44261
Improve performance and correctness of cached/static string ids #44261
Conversation
make string_id behavior correct regardless of whether it's core or mod add generic_factory test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cool! Thanks for running with this idea.
// (lookups for not-yet-inserted elements) | ||
// in the common scenario there is no loss of performance, as `finalize` will make cache | ||
// for all ids valid again | ||
version++; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
By incrementing here we're potentially incrementing version much more often than I was envisioning when I suggested this approach, so I'm a little concerned that we might actually hit integer overflow here. I guess it would take maybe a million itype
s and a thousand reloads to get in the ballpark, so it's still pretty unlikely, but it no longer seems completely impossible...
But I'm probably just worrying about nothing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can wrap, but the probability of a collision is negligible, the only thing I'm slightly worried about is wrapping around and landing on the magic number -1. We can avoid that with
do {
version++;
} while( version == -1 );
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or just make version 64 bit, we don't have any tables of string_id or int_id such that we're concerned about their size.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm of two minds regarding the possibility of the int overflow. Is it possible in theory? Sure. Will it happen in practice? Almost certainly not.
I'll implement Kevin's idea of skipping -1 and optionally make it 64 bit if profiling doesn't show any noticeable slowdown.
void set_cid( const int_id<T> &cid ) const { | ||
_cid = cid.to_i(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should keep set_cid
as a private function that takes two arguments (id and version)? The two values are always set together.
* | ||
* `int_id` is fastest, but it can't be reused after game reload. Depending on the loaded | ||
* combination of mods `int_id` might point to a different entity and there is no way to tell. | ||
* Because of this NEVER define static int ids. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we do currently have some static int_id
s (with special handling so that they get reset on game load). Now we can probably get rid of those, which is cool, and create a clang-tidy
check to ensure no static int_id
s are created. (not in this PR, though).
I want to see your response to jbtw's comments, I think this is good to go either way but I don't want to merge before you've had a chance to address them if you like. |
I'll change the version increment as suggested and maybe also it's type. I also wanted to further explore the possibility to optimize string_id equality logic using version (provide a fast path when versions are the same). However, I'll be busy next couple of days, so I'm not sure how long it will take to implement these changes. So feel free to merge if you like, I can make a follow up PR. |
improve string_id comparison performance when `_version`s match add catch2 benchmarks and unit tests for string_id
improve string_id comparison performance when `_version`s match add catch2 benchmarks and unit tests for string_id
* implement suggested changes from #44261 improve string_id comparison performance when `_version`s match add catch2 benchmarks and unit tests for string_id * apply suggestions from review enable `CATCH_CONFIG_ENABLE_BENCHMARKING` permanently disable benchmark tests on one-by-one basis by default * Enable benchmarking in VS project
(this is correct because of CleverRaven#44261) partially reverts da3a1fe
(this is correct because of CleverRaven#44261) partially reverts da3a1fe
When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since CleverRaven#44261 - see CleverRaven#44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (CleverRaven#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since CleverRaven#44261 - see CleverRaven#44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (CleverRaven#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since CleverRaven#44261 - see CleverRaven#44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
…ds (CleverRaven#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since CleverRaven#44261 - see CleverRaven#44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap.
* Extend/Delete in requirements * Revert "Extend/Delete in requirements" This reverts commit 9da0eae. * Valentine Cards (#47438) * Add a proficiency for handloading, and a new profession (#47244) * Drug Dealer Profession (#47255) * Adds hallula, a type of bread popular in Bolivia and Chile * Arm mounted pouch (#46946) * Tazer drone iii (#47353) * Added Gelatin and Several Gelatin Based Recipes (#47080) * Content: bread in a can (#45680) * New random mission (#44999) * Mycus fruit Juice (#44952) * Milleable corn (#46254) * Talk Tag Additions (#47010) * Fix typo in Valentines Card (#47583) * (CrazyCataclysm) Crazy Hallucinations (#47386) * Mealgurb (#47685) * Add duct tape blindfold for old reciepe plus tweaks for reciepe (#47527) * Prepare npc, spell, character, and item for new ai (#47207) * Make acetylene torch cut metal walls. (#46255) * Added disassembly recipes for several items (#46316) * Celsius temperature for freezing point (#47028) * Stand up peek (#47257) * [AFTERSHOCK] Basic Ballistic Weapons (#47559) * makes glass walls and glass doors constructable (#47692) * Crackers as bread and jam&cheese sandwich (#47649) * [Aftershock] misc typograpical fixes (#47783) * Tweaks for teas (#47848) * Have travis run for 0.F-dev Currently, .travis.yml has a 'development' branch specified as one to run tests for; the current equivalent is the 0.F-dev branch. * Tweakes to copper and metal pipes. (#47825) * Fried eggs deluxe, sandwiches, and condiment list (#47786) * Homemade toastems, buttercream frosting and recipes (#47696) * Chocolate Cow don't drop "cow pies" * Remove unused FATIGUE energy source from spells * [Magiclysm] add owlbear origin snippet (#47752) * [Magiclysm] add lesser banishment spell, buff greater banishment (#47537) * Unhardcode bio_heatsink and bio_climate * Hunting lodge Location (#44378) * fungal evolution (#47247) * Add book strap carrier (#47665) * Partial mine jsonify; new zombie miner (#47790) * Moved mine_entrance OMT from the list of hardcoded locations to industial locations Also removed mine_shaft OMT and replaced it with mine_shaft_middle and mine_shaft_lower OMTs. Also added mine_entrance_roof OMT. * Added mine_entrance and mine_shaft to the list of obsoleted terrains * Added a zombie miner and its death drops * Created a json-version of mine entrance and its roof * Created a json-version of mine shaft (middle and lower variants) * Changed overmap special definition of a mine to include new json chunks * Applied migration of hardcoded mine_entrance and mine_shaft OMTs to new json variants * Made hardcoded mine chunks generate to the west of lower section of new mine shaft OMT Also removed mine_entrance and mine_shaft from the list of hardocoded mapgen. * Completely removed build_mine_room function as all mine rooms are now defined in json Also removed hardcoded generation of mine entrance and mine shaft. * Removed mentions of mine rooms from mapgen.h * Updated alt_map_key mod * Updated graphical overmap mod * Added missing harvest * Appease clang and constify * Quickfix * Appease clang one more time * Add 0.F-dev to matrix.yml (Getting 0.F-dev working with Travis appears to require additional settings by someone with permissions.) This change enables both pushes and pull requests of 0.F-dev to get checked by the General Matrix. As it is, if one bases a PR off of 0.F-dev, it doesn't get checked by Github. * 0.F-dev workflows (#47875) * Alter brown bread recipe to match canned version Fixes #47874. * Mine entrance expand (#47928) * Added mine_materials item group * Added Trolley vehicle * Expanded and tweaked above-ground and underground levels of mine entrance * [DinoMod] Mushroom Madness (#47907) * misc typograpical fixes * body pillow recipe makes makeshift body pillow now (#47917) * Traffic Bollards and an example of deployment (#48017) * add description for Uyen's missions * JSONize some trap features, replace trap int_id externs with string_ids (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap. * Clean up character mutation gain a bit Reduce duplicated code. I presume there's a reason that set_mutations didn't just call set_mutation, and the only difference is that it doesn't do the cache updates till the end, so preserve that behaviour. * Allow CBMs to specify mutations that prevent installation. (#47822) * Move CBM installation checks to Character Reduce code duplication, encapsulate things better, and make this available outside of the inventory menus. * Allow mutations to prevent installing CBMs Bionics can currently cancel mutations when installed, but can't have mutations prevent installation. * Spiral mine jsonify (#48003) * prevent bell spam (#47987) * Note that vat is required for fermentation in vinegar brewing * Unhardcode ease of sleep * whipped cream remove aerosol whip cream frosting requirement Update slings.json Update data/json/recipes/recipe_food.json Update data/json/items/comestibles/dairy.json Revert "remove aerosol whip cream" This reverts commit b8570f6. Update misc.json Delete recipe_obsolete.json Delete misc.json Delete slings.json Delete ammo_types.json Delete enchantments.json Revert "Delete recipe_obsolete.json" This reverts commit 3119fdc. Revert "Delete misc.json" This reverts commit 71b811b. Revert "Delete ammo_types.json" This reverts commit 848c739. Revert "Delete slings.json" This reverts commit 7c91194. fixes Co-Authored-By: actual-nh <[email protected]> Co-Authored-By: casswedson <[email protected]> * Update data/json/items/comestibles/dairy.json Co-authored-by: actual-nh <[email protected]> * Update slings.json * Update junkfood.json Co-authored-by: LaVeyanFiend <[email protected]> Co-authored-by: slimeboy460 <[email protected]> Co-authored-by: ToxiClay <[email protected]> Co-authored-by: Jamuro-g <[email protected]> Co-authored-by: Xenomorph-III <[email protected]> Co-authored-by: grawprog <[email protected]> Co-authored-by: Xaleth <[email protected]> Co-authored-by: El-Jekozo <[email protected]> Co-authored-by: RobertoVGoulart <[email protected]> Co-authored-by: Zukulini <[email protected]> Co-authored-by: klorpa <[email protected]> Co-authored-by: UmbralReaper <[email protected]> Co-authored-by: SariusSkelrets <[email protected]> Co-authored-by: Fosheze <[email protected]> Co-authored-by: Lamandus <[email protected]> Co-authored-by: Curtis Merrill <[email protected]> Co-authored-by: NeviNovat <[email protected]> Co-authored-by: Karol1223 <[email protected]> Co-authored-by: Hirmuolio <[email protected]> Co-authored-by: Charlie Gardai <[email protected]> Co-authored-by: Mom-Bun <[email protected]> Co-authored-by: OromisElf <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: Fris0uman <[email protected]> Co-authored-by: Ramza13 <[email protected]> Co-authored-by: LyleSY <[email protected]> Co-authored-by: FuelType-Memes <[email protected]> Co-authored-by: Anton Burmistrov <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: akirashirosawa <[email protected]> Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Jeremy Rose <[email protected]>
* Extend/Delete in requirements * Revert "Extend/Delete in requirements" This reverts commit 9da0eae. * Valentine Cards (#47438) * Add a proficiency for handloading, and a new profession (#47244) * Drug Dealer Profession (#47255) * Adds hallula, a type of bread popular in Bolivia and Chile * Arm mounted pouch (#46946) * Tazer drone iii (#47353) * Added Gelatin and Several Gelatin Based Recipes (#47080) * Content: bread in a can (#45680) * New random mission (#44999) * Mycus fruit Juice (#44952) * Milleable corn (#46254) * Talk Tag Additions (#47010) * Fix typo in Valentines Card (#47583) * (CrazyCataclysm) Crazy Hallucinations (#47386) * Mealgurb (#47685) * Add duct tape blindfold for old reciepe plus tweaks for reciepe (#47527) * Prepare npc, spell, character, and item for new ai (#47207) * Make acetylene torch cut metal walls. (#46255) * Added disassembly recipes for several items (#46316) * Celsius temperature for freezing point (#47028) * Stand up peek (#47257) * [AFTERSHOCK] Basic Ballistic Weapons (#47559) * makes glass walls and glass doors constructable (#47692) * Crackers as bread and jam&cheese sandwich (#47649) * [Aftershock] misc typograpical fixes (#47783) * Tweaks for teas (#47848) * Have travis run for 0.F-dev Currently, .travis.yml has a 'development' branch specified as one to run tests for; the current equivalent is the 0.F-dev branch. * Tweakes to copper and metal pipes. (#47825) * Fried eggs deluxe, sandwiches, and condiment list (#47786) * Homemade toastems, buttercream frosting and recipes (#47696) * Chocolate Cow don't drop "cow pies" * Remove unused FATIGUE energy source from spells * [Magiclysm] add owlbear origin snippet (#47752) * [Magiclysm] add lesser banishment spell, buff greater banishment (#47537) * Unhardcode bio_heatsink and bio_climate * Hunting lodge Location (#44378) * fungal evolution (#47247) * Add book strap carrier (#47665) * Partial mine jsonify; new zombie miner (#47790) * Moved mine_entrance OMT from the list of hardcoded locations to industial locations Also removed mine_shaft OMT and replaced it with mine_shaft_middle and mine_shaft_lower OMTs. Also added mine_entrance_roof OMT. * Added mine_entrance and mine_shaft to the list of obsoleted terrains * Added a zombie miner and its death drops * Created a json-version of mine entrance and its roof * Created a json-version of mine shaft (middle and lower variants) * Changed overmap special definition of a mine to include new json chunks * Applied migration of hardcoded mine_entrance and mine_shaft OMTs to new json variants * Made hardcoded mine chunks generate to the west of lower section of new mine shaft OMT Also removed mine_entrance and mine_shaft from the list of hardocoded mapgen. * Completely removed build_mine_room function as all mine rooms are now defined in json Also removed hardcoded generation of mine entrance and mine shaft. * Removed mentions of mine rooms from mapgen.h * Updated alt_map_key mod * Updated graphical overmap mod * Added missing harvest * Appease clang and constify * Quickfix * Appease clang one more time * Add 0.F-dev to matrix.yml (Getting 0.F-dev working with Travis appears to require additional settings by someone with permissions.) This change enables both pushes and pull requests of 0.F-dev to get checked by the General Matrix. As it is, if one bases a PR off of 0.F-dev, it doesn't get checked by Github. * 0.F-dev workflows (#47875) * Alter brown bread recipe to match canned version Fixes #47874. * Mine entrance expand (#47928) * Added mine_materials item group * Added Trolley vehicle * Expanded and tweaked above-ground and underground levels of mine entrance * [DinoMod] Mushroom Madness (#47907) * misc typograpical fixes * body pillow recipe makes makeshift body pillow now (#47917) * Traffic Bollards and an example of deployment (#48017) * add description for Uyen's missions * JSONize some trap features, replace trap int_id externs with string_ids (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap. * Clean up character mutation gain a bit Reduce duplicated code. I presume there's a reason that set_mutations didn't just call set_mutation, and the only difference is that it doesn't do the cache updates till the end, so preserve that behaviour. * Allow CBMs to specify mutations that prevent installation. (#47822) * Move CBM installation checks to Character Reduce code duplication, encapsulate things better, and make this available outside of the inventory menus. * Allow mutations to prevent installing CBMs Bionics can currently cancel mutations when installed, but can't have mutations prevent installation. * Spiral mine jsonify (#48003) * prevent bell spam (#47987) * Note that vat is required for fermentation in vinegar brewing * Unhardcode ease of sleep * calorie test * Revert "calorie test" This reverts commit e535575. * Arcology Start Adding windows and entrances organization more mapgen organization and more overmaps Update arcology_ground.json Update arcology_ground.json Last of the gates Update arcology_gate_chunks.json city special and terrain chunks Update arcology_ground.json Update arcology_chunks.json Update data/mods/Aftershock/itemgroups/arcology_groups.json Update recipe_obsolete.json chunkening testing fixes Update arcology_ground.json Update arcology_ground.json fixes neverending fixes the lintening Update arcology_gate_chunks.json Update arcology_gate_chunks.json Update arcology_gate_chunks.json Can force spawn now but it is blank Update arcology_chunks.json 15 tons and whadya get reverses north and south Ready for testing Gates open Open and Close gates using console broken metal flooring * Open and Close * Lint * Apply suggestions from code review Co-authored-by: John Candlebury <[email protected]> Co-authored-by: LaVeyanFiend <[email protected]> Co-authored-by: slimeboy460 <[email protected]> Co-authored-by: ToxiClay <[email protected]> Co-authored-by: Jamuro-g <[email protected]> Co-authored-by: Xenomorph-III <[email protected]> Co-authored-by: grawprog <[email protected]> Co-authored-by: Xaleth <[email protected]> Co-authored-by: El-Jekozo <[email protected]> Co-authored-by: RobertoVGoulart <[email protected]> Co-authored-by: Zukulini <[email protected]> Co-authored-by: klorpa <[email protected]> Co-authored-by: UmbralReaper <[email protected]> Co-authored-by: SariusSkelrets <[email protected]> Co-authored-by: Fosheze <[email protected]> Co-authored-by: Lamandus <[email protected]> Co-authored-by: Curtis Merrill <[email protected]> Co-authored-by: NeviNovat <[email protected]> Co-authored-by: Karol1223 <[email protected]> Co-authored-by: Hirmuolio <[email protected]> Co-authored-by: Charlie Gardai <[email protected]> Co-authored-by: Mom-Bun <[email protected]> Co-authored-by: OromisElf <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: Fris0uman <[email protected]> Co-authored-by: Ramza13 <[email protected]> Co-authored-by: LyleSY <[email protected]> Co-authored-by: FuelType-Memes <[email protected]> Co-authored-by: Anton Burmistrov <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: akirashirosawa <[email protected]> Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Jeremy Rose <[email protected]> Co-authored-by: John Candlebury <[email protected]>
* Extend/Delete in requirements * Revert "Extend/Delete in requirements" This reverts commit 9da0eae. * Valentine Cards (CleverRaven#47438) * Add a proficiency for handloading, and a new profession (CleverRaven#47244) * Drug Dealer Profession (CleverRaven#47255) * Adds hallula, a type of bread popular in Bolivia and Chile * Arm mounted pouch (CleverRaven#46946) * Tazer drone iii (CleverRaven#47353) * Added Gelatin and Several Gelatin Based Recipes (CleverRaven#47080) * Content: bread in a can (CleverRaven#45680) * New random mission (CleverRaven#44999) * Mycus fruit Juice (CleverRaven#44952) * Milleable corn (CleverRaven#46254) * Talk Tag Additions (CleverRaven#47010) * Fix typo in Valentines Card (CleverRaven#47583) * (CrazyCataclysm) Crazy Hallucinations (CleverRaven#47386) * Mealgurb (CleverRaven#47685) * Add duct tape blindfold for old reciepe plus tweaks for reciepe (CleverRaven#47527) * Prepare npc, spell, character, and item for new ai (CleverRaven#47207) * Make acetylene torch cut metal walls. (CleverRaven#46255) * Added disassembly recipes for several items (CleverRaven#46316) * Celsius temperature for freezing point (CleverRaven#47028) * Stand up peek (CleverRaven#47257) * [AFTERSHOCK] Basic Ballistic Weapons (CleverRaven#47559) * makes glass walls and glass doors constructable (CleverRaven#47692) * Crackers as bread and jam&cheese sandwich (CleverRaven#47649) * [Aftershock] misc typograpical fixes (CleverRaven#47783) * Tweaks for teas (CleverRaven#47848) * Have travis run for 0.F-dev Currently, .travis.yml has a 'development' branch specified as one to run tests for; the current equivalent is the 0.F-dev branch. * Tweakes to copper and metal pipes. (CleverRaven#47825) * Fried eggs deluxe, sandwiches, and condiment list (CleverRaven#47786) * Homemade toastems, buttercream frosting and recipes (CleverRaven#47696) * Chocolate Cow don't drop "cow pies" * Remove unused FATIGUE energy source from spells * [Magiclysm] add owlbear origin snippet (CleverRaven#47752) * [Magiclysm] add lesser banishment spell, buff greater banishment (CleverRaven#47537) * Unhardcode bio_heatsink and bio_climate * Hunting lodge Location (CleverRaven#44378) * fungal evolution (CleverRaven#47247) * Add book strap carrier (CleverRaven#47665) * Partial mine jsonify; new zombie miner (CleverRaven#47790) * Moved mine_entrance OMT from the list of hardcoded locations to industial locations Also removed mine_shaft OMT and replaced it with mine_shaft_middle and mine_shaft_lower OMTs. Also added mine_entrance_roof OMT. * Added mine_entrance and mine_shaft to the list of obsoleted terrains * Added a zombie miner and its death drops * Created a json-version of mine entrance and its roof * Created a json-version of mine shaft (middle and lower variants) * Changed overmap special definition of a mine to include new json chunks * Applied migration of hardcoded mine_entrance and mine_shaft OMTs to new json variants * Made hardcoded mine chunks generate to the west of lower section of new mine shaft OMT Also removed mine_entrance and mine_shaft from the list of hardocoded mapgen. * Completely removed build_mine_room function as all mine rooms are now defined in json Also removed hardcoded generation of mine entrance and mine shaft. * Removed mentions of mine rooms from mapgen.h * Updated alt_map_key mod * Updated graphical overmap mod * Added missing harvest * Appease clang and constify * Quickfix * Appease clang one more time * Add 0.F-dev to matrix.yml (Getting 0.F-dev working with Travis appears to require additional settings by someone with permissions.) This change enables both pushes and pull requests of 0.F-dev to get checked by the General Matrix. As it is, if one bases a PR off of 0.F-dev, it doesn't get checked by Github. * 0.F-dev workflows (CleverRaven#47875) * Alter brown bread recipe to match canned version Fixes CleverRaven#47874. * Mine entrance expand (CleverRaven#47928) * Added mine_materials item group * Added Trolley vehicle * Expanded and tweaked above-ground and underground levels of mine entrance * [DinoMod] Mushroom Madness (CleverRaven#47907) * misc typograpical fixes * body pillow recipe makes makeshift body pillow now (CleverRaven#47917) * Traffic Bollards and an example of deployment (CleverRaven#48017) * add description for Uyen's missions * JSONize some trap features, replace trap int_id externs with string_ids (CleverRaven#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since CleverRaven#44261 - see CleverRaven#44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap. * Clean up character mutation gain a bit Reduce duplicated code. I presume there's a reason that set_mutations didn't just call set_mutation, and the only difference is that it doesn't do the cache updates till the end, so preserve that behaviour. * Allow CBMs to specify mutations that prevent installation. (CleverRaven#47822) * Move CBM installation checks to Character Reduce code duplication, encapsulate things better, and make this available outside of the inventory menus. * Allow mutations to prevent installing CBMs Bionics can currently cancel mutations when installed, but can't have mutations prevent installation. * Spiral mine jsonify (CleverRaven#48003) * prevent bell spam (CleverRaven#47987) * Note that vat is required for fermentation in vinegar brewing * Unhardcode ease of sleep * calorie test * Revert "calorie test" This reverts commit e535575. * Arcology Start Adding windows and entrances organization more mapgen organization and more overmaps Update arcology_ground.json Update arcology_ground.json Last of the gates Update arcology_gate_chunks.json city special and terrain chunks Update arcology_ground.json Update arcology_chunks.json Update data/mods/Aftershock/itemgroups/arcology_groups.json Update recipe_obsolete.json chunkening testing fixes Update arcology_ground.json Update arcology_ground.json fixes neverending fixes the lintening Update arcology_gate_chunks.json Update arcology_gate_chunks.json Update arcology_gate_chunks.json Can force spawn now but it is blank Update arcology_chunks.json 15 tons and whadya get reverses north and south Ready for testing Gates open Open and Close gates using console broken metal flooring * Open and Close * Lint * Apply suggestions from code review Co-authored-by: John Candlebury <[email protected]> Co-authored-by: LaVeyanFiend <[email protected]> Co-authored-by: slimeboy460 <[email protected]> Co-authored-by: ToxiClay <[email protected]> Co-authored-by: Jamuro-g <[email protected]> Co-authored-by: Xenomorph-III <[email protected]> Co-authored-by: grawprog <[email protected]> Co-authored-by: Xaleth <[email protected]> Co-authored-by: El-Jekozo <[email protected]> Co-authored-by: RobertoVGoulart <[email protected]> Co-authored-by: Zukulini <[email protected]> Co-authored-by: klorpa <[email protected]> Co-authored-by: UmbralReaper <[email protected]> Co-authored-by: SariusSkelrets <[email protected]> Co-authored-by: Fosheze <[email protected]> Co-authored-by: Lamandus <[email protected]> Co-authored-by: Curtis Merrill <[email protected]> Co-authored-by: NeviNovat <[email protected]> Co-authored-by: Karol1223 <[email protected]> Co-authored-by: Hirmuolio <[email protected]> Co-authored-by: Charlie Gardai <[email protected]> Co-authored-by: Mom-Bun <[email protected]> Co-authored-by: OromisElf <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: Fris0uman <[email protected]> Co-authored-by: Ramza13 <[email protected]> Co-authored-by: LyleSY <[email protected]> Co-authored-by: FuelType-Memes <[email protected]> Co-authored-by: Anton Burmistrov <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: akirashirosawa <[email protected]> Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Jeremy Rose <[email protected]> Co-authored-by: John Candlebury <[email protected]>
* Extend/Delete in requirements * Revert "Extend/Delete in requirements" This reverts commit 9da0eae. * Valentine Cards (#47438) * Add a proficiency for handloading, and a new profession (#47244) * Drug Dealer Profession (#47255) * Adds hallula, a type of bread popular in Bolivia and Chile * Arm mounted pouch (#46946) * Tazer drone iii (#47353) * Added Gelatin and Several Gelatin Based Recipes (#47080) * Content: bread in a can (#45680) * New random mission (#44999) * Mycus fruit Juice (#44952) * Milleable corn (#46254) * Talk Tag Additions (#47010) * Fix typo in Valentines Card (#47583) * (CrazyCataclysm) Crazy Hallucinations (#47386) * Mealgurb (#47685) * Add duct tape blindfold for old reciepe plus tweaks for reciepe (#47527) * Prepare npc, spell, character, and item for new ai (#47207) * Make acetylene torch cut metal walls. (#46255) * Added disassembly recipes for several items (#46316) * Celsius temperature for freezing point (#47028) * Stand up peek (#47257) * [AFTERSHOCK] Basic Ballistic Weapons (#47559) * makes glass walls and glass doors constructable (#47692) * Crackers as bread and jam&cheese sandwich (#47649) * [Aftershock] misc typograpical fixes (#47783) * Tweaks for teas (#47848) * Have travis run for 0.F-dev Currently, .travis.yml has a 'development' branch specified as one to run tests for; the current equivalent is the 0.F-dev branch. * Tweakes to copper and metal pipes. (#47825) * Fried eggs deluxe, sandwiches, and condiment list (#47786) * Homemade toastems, buttercream frosting and recipes (#47696) * Chocolate Cow don't drop "cow pies" * Remove unused FATIGUE energy source from spells * [Magiclysm] add owlbear origin snippet (#47752) * [Magiclysm] add lesser banishment spell, buff greater banishment (#47537) * Unhardcode bio_heatsink and bio_climate * Hunting lodge Location (#44378) * fungal evolution (#47247) * Add book strap carrier (#47665) * Partial mine jsonify; new zombie miner (#47790) * Moved mine_entrance OMT from the list of hardcoded locations to industial locations Also removed mine_shaft OMT and replaced it with mine_shaft_middle and mine_shaft_lower OMTs. Also added mine_entrance_roof OMT. * Added mine_entrance and mine_shaft to the list of obsoleted terrains * Added a zombie miner and its death drops * Created a json-version of mine entrance and its roof * Created a json-version of mine shaft (middle and lower variants) * Changed overmap special definition of a mine to include new json chunks * Applied migration of hardcoded mine_entrance and mine_shaft OMTs to new json variants * Made hardcoded mine chunks generate to the west of lower section of new mine shaft OMT Also removed mine_entrance and mine_shaft from the list of hardocoded mapgen. * Completely removed build_mine_room function as all mine rooms are now defined in json Also removed hardcoded generation of mine entrance and mine shaft. * Removed mentions of mine rooms from mapgen.h * Updated alt_map_key mod * Updated graphical overmap mod * Added missing harvest * Appease clang and constify * Quickfix * Appease clang one more time * Add 0.F-dev to matrix.yml (Getting 0.F-dev working with Travis appears to require additional settings by someone with permissions.) This change enables both pushes and pull requests of 0.F-dev to get checked by the General Matrix. As it is, if one bases a PR off of 0.F-dev, it doesn't get checked by Github. * 0.F-dev workflows (#47875) * Alter brown bread recipe to match canned version Fixes #47874. * Mine entrance expand (#47928) * Added mine_materials item group * Added Trolley vehicle * Expanded and tweaked above-ground and underground levels of mine entrance * [DinoMod] Mushroom Madness (#47907) * misc typograpical fixes * body pillow recipe makes makeshift body pillow now (#47917) * Traffic Bollards and an example of deployment (#48017) * add description for Uyen's missions * JSONize some trap features, replace trap int_id externs with string_ids (#47933) * JSONize trap sonar detectibility Add trap flags - just the same as normal flags, but for traps! Stick them in their own separate file to avoid confusion. * JSONize trap memorial messages light_snare and heavy_snare seem to no longer exist, or I couldn't find any reference to them but this and tilesets. Updated dissector trap message, and added a trap message to some traps (the hallway ones, one or two of the similar-but-not-the-same variants of existing traps). * JSONize trap temperature convection Not quite sure how to describe it, went the lazy route. * Move traps externs from int to string ids When loading the game without this content, these will now only give an error on the use of these, instead of at the end data loading for traps. Previously there were performance concerns with this, but this should be fine since #44261 - see #44500. tr_null must remain an int id, as it used in the string to int id conversion. This is fine, as it will always be loaded (it's in data/core). Move the ledge trap over to data/core as well, because everything will need the 'open space' trap. * Clean up character mutation gain a bit Reduce duplicated code. I presume there's a reason that set_mutations didn't just call set_mutation, and the only difference is that it doesn't do the cache updates till the end, so preserve that behaviour. * Allow CBMs to specify mutations that prevent installation. (#47822) * Move CBM installation checks to Character Reduce code duplication, encapsulate things better, and make this available outside of the inventory menus. * Allow mutations to prevent installing CBMs Bionics can currently cancel mutations when installed, but can't have mutations prevent installation. * Spiral mine jsonify (#48003) * prevent bell spam (#47987) * Note that vat is required for fermentation in vinegar brewing * Unhardcode ease of sleep * calorie test * Revert "calorie test" This reverts commit e535575. * Reuben Sandwiches * Update recipe_food.json Co-authored-by: LaVeyanFiend <[email protected]> Co-authored-by: slimeboy460 <[email protected]> Co-authored-by: ToxiClay <[email protected]> Co-authored-by: Jamuro-g <[email protected]> Co-authored-by: Xenomorph-III <[email protected]> Co-authored-by: grawprog <[email protected]> Co-authored-by: Xaleth <[email protected]> Co-authored-by: El-Jekozo <[email protected]> Co-authored-by: RobertoVGoulart <[email protected]> Co-authored-by: Zukulini <[email protected]> Co-authored-by: klorpa <[email protected]> Co-authored-by: UmbralReaper <[email protected]> Co-authored-by: SariusSkelrets <[email protected]> Co-authored-by: Fosheze <[email protected]> Co-authored-by: Lamandus <[email protected]> Co-authored-by: Curtis Merrill <[email protected]> Co-authored-by: NeviNovat <[email protected]> Co-authored-by: Karol1223 <[email protected]> Co-authored-by: Hirmuolio <[email protected]> Co-authored-by: Charlie Gardai <[email protected]> Co-authored-by: Mom-Bun <[email protected]> Co-authored-by: OromisElf <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: Fris0uman <[email protected]> Co-authored-by: Ramza13 <[email protected]> Co-authored-by: LyleSY <[email protected]> Co-authored-by: FuelType-Memes <[email protected]> Co-authored-by: Anton Burmistrov <[email protected]> Co-authored-by: actual-nh <[email protected]> Co-authored-by: casswedson <[email protected]> Co-authored-by: akirashirosawa <[email protected]> Co-authored-by: anothersimulacrum <[email protected]> Co-authored-by: Jeremy Rose <[email protected]>
Summary
SUMMARY: Infrastructure "Improve performance and correctness of cached/static string ids"
Purpose of change
This is related to the following list of issues:
int_id
is slow (equals to string hash map lookup)::obj
lookup) equals string equality check, which is relatively slowDescribe the solution
As suggested by @kevingranade and @jbytheway on discord, I've implemented versioning/generations for generic_factory.
Now all string_ids store the "version" of the generation factory at the moment their
int_id
cache was created.When game reloads, "version" of generation factory is increased and all caches in string_ids are automatically invalidated.
This allows to have static string_ids for non-core functionality (their
is_valid
check andid
conversion will behave correctly between game reloads).In addition, string_id to int_id conversion became faster, as now validness check is made by int version comparison instead of string comparison.
Describe alternatives you've considered
I don't think there are any alternatives that don't require rewriting the whole
generic_factory
.Testing
I added unit tests for
generic_factory
.I also manually checked the scenario when static string_id from the mod ("fd_clairvoyant") is used between game reloads. Using debugger I ensured that its cache is correctly reset.
Additional context
Here is performance comparison between old and new string_id implementation.
Context: I've tried replacing this check with different patterns of string_id usage. Then I profiled 40 IRL seconds (
apparent_light_at
is called for each tile on every frame). Magiclysm is on.(note: I did change this particular place in this PR, it was just for demo purposes to showcase performance difference).
Also, note how the performance in first and second case is very similar, despite the intuition that static string_id should "cache everything". I think this is because in second case even "cached" string_id had to verify own validness by string comparison. And string comparison roughly equals string hashing for hashmap lookup.
In the third case there is no string traversal, it's just int comparison.