if (flags & SAVE_ITEM_INSCRIPTION)
{
rd_string(buf, sizeof(buf));
- if (buf[0]) o_ptr->inscription = quark_add(buf);
- else o_ptr->inscription = 0;
+ o_ptr->inscription = quark_add(buf);
}
else o_ptr->inscription = 0;
if (flags & SAVE_ITEM_ART_NAME)
{
rd_string(buf, sizeof(buf));
- if (buf[0]) o_ptr->art_name = quark_add(buf);
- else o_ptr->art_name = 0;
+ o_ptr->art_name = quark_add(buf);
}
else o_ptr->art_name = 0;
}
{
rd_s16b(&m_ptr->max_maxhp);
}
+ if(h_older_than(2, 1, 2, 1))
+ {
+ m_ptr->dealt_damage = 0;
+ }
+ else
+ {
+ rd_s16b(&m_ptr->dealt_damage);
+ }
+
rd_s16b(&m_ptr->mtimed[MTIMED_CSLEEP]);
rd_byte(&m_ptr->mspeed);
if (z_older_than(10, 4, 2))
rd_s16b(&m_ptr->hp);
rd_s16b(&m_ptr->maxhp);
rd_s16b(&m_ptr->max_maxhp);
+ if(h_older_than(2, 1, 2, 1))
+ {
+ m_ptr->dealt_damage = 0;
+ }
+ else
+ {
+ rd_s16b(&m_ptr->dealt_damage);
+ }
/* Monster race index of its appearance */
if (flags & SAVE_MON_AP_R_IDX) rd_s16b(&m_ptr->ap_r_idx);
if (flags & SAVE_MON_NICKNAME)
{
rd_string(buf, sizeof(buf));
- if (buf[0]) m_ptr->nickname = quark_add(buf);
- else m_ptr->nickname = 0;
+ m_ptr->nickname = quark_add(buf);
}
else m_ptr->nickname = 0;
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 */
{
rd_u32b(&Rand_state[i]);
}
-
- /* Accept */
- Rand_quick = FALSE;
}
/* 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" */
rd_s16b(&p_ptr->energy_need);
if (z_older_than(11, 0, 13))
p_ptr->energy_need = 100 - p_ptr->energy_need;
+ if (h_older_than(2, 1, 2, 0))
+ p_ptr->enchant_energy_need = 0;
+ else
+ rd_s16b(&p_ptr->enchant_energy_need);
rd_s16b(&p_ptr->fast);
rd_s16b(&p_ptr->slow);
/* Read "feeling" */
rd_byte(&p_ptr->feeling);
+ switch (p_ptr->start_race)
+ {
+ case RACE_VAMPIRE:
+ case RACE_SKELETON:
+ case RACE_ZOMBIE:
+ case RACE_SPECTRE:
+ turn_limit = TURNS_PER_TICK * TOWN_DAWN * MAX_DAYS + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
+ break;
+ default:
+ turn_limit = TURNS_PER_TICK * TOWN_DAWN * (MAX_DAYS - 1) + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
+ break;
+ }
+ dungeon_turn_limit = TURNS_PER_TICK * TOWN_DAWN * (MAX_DAYS - 1) + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
+
/* Turn when level began */
rd_s32b(&old_turn);
/* 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);
+ C_KILL(template, limit, cave_template_type);
/*** Objects ***/
}
/* 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))
+ {
+ (void)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