static void home_carry(store_type *st_ptr, object_type *o_ptr)
{
int slot;
- s32b value, j_value;
+ s32b value;
int i;
object_type *j_ptr;
/* Check existing slots to see if we must "slide" */
for (slot = 0; slot < st_ptr->stock_num; slot++)
{
- /* Get that item */
- j_ptr = &st_ptr->stock[slot];
-
- /* Hack -- readable books always come first */
- if ((o_ptr->tval == mp_ptr->spell_book) &&
- (j_ptr->tval != mp_ptr->spell_book)) break;
- if ((j_ptr->tval == mp_ptr->spell_book) &&
- (o_ptr->tval != mp_ptr->spell_book)) continue;
-
- /* Objects sort by decreasing type */
- if (o_ptr->tval > j_ptr->tval) break;
- if (o_ptr->tval < j_ptr->tval) continue;
-
- /* Can happen in the home */
- if (!object_is_aware(o_ptr)) continue;
- if (!object_is_aware(j_ptr)) break;
-
- /* Objects sort by increasing sval */
- if (o_ptr->sval < j_ptr->sval) break;
- if (o_ptr->sval > j_ptr->sval) continue;
-
- /* Objects in the home can be unknown */
- if (!object_is_known(o_ptr)) continue;
- if (!object_is_known(j_ptr)) break;
-
- /*
- * Hack: otherwise identical rods sort by
- * increasing recharge time --dsb
- */
- if (o_ptr->tval == TV_ROD)
- {
- if (o_ptr->pval < j_ptr->pval) break;
- if (o_ptr->pval > j_ptr->pval) continue;
- }
-
- /* Objects sort by decreasing value */
- j_value = object_value(j_ptr);
- if (value > j_value) break;
- if (value < j_value) continue;
+ if (object_sort_comp(o_ptr, value, &st_ptr->stock[slot])) break;
}
/* Slide the others up */
/* More info */
strip_bytes(8);
rd_s16b(&p_ptr->sc);
- strip_bytes(2);
+ rd_s16b(&p_ptr->concent);
/* Read the flags */
strip_bytes(2); /* Old "rest" */
/* Wield equipment */
if (n >= INVEN_RARM)
{
+ /* Player touches it */
+ q_ptr->marked |= OM_TOUCHED;
+
/* Copy object */
object_copy(&inventory[n], q_ptr);
/* Get a slot */
n = slot++;
+ /* Player touches it */
+ q_ptr->marked |= OM_TOUCHED;
+
/* Copy object */
object_copy(&inventory[n], q_ptr);
/*** Terrain Feature Indexes (see "lib/edit/f_info.txt") ***/
#define OLD_FEAT_INVIS 0x02
#define OLD_FEAT_GLYPH 0x03
+#define OLD_FEAT_QUEST_ENTER 0x08
+#define OLD_FEAT_QUEST_EXIT 0x09
#define OLD_FEAT_MINOR_GLYPH 0x40
+#define OLD_FEAT_BLDG_1 0x81
#define OLD_FEAT_MIRROR 0xc3
+/* Old quests */
+#define OLD_QUEST_WATER_CAVE 18
+
+/* Quest constants */
+#define QUEST_OLD_CASTLE 27
+#define QUEST_ROYAL_CRYPT 28
+
/*
* Read the dungeon (old method)
*
}
}
+ /* Quest 18 was removed */
+ if (h_older_than(1, 7, 0, 6) && !vanilla_town)
+ {
+ for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
+ {
+ /* Access the cave */
+ c_ptr = &cave[y][x];
+
+ if ((c_ptr->special == OLD_QUEST_WATER_CAVE) && !dun_level)
+ {
+ if (c_ptr->feat == OLD_FEAT_QUEST_ENTER)
+ {
+ c_ptr->feat = feat_tree;
+ c_ptr->special = 0;
+ }
+ else if (c_ptr->feat == OLD_FEAT_BLDG_1)
+ {
+ c_ptr->special = lite_town ? QUEST_OLD_CASTLE : QUEST_ROYAL_CRYPT;
+ }
+ }
+ else if ((c_ptr->feat == OLD_FEAT_QUEST_EXIT) &&
+ (p_ptr->inside_quest == OLD_QUEST_WATER_CAVE))
+ {
+ c_ptr->feat = feat_up_stair;
+ c_ptr->special = 0;
+ }
+ }
+ }
+
/*** Objects ***/
/* Read the item count */
}
}
+ /* Quest 18 was removed */
+ if (h_older_than(1, 7, 0, 6) && !vanilla_town)
+ {
+ for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
+ {
+ /* Access the cave */
+ cave_type *c_ptr = &cave[y][x];
+
+ if ((c_ptr->special == OLD_QUEST_WATER_CAVE) && !dun_level)
+ {
+ if (c_ptr->feat == OLD_FEAT_QUEST_ENTER)
+ {
+ c_ptr->feat = feat_tree;
+ c_ptr->special = 0;
+ }
+ else if (c_ptr->feat == OLD_FEAT_BLDG_1)
+ {
+ c_ptr->special = lite_town ? QUEST_OLD_CASTLE : QUEST_ROYAL_CRYPT;
+ }
+ }
+ else if ((c_ptr->feat == OLD_FEAT_QUEST_EXIT) &&
+ (p_ptr->inside_quest == OLD_QUEST_WATER_CAVE))
+ {
+ c_ptr->feat = feat_up_stair;
+ c_ptr->special = 0;
+ }
+ }
+ }
+
/* Free the "template" array */
C_FREE(template, limit, cave_template_type);
}
/* Load quest status if quest is running */
- if (quest[i].status == QUEST_STATUS_TAKEN || (!z_older_than(10, 3, 14) && (quest[i].status == QUEST_STATUS_COMPLETED)) || (!z_older_than(11, 0, 7) && (i >= MIN_RANDOM_QUEST) && (i <= (MIN_RANDOM_QUEST+max_rquests_load))))
+ if ((quest[i].status == QUEST_STATUS_TAKEN) ||
+ (!z_older_than(10, 3, 14) && (quest[i].status == QUEST_STATUS_COMPLETED)) ||
+ (!z_older_than(11, 0, 7) && (i >= MIN_RANDOM_QUEST) && (i <= (MIN_RANDOM_QUEST + max_rquests_load))))
{
rd_s16b(&quest[i].cur_num);
rd_s16b(&quest[i].max_num);
}
}
+ /* Quest 18 was removed */
+ if (h_older_than(1, 7, 0, 6))
+ {
+ WIPE(&quest[OLD_QUEST_WATER_CAVE], quest_type);
+ quest[OLD_QUEST_WATER_CAVE].status = QUEST_STATUS_UNTAKEN;
+ }
+
/* Position in the wilderness */
rd_s32b(&p_ptr->wilderness_x);
rd_s32b(&p_ptr->wilderness_y);
}
}
+ /* Quest 18 was removed */
+ if (h_older_than(1, 7, 0, 6))
+ {
+ if (p_ptr->inside_quest == OLD_QUEST_WATER_CAVE)
+ {
+ dungeon_type = lite_town ? DUNGEON_ANGBAND : DUNGEON_GALGALS;
+ dun_level = 1;
+ p_ptr->inside_quest = 0;
+ }
+ }
+
#ifdef VERIFY_CHECKSUMS