Thu 27 Nov 2008 04:49:05 PM UTC, comment #3:
There's a saved game attached here.
Crash 1: Load game, end turn, be the one who is attacked. -> crash
Crash 2: Load game, attack enemy hero stack (in the explored south area). End turn. -> crash during AI player turns
|
Wed 26 Nov 2008 07:40:23 PM UTC, comment #2:
This is a fun bug, because a hero's quest gets fulfilled while it's not that hero's turn.
I've added extra code for drawing the mini map for a player other than the active player. This way the reward is shown on the proper player's map. It's unfortunate that it gets shown during another player's turn though -- they get a glimpse of more of the map.
The crash was related to a ruin not having a reward. fixed in svn.
I can't reproduce the second crash, but it appears that there are 2 stacks on the tile that the hero is attacking. I wish I knew how that happened!
To top it off, some battles were not being shown when attacking on the hidden map. I fixed that too.
|
Tue 25 Nov 2008 12:03:07 PM UTC, comment #1:
A second crash related to this quest. If own hero stack is the attacker, the quest is finished with a reward (four devil allies here), but when ending the turn, there is a different crash:
#8 <signal handler called>
#9 Action_Reward::doSave (this=0x99ec3c8, helper=0xbf8798f8) at reward.h:115
#10 0x081539db in Action::saveContents (this=0x99ec3c8, helper=0xbf8798f8)
at action.cpp:91
#11 0x08153b7b in Action::save (this=0x99ec3c8, helper=0xbf8798f8)
at action.cpp:79
#12 0x080feea5 in Player::save (this=0x99d8298, helper=0xbf8798f8)
at player.cpp:533
#13 0x0810cb6e in RealPlayer::save (this=0x99d8298, helper=0xbf8798f8)
at real_player.cpp:74
#14 0x081052fa in Playerlist::save (this=0x99d75b0, helper=0xbf8798f8)
at playerlist.cpp:241
#15 0x080bf2c7 in GameScenario::saveWithHelper (this=0x9890b00,
helper=@0xbf8798f8) at GameScenario.cpp:390
#16 0x080c22c9 in GameScenario::saveGame (this=0x9890b00, filename=
{static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbf879b48 "D\022\033\n<#¡\t´9¼\t\002"}}, extension=
{static npos = 4294967295, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xbf879b44 "äò\022\nD\022\033\n<#¡\t´9¼\t\002"}}) at GameScenario.cpp:368
#17 0x080c2698 in GameScenario::nextRound (this=0x9890b00)
at GameScenario.cpp:619
#18 0x0824ca82 in NextTurnHotseat::start (this=0x99ed550)
at /usr/include/sigc++-2.0/sigc++/signal.h:772
#19 0x0824c55a in NextTurnHotseat::endTurn (this=0x99ed550)
at NextTurnHotseat.cpp:138
#20 0x0808c23b in Game::end_turn (this=0x9f8ac80) at game.cpp:259
#21 0x001b1392 in Glib::SignalProxyNormal::slot0_void_callback ()
from /usr/lib/libglibmm-2.4.so.1
#22 0x002918a4 in g_cclosure_marshal_VOID__VOID ()
from /lib/libgobject-2.0.so.0
|
Tue 25 Nov 2008 11:58:30 AM UTC, original submission:
The quest is:
"You shall slaughter 15 armies of the treacherous Storm Giants
You have killed 0 so far."
In the south area of the explored territory, the Storm Giants' hero stack attacks my hero stack. At the end of the fight, the game segfaults. On the contrary, if I attack first, there is no segfault, and the quest is finished successfully.
To reproduce, load attached game, end turn immediately to get attacked.
[...]
Program received signal SIGSEGV, Segmentation fault.
Stack::getFirstHero (this=0x0) at /usr/include/c++/4.3.0/bits/stl_list.h:658
658 { return const_iterator(this->_M_impl._M_node._M_next); }
#0 Stack::getFirstHero (this=0x0)
at /usr/include/c++/4.3.0/bits/stl_list.h:658
#1 0x080f400a in Player::doGiveReward (this=0x97e63a0, s=0x0,
reward=0x9809460) at player.cpp:1754
#2 0x080f4143 in Player::giveReward (this=0x97e63a0, s=0x0, reward=0x9809460)
at player.cpp:1778
#3 0x0810b626 in QuestsManager::questCompleted (this=0x980b328, heroId=1092)
at QuestsManager.cpp:264
#4 0x0818a06b in QuestEnemyArmies::armyDied (this=0x97fb9f8, a=0x9820e10,
heroIsCulprit=true) at QEnemyArmies.cpp:168
#5 0x0810a2df in QuestsManager::armyDied (this=0x980b328, a=0x9820e10,
culprits=@0xbfd0caf8) at QuestsManager.cpp:454
#6 0x080f32dd in Player::removeDeadArmies (this=0x981e138,
stacks=@0xbfd0cbf0, culprits=@0xbfd0caf8) at player.cpp:2109
#7 0x080f4625 in Player::cleanupAfterFight (this=0x981e138,
attackers=@0xbfd0cbf0, defenders=@0xbfd0cbe8) at player.cpp:1107
#8 0x080f4e20 in Player::stackFight (this=0x981e138, attacker=0xbfd0cd04,
defender=0xbfd0cce0) at player.cpp:1146
#9 0x080f6d03 in Player::stackMove (this=0x981e138, s=0x9820158, dest=
{x = 97, y = 84}, follow=true) at player.cpp:972
#10 0x080f7190 in Player::stackMove (this=0x981e138, s=0x9809460)
at player.cpp:834
#11 0x08161f64 in AI_Allocation::allocateStacksToThreats (this=0x975f358)
at AI_Allocation.cpp:189
#12 0x0816349b in AI_Allocation::move (this=0x975f358) at AI_Allocation.cpp:81
#13 0x08169ec5 in AI_Smart::startTurn (this=0x981e138) at ai_smart.cpp:104
#14 0x0824c967 in NextTurnHotseat::start (this=0x98caeb8)
at NextTurnHotseat.cpp:90
#15 0x0824c55a in NextTurnHotseat::endTurn (this=0x98caeb8)
at NextTurnHotseat.cpp:138
#16 0x0808c23b in Game::end_turn (this=0x9d9e370) at game.cpp:259
#17 0x001b1392 in Glib::SignalProxyNormal::slot0_void_callback ()
from /usr/lib/libglibmm-2.4.so.1
#18 0x002918a4 in g_cclosure_marshal_VOID__VOID ()
from /lib/libgobject-2.0.so.0
#19 0x0028411b in g_closure_invoke () from /lib/libgobject-2.0.so.0
#20 0x00298ec8 in ?? () from /lib/libgobject-2.0.so.0
#21 0x00299ebe in g_signal_emit_valist () from /lib/libgobject-2.0.so.0
#22 0x0029a326 in g_signal_emit () from /lib/libgobject-2.0.so.0
#23 0x04473b51 in gtk_button_clicked () from /usr/lib/libgtk-x11-2.0.so.0
#24 0x04474fb2 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#25 0x099dc090 in ?? ()
#26 0x04e01700 in gtk_window_set_has_frame () from /usr/lib/libgtkmm-2.4.so.1
#27 0xbfd0d468 in ?? ()
#28 0x04c5c2d9 in Gtk::Button::on_released () from /usr/lib/libgtkmm-2.4.so.1
|