X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fload.c;h=760524d9054e0d72721b7762f7b4a64d52187eeb;hb=eaecfec55c7d0b370f84b1a613dbb7bd44e533b0;hp=279e5e74fab7984b48415b35073d84292b981f7a;hpb=6d9947686e3c913c317b96a2eaa5944d4fba7c30;p=hengband%2Fhengband.git diff --git a/src/load.c b/src/load.c index 279e5e74f..760524d90 100644 --- a/src/load.c +++ b/src/load.c @@ -1,4 +1,4 @@ -/* File: load.c */ +/* File: load.c */ /* * Copyright (c) 1997 Ben Harrison, and others @@ -73,7 +73,14 @@ static u32b v_check = 0L; */ static u32b x_check = 0L; - +/* + * Hack -- Japanese Kanji code + * 0: Unknown + * 1: ASCII + * 2: EUC + * 3: SJIS + */ +static byte kanji_code = 0; /* * This function determines if the version of the savefile @@ -220,8 +227,40 @@ static void rd_string(char *str, int max) /* Terminate */ str[max-1] = '\0'; + + #ifdef JP - codeconv(str); + /* Convert Kanji code */ + switch (kanji_code) + { +#ifdef SJIS + case 2: + /* EUC to SJIS */ + euc2sjis(str); + break; +#endif + +#ifdef EUC + case 3: + /* SJIS to EUC */ + sjis2euc(str); + break; +#endif + + case 0: + { + /* 不明の漢字コードからシステムの漢字コードに変換 */ + byte code = codeconv(str); + + /* 漢字コードが判明したら、それを記録 */ + if (code) kanji_code = code; + + break; + } + default: + /* No conversion needed */ + break; + } #endif } @@ -324,13 +363,13 @@ static void rd_item_old(object_type *o_ptr) o_ptr->curse_flags |= TRC_CURSED; 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) + if (object_is_fixed_artifact(o_ptr)) { artifact_type *a_ptr = &a_info[o_ptr->name1]; if (a_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= TRC_HEAVY_CURSE; if (a_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE; } - else if (o_ptr->name2) + else if (object_is_ego(o_ptr)) { ego_item_type *e_ptr = &e_info[o_ptr->name2]; if (e_ptr->gen_flags & (TRG_HEAVY_CURSE)) o_ptr->curse_flags |= TRC_HEAVY_CURSE; @@ -388,14 +427,14 @@ static void rd_item_old(object_type *o_ptr) { switch (o_ptr->xtra2 % 8) { - case 0: add_flag(o_ptr->art_flags, TR_FEATHER); break; - case 1: add_flag(o_ptr->art_flags, TR_LITE); break; + case 0: add_flag(o_ptr->art_flags, TR_LEVITATION); 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; } @@ -430,7 +469,7 @@ static void rd_item_old(object_type *o_ptr) rd_byte(&o_ptr->xtra3); if (h_older_than(1, 3, 0, 1)) { - if (item_tester_hook_smith(o_ptr) && o_ptr->xtra3 >= 1+96) + if (object_is_smith(o_ptr) && o_ptr->xtra3 >= 1+96) o_ptr->xtra3 += -96 + MIN_SPECIAL_ESSENCE; } @@ -478,7 +517,7 @@ static void rd_item_old(object_type *o_ptr) } /* Paranoia */ - if (o_ptr->name1) + if (object_is_fixed_artifact(o_ptr)) { artifact_type *a_ptr; @@ -490,7 +529,7 @@ static void rd_item_old(object_type *o_ptr) } /* Paranoia */ - if (o_ptr->name2) + if (object_is_ego(o_ptr)) { ego_item_type *e_ptr; @@ -583,6 +622,8 @@ static void rd_item(object_type *o_ptr) 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; @@ -611,18 +652,74 @@ static void rd_item(object_type *o_ptr) 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); + } + } + } } @@ -666,7 +763,16 @@ static void rd_monster_old(monster_type *m_ptr) { 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)) { @@ -680,17 +786,22 @@ static void rd_monster_old(monster_type *m_ptr) 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)) { @@ -708,7 +819,8 @@ static void rd_monster_old(monster_type *m_ptr) 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); @@ -760,6 +872,7 @@ static void rd_monster(monster_type *m_ptr) { u32b flags; char buf[128]; + byte tmp8u; if (h_older_than(1, 5, 0, 0)) { @@ -781,6 +894,14 @@ static void rd_monster(monster_type *m_ptr) 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); @@ -789,31 +910,55 @@ static void rd_monster(monster_type *m_ptr) 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; @@ -829,10 +974,12 @@ static void rd_monster(monster_type *m_ptr) 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; + + if (flags & SAVE_MON_PARENT) rd_s16b(&m_ptr->parent_m_idx); + else m_ptr->parent_m_idx = 0; } @@ -892,6 +1039,14 @@ static void rd_lore(int r_idx) 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 */ @@ -999,7 +1154,7 @@ static void rd_lore(int r_idx) 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; @@ -1032,45 +1187,7 @@ static void home_carry(store_type *st_ptr, object_type *o_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_aware_p(o_ptr)) continue; - if (!object_aware_p(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_known_p(o_ptr)) continue; - if (!object_known_p(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 */ @@ -1198,9 +1315,6 @@ static void rd_randomizer(void) { rd_u32b(&Rand_state[i]); } - - /* Accept */ - Rand_quick = FALSE; } @@ -1245,6 +1359,17 @@ static void rd_options(void) rd_byte(&b); hitpoint_warn = b; + /* Read "mana_warn" */ + if(h_older_than(1, 7, 0, 0)) + { + mana_warn=2; + } + else + { + rd_byte(&b); + mana_warn = b; + } + /*** Cheating options ***/ @@ -1427,7 +1552,8 @@ static void load_quick_start(void) for (i = 0; i < 4; i++) rd_string(previous_char.history[i], sizeof(previous_char.history[i])); - rd_byte(&previous_char.quests); + /* UNUSED : Was number of random quests */ + rd_byte(&tmp8u); rd_byte(&tmp8u); previous_char.quick_ok = (bool)tmp8u; @@ -1442,11 +1568,21 @@ static void rd_extra(void) byte tmp8u; s16b tmp16s; + u16b tmp16u; rd_string(player_name, sizeof(player_name)); rd_string(p_ptr->died_from, sizeof(p_ptr->died_from)); + if (!h_older_than(1, 7, 0, 1)) + { + char buf[1024]; + + /* Read the message */ + rd_string(buf, sizeof buf); + if (buf[0]) p_ptr->last_message = string_make(buf); + } + load_quick_start(); for (i = 0; i < 4; i++) @@ -1493,7 +1629,16 @@ static void rd_extra(void) if (h_older_than(1, 5, 4, 1)) p_ptr->max_max_exp = p_ptr->max_exp; else rd_s32b(&p_ptr->max_max_exp); rd_s32b(&p_ptr->exp); - rd_u16b(&p_ptr->exp_frac); + + if (h_older_than(1, 7, 0, 3)) + { + rd_u16b(&tmp16u); + p_ptr->exp_frac = (u32b)tmp16u; + } + else + { + rd_u32b(&p_ptr->exp_frac); + } rd_s16b(&p_ptr->lev); @@ -1532,7 +1677,7 @@ static void rd_extra(void) } } } - 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)) { @@ -1638,33 +1783,55 @@ static void rd_extra(void) p_ptr->inside_battle = (bool)tmp16s; } rd_byte(&p_ptr->exit_bldg); - rd_byte(&p_ptr->leftbldg); + rd_byte(&tmp8u); rd_s16b(&p_ptr->oldpx); rd_s16b(&p_ptr->oldpy); if (z_older_than(10, 3, 13) && !dun_level && !p_ptr->inside_arena) {p_ptr->oldpy = 33;p_ptr->oldpx = 131;} + /* Was p_ptr->rewards[MAX_BACT] */ rd_s16b(&tmp16s); + for (i = 0; i < tmp16s; i++) + { + s16b tmp16s2; + rd_s16b(&tmp16s2); + } - if (tmp16s > MAX_BACT) + if (h_older_than(1, 7, 0, 3)) { -#ifdef JP -note(format("¤ÎÃæ", tmp16s)); -#else - note(format("Too many (%d) building rewards!", tmp16s)); -#endif + rd_s16b(&tmp16s); + p_ptr->mhp = tmp16s; + rd_s16b(&tmp16s); + p_ptr->chp = tmp16s; + + rd_u16b(&tmp16u); + p_ptr->chp_frac = (u32b)tmp16u; + } + else + { + rd_s32b(&p_ptr->mhp); + rd_s32b(&p_ptr->chp); + rd_u32b(&p_ptr->chp_frac); } - for (i = 0; i < tmp16s; i++) rd_s16b(&p_ptr->rewards[i]); + if (h_older_than(1, 7, 0, 3)) + { + rd_s16b(&tmp16s); + p_ptr->msp = tmp16s; - rd_s16b(&p_ptr->mhp); - rd_s16b(&p_ptr->chp); - rd_u16b(&p_ptr->chp_frac); + rd_s16b(&tmp16s); + p_ptr->csp = tmp16s; - rd_s16b(&p_ptr->msp); - rd_s16b(&p_ptr->csp); - rd_u16b(&p_ptr->csp_frac); + rd_u16b(&tmp16u); + p_ptr->csp_frac = (u32b)tmp16u; + } + else + { + rd_s32b(&p_ptr->msp); + rd_s32b(&p_ptr->csp); + rd_u32b(&p_ptr->csp_frac); + } rd_s16b(&p_ptr->max_plv); if (z_older_than(10, 3, 8)) @@ -1690,7 +1857,7 @@ note(format(" /* 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" */ @@ -1703,6 +1870,10 @@ note(format(" 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); @@ -1755,7 +1926,7 @@ note(format(" p_ptr->tim_regen = 0; p_ptr->kabenuke = 0; p_ptr->tim_stealth = 0; - p_ptr->tim_ffall = 0; + p_ptr->tim_levitation = 0; p_ptr->tim_sh_touki = 0; p_ptr->lightspeed = 0; p_ptr->tsubureru = 0; @@ -1770,7 +1941,7 @@ note(format(" p_ptr->multishadow = 0; p_ptr->dustrobe = 0; - p_ptr->chaos_patron = get_chaos_patron(); + p_ptr->chaos_patron = ((p_ptr->age + p_ptr->sc) % MAX_PATRON); p_ptr->muta1 = 0; p_ptr->muta2 = 0; p_ptr->muta3 = 0; @@ -1784,7 +1955,7 @@ note(format(" rd_s16b(&p_ptr->tim_regen); rd_s16b(&p_ptr->kabenuke); rd_s16b(&p_ptr->tim_stealth); - rd_s16b(&p_ptr->tim_ffall); + rd_s16b(&p_ptr->tim_levitation); rd_s16b(&p_ptr->tim_sh_touki); rd_s16b(&p_ptr->lightspeed); rd_s16b(&p_ptr->tsubureru); @@ -1869,7 +2040,10 @@ note(format(" rd_u32b(&p_ptr->special_defense); } rd_byte(&p_ptr->knowledge); - rd_byte(&tmp8u); /* oops */ + + rd_byte(&tmp8u); + p_ptr->autopick_autoregister = tmp8u ? TRUE : FALSE; + rd_byte(&tmp8u); /* oops */ rd_byte(&p_ptr->action); if (!z_older_than(10, 4, 3)) @@ -1903,12 +2077,35 @@ note(format(" p_ptr->is_dead = tmp8u; /* Read "feeling" */ - rd_byte(&tmp8u); - feeling = tmp8u; + 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 of last "feeling" */ + /* Turn when level began */ rd_s32b(&old_turn); + if (h_older_than(1, 7, 0, 4)) + { + p_ptr->feeling_turn = old_turn; + } + else + { + /* Turn of last "feeling" */ + rd_s32b(&p_ptr->feeling_turn); + } + /* Current turn */ rd_s32b(&turn); @@ -1921,6 +2118,7 @@ note(format(" if (z_older_than(11, 0, 13)) { old_turn /= 2; + p_ptr->feeling_turn /= 2; turn /= 2; dungeon_turn /= 2; } @@ -1962,47 +2160,20 @@ note(format(" if (h_older_than(1, 5, 0, 2)) { - C_WIPE(&party_mon[i], MAX_PARTY_MON, monster_type); + /* Nothing to do */ } else { - s16b max_num; - monster_type dummy_mon; - bool removed = FALSE; - + /* Get number of party_mon array */ rd_s16b(&tmp16s); - max_num = MIN(MAX_PARTY_MON, tmp16s); - /* Load temporary preserved pets */ - for (i = 0; i < max_num; i++) + /* Strip old temporary preserved pets */ + for (i = 0; i < tmp16s; i++) { - rd_monster(&party_mon[i]); - - /* Count */ - real_r_ptr(&party_mon[i])->cur_num++; - } + monster_type dummy_mon; - /* Remove excess pets */ - for (i = max_num; i < tmp16s; i++) - { rd_monster(&dummy_mon); - - if (dummy_mon.r_idx) - { - if (record_named_pet && dummy_mon.nickname) - { - char m_name[80]; - monster_desc(m_name, &dummy_mon, MD_INDEF_VISIBLE); - do_cmd_write_nikki(NIKKI_NAMED_PET, 5, m_name); - } - removed = TRUE; - } } -#ifdef JP - if (removed) note("°ì»þÊݸ¥Ú¥Ã¥È¤¬Â¿¤¹¤®¤ë¤Î¤Ç°ìÉôºï½ü¤·¤Þ¤¹¡£"); -#else - if (removed) note("Temporary pets are too many, so some are removed."); -#endif } if (z_older_than(10,1,2)) @@ -2088,6 +2259,9 @@ static errr rd_inventory(void) /* Wield equipment */ if (n >= INVEN_RARM) { + /* Player touches it */ + q_ptr->marked |= OM_TOUCHED; + /* Copy object */ object_copy(&inventory[n], q_ptr); @@ -2103,7 +2277,7 @@ static errr rd_inventory(void) { /* Oops */ #ifdef JP -note("»ý¤Áʪ¤ÎÃæ¤Î¥¢¥¤¥Æ¥à¤¬Â¿¤¹¤®¤ë¡ª"); +note("持ち物の中のアイテムが多すぎる!"); #else note("Too many items in the inventory!"); #endif @@ -2119,6 +2293,9 @@ note(" /* Get a slot */ n = slot++; + /* Player touches it */ + q_ptr->marked |= OM_TOUCHED; + /* Copy object */ object_copy(&inventory[n], q_ptr); @@ -2165,6 +2342,22 @@ static void rd_messages(void) /* 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) * @@ -2206,7 +2399,7 @@ static errr rd_dungeon_old(void) 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 */ @@ -2274,7 +2467,7 @@ static errr rd_dungeon_old(void) c_ptr = &cave[y][x]; /* Extract "feat" */ - c_ptr->feat = tmp8u; + c_ptr->feat = (s16b)tmp8u; /* Advance/Wrap */ if (++x >= xmax) @@ -2303,8 +2496,8 @@ static errr rd_dungeon_old(void) /* Access the cave */ c_ptr = &cave[y][x]; - /* Extract "feat" */ - c_ptr->mimic = tmp8u; + /* Extract "mimic" */ + c_ptr->mimic = (s16b)tmp8u; /* Advance/Wrap */ if (++x >= xmax) @@ -2366,16 +2559,16 @@ static errr rd_dungeon_old(void) 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; } } @@ -2391,16 +2584,16 @@ static errr rd_dungeon_old(void) /* 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 */ @@ -2412,17 +2605,39 @@ static errr rd_dungeon_old(void) } /* 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_EXTRA; + 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; } } } @@ -2436,7 +2651,7 @@ static errr rd_dungeon_old(void) 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 @@ -2459,7 +2674,7 @@ note(format(" if (i != o_idx) { #ifdef JP -note(format("¥¢¥¤¥Æ¥àÇÛÃÖ¥¨¥é¡¼ (%d <> %d)", i, o_idx)); +note(format("アイテム配置エラー (%d <> %d)", i, o_idx)); #else note(format("Object allocation error (%d <> %d)", i, o_idx)); #endif @@ -2516,7 +2731,7 @@ note(format(" 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 @@ -2537,7 +2752,7 @@ note(format(" if (i != m_idx) { #ifdef JP -note(format("¥â¥ó¥¹¥¿¡¼ÇÛÃÖ¥¨¥é¡¼ (%d <> %d)", i, m_idx)); +note(format("モンスター配置エラー (%d <> %d)", i, m_idx)); #else note(format("Monster allocation error (%d <> %d)", i, m_idx)); #endif @@ -2595,7 +2810,7 @@ static errr rd_saved_floor(saved_floor_type *sf_ptr) u32b tmp32u; u16b limit; - cave_template_type *template; + cave_template_type *templates; /*** Wipe all cave ***/ @@ -2652,7 +2867,7 @@ static errr rd_saved_floor(saved_floor_type *sf_ptr) rd_s16b(&cur_hgt); rd_s16b(&cur_wid); - rd_byte(&feeling); + rd_byte(&p_ptr->feeling); @@ -2662,17 +2877,27 @@ static errr rd_saved_floor(saved_floor_type *sf_ptr) 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); - rd_byte(&ct_ptr->feat); - rd_byte(&ct_ptr->mimic); + if (h_older_than(1, 7, 0, 2)) + { + rd_byte(&tmp8u); + ct_ptr->feat = (s16b)tmp8u; + rd_byte(&tmp8u); + ct_ptr->mimic = (s16b)tmp8u; + } + else + { + rd_s16b(&ct_ptr->feat); + rd_s16b(&ct_ptr->mimic); + } rd_s16b(&ct_ptr->special); } @@ -2705,10 +2930,10 @@ static errr rd_saved_floor(saved_floor_type *sf_ptr) 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) @@ -2722,8 +2947,37 @@ static errr rd_saved_floor(saved_floor_type *sf_ptr) } } + /* 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 ***/ @@ -2842,7 +3096,7 @@ static errr rd_dungeon(void) int i; /* Initialize saved_floors array and temporal files */ - init_saved_floors(); + init_saved_floors(FALSE); /* Older method */ if (h_older_than(1, 5, 0, 0)) @@ -2869,15 +3123,12 @@ static errr rd_dungeon(void) rd_byte(&dungeon_type); - /*** On the surface ***/ - if (!p_ptr->floor_id) - { - /* Number of array elements?? */ - rd_byte(&num); - - /* It should be 0 */ - if (num) err = 181; + /* Number of the saved_floors array elements */ + rd_byte(&num); + /*** No saved floor (On the surface etc.) ***/ + if (!num) + { /* Read the current floor data */ err = rd_saved_floor(NULL); } @@ -2885,8 +3136,6 @@ static errr rd_dungeon(void) /*** In the dungeon ***/ else { - /* Number of array elements */ - rd_byte(&num); /* Read the saved_floors array */ for (i = 0; i < num; i++) @@ -2908,7 +3157,7 @@ static errr rd_dungeon(void) { saved_floor_type *sf_ptr = &saved_floors[i]; byte tmp8u; - + /* Unused element */ if (!sf_ptr->floor_id) continue; @@ -2918,7 +3167,7 @@ static errr rd_dungeon(void) /* Read from the save file */ err = rd_saved_floor(sf_ptr); - + /* Error? */ if (err) break; @@ -2942,7 +3191,7 @@ static errr rd_dungeon(void) { case 151: #ifdef JP - note("¥¢¥¤¥Æ¥à¤ÎÇÛÎó¤¬Â礭¤¹¤®¤ë¡ª"); + note("アイテムの配列が大きすぎる!"); #else note("Too many object entries!"); #endif @@ -2950,7 +3199,7 @@ static errr rd_dungeon(void) case 152: #ifdef JP - note("¥¢¥¤¥Æ¥àÇÛÃÖ¥¨¥é¡¼"); + note("アイテム配置エラー"); #else note("Object allocation error"); #endif @@ -2958,7 +3207,7 @@ static errr rd_dungeon(void) case 161: #ifdef JP - note("¥â¥ó¥¹¥¿¡¼¤ÎÇÛÎó¤¬Â礭¤¹¤®¤ë¡ª"); + note("モンスターの配列が大きすぎる!"); #else note("Too many monster entries!"); #endif @@ -2966,7 +3215,7 @@ static errr rd_dungeon(void) case 162: #ifdef JP - note("¥â¥ó¥¹¥¿¡¼ÇÛÃÖ¥¨¥é¡¼"); + note("モンスター配置エラー"); #else note("Monster allocation error"); #endif @@ -2974,23 +3223,15 @@ static errr rd_dungeon(void) case 171: #ifdef JP - note("Êݸ¤µ¤ì¤¿¥Õ¥í¥¢¤Î¥À¥ó¥¸¥ç¥ó¥Ç¡¼¥¿¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡ª"); + note("保存されたフロアのダンジョンデータが壊れています!"); #else note("Dungeon data of saved floors are broken!"); #endif break; - case 181: -#ifdef JP - note("Error 181"); -#else - note("Error 181"); -#endif - break; - case 182: #ifdef JP - note("¥Æ¥ó¥Ý¥é¥ê¡¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡ª"); + note("テンポラリ・ファイルを作成できません!"); #else note("Failed to make temporal files!"); #endif @@ -3037,7 +3278,7 @@ static errr rd_savefile_new_aux(void) /* Mention the savefile version */ note(format( #ifdef JP - "¥Ð¡¼¥¸¥ç¥ó %d.%d.%d ¤Î¥»¡¼¥Ö¡¦¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥ÉÃæ...", + "バージョン %d.%d.%d のセーブ・ファイルをロード中...", #else "Loading a %d.%d.%d savefile...", #endif @@ -3079,13 +3320,18 @@ static errr rd_savefile_new_aux(void) rd_u32b(&tmp32u); /* Later use (always zero) */ - rd_u32b(&tmp32u); + rd_u16b(&tmp16u); + + /* Later use (always zero) */ + rd_byte(&tmp8u); + /* Kanji code */ + rd_byte(&kanji_code); /* Read RNG state */ rd_randomizer(); #ifdef JP -if (arg_fiddle) note("Íð¿ô¾ðÊó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("乱数情報をロードしました"); #else if (arg_fiddle) note("Loaded Randomizer Info"); #endif @@ -3095,7 +3341,7 @@ if (arg_fiddle) note(" /* Then the options */ rd_options(); #ifdef JP -if (arg_fiddle) note("¥ª¥×¥·¥ç¥ó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("オプションをロードしました"); #else if (arg_fiddle) note("Loaded Option Flags"); #endif @@ -3103,7 +3349,7 @@ if (arg_fiddle) note(" /* Then the "messages" */ rd_messages(); #ifdef JP -if (arg_fiddle) note("¥á¥Ã¥»¡¼¥¸¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("メッセージをロードしました"); #else if (arg_fiddle) note("Loaded Messages"); #endif @@ -3131,7 +3377,7 @@ if (arg_fiddle) note(" 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 @@ -3147,7 +3393,7 @@ note(format(" } #ifdef JP -if (arg_fiddle) note("¥â¥ó¥¹¥¿¡¼¤Î»×¤¤½Ð¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("モンスターの思い出をロードしました"); #else if (arg_fiddle) note("Loaded Monster Memory"); #endif @@ -3161,7 +3407,7 @@ if (arg_fiddle) note(" 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 @@ -3181,39 +3427,11 @@ note(format(" 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 - -#if 0 - /* - * Initialize arena and rewards information - */ - p_ptr->arena_number = 0; - p_ptr->inside_arena = 0; - p_ptr->inside_quest = 0; - p_ptr->leftbldg = FALSE; - p_ptr->exit_bldg = TRUE; - - /* Start in town 1 */ - p_ptr->town_num = 1; - - p_ptr->wilderness_x = 4; - p_ptr->wilderness_y = 4; - -#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; @@ -3228,7 +3446,7 @@ if (arg_fiddle) note(" 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 @@ -3252,7 +3470,7 @@ note(format("Ä® 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 @@ -3264,46 +3482,58 @@ note(format(" { 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 { @@ -3316,12 +3546,12 @@ note(format(" } 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 */ @@ -3340,6 +3570,13 @@ note(format(" } } + /* 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); @@ -3362,7 +3599,7 @@ note(format(" 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 @@ -3381,7 +3618,7 @@ note(format(" } #ifdef JP -if (arg_fiddle) note("¥¯¥¨¥¹¥È¾ðÊó¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("クエスト情報をロードしました"); #else if (arg_fiddle) note("Loaded Quests"); #endif @@ -3393,7 +3630,7 @@ if (arg_fiddle) note(" if (tmp16u > max_a_idx) { #ifdef JP -note(format("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤¬Â¿¤¹¤®¤ë(%u)¡ª", tmp16u)); +note(format("伝説のアイテムが多すぎる(%u)!", tmp16u)); #else note(format("Too many (%u) artifacts!", tmp16u)); #endif @@ -3423,7 +3660,7 @@ note(format(" } } #ifdef JP -if (arg_fiddle) note("ÅÁÀâ¤Î¥¢¥¤¥Æ¥à¤ò¥í¡¼¥É¤·¤Þ¤·¤¿"); +if (arg_fiddle) note("伝説のアイテムをロードしました"); #else if (arg_fiddle) note("Loaded Artifacts"); #endif @@ -3435,7 +3672,7 @@ if (arg_fiddle) note(" 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 @@ -3448,7 +3685,7 @@ if (arg_fiddle) note(" 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 @@ -3536,7 +3773,7 @@ note(format(" if (rd_inventory()) { #ifdef JP -note("»ý¤Áʪ¾ðÊó¤òÆɤ߹þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó"); +note("持ち物情報を読み込むことができません"); #else note("Unable to read inventory"); #endif @@ -3620,7 +3857,7 @@ note(" { /* Dead players have no dungeon */ #ifdef JP -note("¥À¥ó¥¸¥ç¥óÉü¸µÃæ..."); +note("ダンジョン復元中..."); #else note("Restoring Dungeon..."); #endif @@ -3628,7 +3865,7 @@ note(" if (rd_dungeon()) { #ifdef JP -note("¥À¥ó¥¸¥ç¥ó¥Ç¡¼¥¿Æɤ߹þ¤ß¼ºÇÔ"); +note("ダンジョンデータ読み込み失敗"); #else note("Error reading dungeon data"); #endif @@ -3647,6 +3884,17 @@ note(" } } + /* 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 @@ -3660,7 +3908,7 @@ note(" if (o_v_check != n_v_check) { #ifdef JP -note("¥Á¥§¥Ã¥¯¥µ¥à¤¬¤ª¤«¤·¤¤"); +note("チェックサムがおかしい"); #else note("Invalid checksum"); #endif @@ -3680,7 +3928,7 @@ note(" if (o_x_check != n_x_check) { #ifdef JP -note("¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Á¥§¥Ã¥¯¥µ¥à¤¬¤ª¤«¤·¤¤"); +note("エンコードされたチェックサムがおかしい"); #else note("Invalid encoded checksum"); #endif @@ -3802,10 +4050,31 @@ bool load_floor(saved_floor_type *sf_ptr, u32b mode) byte old_h_ver_minor = 0; byte old_h_ver_patch = 0; byte old_h_ver_extra = 0; - + bool ok = TRUE; char floor_savefile[1024]; + byte old_kanji_code = kanji_code; + + /* + * Temporal files are always written in system depended kanji + * code. + */ +#ifdef JP +# ifdef EUC + /* EUC kanji code */ + kanji_code = 2; +# endif +# ifdef SJIS + /* SJIS kanji code */ + kanji_code = 3; +# endif +#else + /* ASCII */ + kanji_code = 1; +#endif + + /* We have one file already opened */ if (mode & SLF_SECOND) { @@ -3871,6 +4140,9 @@ bool load_floor(saved_floor_type *sf_ptr, u32b mode) h_ver_extra = old_h_ver_extra; } + /* Restore old knowledge */ + kanji_code = old_kanji_code; + /* Result */ return ok; }