OSDN Git Service

This commit was manufactured by cvs2svn to create tag
[hengband/hengband.git] / src / load.c
index 8e4daf6..edc96de 100644 (file)
@@ -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
 }
 
@@ -1490,6 +1529,8 @@ static void rd_extra(void)
        rd_s32b(&p_ptr->au);
 
        rd_s32b(&p_ptr->max_exp);
+       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);
 
@@ -1642,20 +1683,14 @@ static void rd_extra(void)
        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);
-
-       if (tmp16s > MAX_BACT)
+       for (i = 0; i < tmp16s; i++)
        {
-#ifdef JP
-note(format("¤ÎÃæ", tmp16s));
-#else
-               note(format("Too many (%d) building rewards!", tmp16s));
-#endif
-
+               s16b tmp16s2;
+               rd_s16b(&tmp16s2);
        }
 
-       for (i = 0; i < tmp16s; i++) rd_s16b(&p_ptr->rewards[i]);
-
        rd_s16b(&p_ptr->mhp);
        rd_s16b(&p_ptr->chp);
        rd_u16b(&p_ptr->chp_frac);
@@ -1904,6 +1939,20 @@ note(format("
        rd_byte(&tmp8u);
        feeling = tmp8u;
 
+       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" */
        rd_s32b(&old_turn);
 
@@ -1960,7 +2009,7 @@ note(format("
 
        if (h_older_than(1, 5, 0, 2))
        {
-               C_WIPE(&party_mon[i], MAX_PARTY_MON, monster_type);
+               C_WIPE(party_mon, MAX_PARTY_MON, monster_type);
        }
        else
        {
@@ -3077,8 +3126,13 @@ 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();
@@ -3800,10 +3854,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)
        {
@@ -3869,6 +3944,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;
 }