-/* File: load.c */
+/* File: load.c */
/*
* Copyright (c) 1997 Ben Harrison, and others
case 0:
{
- /* ÉÔÌÀ¤Î´Á»ú¥³¡¼¥É¤«¤é¥·¥¹¥Æ¥à¤Î´Á»ú¥³¡¼¥É¤ËÊÑ´¹ */
+ /* 不明の漢字コードからシステムの漢字コードに変換 */
byte code = codeconv(str);
- /* ´Á»ú¥³¡¼¥É¤¬È½ÌÀ¤·¤¿¤é¡¢¤½¤ì¤òµÏ¿ */
+ /* 漢字コードが判明したら、それを記録 */
if (code) kanji_code = code;
break;
switch (o_ptr->xtra2 % 8)
{
case 0: add_flag(o_ptr->art_flags, TR_LEVITATION); break;
- case 1: add_flag(o_ptr->art_flags, TR_LITE); break;
+ case 1: add_flag(o_ptr->art_flags, TR_LITE_1); 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;
+ case 7: add_flag(o_ptr->art_flags, TR_HOLD_EXP); break;
}
o_ptr->xtra2 = 0;
}
else o_ptr->art_flags[2] = 0;
if (flags & SAVE_ITEM_ART_FLAGS3) rd_u32b(&o_ptr->art_flags[3]);
else o_ptr->art_flags[3] = 0;
+ if (flags & SAVE_ITEM_ART_FLAGS4) rd_u32b(&o_ptr->art_flags[4]);
+ else o_ptr->art_flags[4] = 0;
if (flags & SAVE_ITEM_CURSE_FLAGS) rd_u32b(&o_ptr->curse_flags);
else o_ptr->curse_flags = 0;
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;
+
+ if(h_older_than(2,1,2,4))
+ {
+ u32b flgs[TR_FLAG_SIZE];
+ object_flags(o_ptr, flgs);
+
+ if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name2 == EGO_ANCIENT_CURSE) || (o_ptr->name1 == ART_NIGHT))
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_M1);
+ remove_flag(o_ptr->art_flags, TR_LITE_1);
+ remove_flag(o_ptr->art_flags, TR_LITE_2);
+ remove_flag(o_ptr->art_flags, TR_LITE_3);
+ }
+ else if (o_ptr->name2 == EGO_LITE_DARKNESS)
+ {
+ if (o_ptr->tval == TV_LITE)
+ {
+ if (o_ptr->sval == SV_LITE_TORCH)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_M1);
+ }
+ else if (o_ptr->sval == SV_LITE_LANTERN)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_M2);
+ }
+ else if (o_ptr->sval == SV_LITE_FEANOR)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_M3);
+ }
+ }
+ else
+ {
+ /* Paranoia */
+ add_flag(o_ptr->art_flags, TR_LITE_M1);
+ }
+ }
+ else if (o_ptr->tval == TV_LITE)
+ {
+ if (object_is_fixed_artifact(o_ptr))
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_3);
+ }
+ else if (o_ptr->sval == SV_LITE_TORCH)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_1);
+ add_flag(o_ptr->art_flags, TR_LITE_FUEL);
+ }
+ else if (o_ptr->sval == SV_LITE_LANTERN)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_2);
+ add_flag(o_ptr->art_flags, TR_LITE_FUEL);
+ }
+ else if (o_ptr->sval == SV_LITE_FEANOR)
+ {
+ add_flag(o_ptr->art_flags, TR_LITE_2);
+ }
+ }
+ }
}
{
rd_s16b(&m_ptr->max_maxhp);
}
- rd_s16b(&m_ptr->csleep);
+ if(h_older_than(2, 1, 2, 1))
+ {
+ m_ptr->dealt_damage = 0;
+ }
+ else
+ {
+ rd_u32b(&m_ptr->dealt_damage);
+ }
+
+ rd_s16b(&m_ptr->mtimed[MTIMED_CSLEEP]);
rd_byte(&m_ptr->mspeed);
if (z_older_than(10, 4, 2))
{
if (z_older_than(10,0,7))
{
- m_ptr->fast = 0;
- m_ptr->slow = 0;
+ m_ptr->mtimed[MTIMED_FAST] = 0;
+ m_ptr->mtimed[MTIMED_SLOW] = 0;
}
else
{
- rd_byte(&m_ptr->fast);
- rd_byte(&m_ptr->slow);
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_FAST] = (s16b)tmp8u;
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_SLOW] = (s16b)tmp8u;
}
- rd_byte(&m_ptr->stunned);
- rd_byte(&m_ptr->confused);
- rd_byte(&m_ptr->monfear);
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_STUNNED] = (s16b)tmp8u;
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)tmp8u;
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)tmp8u;
if (z_older_than(10,0,10))
{
rd_s16b(&m_ptr->target_x);
}
- rd_byte(&m_ptr->invulner);
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_INVULNER] = (s16b)tmp8u;
if (!(z_major == 2 && z_minor == 0 && z_patch == 6))
rd_u32b(&m_ptr->smart);
{
u32b flags;
char buf[128];
+ byte tmp8u;
if (h_older_than(1, 5, 0, 0))
{
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_u32b(&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_SUB_ALIGN) rd_byte(&m_ptr->sub_align);
else m_ptr->sub_align = 0;
- if (flags & SAVE_MON_CSLEEP) rd_s16b(&m_ptr->csleep);
- else m_ptr->csleep = 0;
+ if (flags & SAVE_MON_CSLEEP) rd_s16b(&m_ptr->mtimed[MTIMED_CSLEEP]);
+ else m_ptr->mtimed[MTIMED_CSLEEP] = 0;
rd_byte(&m_ptr->mspeed);
rd_s16b(&m_ptr->energy_need);
- if (flags & SAVE_MON_FAST) rd_byte(&m_ptr->fast);
- else m_ptr->fast = 0;
- if (flags & SAVE_MON_SLOW) rd_byte(&m_ptr->slow);
- else m_ptr->slow = 0;
- if (flags & SAVE_MON_STUNNED) rd_byte(&m_ptr->stunned);
- else m_ptr->stunned = 0;
- if (flags & SAVE_MON_CONFUSED) rd_byte(&m_ptr->confused);
- else m_ptr->confused = 0;
- if (flags & SAVE_MON_MONFEAR) rd_byte(&m_ptr->monfear);
- else m_ptr->monfear = 0;
+ if (flags & SAVE_MON_FAST)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_FAST] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_FAST] = 0;
+ if (flags & SAVE_MON_SLOW)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_SLOW] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_SLOW] = 0;
+ if (flags & SAVE_MON_STUNNED)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_STUNNED] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_STUNNED] = 0;
+ if (flags & SAVE_MON_CONFUSED)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_CONFUSED] = 0;
+ if (flags & SAVE_MON_MONFEAR)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_MONFEAR] = 0;
if (flags & SAVE_MON_TARGET_Y) rd_s16b(&m_ptr->target_y);
else m_ptr->target_y = 0;
if (flags & SAVE_MON_TARGET_X) rd_s16b(&m_ptr->target_x);
else m_ptr->target_x = 0;
- if (flags & SAVE_MON_INVULNER) rd_byte(&m_ptr->invulner);
- else m_ptr->invulner = 0;
+ if (flags & SAVE_MON_INVULNER)
+ {
+ rd_byte(&tmp8u);
+ m_ptr->mtimed[MTIMED_INVULNER] = (s16b)tmp8u;
+ }
+ else m_ptr->mtimed[MTIMED_INVULNER] = 0;
if (flags & SAVE_MON_SMART) rd_u32b(&m_ptr->smart);
else m_ptr->smart = 0;
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;
rd_s16b(&r_ptr->r_sights);
rd_s16b(&r_ptr->r_deaths);
rd_s16b(&r_ptr->r_pkills);
+ if (h_older_than(1, 7, 0, 5))
+ {
+ r_ptr->r_akills = r_ptr->r_pkills;
+ }
+ else
+ {
+ rd_s16b(&r_ptr->r_akills);
+ }
rd_s16b(&r_ptr->r_tkills);
/* Count wakes and ignores */
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;
}
}
}
}
- if ((p_ptr->pclass == CLASS_BARD) && p_ptr->magic_num1[0]) p_ptr->action = ACTION_SING;
+ if (music_singing_any()) p_ptr->action = ACTION_SING;
if (z_older_than(11, 0, 7))
{
/* 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);
{
/* Oops */
#ifdef JP
-note("»ý¤Áʪ¤ÎÃæ¤Î¥¢¥¤¥Æ¥à¤¬Â¿¤¹¤®¤ë¡ª");
+note("持ち物の中のアイテムが多すぎる!");
#else
note("Too many items in the inventory!");
#endif
/* Get a slot */
n = slot++;
+ /* Player touches it */
+ q_ptr->marked |= OM_TOUCHED;
+
/* Copy object */
object_copy(&inventory[n], q_ptr);
/* Old hidden trap flag */
#define CAVE_TRAP 0x8000
+/*** 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)
*
rd_s16b(&tmp16s); /* max_panel_cols */
#if 0
- if (!py || !px) {py = 10;px = 10;}/* ¥À¥ó¥¸¥ç¥óÀ¸À®¤Ë¼ºÇÔ¤·¤Æ¥»¥°¥á¥ó¥Æ¤Ã¤¿¤È¤¤ÎÉüµìÍÑ */
+ if (!py || !px) {py = 10;px = 10;}/* ダンジョン生成に失敗してセグメンテったときの復旧用 */
#endif
/* Maximal size */
c_ptr = &cave[y][x];
/* Very old */
- if (c_ptr->feat == FEAT_INVIS)
+ if (c_ptr->feat == OLD_FEAT_INVIS)
{
- c_ptr->feat = FEAT_FLOOR;
+ c_ptr->feat = feat_floor;
c_ptr->info |= CAVE_TRAP;
}
/* Older than 1.1.1 */
- if (c_ptr->feat == FEAT_MIRROR)
+ if (c_ptr->feat == OLD_FEAT_MIRROR)
{
- c_ptr->feat = FEAT_FLOOR;
+ c_ptr->feat = feat_floor;
c_ptr->info |= CAVE_OBJECT;
}
}
/* Old CAVE_IN_MIRROR flag */
if (c_ptr->info & CAVE_OBJECT)
{
- c_ptr->mimic = FEAT_MIRROR;
+ c_ptr->mimic = feat_mirror;
}
/* Runes will be mimics and flags */
- else if (c_ptr->feat == FEAT_MINOR_GLYPH ||
- c_ptr->feat == FEAT_GLYPH)
+ else if ((c_ptr->feat == OLD_FEAT_MINOR_GLYPH) ||
+ (c_ptr->feat == OLD_FEAT_GLYPH))
{
c_ptr->info |= CAVE_OBJECT;
c_ptr->mimic = c_ptr->feat;
- c_ptr->feat = FEAT_FLOOR;
+ c_ptr->feat = feat_floor;
}
/* Hidden traps will be trap terrains mimicing floor */
}
/* Another hidden trap */
- else if (c_ptr->feat == FEAT_INVIS)
+ else if (c_ptr->feat == OLD_FEAT_INVIS)
{
- c_ptr->mimic = FEAT_FLOOR;
- c_ptr->feat = FEAT_TRAP_OPEN;
+ c_ptr->mimic = feat_floor;
+ c_ptr->feat = feat_trap_open;
}
+ }
+ }
+
+ /* 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];
- /* Hidden doors will be closed doors mimicing wall */
- else if (c_ptr->feat == FEAT_SECRET)
+ if ((c_ptr->special == OLD_QUEST_WATER_CAVE) && !dun_level)
{
- place_closed_door(y, x);
- c_ptr->mimic = FEAT_WALL;
+ 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;
}
}
}
if (limit > max_o_idx)
{
#ifdef JP
-note(format("¥¢¥¤¥Æ¥à¤ÎÇÛÎó¤¬Â礤¹¤®¤ë(%d)¡ª", limit));
+note(format("アイテムの配列が大きすぎる(%d)!", limit));
#else
note(format("Too many (%d) object entries!", limit));
#endif
if (i != o_idx)
{
#ifdef JP
-note(format("¥¢¥¤¥Æ¥àÇÛÃÖ¥¨¥é¡¼ (%d <> %d)", i, o_idx));
+note(format("ã\82¢ã\82¤ã\83\86ã\83 é\85\8dç½®ã\82¨ã\83©ã\83¼ (%d <> %d)", i, o_idx));
#else
note(format("Object allocation error (%d <> %d)", i, o_idx));
#endif
if (limit > max_m_idx)
{
#ifdef JP
-note(format("¥â¥ó¥¹¥¿¡¼¤ÎÇÛÎó¤¬Â礤¹¤®¤ë(%d)¡ª", limit));
+note(format("モンスターの配列が大きすぎる(%d)!", limit));
#else
note(format("Too many (%d) monster entries!", limit));
#endif
/* Read the monsters */
for (i = 1; i < limit; i++)
{
- int m_idx, cmi;
+ int m_idx;
monster_type *m_ptr;
/* Get a new record */
if (i != m_idx)
{
#ifdef JP
-note(format("¥â¥ó¥¹¥¿¡¼ÇÛÃÖ¥¨¥é¡¼ (%d <> %d)", i, m_idx));
+note(format("ã\83¢ã\83³ã\82¹ã\82¿ã\83¼é\85\8dç½®ã\82¨ã\83©ã\83¼ (%d <> %d)", i, m_idx));
#else
note(format("Monster allocation error (%d <> %d)", i, m_idx));
#endif
/* Read the monster */
rd_monster(m_ptr);
- for (cmi = 0; cmi < MAX_MPROC; cmi++) m_ptr->mproc_idx[cmi] = 0;
- if (m_ptr->csleep) mproc_add(m_idx, MPROC_CSLEEP);
- if (m_ptr->fast) mproc_add(m_idx, MPROC_FAST);
- if (m_ptr->slow) mproc_add(m_idx, MPROC_SLOW);
- if (m_ptr->stunned) mproc_add(m_idx, MPROC_STUNNED);
- if (m_ptr->confused) mproc_add(m_idx, MPROC_CONFUSED);
- if (m_ptr->monfear) mproc_add(m_idx, MPROC_MONFEAR);
- if (m_ptr->invulner) mproc_add(m_idx, MPROC_INVULNER);
/* Access grid */
u32b tmp32u;
u16b limit;
- cave_template_type *template;
+ cave_template_type *templates;
/*** Wipe all cave ***/
rd_u16b(&limit);
/* Allocate the "template" array */
- C_MAKE(template, limit, cave_template_type);
+ C_MAKE(templates, limit, cave_template_type);
/* Read the templates */
for (i = 0; i < limit; i++)
{
- cave_template_type *ct_ptr = &template[i];
+ cave_template_type *ct_ptr = &templates[i];
/* Read it */
rd_u16b(&ct_ptr->info);
cave_type *c_ptr = &cave[y][x];
/* Extract cave data */
- c_ptr->info = template[id].info;
- c_ptr->feat = template[id].feat;
- c_ptr->mimic = template[id].mimic;
- c_ptr->special = template[id].special;
+ c_ptr->info = templates[id].info;
+ c_ptr->feat = templates[id].feat;
+ c_ptr->mimic = templates[id].mimic;
+ c_ptr->special = templates[id].special;
/* Advance/Wrap */
if (++x >= xmax)
}
}
+ /* 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(templates, limit, cave_template_type);
/*** Objects ***/
for (i = 1; i < limit; i++)
{
cave_type *c_ptr;
- int m_idx, cmi;
+ int m_idx;
monster_type *m_ptr;
/* Get a new record */
/* Read the monster */
rd_monster(m_ptr);
- for (cmi = 0; cmi < MAX_MPROC; cmi++) m_ptr->mproc_idx[cmi] = 0;
- if (m_ptr->csleep) mproc_add(m_idx, MPROC_CSLEEP);
- if (m_ptr->fast) mproc_add(m_idx, MPROC_FAST);
- if (m_ptr->slow) mproc_add(m_idx, MPROC_SLOW);
- if (m_ptr->stunned) mproc_add(m_idx, MPROC_STUNNED);
- if (m_ptr->confused) mproc_add(m_idx, MPROC_CONFUSED);
- if (m_ptr->monfear) mproc_add(m_idx, MPROC_MONFEAR);
- if (m_ptr->invulner) mproc_add(m_idx, MPROC_INVULNER);
/* Access grid */
{
case 151:
#ifdef JP
- note("¥¢¥¤¥Æ¥à¤ÎÇÛÎó¤¬Â礤¹¤®¤ë¡ª");
+ note("アイテムの配列が大きすぎる!");
#else
note("Too many object entries!");
#endif
case 152:
#ifdef JP
- note("¥¢¥¤¥Æ¥àÇÛÃÖ¥¨¥é¡¼");
+ note("ã\82¢ã\82¤ã\83\86ã\83 é\85\8dç½®ã\82¨ã\83©ã\83¼");
#else
note("Object allocation error");
#endif
case 161:
#ifdef JP
- note("¥â¥ó¥¹¥¿¡¼¤ÎÇÛÎó¤¬Â礤¹¤®¤ë¡ª");
+ note("モンスターの配列が大きすぎる!");
#else
note("Too many monster entries!");
#endif
case 162:
#ifdef JP
- note("¥â¥ó¥¹¥¿¡¼ÇÛÃÖ¥¨¥é¡¼");
+ note("ã\83¢ã\83³ã\82¹ã\82¿ã\83¼é\85\8dç½®ã\82¨ã\83©ã\83¼");
#else
note("Monster allocation error");
#endif
case 171:
#ifdef JP
- note("Êݸ¤µ¤ì¤¿¥Õ¥í¥¢¤Î¥À¥ó¥¸¥ç¥ó¥Ç¡¼¥¿¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡ª");
+ note("保存されたフロアのダンジョンデータが壊れています!");
#else
note("Dungeon data of saved floors are broken!");
#endif
case 182:
#ifdef JP
- note("¥Æ¥ó¥Ý¥é¥ê¡¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤¤Þ¤»¤ó¡ª");
+ note("テンポラリ・ファイルを作成できません!");
#else
note("Failed to make temporal files!");
#endif
/* Mention the savefile version */
note(format(
#ifdef JP
- "¥Ð¡¼¥¸¥ç¥ó %d.%d.%d ¤Î¥»¡¼¥Ö¡¦¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥ÉÃæ...",
+ "バージョン %d.%d.%d のセーブ・ファイルをロード中...",
#else
"Loading a %d.%d.%d savefile...",
#endif
/* Read RNG state */
rd_randomizer();
#ifdef JP
-if (arg_fiddle) note("Íð¿ô¾ðÊó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("乱数情報をロードしました");
#else
if (arg_fiddle) note("Loaded Randomizer Info");
#endif
/* Then the options */
rd_options();
#ifdef JP
-if (arg_fiddle) note("¥ª¥×¥·¥ç¥ó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("オプションをロードしました");
#else
if (arg_fiddle) note("Loaded Option Flags");
#endif
/* Then the "messages" */
rd_messages();
#ifdef JP
-if (arg_fiddle) note("¥á¥Ã¥»¡¼¥¸¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("メッセージをロードしました");
#else
if (arg_fiddle) note("Loaded Messages");
#endif
if (tmp16u > max_r_idx)
{
#ifdef JP
-note(format("¥â¥ó¥¹¥¿¡¼¤Î¼ï²¤¬Â¿¤¹¤®¤ë(%u)¡ª", tmp16u));
+note(format("モンスターの種族が多すぎる(%u)!", tmp16u));
#else
note(format("Too many (%u) monster races!", tmp16u));
#endif
}
#ifdef JP
-if (arg_fiddle) note("¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("モンスターの思い出をロードしました");
#else
if (arg_fiddle) note("Loaded Monster Memory");
#endif
if (tmp16u > max_k_idx)
{
#ifdef JP
-note(format("¥¢¥¤¥Æ¥à¤Î¼ïÎब¿¤¹¤®¤ë(%u)¡ª", tmp16u));
+note(format("アイテムの種類が多すぎる(%u)!", tmp16u));
#else
note(format("Too many (%u) object kinds!", tmp16u));
#endif
k_ptr->tried = (tmp8u & 0x02) ? TRUE: FALSE;
}
#ifdef JP
-if (arg_fiddle) note("¥¢¥¤¥Æ¥à¤ÎµÏ¿¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("アイテムの記録をロードしました");
#else
if (arg_fiddle) note("Loaded Object Memory");
#endif
-
- /* Init the wilderness seeds */
- for (i = 0; i < max_wild_x; i++)
- {
- for (j = 0; j < max_wild_y; j++)
- {
- wilderness[j][i].seed = randint0(0x10000000);
- }
- }
-
/* 2.1.3 or newer version */
{
u16b max_towns_load;
if (max_towns_load > max_towns)
{
#ifdef JP
-note(format("Ä®¤¬Â¿¤¹¤®¤ë(%u)¡ª", max_towns_load));
+note(format("町が多すぎる(%u)!", max_towns_load));
#else
note(format("Too many (%u) towns!", max_towns_load));
#endif
if (max_quests_load > max_quests)
{
#ifdef JP
-note(format("¥¯¥¨¥¹¥È¤¬Â¿¤¹¤®¤ë(%u)¡ª", max_quests_load));
+note(format("クエストが多すぎる(%u)!", max_quests_load));
#else
note(format("Too many (%u) quests!", max_quests_load));
#endif
{
if (i < max_quests)
{
- rd_s16b(&quest[i].status);
- rd_s16b(&quest[i].level);
+ quest_type* const q_ptr = &quest[i];
+
+ rd_s16b(&q_ptr->status);
+ rd_s16b(&q_ptr->level);
if (z_older_than(11, 0, 6))
{
- quest[i].complev = 0;
+ q_ptr->complev = 0;
+ }
+ else
+ {
+ rd_byte(&q_ptr->complev);
+ }
+ if(h_older_than(2, 1, 2, 2))
+ {
+ q_ptr->comptime = 0;
}
else
{
- rd_byte(&quest[i].complev);
+ rd_u32b(&q_ptr->comptime);
}
/* 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 ((q_ptr->status == QUEST_STATUS_TAKEN) ||
+ (!z_older_than(10, 3, 14) && (q_ptr->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);
- rd_s16b(&quest[i].type);
+ rd_s16b(&q_ptr->cur_num);
+ rd_s16b(&q_ptr->max_num);
+ rd_s16b(&q_ptr->type);
/* Load quest monster index */
- rd_s16b(&quest[i].r_idx);
+ rd_s16b(&q_ptr->r_idx);
- if ((quest[i].type == QUEST_TYPE_RANDOM) && (!quest[i].r_idx))
+ if ((q_ptr->type == QUEST_TYPE_RANDOM) && (!q_ptr->r_idx))
{
determine_random_questor(&quest[i]);
}
/* Load quest item index */
- rd_s16b(&quest[i].k_idx);
+ rd_s16b(&q_ptr->k_idx);
- if (quest[i].k_idx)
- a_info[quest[i].k_idx].gen_flags |= TRG_QUESTITEM;
+ if (q_ptr->k_idx)
+ a_info[q_ptr->k_idx].gen_flags |= TRG_QUESTITEM;
- rd_byte(&quest[i].flags);
+ rd_byte(&q_ptr->flags);
if (z_older_than(10, 3, 11))
{
- if (quest[i].flags & QUEST_FLAG_PRESET)
+ if (q_ptr->flags & QUEST_FLAG_PRESET)
{
- quest[i].dungeon = 0;
+ q_ptr->dungeon = 0;
}
else
{
}
else
{
- rd_byte(&quest[i].dungeon);
+ rd_byte(&q_ptr->dungeon);
}
/* Mark uniques */
- if (quest[i].status == QUEST_STATUS_TAKEN || quest[i].status == QUEST_STATUS_UNTAKEN)
- if (r_info[quest[i].r_idx].flags1 & RF1_UNIQUE)
- r_info[quest[i].r_idx].flags1 |= RF1_QUESTOR;
+ if (q_ptr->status == QUEST_STATUS_TAKEN || q_ptr->status == QUEST_STATUS_UNTAKEN)
+ if (r_info[q_ptr->r_idx].flags1 & RF1_UNIQUE)
+ r_info[q_ptr->r_idx].flags1 |= RF1_QUESTOR;
}
}
/* Ignore the empty quests from old versions */
}
}
+ /* 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);
if ((wild_x_size > max_wild_x) || (wild_y_size > max_wild_y))
{
#ifdef JP
-note(format("¹ÓÌÂ礤¹¤®¤ë(%u/%u)¡ª", wild_x_size, wild_y_size));
+note(format("荒野が大きすぎる(%u/%u)!", wild_x_size, wild_y_size));
#else
note(format("Wilderness is too big (%u/%u)!", wild_x_size, wild_y_size));
#endif
}
#ifdef JP
-if (arg_fiddle) note("¥¯¥¨¥¹¥È¾ðÊó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("クエスト情報をロードしました");
#else
if (arg_fiddle) note("Loaded Quests");
#endif
if (tmp16u > max_a_idx)
{
#ifdef JP
-note(format("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤¬Â¿¤¹¤®¤ë(%u)¡ª", tmp16u));
+note(format("伝説のアイテムが多すぎる(%u)!", tmp16u));
#else
note(format("Too many (%u) artifacts!", tmp16u));
#endif
}
}
#ifdef JP
-if (arg_fiddle) note("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("伝説のアイテムをロードしました");
#else
if (arg_fiddle) note("Loaded Artifacts");
#endif
if (p_ptr->energy_need < -999) world_player = TRUE;
#ifdef JP
-if (arg_fiddle) note("ÆÃÊ̾ðÊó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿");
+if (arg_fiddle) note("特別情報をロードしました");
#else
if (arg_fiddle) note("Loaded extra information");
#endif
if (tmp16u > PY_MAX_LEVEL)
{
#ifdef JP
-note(format("¥Ò¥Ã¥È¥Ý¥¤¥ó¥ÈÇÛÎó¤¬Â礤¹¤®¤ë(%u)¡ª", tmp16u));
+note(format("ヒットポイント配列が大きすぎる(%u)!", tmp16u));
#else
note(format("Too many (%u) hitpoint entries!", tmp16u));
#endif
if (rd_inventory())
{
#ifdef JP
-note("»ý¤Áʪ¾ðÊó¤òÆɤ߹þ¤à¤³¤È¤¬¤Ç¤¤Þ¤»¤ó");
+note("持ち物情報を読み込むことができません");
#else
note("Unable to read inventory");
#endif
{
/* Dead players have no dungeon */
#ifdef JP
-note("¥À¥ó¥¸¥ç¥óÉü¸µÃæ...");
+note("ダンジョン復元中...");
#else
note("Restoring Dungeon...");
#endif
if (rd_dungeon())
{
#ifdef JP
-note("¥À¥ó¥¸¥ç¥ó¥Ç¡¼¥¿Æɤ߹þ¤ß¼ºÇÔ");
+note("ダンジョンデータ読み込み失敗");
#else
note("Error reading dungeon data");
#endif
}
}
+ /* 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
if (o_v_check != n_v_check)
{
#ifdef JP
-note("¥Á¥§¥Ã¥¯¥µ¥à¤¬¤ª¤«¤·¤¤");
+note("チェックサムがおかしい");
#else
note("Invalid checksum");
#endif
if (o_x_check != n_x_check)
{
#ifdef JP
-note("¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Á¥§¥Ã¥¯¥µ¥à¤¬¤ª¤«¤·¤¤");
+note("エンコードされたチェックサムがおかしい");
#else
note("Invalid encoded checksum");
#endif