CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.7k stars 4.2k forks source link

[0.H] Game freezes up when isometric tileset is being used #78219

Open Outcognito opened 3 days ago

Outcognito commented 3 days ago

Describe the bug

Game freezes up completely when I'm playing with any of the isometric tilesets exactly in this specific spot. I assume it has something to do with a portal spawning monsters or an apartment complex full of monsters that see me and are rushing to jump down several Z-levels on top of each other.

Attach save file

Hinesville-trimmed.tar.gz

Steps to reproduce

  1. Make sure SmashButton iso or Ultica_iso telest is enabled. SmashButton iso produces more consistent freeze while Ultica_iso sometimes recovers from it.
  2. Make sure 3D-vision is enabled and is set to ~6 levels or so.
  3. Load the save.
  4. Continue down the road till you see a portal.
  5. Skip turns and look up and down till the game freezes.

Expected behavior

Game shouldn't freeze up.

Screenshots

image image

Versions and configuration

Additional context

I noticed occasional ~5 second freezes sometimes occurring during normal gameplay too, but the game always recovered from them.

Outcognito commented 2 days ago

I launched windows version through wine and got the same freeze, so the issue seems to be unrelated to OS-specific quirks. I'll also add my configs along another save file to optimize reproduction process. config.tar.gz Hinesville-trimmed.tar.gz

Steps to reproduce:

  1. Use provided configs and save file.
  2. Load the game.
  3. Look up.
  4. Keep looking higher and higher until the freeze is encountered.
NetSysFire commented 2 days ago

There is no need to try it again with wine as it will not produce any better results. In the worst case, it will falsify results even.

I could not try downloading your save yet but I managed to reproduce a freeze on my own with related steps by looking up and down in a lab in experimental. Backtrace using gdb:

Thread 1 "cataclysm-tiles" received signal SIGINT, Interrupt.
0x0000555556117dd6 in std::_Rb_tree<int, std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > >, std::_Select1st<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > >, std::less<int>, std::allocator<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > > >::_M_lower_bound () at /usr/include/c++/9/bits/stl_tree.h:1937
warning: 1937   /usr/include/c++/9/bits/stl_tree.h: No such file or directory
(gdb) bt full
#0  0x0000555556117dd6 in std::_Rb_tree<int, std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > >, std::_Select1st<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > >, std::less<int>, std::allocator<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > > >::_M_lower_bound () at /usr/include/c++/9/bits/stl_tree.h:1937
No locals.
#1  std::_Rb_tree<int, std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > >, std::_Select1st<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > >, std::less<int>, std::allocator<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > > >::lower_bound () at /usr/include/c++/9/bits/stl_tree.h:1287
No locals.
#2  std::map<int, std::vector<tile_render_info, std::allocator<tile_render_info> >, std::less<int>, std::allocator<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > > >::lower_bound ()
    at /usr/include/c++/9/bits/stl_map.h:1258
No locals.
#3  std::map<int, std::vector<tile_render_info, std::allocator<tile_render_info> >, std::less<int>, std::allocator<std::pair<int const, std::vector<tile_render_info, std::allocator<tile_render_info> > > > >::operator[] ()
    at /usr/include/c++/9/bits/stl_map.h:495
No locals.
#4  0x0000555556112faa in cata_tiles::draw () at src/cata_tiles.cpp:1770
No locals.
#5  0x0000555556c92257 in cata_cursesport::curses_drawwindow () at src/sdltiles.cpp:1350
No locals.
#6  0x00005555563f99c1 in game::draw () at src/game.cpp:4094
No locals.
#7  0x0000555556e08561 in ui_adaptor::redraw_invalidated () at src/ui_manager.cpp:448
No locals.
#8  0x0000555556412494 in game::look_around () at src/game.cpp:7771
No locals.
#9  0x0000555556415d48 in game::look_around () at src/game.cpp:7566
No locals.
#10 0x000055555647aefc in do_deathcam_action () at src/handle_action.cpp:2156
No locals.
#11 game::handle_action () at src/handle_action.cpp:3262
No locals.
#12 0x0000555556303691 in do_turn () at src/do_turn.cpp:579
No locals.
#13 0x0000555555d839cd in main () at src/main.cpp:863
No locals.