comparison urogue/state.c @ 262:c7c6c5a7d840

UltraRogue: fix a segfault related to restoring monsters. The functions for restoring saved games failed to properly correct the t_chasee pointer of monsters chasing the player. Such monsters would attempt to chase NULL instead, with predictable results.
author John "Elwin" Edwards
date Tue, 14 Feb 2017 20:42:33 -0500
parents b80e1bf4eaec
children 08057be02f47
comparison
equal deleted inserted replaced
261:ac42afd962e4 262:c7c6c5a7d840
676 void 676 void
677 ur_fixup_monsters(struct linked_list *l) 677 ur_fixup_monsters(struct linked_list *l)
678 { 678 {
679 while(l != NULL) 679 while(l != NULL)
680 { 680 {
681 if (l->data.th->t_chasee == (void *) -1L) 681 if (l->data.th->chasee_index == -1L)
682 l->data.th->t_chasee = &player; 682 l->data.th->t_chasee = &player;
683 else 683 else
684 l->data.th->t_chasee = find_thing(mlist, l->data.th->chasee_index); 684 l->data.th->t_chasee = find_thing(mlist, l->data.th->chasee_index);
685 685
686 l->data.th->t_horde = find_object(lvl_obj, l->data.th->horde_index); 686 l->data.th->t_horde = find_object(lvl_obj, l->data.th->horde_index);
1338 mlist = ur_read_monsters(savef); 1338 mlist = ur_read_monsters(savef);
1339 i = ur_read_int(savef); 1339 i = ur_read_int(savef);
1340 beast = find_thing(mlist, i); 1340 beast = find_thing(mlist, i);
1341 1341
1342 ur_fixup_monsters(fam_ptr); 1342 ur_fixup_monsters(fam_ptr);
1343 ur_fixup_monsters(fam_ptr); 1343 ur_fixup_monsters(mlist);
1344 1344
1345 DUMPSTRING 1345 DUMPSTRING
1346 i = ur_read_int(savef); 1346 i = ur_read_int(savef);
1347 cur_weapon = find_object(player.t_pack, i); 1347 cur_weapon = find_object(player.t_pack, i);
1348 1348