rd_byte(&o_ptr->marked);
- /* Old flags */
- rd_u32b(&o_ptr->art_flags1);
- rd_u32b(&o_ptr->art_flags2);
- rd_u32b(&o_ptr->art_flags3);
+ /* Object flags */
+ rd_u32b(&o_ptr->art_flags[0]);
+ rd_u32b(&o_ptr->art_flags[1]);
+ rd_u32b(&o_ptr->art_flags[2]);
+ if (h_older_than(1, 3, 0, 0)) o_ptr->art_flags[3] = 0L;
+ else rd_u32b(&o_ptr->art_flags[3]);
+
+ if (h_older_than(1, 3, 0, 0))
+ {
+ if (o_ptr->name2 == EGO_TELEPATHY)
+ add_flag(o_ptr->art_flags, TR_TELEPATHY);
+ }
if (z_older_than(11, 0, 11))
{
if (o_ptr->ident & 0x40)
{
o_ptr->curse_flags |= TRC_CURSED;
- if (o_ptr->art_flags3 & 0x40000000L) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
- if (o_ptr->art_flags3 & 0x80000000L) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+ if (o_ptr->art_flags[2] & 0x40000000L) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+ if (o_ptr->art_flags[2] & 0x80000000L) o_ptr->curse_flags |= TRC_PERMA_CURSE;
if (o_ptr->name1)
{
artifact_type *a_ptr = &a_info[o_ptr->name1];
if (e_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
}
}
- o_ptr->art_flags3 &= (0x1FFFFFFFL);
+ o_ptr->art_flags[2] &= (0x1FFFFFFFL);
}
else
{
{
switch (o_ptr->xtra2 % 6)
{
- case 0: o_ptr->art_flags2 |= (TR2_SUST_STR); break;
- case 1: o_ptr->art_flags2 |= (TR2_SUST_INT); break;
- case 2: o_ptr->art_flags2 |= (TR2_SUST_WIS); break;
- case 3: o_ptr->art_flags2 |= (TR2_SUST_DEX); break;
- case 4: o_ptr->art_flags2 |= (TR2_SUST_CON); break;
- case 5: o_ptr->art_flags2 |= (TR2_SUST_CHR); break;
+ case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
+ case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
+ case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
+ case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
+ case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
+ case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
}
o_ptr->xtra2 = 0;
}
{
switch (o_ptr->xtra2 % 11)
{
- case 0: o_ptr->art_flags2 |= (TR2_RES_BLIND); break;
- case 1: o_ptr->art_flags2 |= (TR2_RES_CONF); break;
- case 2: o_ptr->art_flags2 |= (TR2_RES_SOUND); break;
- case 3: o_ptr->art_flags2 |= (TR2_RES_SHARDS); break;
- case 4: o_ptr->art_flags2 |= (TR2_RES_NETHER); break;
- case 5: o_ptr->art_flags2 |= (TR2_RES_NEXUS); break;
- case 6: o_ptr->art_flags2 |= (TR2_RES_CHAOS); break;
- case 7: o_ptr->art_flags2 |= (TR2_RES_DISEN); break;
- case 8: o_ptr->art_flags2 |= (TR2_RES_POIS); break;
- case 9: o_ptr->art_flags2 |= (TR2_RES_DARK); break;
- case 10: o_ptr->art_flags2 |= (TR2_RES_LITE); break;
+ case 0: add_flag(o_ptr->art_flags, TR_RES_BLIND); break;
+ case 1: add_flag(o_ptr->art_flags, TR_RES_CONF); break;
+ case 2: add_flag(o_ptr->art_flags, TR_RES_SOUND); break;
+ case 3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
+ case 4: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
+ case 5: add_flag(o_ptr->art_flags, TR_RES_NEXUS); break;
+ case 6: add_flag(o_ptr->art_flags, TR_RES_CHAOS); break;
+ case 7: add_flag(o_ptr->art_flags, TR_RES_DISEN); break;
+ case 8: add_flag(o_ptr->art_flags, TR_RES_POIS); break;
+ case 9: add_flag(o_ptr->art_flags, TR_RES_DARK); break;
+ case 10: add_flag(o_ptr->art_flags, TR_RES_LITE); break;
}
o_ptr->xtra2 = 0;
}
{
switch (o_ptr->xtra2 % 8)
{
- case 0: o_ptr->art_flags3 |= (TR3_FEATHER); break;
- case 1: o_ptr->art_flags3 |= (TR3_LITE); break;
- case 2: o_ptr->art_flags3 |= (TR3_SEE_INVIS); break;
- case 3: o_ptr->art_flags3 |= (TR3_WARNING); break;
- case 4: o_ptr->art_flags3 |= (TR3_SLOW_DIGEST); break;
- case 5: o_ptr->art_flags3 |= (TR3_REGEN); break;
- case 6: o_ptr->art_flags2 |= (TR2_FREE_ACT); break;
- case 7: o_ptr->art_flags2 |= (TR2_HOLD_LIFE); break;
+ case 0: add_flag(o_ptr->art_flags, TR_FEATHER); break;
+ case 1: add_flag(o_ptr->art_flags, TR_LITE); break;
+ case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS); break;
+ case 3: add_flag(o_ptr->art_flags, TR_WARNING); break;
+ case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
+ case 5: add_flag(o_ptr->art_flags, TR_REGEN); break;
+ case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT); break;
+ case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE); break;
}
o_ptr->xtra2 = 0;
}
else
{
rd_byte(&o_ptr->xtra3);
+ if (h_older_than(1, 3, 0, 1))
+ {
+ if (o_ptr->tval > TV_CAPTURE && o_ptr->xtra3 >= 1+96)
+ o_ptr->xtra3 += -96 + MIN_SPECIAL_ESSENCE;
+ }
+
rd_s16b(&o_ptr->xtra4);
rd_s16b(&o_ptr->xtra5);
}
o_ptr->pval = 0;
}
- rd_byte(&o_ptr->feeling);
+ rd_byte(&o_ptr->feeling);
/* Inscription */
- rd_string(buf, 128);
+ rd_string(buf, sizeof(buf));
/* Save the inscription */
if (buf[0]) o_ptr->inscription = quark_add(buf);
- rd_string(buf, 128);
+ rd_string(buf, sizeof(buf));
if (buf[0]) o_ptr->art_name = quark_add(buf);
/* The Python object */
if (z_older_than(10, 4, 9))
{
- if (o_ptr->art_flags1 & TR1_MAGIC_MASTERY)
+ if (have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))
{
- o_ptr->art_flags1 &= ~(TR1_MAGIC_MASTERY);
- o_ptr->art_flags3 |= (TR3_DEC_MANA);
+ remove_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
+ add_flag(o_ptr->art_flags, TR_DEC_MANA);
}
}
rd_s16b(&m_ptr->target_x);
}
- rd_byte(&m_ptr->invulner);
+ rd_byte(&m_ptr->invulner);
if (!(z_major == 2 && z_minor == 0 && z_patch == 6))
rd_u32b(&m_ptr->smart);
}
else
{
- rd_string(buf, 128);
+ rd_string(buf, sizeof(buf));
if (buf[0]) m_ptr->nickname = quark_add(buf);
}
cheat_xtra = (c & 0x0800) ? TRUE : FALSE;
cheat_know = (c & 0x1000) ? TRUE : FALSE;
cheat_live = (c & 0x2000) ? TRUE : FALSE;
+ cheat_save = (c & 0x4000) ? TRUE : FALSE;
rd_byte((byte *)&autosave_l);
rd_byte((byte *)&autosave_t);
char buf[64];
/* Strip name */
- rd_string(buf, 64);
+ rd_string(buf, sizeof(buf));
/* Strip old data */
strip_bytes(60);
for (i = 0; i < 8; i++) rd_s16b(&previous_char.vir_types[i]);
- for (i = 0; i < 4; i++) rd_string(previous_char.history[i], 60);
+ for (i = 0; i < 4; i++) rd_string(previous_char.history[i], sizeof(previous_char.history[i]));
rd_byte(&previous_char.quests);
byte tmp8u;
s16b tmp16s;
- rd_string(player_name, 32);
+ rd_string(player_name, sizeof(player_name));
- rd_string(p_ptr->died_from, 80);
+ rd_string(p_ptr->died_from, sizeof(p_ptr->died_from));
load_quick_start();
for (i = 0; i < 4; i++)
{
- rd_string(p_ptr->history[i], 60);
+ rd_string(p_ptr->history[i], sizeof(p_ptr->history[i]));
}
/* Class/Race/Seikaku/Gender/Spells */
{
for (i = 0; i < 108; i++) rd_s32b(&p_ptr->magic_num1[i]);
for (i = 0; i < 108; i++) rd_byte(&p_ptr->magic_num2[i]);
+ if (h_older_than(1, 3, 0, 1))
+ {
+ if (p_ptr->pclass == CLASS_SMITH)
+ {
+ p_ptr->magic_num1[TR_ES_ATTACK] = p_ptr->magic_num1[96];
+ p_ptr->magic_num1[96] = 0;
+ p_ptr->magic_num1[TR_ES_AC] = p_ptr->magic_num1[97];
+ p_ptr->magic_num1[97] = 0;
+ }
+ }
}
if ((p_ptr->pclass == CLASS_BARD) && p_ptr->magic_num1[0]) p_ptr->action = ACTION_SING;
}
else
{
- byte max = (byte)max_d_idx;
+ byte max = (byte)max_d_idx;
- rd_byte(&max);
+ rd_byte(&max);
- for(i = 0; i < max; i++)
+ for(i = 0; i < max; i++)
{
- rd_s16b(&max_dlv[i]);
+ rd_s16b(&max_dlv[i]);
if (max_dlv[i] > d_info[i].maxdepth) max_dlv[i] = d_info[i].maxdepth;
}
- }
+ }
/* Repair maximum player level XXX XXX XXX */
if (p_ptr->max_plv < p_ptr->lev) p_ptr->max_plv = p_ptr->lev;
for (i = 0; i < num; i++)
{
/* Read the message */
- rd_string(buf, 128);
+ rd_string(buf, sizeof(buf));
/* Save the message */
message_add(buf);
+/* Old hidden trap flag */
+#define CAVE_TRAP 0x8000
+
/*
* Read the dungeon
*
/* Header info */
rd_s16b(&dun_level);
- if (z_older_than(10, 3, 8)) dungeon_type = DUNGEON_ANGBAND;
+ if (z_older_than(10, 3, 8)) dungeon_type = DUNGEON_ANGBAND;
else rd_byte(&dungeon_type);
/* Set the base level for old versions */
/* Load the dungeon data */
for (x = y = 0; y < ymax; )
{
+ u16b info;
+
/* Grab RLE info */
rd_byte(&count);
if (z_older_than(10,3,6))
+ {
rd_byte(&tmp8u);
+ info = (u16b)tmp8u;
+ }
else
- rd_s16b(&tmp16s);
+ {
+ rd_u16b(&info);
+
+ /* Decline invalid flags */
+ info &= ~(CAVE_LITE | CAVE_VIEW | CAVE_MNLT);
+ }
/* Apply the RLE info */
for (i = count; i > 0; i--)
c_ptr = &cave[y][x];
/* Extract "info" */
- if (z_older_than(10,3,6))
- c_ptr->info = tmp8u;
- else c_ptr->info = tmp16s;
+ c_ptr->info = info;
/* Advance/Wrap */
if (++x >= xmax)
}
}
- /* Convert cave data */
- if (z_older_than(11, 0, 99))
- {
- for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
- {
- /* Wipe old unused flags */
- cave[y][x].info &= ~(CAVE_MASK);
- }
- }
-
- if (h_older_than(1, 1, 1, 0))
- {
- for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
- {
- /* Very old */
- if (c_ptr->feat == FEAT_INVIS)
- {
- c_ptr->feat = FEAT_FLOOR;
- c_ptr->info |= CAVE_TRAP;
- }
-
- /* Older than 1.1.1 */
- if (c_ptr->feat == FEAT_MIRROR)
- {
- c_ptr->feat = FEAT_FLOOR;
- c_ptr->info |= CAVE_IN_MIRROR;
- }
- }
- }
-
/*** Run length decoding ***/
/* Load the dungeon data */
}
}
+ /* Convert cave data */
+ if (z_older_than(11, 0, 99))
+ {
+ for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
+ {
+ /* Wipe old unused flags */
+ cave[y][x].info &= ~(CAVE_MASK);
+ }
+ }
+
+ if (h_older_than(1, 1, 1, 0))
+ {
+ for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
+ {
+ /* Access the cave */
+ c_ptr = &cave[y][x];
+
+ /* Very old */
+ if (c_ptr->feat == FEAT_INVIS)
+ {
+ c_ptr->feat = FEAT_FLOOR;
+ c_ptr->info |= CAVE_TRAP;
+ }
+
+ /* Older than 1.1.1 */
+ if (c_ptr->feat == FEAT_MIRROR)
+ {
+ c_ptr->feat = FEAT_FLOOR;
+ c_ptr->info |= CAVE_OBJECT;
+ }
+ }
+ }
+
+ if (h_older_than(1, 3, 1, 0))
+ {
+ for (y = 0; y < ymax; y++) for (x = 0; x < xmax; x++)
+ {
+ /* Access the cave */
+ c_ptr = &cave[y][x];
+
+ /* Old CAVE_IN_MIRROR flag */
+ if (c_ptr->info & CAVE_OBJECT)
+ {
+ c_ptr->mimic = FEAT_MIRROR;
+ }
+
+ /* Runes will be mimics and flags */
+ else if (c_ptr->feat == FEAT_MINOR_GLYPH ||
+ c_ptr->feat == FEAT_GLYPH)
+ {
+ c_ptr->info |= CAVE_OBJECT;
+ c_ptr->mimic = c_ptr->feat;
+ c_ptr->feat = FEAT_FLOOR;
+ }
+
+ /* Hidden traps will be trap terrains mimicing floor */
+ else if (c_ptr->info & CAVE_TRAP)
+ {
+ c_ptr->info &= ~CAVE_TRAP;
+ c_ptr->mimic = c_ptr->feat;
+ c_ptr->feat = choose_random_trap();
+ }
+
+ /* Another hidden trap */
+ else if (c_ptr->feat == FEAT_INVIS)
+ {
+ c_ptr->mimic = FEAT_FLOOR;
+ c_ptr->feat = FEAT_TRAP_OPEN;
+ }
+
+ /* Hidden doors will be closed doors mimicing wall */
+ else if (c_ptr->feat == FEAT_SECRET)
+ {
+ place_closed_door(y, x);
+ c_ptr->mimic = FEAT_WALL_EXTRA;
+ }
+ }
+ }
+
/*** Objects ***/
/* Read the item count */
/* Mention the savefile version */
- note(format(
+ note(format(
#ifdef JP
- "¥Ð¡¼¥¸¥ç¥ó %d.%d.%d ¤Î¥»¡¼¥Ö¡¦¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥ÉÃæ...",
+ "¥Ð¡¼¥¸¥ç¥ó %d.%d.%d ¤Î¥»¡¼¥Ö¡¦¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥ÉÃæ...",
#else
- "Loading a %d.%d.%d savefile...",
+ "Loading a %d.%d.%d savefile...",
#endif
- (z_major > 9) ? z_major - 10 : z_major, z_minor, z_patch));
+ (z_major > 9) ? z_major - 10 : z_major, z_minor, z_patch));
/* Strip the version bytes */
x_check = 0L;
/* Read the version number of the savefile */
- /* Old savefile will be version 0.0.0.3 */
- rd_byte(&h_ver_extra);
- rd_byte(&h_ver_patch);
- rd_byte(&h_ver_minor);
- rd_byte(&h_ver_major);
+ /* Old savefile will be version 0.0.0.3 */
+ rd_byte(&h_ver_extra);
+ rd_byte(&h_ver_patch);
+ rd_byte(&h_ver_minor);
+ rd_byte(&h_ver_major);
/* Operating system info */
rd_u32b(&sf_system);
if (arg_fiddle) note("Loaded Option Flags");
#endif
- /*
- * Munchkin players are marked
- *
- * XXX - should be replaced with a better method,
- * after the new scorefile-handling is implemented.
- */
- if (munchkin_death)
- {
- /* Mark savefile */
- p_ptr->noscore |= 0x0001;
- }
-
/* Then the "messages" */
rd_messages();
#ifdef JP
if (!z_older_than(11, 0, 9))
{
char buf[SCREEN_BUF_SIZE];
- rd_string(buf, SCREEN_BUF_SIZE);
+ rd_string(buf, sizeof(buf));
if (buf[0]) screen_dump = string_make(buf);
}