OSDN Git Service

Thrown torch's dice is changed
[hengband/hengband.git] / src / birth.c
index d26aca8..c5f2cd7 100644 (file)
@@ -1,11 +1,11 @@
 /* Purpose: create a player character */
 
 /*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
+ * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
  *
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
+ * This software may be copied and distributed for educational, research,
+ * and not for profit purposes provided that this copyright and statement
+ * are included in all such copies.  Other copyrights may also apply.
  */
 
 #include "angband.h"
@@ -728,7 +728,7 @@ static hist_type bg[] =
 
 
 #ifdef JP
-       {"¤¢¤Ê¤¿¤Ï½÷²¦¥¯¥é¥³¥ó¤Î²¿¿Í¤«¤Î»Ò¶¡¤Î¤¦¤Á¤Î°ì¿Í¤Ç¤¹¡£"
+       {"¤¢¤Ê¤¿¤Ï½÷²¦¥¯¥é¥å³¥ó¤Î²¿¿Í¤«¤Î»Ò¶¡¤Î¤¦¤Á¤Î°ì¿Í¤Ç¤¹¡£"
        , 100, 84, 85, 50 },
 
        {"¤¢¤Ê¤¿¤ÏÀÖ¤¤È©¤È", 40, 85, 86, 50 },
@@ -1246,15 +1246,15 @@ static hist_type bg[] =
 
 
 #ifdef JP
-        {"»³ÍÓ¤ÎÄý¤¬¤¢¤ê¤Þ¤¹¡£",      50, 133, 0, 50 },
-        {"¿Í´Ö¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",  75, 133, 0, 50 },
-        {"Ä»¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    85, 133, 0, 50 },
-        {"à¨ÃîÎà¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",90, 133, 0, 50 },
-        {"µí¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    95, 133, 0, 50 },
-        {"Ç­¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    97, 133, 0, 50 },
-        {"¸¤¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",   100, 133, 0, 50 },
+       {"»³ÍÓ¤ÎÄý¤¬¤¢¤ê¤Þ¤¹¡£",      50, 133, 0, 50 },
+       {"¿Í´Ö¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",  75, 133, 0, 50 },
+       {"Ä»¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    85, 133, 0, 50 },
+       {"à¨ÃîÎà¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",90, 133, 0, 50 },
+       {"µí¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    95, 133, 0, 50 },
+       {"Ç­¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",    97, 133, 0, 50 },
+       {"¸¤¤Î­¤¬À¸¤¨¤Æ¤¤¤Þ¤¹¡£",   100, 133, 0, 50 },
 
-        {"¤¢¤Ê¤¿¤Ï", 100, 134, 120, 50 },
+       {"¤¢¤Ê¤¿¤Ï", 100, 134, 120, 50 },
 #else
        {"and the hooves of a goat.",      50, 133, 0, 50 },
        {"and human feet.",        75, 133, 0, 50 },
@@ -1353,7 +1353,7 @@ static hist_type bg[] =
        {"¤¢¤Ê¤¿¤Ï°­¤òÌǤܤ¹¤¿¤á¤Ë¤³¤ÎÃϤËÁ÷¤é¤ì¤Æ¤­¤Þ¤·¤¿¡£", 100, 143, 144, 80},
        {"¤³¤ÎÌÜŪ¤òÀ®¤·¿ë¤²¤ë¤Þ¤Ç¤ÏµÙ¤à¤³¤È¤Ïµö¤µ¤ì¤Þ¤»¤ó¡£", 100, 144, 0, 80},
 #else
-       {"You are of the blessed host of heaven.", 100, 142, 143, 80},
+       {"You are of the blessed host of heaven.  ", 100, 142, 143, 80},
        {"You have been sent to earth to eradicate the wicked, ", 100, 143, 144, 80},
        {"and shall not rest until you have succeeded.", 100, 144, 0, 80},
 #endif
@@ -1619,7 +1619,7 @@ static cptr race_jouhou[MAX_RACES] =
   
 "¥¨¥ë¥Õ¤Ï¿Í´Ö¤è¤êÎɤ¤ËâË¡»È¤¤¤Ë¤Ê¤ì¤Þ¤¹¤¬¡¢ÀïÆ®¤Ï¶ì¼ê¤Ç¤¹¡£Èà¤é¤Ï¿Í´Ö¤ä¥Ï¡¼¥Õ¥¨¥ë¥Õ¤è¤ê¤âƬ¤¬Îɤ¯¡¢¹â¤¤¸­¤µ¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥¨¥ë¥Õ¤Ïõº÷, ²ò½ü, ÃγÐ, ±£Ì©¹ÔÆ°, ¼Í·â, ¤½¤·¤ÆËâË¡Æ»¶ñ»ÈÍѤÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢Éð´ï¤Î°·¤¤¤ÏÆÀ°Õ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£Èà¤é¤ÏÀ¸¤Þ¤ì¤Ä¤­¸÷¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£",
   
-"¥Û¥Ó¥Ã¥È¡¢¤Þ¤¿¤Ï¥Ï¡¼¥Õ¥ê¥ó¥°¤ÏµÝ¤äÅêÚ³¤ËŤ±¡¢ËâË¡Ëɸæ¤âÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢Ãµº÷, ²ò½ü, ÃγÐ, ¤½¤·¤Æ±£Ì©¹ÔÆ°¤Ç¤â¤È¤Æ¤âÎɤ¤Ç½ÎϤò¼¨¤·¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Èà¤é¤ÏÍ¥¤ì¤¿Åð±¤È¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡Ê¤·¤«¤·¡¢¡ÖǦ¤Ó¤Î¼Ô¡×¤È¸Æ¤Ð¤ì¤ë¤³¤È¤ò¹¥¤ß¤Þ¤¹¡Ë¡£¥Û¥Ó¥Ã¥È¤Ï¿Í´Ö¤è¤êÍÚ¤«¤ËÉϼå¤Ç¡¢Àï»Î¤È¤·¤Æ¤Ï¤Æ¤ó¤Ç¥À¥á¤Ç¤¹¡£Èà¤é¤Ï¤«¤Ê¤êÎɤ¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤ª¤ê¡¢²¹·ìưʪ¤òÎ¥¤ì¤¿¾ì½ê¤«¤é¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥Û¥Ó¥Ã¥È¤Ï´ïÍѤµ¤ò²¼¤²¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£",
+"¥Û¥Ó¥Ã¥È¡¢¤Þ¤¿¤Ï¥Ï¡¼¥Õ¥ê¥ó¥°¤ÏµÝ¤äÅêÚ³¤ËŤ±¡¢ËâË¡Ëɸæ¤âÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢Ãµº÷, ²ò½ü, ÃγÐ, ¤½¤·¤Æ±£Ì©¹ÔÆ°¤Ç¤â¤È¤Æ¤âÎɤ¤Ç½ÎϤò¼¨¤·¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Èà¤é¤ÏÍ¥¤ì¤¿Åð±¤È¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡Ê¤·¤«¤·¡¢¡ÖǦ¤Ó¤Î¼Ô¡×¤È¸Æ¤Ð¤ì¤ë¤³¤È¤ò¹¥¤ß¤Þ¤¹¡Ë¡£¥Û¥Ó¥Ã¥È¤Ï¿Í´Ö¤è¤êÍÚ¤«¤ËÉϼå¤Ç¡¢Àï»Î¤È¤·¤Æ¤Ï¤Æ¤ó¤Ç¥À¥á¤Ç¤¹¡£Èà¤é¤Ï¤«¤Ê¤êÎɤ¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤ª¤ê¡¢²¹·ìưʪ¤òÎ¥¤ì¤¿¾ì½ê¤«¤é¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Èà¤é¤ÏÀ¸Ì¿ÎϤòÊÝ»ý¤¹¤ëÎϤ¬¶¯¤¯¡¢À¸Ì¿Îϵۼý¹¶·â¤ËÂФ·¤ÆÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£",
   
 "¥Î¡¼¥à¤Ï¥É¥ï¡¼¥Õ¤è¤ê¾®¤µ¤¤¤Ç¤¹¤¬¡¢¥Û¥Ó¥Ã¥È¤è¤ê¤ÏÂ礭¤¤¼ï²¤Ç¤¹¡£Èà¤é¤Ï¥Û¥Ó¥Ã¥ÈƱÍÍÃÏɽ¤Îƶ·ê¤Î¤è¤¦¤Ê²È¤Ë½»¤ó¤Ç¤¤¤Þ¤¹¡£¥Î¡¼¥à¤Ï¤È¤Æ¤âÎɤ¤ËâË¡Ëɸæ¤ò»ý¤Á¡¢Ãµº÷, ²ò½ü, ÃγÐ, ±£Ì©¹ÔÆ°¤Ç¤âÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ï¿Í´Ö¤è¤êÄ㤤ÏÓÎϤò»ý¤Á¡¢Éð´ï¤ò»ý¤Ã¤Æ¤ÎÀïÆ®¤Ï¶ì¼ê¤Ç¤¹¡£¥Î¡¼¥à¤Ï¤«¤Ê¤êÎɤ¤ÀÖ³°Àþ»ëÎϤò»ý¤Ã¤Æ¤ª¤ê¡¢²¹·ìưʪ¤òÎ¥¤ì¤¿¾ì½ê¤«¤é¸«¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥Î¡¼¥à¤ÏÀ¸¤Þ¤ì¤Ä¤­Ëãáã¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£",
   
@@ -1659,25 +1659,25 @@ static cptr race_jouhou[MAX_RACES] =
   
 "ÃϹö¤«¤é¤ä¤Ã¤Æ¤­¤¿°­ËâŪ¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤«¤éÌÓ·ù¤¤¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÂçÄñ¤Î¿¦¶È¤ò¤«¤Ê¤ê¤¦¤Þ¤¯¤³¤Ê¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥¤¥ó¥×¤ÏÀ¸¤Þ¤ì¤Ä¤­²Ð¤ËÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£",
   
-"¥´¡¼¥ì¥à¤ÏÅ¥¤Î¤è¤¦¤ÊÀ¸Ì¿¤Î¤Ê¤¤ºàÎÁ¤«¤é¤Ä¤¯¤é¤ì¡¢À¸Ì¿¤ò¿á¤­¹þ¤Þ¤ì¤¿¿Í¹©Åª¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ë¤Ï»×¹Í¤È¤¤¤¦¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¤½¤Î¤¿¤áËâË¡¤Ë°Í¸¤¹¤ë¿¦¶È¤Ç¤ÏÌòΩ¤¿¤º¤Ç¤¹¡£¤·¤«¤·Àï»Î¤È¤·¤Æ¤ÏÂçÊѤ˥¿¥Õ¤Ç¤¹¡£Èà¤é¤ÏÆǤËÂÑÀ­¤ò»ý¤Á¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤ËËãáãÃΤ餺¤Ç¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢Èà¤é¤ÏÀ¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Ä¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥´¡¼¥ì¥à¤ÏÄ̾ï¤Î¿©Êª¤«¤é¤Ï¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¾Ã²½¤Ë¤Ï»þ´Ö¤¬¤«¤«¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤Î´è¾æ¤Ê¿ÈÂΤΤ¿¤á¡¢AC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤Ë·è¤·¤Æµ¤À䤵¤»¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£",
+"¥´¡¼¥ì¥à¤ÏÅ¥¤Î¤è¤¦¤ÊÀ¸Ì¿¤Î¤Ê¤¤ºàÎÁ¤«¤é¤Ä¤¯¤é¤ì¡¢À¸Ì¿¤ò¿á¤­¹þ¤Þ¤ì¤¿¿Í¹©Åª¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ë¤Ï»×¹Í¤È¤¤¤¦¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¤½¤Î¤¿¤áËâË¡¤Ë°Í¸¤¹¤ë¿¦¶È¤Ç¤ÏÌòΩ¤¿¤º¤Ç¤¹¡£¤·¤«¤·Àï»Î¤È¤·¤Æ¤ÏÂçÊѤ˥¿¥Õ¤Ç¤¹¡£Èà¤é¤ÏÆǤËÂÑÀ­¤ò»ý¤Á¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤ËËãáãÃΤ餺¤Ç¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢Èà¤é¤ÏÀ¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Ä¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥´¡¼¥ì¥à¤ÏÄ̾ï¤Î¿©Êª¤«¤é¤Ï¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤ÆÆ°Îϸ»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤Î´è¾æ¤Ê¿ÈÂΤΤ¿¤á¡¢AC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤Ë·è¤·¤Æµ¤À䤵¤»¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£",
   
-"¥¹¥±¥ë¥È¥ó¤Ë¤Ï2¤Ä¤Î¥¿¥¤¥×¤¬Â¸ºß¤·¤Þ¤¹¡£ÉáÄ̤ÎÀï»Î¥¿¥¤¥×¤È¡¢¥ê¥Ã¥Á¤È¸Æ¤Ð¤ì¤ë¼öʸ¤ò»È¤¦¥¹¥±¥ë¥È¥ó¤Ç¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÆǤäÀ¸Ì¿Îϵۼý¹¶·â¤ò¿´ÇÛ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£Èà¤é¤ÏʪÂΤòÃγФ¹¤ë¤Î¤Ë´ã¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¸«¤¨¤Ê¤¤Êª¤ËñÙ¤µ¤ì¤Þ¤»¤ó¡£Èà¤é¤Î¹ü¤Ï¤È¤¬¤Ã¤¿ÇËÊҤΤ褦¤Ê¤â¤Î¤ËÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£Ìô¤ä¿©Êª¤Î»ý¤Ä¸ú²Ì¤Ï¥¹¥±¥ë¥È¥ó¤Î°ß¡Ê¸ºß¤·¤Þ¤»¤ó¤¬¡Ë¤òÄ̲᤹¤ë¤³¤È¤Ê¤¯¤½¤ÎÎϤòȯ´ø¤·¤Þ¤¹¤¬¡¢Ìô¤ä¿©Êª¼«ÂΤÏÈà¤Î³Ü¤òÄ̤êÈ´¤±¤ÆÍî¤Á¤Æ¤·¤Þ¤¤¡¢±ÉÍܤòµÛ¼ý¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£",
+"¥¹¥±¥ë¥È¥ó¤Ë¤Ï2¤Ä¤Î¥¿¥¤¥×¤¬Â¸ºß¤·¤Þ¤¹¡£ÉáÄ̤ÎÀï»Î¥¿¥¤¥×¤È¡¢¥ê¥Ã¥Á¤È¸Æ¤Ð¤ì¤ë¼öʸ¤ò»È¤¦¥¹¥±¥ë¥È¥ó¤Ç¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÆǤäÀ¸Ì¿Îϵۼý¹¶·â¤ò¿´ÇÛ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£Èà¤é¤ÏʪÂΤòÃγФ¹¤ë¤Î¤Ë´ã¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¸«¤¨¤Ê¤¤Êª¤ËñÙ¤µ¤ì¤Þ¤»¤ó¡£Èà¤é¤Î¹ü¤Ï¤È¤¬¤Ã¤¿ÇËÊҤΤ褦¤Ê¤â¤Î¤ËÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£Ìô¤ä¿©Êª¤Î»ý¤Ä¸ú²Ì¤Ï¥¹¥±¥ë¥È¥ó¤Î°ß¡Ê¸ºß¤·¤Þ¤»¤ó¤¬¡Ë¤òÄ̲᤹¤ë¤³¤È¤Ê¤¯¤½¤ÎÎϤòȯ´ø¤·¤Þ¤¹¤¬¡¢Ìô¤ä¿©Êª¼«ÂΤÏÈà¤Î³Ü¤òÄ̤êÈ´¤±¤ÆÍî¤Á¤Æ¤·¤Þ¤¤¡¢±ÉÍܤòµÛ¼ý¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤½¤ÎÂå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
-"¥¾¥ó¥Ó¤Ï¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ê¡¢À¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Á¡¢¥¹¥±¥ë¥È¥ó¤Î¤è¤¦¤Ë¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ÎÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÆǤËÂÑÀ­¤ò»ý¤Á¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¡Ê¥¹¥±¥ë¥È¥ó¤È¤Ï°ã¤¤¡ËÀڤ빶·â¤Ë¤Ï¼å¤¤¤Ç¤¹¤¬¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥´¡¼¥ì¥à¤Î¤è¤¦¤Ë¡¢Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¾Ã²½µÛ¼ý¤ÏÃÙ¤¤¤Ç¤¹¡£",
+"¥¾¥ó¥Ó¤Ï¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ê¡¢À¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Á¡¢¥¹¥±¥ë¥È¥ó¤Î¤è¤¦¤Ë¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ÎÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÆǤËÂÑÀ­¤ò»ý¤Á¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¡Ê¥¹¥±¥ë¥È¥ó¤È¤Ï°ã¤¤¡ËÀڤ빶·â¤Ë¤Ï¼å¤¤¤Ç¤¹¤¬¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥´¡¼¥ì¥à¤Î¤è¤¦¤Ë¡¢Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
 "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¢¤ëµÛ·ìµ´¤Ï¡¢°Ú·É¤ÎÇ°¤ò¸Æ¤Óµ¯¤³¤¹³°¸«¤ò¤·¤Æ¤¤¤Þ¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤ÎÎã¤Ë¤â¤ì¤º¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢Î䵤¤ÈÆǤËÂФ¹¤ëÂÑÀ­¤âÈ÷¤¨¤Æ¤¤¤Þ¤¹¡£¤·¤«¤·¡¢¿·Á¯¤Ê·ì±Õ¤Ë¾ï¤Ëµ²¤¨¤Æ¤ª¤ê¡¢¤½¤ì¤Ï¶á¤¯¤Ë¤¤¤ëÀ¸Êª¤«¤é·ì±Õ¤òµÛ¤¦¤³¤È¤Ë¤è¤Ã¤Æ¤Î¤ßËþ¤¿¤µ¤ì¤Þ¤¹¡£¤³¤Î¶¯ÎϤÊÀ¸Êª¤Ï¿¼¹ï¤Ê¼åÅÀ¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£ÂÀÍÛ¸÷Àþ¡Ê¤ä¸÷¸»¡Ë¤ÏÈà¤é¤ÎÇËÌǤò°ÕÌ£¤·¤Þ¤¹¡£¹¬±¿¤Ë¤â¡¢µÛ·ìµ´¤Ï¤½¤Î¿ÈÂΤ«¤é¡Ö°Å¹õ¤Î¸÷¡×¤Î¥ª¡¼¥é¤òÊü½Ð¤·¤Æ¤¤¤Þ¤¹¡£°ìÊý¡¢°Å°Ç¤ÏÈà¤é¤ò¤è¤ê¶¯ÎϤˤ¹¤ë¤â¤Î¤Ç¤¹¡£",
   
-"Í©Îî¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¹¡£Èà¤é¤ÏÉÔµ¤Ì£¤ÊÎп§¤Î¸÷¤ËÊñ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£È¾Êª¼ÁŪ¤Ê¸ºß¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¤È¤­¤Ë¤ÏÊɤÎÌ©Å٤ˤè¤Ã¤Æ½ý¤Ä¤±¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Â¾¤Î¥¢¥ó¥Ç¥Ã¥ÉƱÍÍ¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢ÆǤÈÎ䵤¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¡¢¤µ¤é¤ËÃϹö¤ËÂФ¹¤ëÂÑÀ­¤â»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬½½Ê¬¤Ë¾å¤¬¤ë¤ÈÈà¤é¤Ï¥Æ¥ì¥Ñ¥·¡¼¤ò³ÍÆÀ¤·¤Þ¤¹¡£Í©Îî¤ÏÂî±Û¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¿ÈÂÎŪÆÃÀ­¤ÏÈó¾ï¤ËÉϼå¤Ç¤¹¡£",
+"Í©Îî¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¹¡£Èà¤é¤ÏÉÔµ¤Ì£¤ÊÎп§¤Î¸÷¤ËÊñ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£È¾Êª¼ÁŪ¤Ê¸ºß¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¤È¤­¤Ë¤ÏÊɤÎÌ©Å٤ˤè¤Ã¤Æ½ý¤Ä¤±¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Â¾¤Î¥¢¥ó¥Ç¥Ã¥ÉƱÍÍ¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢ÆǤÈÎ䵤¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¡¢¤µ¤é¤ËÃϹö¤ËÂФ¹¤ëÂÑÀ­¤â»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬½½Ê¬¤Ë¾å¤¬¤ë¤ÈÈà¤é¤Ï¥Æ¥ì¥Ñ¥·¡¼¤ò³ÍÆÀ¤·¤Þ¤¹¡£Í©Îî¤ÏÂî±Û¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¿ÈÂÎŪÆÃÀ­¤ÏÈó¾ï¤ËÉϼå¤Ç¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
 "ÍÅÀº¤ÏÈó¾ï¤Ë¾®¤µ¤¤¤Ç¤¹¡£Èà¤é¤Ï¾®¤µ¤ÊÍã¤ò»ý¤Á¡¢æ«¤ä´í¸±¤ÊÃÏ·Á¤òÈô¤Ó±Û¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Èà¤é¤ÏÆü¸÷¤òÂçÊѹ¥¤ß¡¢¸÷¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¿ÈÂÎŪ¤Ë¤Ï¤â¤Ã¤È¤âÉϼå¤Ê¼ï²¤Î°ì¤Ä¤Ç¤¹¤¬¡¢ÍÅÀº¤ÏËâË¡¤ÎÌ̤ÇÂçÊѤʺÍǽ¤ò»ý¤Ã¤Æ¤ª¤ê¡¢Èó¾ï¤Ë½ÏÎý¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¹â¥ì¥Ù¥ë¤Ç¤Ï¤è¤ê®¤¯Èô¤Ö¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£",
   
 "¤³¤Î¼ï²¤Ï¥«¥ª¥¹¤Ë¤è¤Ã¤Æ¤Ä¤¯¤é¤ì¤¿ËÁÆÂŪ¤Ç·ù°­¤µ¤ì¤ë¸ºß¤Ç¤¹¡£Èà¤é¤ÏÆÈΩ¤·¤¿¼ï²¤Ç¤Ï¤Ê¤¯¡¢¿Í´Ö·¿¼ï²¡¢ÂçÄñ¤Ï¿Í´Ö¤¬¥«¥ª¥¹¤Ë¤è¤Ã¤ÆÏĤá¤é¤ì¤¿Â¸ºß¡¢¤â¤·¤¯¤Ï¿Í´Ö¤È½Ã¤Î°­Ì´¤Î¤è¤¦¤Ê¸òÇÛ¼ï¤Ç¤¹¡£Á´¤Æ¤Î½Ã¿Í¤Ï¥«¥ª¥¹¤ËÌÕ½¾¤·¤Æ¤ª¤ê¡¢¤½¤Î¤¿¤áº®Íð¤È²»¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¤¬¡¢½ã¿è¤Ê¥í¥°¥ë¥¹¤Ï¤Þ¤ÀÈà¤é¤ËÂФ·¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£½Ã¿Í¤Ïº®ÆÙ¤ò¹¥¤ß¡¢¤½¤ì¤ÏÈà¤é¤ò¤µ¤é¤ËÏĤá¤Þ¤¹¡£½Ã¿Í¤ÏÆÍÁ³ÊÑ°Û¤òµ¯¤³¤·¤ä¤¹¤¤À­¼Á¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£Èà¤é¤¬¤Ä¤¯¤é¤ì¤¿¤È¤­¡¢¥é¥ó¥À¥à¤ÊÊÑ°Û¤ò¼õ¤±¤Þ¤¹¡£¤½¤Î¸å¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤´¤È¤Ë°ã¤¦ÊÑ°Û¤ò¼õ¤±¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£",
   
-"¥¨¥ó¥È¤ÏÈó¾ï¤Ë¶¯¤¯¡¢¸­¤¤¤Ç¤¹¤¬¡¢¤½¤ÎµðÂ礵¤æ¤¨¤Ë櫤βò½ü¤ä¤³¤Ã¤½¤ê¤ÈÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£À®Ä¹¤¹¤ë¤Ë¤Ä¤ì¤ÆÏÓÎϤäÂѵ×ÎϤ¬¾å¤¬¤ê¤Þ¤¹¤¬¡¢´ïÍѤµ¤Ï²¼¤¬¤Ã¤Æ¤¤¤­¤Þ¤¹¡£Èà¤é¤Ë¤ÏÂ礭¤Ê·çÅÀ¤¬¤¢¤ê¡¢±ê¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£",
+"¥¨¥ó¥È¤ÏÈó¾ï¤Ë¶¯¤¯¡¢¸­¤¤¤Ç¤¹¤¬¡¢¤½¤ÎµðÂ礵¤æ¤¨¤Ë櫤βò½ü¤ä¤³¤Ã¤½¤ê¤ÈÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£À®Ä¹¤¹¤ë¤Ë¤Ä¤ì¤ÆÏÓÎϤäÂѵ×ÎϤ¬¾å¤¬¤ê¤Þ¤¹¤¬¡¢´ïÍѤµ¤Ï²¼¤¬¤Ã¤Æ¤¤¤­¤Þ¤¹¡£Èà¤é¤Ë¤ÏÂ礭¤Ê·çÅÀ¤¬¤¢¤ê¡¢±ê¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËÌôÅù¤«¤é¿åʬ¤òÀݼ褹¤ë»ö¤Ç³èÆ°¤Ç¤­¤Þ¤¹¡£",
   
 "Å·»È¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥¢¥ë¥³¥ó¤Ï¡¢Á´¤Æ¤Î¥¹¥­¥ë¤Ë½Ï㤷¤Æ¤ª¤ê¡¢¶¯¤¯¤Æ¸­¤¯¡¢Èó¾ï¤Ë¿Íµ¤¤¬¤¢¤ê¤Þ¤¹¡£Èà¤é¤ÏÌܤ˸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤½¤ÎÍã¤Ç櫤ä´í¸±¤ÊÃÏ·Á¤òÈô¤Ó±Û¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢Èó¾ï¤ËÀ®Ä¹¤¬ÃÙ¤¤¤È¤¤¤¦·çÅÀ¤â¤¢¤ê¤Þ¤¹¡£",
   
-"°­Ëâ¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥Ð¥ë¥í¥°¤Ï¡¢¶¯¤¯¡¢ÃÎŪ¤Ç¡¢¤Þ¤¿¥¿¥Õ¤Ç¤â¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Èà¤é¤Ï¿À¤ò¿®¤¸¤è¤¦¤È¤Ï¤»¤º¡¢¥×¥ê¡¼¥¹¥È¤Ë¤ÏÁ´¤¯¸þ¤¤¤Æ¤¤¤Þ¤»¤ó¡£±ê¤ÈÃϹö¡¢À¸Ì¿Îϵۼý¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÃϹö¤ä²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ÈàÅù¤Ï¤Û¤È¤ó¤É¤Îµ»Ç½¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÀŤ«¤ËÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£",
+"°­Ëâ¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥Ð¥ë¥í¥°¤Ï¡¢¶¯¤¯¡¢ÃÎŪ¤Ç¡¢¤Þ¤¿¥¿¥Õ¤Ç¤â¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Èà¤é¤Ï¿À¤ò¿®¤¸¤è¤¦¤È¤Ï¤»¤º¡¢¥×¥ê¡¼¥¹¥È¤Ë¤ÏÁ´¤¯¸þ¤¤¤Æ¤¤¤Þ¤»¤ó¡£±ê¤ÈÃϹö¡¢À¸Ì¿Îϵۼý¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÃϹö¤ä²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ÈàÅù¤Ï¤Û¤È¤ó¤É¤Îµ»Ç½¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÀŤ«¤ËÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¿Í´Ö¥¿¥¤¥×¤òÀ¸ìӤˤ¹¤ë»ö¤ÇÀºÎϤò²óÉü¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
 "¥É¥¥¥Ê¥À¥ó¤ÏÀ¾Êý¤«¤éÍ褿¶þ¶¯¤Ê¼ï²¤Ç¤¹¡£¤³¤Î¤¤¤Ë¤·¤¨¤Î¼ï²¤ÏÁ´¤Æ¤ÎÎΰè¤Ë¤ª¤¤¤Æ¿Í´Ö¤ÎǽÎϤòο²ï¤·¡¢ÆäËÂѵ×ÎϤ˴ؤ·¤Æ¤Ï¤½¤ì¤¬¸²Ãø¤Ç¤¹¡£¤·¤«¤·¤Ê¤¬¤é¤³¤Î¼ï²¤ÏÁ´¤Æ¤ËÂî±Û¤·¤Æ¤¤¤ë¤³¤È¤¬ºÒ¤¤¤·¤Æ¡¢¤³¤ÎÀ¤³¦¤Ë¤Ï¿·¤·¤¤·Ð¸³¤È¤¤¤Ã¤¿¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¥ì¥Ù¥ë¤ò¾å¤²¤ë¤³¤È¤¬Èó¾ï¤Ëº¤Æñ¤Ç¤¹¡£Èà¤é¤Ï¤È¤Æ¤â¥¿¥Õ¤Ç´è¶¯¤Ç¤¢¤ê¡¢Èà¤é¤ÎÂѵ×ÎϤ¬²¼¤¬¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£",
   
@@ -1685,7 +1685,7 @@ static cptr race_jouhou[MAX_RACES] =
   
 "¥¯¥¿¡¼¤È¤·¤Æ¤¤¤ë̵ɽ¾ð¤ÎÆæ¤ÎÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ï³°¸«¤¬¤«¤ï¤¤¤é¤·¤¤¤¿¤á¡¢Ì¥ÎϤ¬¹â¤¤¤Ç¤¹¡£Èà¤é¤Ïº®Í𤷤ޤ»¤ó¡£¤Ê¤¼¤Ê¤é¡¢º®Í𤷤Ƥ⥯¥¿¡¼¤È¤·¤Æ¤¤¤ë¤¿¤áÊѤï¤ê¤Ê¤¤¤«¤é¤Ç¤¹¡£¤·¤«¤â¡¢¤½¤Î¥¯¥¿¡¼¤È¤·¤Æ¤¤¤ë³°¸«¤«¤éŨ¤Ë¸«¤Ä¤«¤ê¤Ë¤¯¤¤¤Ç¤¹¡£¤·¤«¤·¡¢Èà¤é¤ÏÃí°ÕÎϤ¬¾¯¤Ê¤¤¤¿¤áõº÷¤äÃγÐǽÎϤϰ­¤¤¤Ç¤¹¡£Èà¤é¤Ï¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤È²£¤Ë¿­¤Ó¤ÆAC¤ò¾å¤²¤ëµ»¤ò³Ð¤¨¤Þ¤¹¤¬¡¢¿­¤Ó¤Æ¤¤¤ë´Ö¤ÏËâË¡ËɸæǽÎϤÏÄ㤯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£",
   
-"¥¢¥ó¥É¥í¥¤¥É¤Ïµ¡³£¤Î¿ÈÂΤò»ý¤Ä¿Í¹©Åª¤Ê¸ºß¤Ç¤¹¡£ËâË¡¤ò¤¦¤Þ¤¯»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢Àï»Î¤È¤·¤Æ¤ÏÈó¾ï¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤Î¤è¤¦¤Ë·Ð¸³ÃͤòÆÀ¤ÆÀ®Ä¹¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¿ÈÂΤ˿ȤˤĤ±¤ëÁõÈ÷¤Ë¤è¤Ã¤ÆÀ®Ä¹¤·¤Þ¤¹¡£¤¿¤À¤·¡¢»ØÎØ¡¢¥¢¥ß¥å¥ì¥Ã¥È¡¢¸÷¸»¤ÏÀ®Ä¹¤Ë±Æ¶Á¤·¤Þ¤»¤ó¡£Èà¤é¤ÏÆǤÎÂÑÀ­¤ò»ý¤Á¡¢ËãáãÃΤ餺¤Ç¡¢À¸Ì¿ÎϤòµÛ¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¿ÈÂΤ¬´è¾æ¤Ê¤Î¤ÇAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤Þ¤¹¡£¤·¤«¤·¿ÈÂΤΤ¤¤¿¤ë¤È¤³¤í¤ËÅŻҲóÏ©¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¿¤á¡¢ÅÅ·â¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£"
+"¥¢¥ó¥É¥í¥¤¥É¤Ïµ¡³£¤Î¿ÈÂΤò»ý¤Ä¿Í¹©Åª¤Ê¸ºß¤Ç¤¹¡£ËâË¡¤ò¤¦¤Þ¤¯»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢Àï»Î¤È¤·¤Æ¤ÏÈó¾ï¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤Î¤è¤¦¤Ë·Ð¸³ÃͤòÆÀ¤ÆÀ®Ä¹¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¿ÈÂΤ˿ȤˤĤ±¤ëÁõÈ÷¤Ë¤è¤Ã¤ÆÀ®Ä¹¤·¤Þ¤¹¡£¤¿¤À¤·¡¢»ØÎØ¡¢¥¢¥ß¥å¥ì¥Ã¥È¡¢¸÷¸»¤ÏÀ®Ä¹¤Ë±Æ¶Á¤·¤Þ¤»¤ó¡£Èà¤é¤ÏÆǤÎÂÑÀ­¤ò»ý¤Á¡¢ËãáãÃΤ餺¤Ç¡¢À¸Ì¿ÎϤòµÛ¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¿ÈÂΤ¬´è¾æ¤Ê¤Î¤ÇAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤Þ¤¹¡£¤·¤«¤·¿ÈÂΤΤ¤¤¿¤ë¤È¤³¤í¤ËÅŻҲóÏ©¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¿¤á¡¢ÅÅ·â¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤ÉÆ°ÎϤòÆÀ¤é¤ì¤Þ¤»¤ó¤¬¡¢Ìý¤òÊäµë¤¹¤ë»ö¤ÇÆ°Îϸ»¤òÆÀ¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£"
 
 #else
 
@@ -1695,7 +1695,7 @@ static cptr race_jouhou[MAX_RACES] =
 
 "Elves are better magicians then humans, but not as good at fighting.  They tend to be smarter and faster than either humans or half-elves and also have better wisdom.  Elves are better at searching, disarming, perception, stealth, bows, and magic, but they are not as good at hand weapons.  They resist light effects intrinsically.",
 
-"Hobbits, or Halflings, are very good at bows, throwing, and have good saving throws.  They also are very good at searching, disarming, perception, and stealth; so they make excellent rogues, but prefer to be called burglars.  They are much weaker than humans, and no good at melee fighting.  Halflings have fair infravision, so they can detect warm creatures at a distance.  They have their dexterity sustained.",
+"Hobbits, or Halflings, are very good at bows, throwing, and have good saving throws.  They also are very good at searching, disarming, perception, and stealth; so they make excellent rogues, but prefer to be called burglars.  They are much weaker than humans, and no good at melee fighting.  Halflings have fair infravision, so they can detect warm creatures at a distance.  They have a strong hold on their life force, and are thus intrinsically resistant to life draining.",
 
 "Gnomes are smaller than dwarves but larger than Halflings.  They, like the hobbits, live in the earth in burrow-like homes.  Gnomes make excellent mages, and have very good saving throws.  They are good at searching, disarming, perception, and stealth.  They have lower strength than humans so they are not very good at fighting with hand weapons.  Gnomes have fair infra-vision, so they can detect warm-blooded creatures at a distance.  Gnomes are intrinsically protected against paralysis.",
 
@@ -1735,25 +1735,25 @@ static cptr race_jouhou[MAX_RACES] =
 
 "A demon-creature from the nether-world, naturally resistant to fire attacks, and capable of learning fire bolt and fire ball attacks.  They are little loved by other races, but can perform fairly well in most professions.  As they advance levels, they gain the powers of See Invisible.",
 
-"A Golem is an artificial creature, built from a lifeless raw material like clay, and awakened to life.  They are nearly mindless, making them useless for professions which rely on magic, but as warriors they are very tough.  They are resistant to poison, they can see invisible things, and move freely.  At higher levels, they also become resistant to attacks which threaten to drain away their life force.  Golems gain very little nutrition from ordinary food.  Golems also gain a natural armor class bonus from their tough body.",
+"A Golem is an artificial creature, built from a lifeless raw material like clay, and awakened to life.  They are nearly mindless, making them useless for professions which rely on magic, but as warriors they are very tough.  They are resistant to poison, they can see invisible things, and move freely.  At higher levels, they also become resistant to attacks which threaten to drain away their life force.  Golems gain very little nutrition from ordinary food, but can absorb mana from staves and wands as their power source.  Golems also gain a natural armor class bonus from their tough body.",
 
-"There are two types of skeletons: the ordinary, warrior-like skeletons, and the spell-using skeletons, which are also called liches.  As undead beings, skeletons need to worry very little about poison or attacks that can drain life.  They do not really use eyes for perceiving things, and are thus not fooled by invisibility.  Their bones are resistant to sharp shrapnel, and they will quickly become resistant to cold.  Although the magical effects of these will affect the skeleton even without entering the skeleton's (non-existent) belly, the potion or food itself will fall through the skeleton's jaws, giving no nutritional benefit.",
+"There are two types of skeletons: the ordinary, warrior-like skeletons, and the spell-using skeletons, which are also called liches.  As undead beings, skeletons need to worry very little about poison or attacks that can drain life.  They do not really use eyes for perceiving things, and are thus not fooled by invisibility.  Their bones are resistant to sharp shrapnel, and they will quickly become resistant to cold.  Although the magical effects of these will affect the skeleton even without entering the skeleton's (non-existent) belly, the potion or food itself will fall through the skeleton's jaws, giving no nutritional benefit.  They can absorb mana from staves and wands as their energy source.",
 
-"Much like Skeletons, Zombies too are undead horrors: they are resistant to life-draining attacks, and can learn to restore their life-force.  Like skeletons, they become resistant to cold-based attacks (actually earlier than skeletons), resist poison and can see invisible.  While still vulnerable to cuts (unlike skeletons), Zombies are resistant to Nether.  Like Golems, they gain very little nutrition from the food of mortals.",
+"Much like Skeletons, Zombies too are undead horrors: they are resistant to life-draining attacks, and can learn to restore their life-force.  Like skeletons, they become resistant to cold-based attacks (actually earlier than skeletons), resist poison and can see invisible.  While still vulnerable to cuts (unlike skeletons), Zombies are resistant to Nether.  Like Golems, they gain very little nutrition from the food of mortals, but can absorb mana from staves and wands as their energy source.",
 
 "One of the mightier undead creatures, the Vampire is an awe-inspiring sight.  Yet this dread creature has a serious weakness: the bright rays of sun are its bane, and it will need to flee the surface to the deep recesses of earth until the sun finally sets.  Darkness, on the other hand, only makes the Vampire stronger.  As undead, the Vampire has a firm hold on its life force, and resists nether attacks.  The Vampire also resists cold and poison based attacks.  It is, however, susceptible to its perpetual hunger for fresh blood, which can only be satiated by sucking the blood from a nearby monster.",
 
-"Another powerful undead creature: the Spectre is a ghastly apparition, surrounded by an unearthly green glow.  They exist only partially on our plane of existence: half-corporeal, they can pass through walls, although the density of the wall will hurt them in the process of doing this.  As undead, they have a firm hold on their life force, see invisible, and resist poison and cold.  They also resist nether.  At higher levels they develop telepathic abilities.  Spectres make superb spellcasters, but their physical form is very weak.",
+"Another powerful undead creature: the Spectre is a ghastly apparition, surrounded by an unearthly green glow.  They exist only partially on our plane of existence: half-corporeal, they can pass through walls, although the density of the wall will hurt them in the process of doing this.  As undead, they have a firm hold on their life force, see invisible, and resist poison and cold.  They also resist nether.  At higher levels they develop telepathic abilities.  Spectres make superb spellcasters, but their physical form is very weak.  They gain very little nutrition from the food of mortals, but can absorb mana from staves and wands as their energy source.",
 
 "One of the several fairy races, Sprites are very small.  They have tiny wings and can fly over traps that may open up beneath them.  They enjoy sunlight intensely, and need worry little about light based attacks.  Although physically among the weakest races, Sprites are very talented in magic, and can become highly skilled wizards.  Sprites have the special power of spraying Sleeping Dust, and at higher levels they learn to fly faster.",
 
  "This race is a blasphemous abomination produced by Chaos.  It is not an independent race but rather a humanoid creature, most often a human, twisted by the Chaos, or a nightmarish crossbreed of a human and a beast.  All Beastmen are accustomed to Chaos so much that they are untroubled by confusion and sound, although raw logrus can still have effects on them.  Beastmen revel in chaos, as it twists them more and more.  Beastmen are subject to mutations: when they have been created, they receive a random mutation.  After that, every time they advance a level they have a small chance of gaining yet another mutation.",
 
-"The Ents are a powerful race dating from the beginning of the world, oldest of all animals or plants who inhabit Arda.  Spirits of the land, they were summoned to guard the forests of Middle-earth.  Being much like trees they are very clumsy but strong, and very susceptible to fire.",
+"The Ents are a powerful race dating from the beginning of the world, oldest of all animals or plants who inhabit Arda.  Spirits of the land, they were summoned to guard the forests of Middle-earth.  Being much like trees they are very clumsy but strong, and very susceptible to fire.  They gain very little nutrition from the food of mortals, but they can absorb water from potions as their nutrition.",
 
 "Archons are a higher class of angels.  They are good at all skills, and are strong, wise, and are a favorite with any people.  They are able to see the unseen, and their wings allow them to safely fly over traps and other dangerous places.  However, belonging to a higher plane as they do, the experiences of this world do not leave a strong impression on them and they gain levels slowly.",
 
-"Balrogs are a higher class of demons.  They are strong, intelligent and tough.  They do not believe in gods, and are not suitable for priest at all.  Balrog are resistant to fire and nether, and have a firm hold on their life force.  They also eventually learn to see invisible things.  They are good at almost all skills except stealth.",
+"Balrogs are a higher class of demons.  They are strong, intelligent and tough.  They do not believe in gods, and are not suitable for priest at all.  Balrog are resistant to fire and nether, and have a firm hold on their life force.  They also eventually learn to see invisible things.  They are good at almost all skills except stealth.  They gain very little nutrition from the food of mortals, and need human corpses as sacrifices to regain their vitality.",
 
 "Dunedain are a race of hardy men from the West.  This elder race surpasses human abilities in every field, especially constitution.  However, being men of the world, very little is new to them, and levels are very hard for them to gain.  Their constitution cannot be reduced. ",
 
@@ -1761,7 +1761,7 @@ static cptr race_jouhou[MAX_RACES] =
 
 "A Kutar is an expressionless animal-like living creature.  The word 'kuta' means 'absentmindedly' or 'vacantly'.  Their absentmindedness hurts their searching and perception skills, but renders them incapable of being confused.  Their unearthly calmness and serenity make them among the most stealthy of any race.  Kutars, although expressionless, are beautiful and so have a high charisma.  Members of this race can learn to expand their body horizontally.  This increases armour class, but renders them vulnerable to magical attacks.",
 
-"An android is a artificial creation with a body of machinery.  They are poor at spell casting, but they make excellent warriors.  They don't acquire experience like other races, but rather gain in power as they attach new equipment to their frame.  Rings, amulets, and lights do not influence growth.  Androids are resistant to poison, can move freely, and are immune to life-draining attacks.  Moreover, because of their hard metallic bodies, they get a bonus to AC.  Androids have electronic circuits throughout their body and must beware of electric shocks."
+"An android is a artificial creation with a body of machinery.  They are poor at spell casting, but they make excellent warriors.  They don't acquire experience like other races, but rather gain in power as they attach new equipment to their frame.  Rings, amulets, and lights do not influence growth.  Androids are resistant to poison, can move freely, and are immune to life-draining attacks.  Moreover, because of their hard metallic bodies, they get a bonus to AC.  Androids have electronic circuits throughout their body and must beware of electric shocks.  They gain very little nutrition from the food of mortals, but they can use flasks of oil as their energy source."
 
 #endif
 };
@@ -1815,13 +1815,15 @@ static cptr class_jouhou[MAX_CLASS] =
   
 "µ³Ê¼¤ÏÇϤ˾è¤êÀï¾ì¤ò¶î¤±È´¤±¤ë¥¨¥ê¡¼¥ÈÀï»Î¤Ç¤¹¡£ËâË¡¤Ï»È¤¨¤Þ¤»¤ó¤¬¡¢ÇϾ夫¤é¤Î°µÅÝŪ¤Ê¹¶·âÎϤò¸Ø¤ë¾å¤Ë¡¢¹â¤¤µ¡Æ°ÎϤòÀ¸¤«¤·¤¿¼Í·â¤ò¤âÆÀ°Õ¤È¤·¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢ÌîÀ¸¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Þ¤¿¤¬¤ê̵ÍýÌðÍý¼ê¤Ê¤º¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Èà¤é¤Ï¸Ê¤ÎÆùÂΤÈÀº¿À¤Ë¸Ø¤ê¤ò»ý¤Á¡¢ËâË¡Æ»¶ñ¤Ë¤Ï¤¢¤Þ¤êÍê¤í¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£",
   
-"¶¸Àï»Î¤ÏÅܤ궸¤Ã¤ÆÉð´ï¤ò¿¶¤ë¤¦¶²¤ë¤Ù¤­Àï»Î¤Ç¤¹¡£Á´¿¦¶ÈÃæºÇ¹â¤ÎÆùÂÎǽÎϤò¸Ø¤ê¡¢¶²ÉݤÈËãáã¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¤½¤Î¶¯¿Ù¤ÊÆùÂΤÇÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËÉð´ï¤Ê¤·¤ÇÀ臘¤³¤È¤ä¡¢¼ö¤¤¤Î¤«¤±¤é¤ì¤¿ÁõÈ÷¤òÎϤŤ¯¤ÇÇí¤¬¤¹¤³¤È¤¬¤Ç¤­¡¢¤¤¤¯¤Ä¤«¤Îµ»¤ò(È¿ËâË¡¾õÂ֤Ǥâ)»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢´¬Êª¤äËâË¡Æ»¶ñ¤ÏÁ´¤¯»È¤¦¤³¤È¤¬¤Ç¤­¤º¡¢æ«¤Î²ò½ü¤ä±£Ì©¹ÔÆ°¡¢Ãµº÷¡¢ËâË¡Ëɸ桢Èô¤ÓÆ»¶ñ¤Îµ»Ç½¤Ë´Ø¤·¤Æ¤ÏÀä˾Ū¤Ç¤¹¡£¤Ò¤¿¤¹¤é²¥¤Ã¤ÆÆ»¤ò³«¤¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£¥¢¥ó¥Ð¥é¥¤¥È¤ÈÍ©Îî¤ÏÈó¾ï¤Ë¾¡Íø¤·¤ä¤¹¤¤¤Ç¤¹¤¬¥¹¥³¥¢¤¬¤«¤Ê¤êÄ㤯½¤Àµ¤µ¤ì¤Þ¤¹¡£",
+"¶¸Àï»Î¤ÏÅܤ궸¤Ã¤ÆÉð´ï¤ò¿¶¤ë¤¦¶²¤ë¤Ù¤­Àï»Î¤Ç¤¹¡£Á´¿¦¶ÈÃæºÇ¹â¤ÎÆùÂÎǽÎϤò¸Ø¤ê¡¢¶²ÉݤÈËãáã¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¤½¤Î¶¯¿Ù¤ÊÆùÂΤÇÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËÉð´ï¤Ê¤·¤ÇÀ臘¤³¤È¤ä¡¢¼ö¤¤¤Î¤«¤±¤é¤ì¤¿ÁõÈ÷¤òÎϤŤ¯¤ÇÇí¤¬¤¹¤³¤È¤¬¤Ç¤­¡¢¤¤¤¯¤Ä¤«¤Îµ»¤ò(È¿ËâË¡¾õÂ֤Ǥâ)»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢´¬Êª¤äËâË¡Æ»¶ñ¤ÏÁ´¤¯»È¤¦¤³¤È¤¬¤Ç¤­¤º¡¢æ«¤Î²ò½ü¤ä±£Ì©¹ÔÆ°¡¢Ãµº÷¡¢ËâË¡Ëɸ桢Èô¤ÓÆ»¶ñ¤Îµ»Ç½¤Ë´Ø¤·¤Æ¤ÏÀä˾Ū¤Ç¤¹¡£¤Ò¤¿¤¹¤é²¥¤Ã¤ÆÆ»¤ò³«¤¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£Í©Îî¤ÏÈó¾ï¤Ë¾¡Íø¤·¤ä¤¹¤¤¤Ç¤¹¤¬¥¹¥³¥¢¤¬¤«¤Ê¤êÄ㤯½¤Àµ¤µ¤ì¤Þ¤¹¡£",
 
 "ÃÃÌê»Õ¤ÏÉð´ï¤äËɶñ¤ò¼«Ê¬¤Ç¶¯²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Æüì¸ú²Ì¤ò»ý¤ÄÉð´ï¤äËɶñ¤«¤éÆüì¸ú²Ì¤Î¸µ¤È¤Ê¤ë¥¨¥Ã¥»¥ó¥¹¤ò¼è¤ê½Ð¤·¡¢Ê̤ÎÉð´ï¤äËɶñ¤Ë¥¨¥Ã¥»¥ó¥¹¤òÉղ乤뤳¤È¤Ë¤è¤Ã¤Æ¤½¤ÎÆüì¸ú²Ì¤òÉղäǤ­¤Þ¤¹¡£¤¢¤ëÄøÅÙ¤ÎÀïƮǽÎϤâ»ý¤Á¤Þ¤¹¤¬¡¢ËâË¡¤Ï°ìÀÚ»ÈÍѤǤ­¤º¡¢±£Ì©¤äËâË¡Ëɸæ¤Îµ»Ç½¤âÄ㤯¤Ê¤ê¤Þ¤¹¡£",
 
 "¶À»È¤¤¤Ï¡¢ËâÎϤιþ¤á¤é¤ì¤¿¶À¤òºî¤ê½Ð¤·¤Æ¡¢¤½¤ì¤ò¿¨ÇޤȤ·¤Æ¹¶·â¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ë¶ÀËâË¡¤ò»È¤¤¤Þ¤¹¡£¶À»È¤¤¤Ï¶À¤Î¾å¤Ç¼ÂÎϤòȯ´ø¤·¡¢¶À¤Î¾å¤Ç¤ÏÁÇÁᤤ¥Æ¥ì¥Ý¡¼¥È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£ËâË¡¤Î¶À¤Ï¡¢¥ì¥Ù¥ë¤Ë¤è¤Ã¤Æ°ìÅÙ¤ËÀ©¸æ¤Ç¤­¤ë¿ô¤¬À©¸Â¤µ¤ì¤Þ¤¹¡£¶ÀËâË¡¤ËɬÍפÊǽÎϤÏÃÎǽ¤Ç¤¹¡£",
 
-"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤­°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤­°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤­¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£"
+"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤­°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤­°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤­¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£",
+
+"¥¹¥Ê¥¤¥Ñ¡¼¤Ï°ì·âɬ»¦¤òÁÀ¤¦¶²¤ë¤Ù¤­¼Í¼ê¤Ç¤¹¡£Àº¿À¤ò¹â¤á¤ë¤³¤È¤Ë¤è¤ê¡¢¼Í·â¤Î°ÒÎϤÈÀºÅÙ¤ò¹â¤á¤Þ¤¹¡£¤Þ¤¿¡¢ËâË¡¤ò»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢¸¦¤®À¡¤Þ¤µ¤ì¤¿Àº¿À¤«¤é·«¤ê½Ð¤µ¤ì¤ë¼Í·â½Ñ¤Ï¤µ¤é¤Ê¤ë°ÒÎϤò¤â¤¿¤é¤¹¤³¤È¤Ç¤·¤ç¤¦¡£¥Æ¥¯¥Ë¥Ã¥¯¤¬É¬ÍפȤµ¤ì¤ë¿¦¶È¤Ç¤¹¡£"
 
 #else
 
@@ -1843,7 +1845,7 @@ static cptr class_jouhou[MAX_CLASS] =
 
 "The Monk character class is very different from all other classes.  Their training in martial arts makes them much more powerful with no armor or weapons.  To gain the resistances necessary for survival a monk may need to wear some kind of armor, but if the armor he wears is too heavy, it will severely disturb his martial arts maneuvers.  As the monk advances levels, new, powerful forms of attack become available.  Their defensive capabilities increase likewise, but if armour is being worn, this effect decreases.  Wisdom determines a Monk's spell casting ability.",
 
-"The Mindcrafter is a unique class that uses the powers of the mind instead of magic.  These powers are unique to Mindcrafters, and vary from simple extrasensory powers to mental domination of others.  Since these powers are developed by the practice of certain disciplines, a Mindcrafter requires no spellbooks to use them.  The available powers are simply determined by the character's level.  Wisdom determines a Mindcrafter's ability to use mind powers,",
+"The Mindcrafter is a unique class that uses the powers of the mind instead of magic.  These powers are unique to Mindcrafters, and vary from simple extrasensory powers to mental domination of others.  Since these powers are developed by the practice of certain disciplines, a Mindcrafter requires no spellbooks to use them.  The available powers are simply determined by the character's level.  Wisdom determines a Mindcrafter's ability to use mind powers.",
 
 "High-mages are mages who specialize in one particular field of magic and learn it very well - much better than the ordinary mage.  For the price of giving up a second realm of magic, they gain substantial benefits in the mana costs, minimum levels, and failure rates in the spells of the realm of their specialty.  A high mage's prime statistic is intelligence as this determines his spell casting ability. ",
 
@@ -1871,13 +1873,15 @@ static cptr class_jouhou[MAX_CLASS] =
 
 "Cavalry ride on horses into battle.  Although they cannot cast spells, they are proud of their overwhelming offensive strength on horseback.  They are good at shooting.  At high levels, they learn to forcibly saddle and tame wild monsters.  Since they take pride in the body and the soul, they don't use magical devices well.",
 
-"A Berserker is a fearful fighter indeed, immune to fear and paralysis.  At high levels, Berserkers can reflect bolt spells with their tough flesh.  Furthermore, they can fight without weapons, can remove cursed equipment by force, and can even use their special combat techniques when surrounded by an anti-magic barrier.  Berserkers, however, cannot use any magical devices or read any scrolls, and are hopeless at all non-combat skills.  Since Berserker Amberite or Spectres are quite easy to *win* with, their scores are lowered.",
+"A Berserker is a fearful fighter indeed, immune to fear and paralysis.  At high levels, Berserkers can reflect bolt spells with their tough flesh.  Furthermore, they can fight without weapons, can remove cursed equipment by force, and can even use their special combat techniques when surrounded by an anti-magic barrier.  Berserkers, however, cannot use any magical devices or read any scrolls, and are hopeless at all non-combat skills.  Since Berserker Spectres are quite easy to *win* with, their scores are lowered.",
 
 "A Weaponsmith can improve weapons and armors for him or herself.  They can extract the essences of special effects from weapons or armors which have various special abilities, and can add these essences to another weapon or armor.  They are good at fighting, but cannot cast spells, and are poor at skills such as stealth or magic defense.",
 
 "Mirror-Masters are spell casters; like other mages, they must live by their wits.  They can create magical mirrors, and employ them in the casting of Mirror-Magic spells.  A Mirror-Master standing on a mirror has greater ability and, for example, can perform quick teleports.  The maximum number of Magical Mirrors which can be controlled simultaneously depends on the level.  Intelligence determines a Mirror-Master's spell casting ability.",
 
-"A Ninja is a fearful assassin lurking in darkness.  He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow.  Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks.  Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels.  A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things.  Dexterity determines a Ninja's ability to use Ninjutsu."
+"A Ninja is a fearful assassin lurking in darkness.  He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow.  Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks.  Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels.  A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things.  Dexterity determines a Ninja's ability to use Ninjutsu.",
+
+"Snipers are good at shooting, and they can kill targets by a few shots. After they concentrate deeply, they can demonstrate their shooting talents. You can see incredibly firepower of their shots."
 #endif
 };
 
@@ -1963,8 +1967,9 @@ static cptr realm_jouhou[VALID_REALM] =
 
 "²Î½¸¤Ï¡¢²Î¤Ë¤è¤Ã¤Æ¸ú²Ì¤òȯ´ø¤¹¤ëËâË¡¤Ç¤¹¡£ËâË¡¤ÈƱÍÍ¡¢»È¤Ã¤¿»þ¤Ë¸ú²Ì¤Î¤¢¤ë¤â¤Î¤È¡¢²Î¤¤Â³¤±¤ë¤³¤È¤Ë¤è¤Ã¤Æ»ý³¤·¤Æ¸ú²Ì¤òȯ´ø¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¸å¼Ô¤Î¾ì¹ç¤Ï¡¢MP¤Î³¤¯¸Â¤ê¸ú²Ì¤òȯ´ø¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢Æ±»þ¤Ë²Î¤¨¤ë²Î¤Ï1¤Ä¤À¤±¤È¤¤¤¦À©¸Â¤â¤¢¤ê¤Þ¤¹¡£",
 
-"Éð·Ý¤Î½ñ¤Ï¡¢ÍÍ¡¹¤ÊÀïÆ®¤Îµ»¤Ë¤Ä¤¤¤Æ½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ÎËܤϵ»¤ò³Ð¤¨¤ë¤È¤­¤ËÆɤàɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢°ìÅٳФ¨¤¿µ»¤Ï»È¤¦¤Î¤ËËܤò»ý¤ÄɬÍפϤ¢¤ê¤Þ¤»¤ó¡£µ»¤ò»È¤¦¤È¤­¤Ë¤Ïɬ¤ºÉð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£"
+"Éð·Ý¤Î½ñ¤Ï¡¢ÍÍ¡¹¤ÊÀïÆ®¤Îµ»¤Ë¤Ä¤¤¤Æ½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ÎËܤϵ»¤ò³Ð¤¨¤ë¤È¤­¤ËÆɤàɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢°ìÅٳФ¨¤¿µ»¤Ï»È¤¦¤Î¤ËËܤò»ý¤ÄɬÍפϤ¢¤ê¤Þ¤»¤ó¡£µ»¤ò»È¤¦¤È¤­¤Ë¤Ïɬ¤ºÉð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£",
 
+"¼ö½Ñ¤Ï´÷¤à¤Ù¤­Îΰè¤Ç¤¹¡£Ê£¿ô¤Î¼ö¤¤¤Î¸ÀÍÕ¤ò²Î¤Î¤è¤¦¤Ëˤ®¤Ê¤¬¤é±Ó¾§¤·¤Þ¤¹¡£Â¿¤¯¤Î¼öʸ¤Ï±Ó¾§¤·Â³¤±¤ë¤³¤È¤Ë¤è¤Ã¤Æ¸ú²Ì¤¬»ý³¤µ¤ì¤Þ¤¹¡£¼öʸ¤Ë¤ÏÁê¼ê¤Î¹ÔÆ°¤ò«Çû¤¹¤ë¤â¤Î¡¢¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤â¤Î¡¢¹¶·â¤ËÂФ·¤ÆÈ¿·â¤¹¤ë¤â¤Î¤¬Â¿¤¯¤¢¤ê¤Þ¤¹¡£"
 #else
 
 "Life magic is very good for healing; it relies mostly on healing, protection and detection spells.  Also life magic have a few attack spells as well.  It said that some high level spell of life magic can disintegrate Undead monsters into ash.",
@@ -1981,15 +1986,17 @@ static cptr realm_jouhou[VALID_REALM] =
 
 "Arcane magic is a general purpose realm of magic.  It attempts to encompass all 'useful' spells from all realms.  This is the downside of Arcane magic: while Arcane does have all the necessary 'tool' spells for a dungeon delver, it has no ultra-powerful high level spells.  As a consequence, all Arcane spellbooks can be bought in town.  It should also be noted that the 'specialized' realms usually offer the same spell at a lower level and cost. ",
 
-"Craft magic can strengthen the caster or equipments.  These spells greatly improve the caster's fighting ability, but spells that hurts opponents directly is not exist.",
+"Craft magic can strengthen the caster or the equipments.  These spells can greatly improve the caster's fighting ability.  Using them against opponents directly is not possible.",
 
 "Demon is a very evil realm, same as Death.  It provides various attack spells and devilish detection spells.  at higher levels, Demon magic provides ability to dominate demons, and to polymorph yourself into a demon.",
 
-"Crusade is a realm of 'Justice'; It does have many attack spells which are mostly used for harming and banishing foul minions of evil, and these spells are not so effective for good monsters.",
+"Crusade is a magic of 'Justice'.  It includes damage spells, which are greatly effective against foul and evil monsters, but have poor effects against good monsters.",
 
 "Music magic shows various effects as sing song.  There is two type of song; the one which shows effects instantly and the other one shows effect continuously until SP runs out.  But the latter type has a limit; only one song can be sing at the same time.",
 
-"The books of Kendo describes various combat technique.  it need to read the books when one studys the techniques, but it doesn't need to take around the books to use the techniques after one momorizes it.  It need a weapon wielded to use the techniques."
+"The books of Kendo describe about various combat techniques.  When learning new techniques, you are required to carry the books, but once you memorizes them, you don't have to carry them.  When using a technique, wielding a weapon is required.",
+
+"Hex is a very terrible realm. Spells gives continual effects when they are spelled continually like songs. Spells may obstract monsters' actions, may deal damages in sight, may revenge against enemies."
 #endif
 };
 
@@ -2007,7 +2014,8 @@ static char realm_subinfo[VALID_REALM][41] =
 "¹¶·â¤ÈËɸæ¤ÎξÌ̤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
 "¼Ù°­¤Ê²øʪ¤ËÂФ¹¤ë¹¶·â¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
 "ÍÍ¡¹¤ÊËâË¡¸ú²Ì¤ò»ý¤Ã¤¿²Î¤ò²Î¤¤¤Þ¤¹",
-"ÂǷ⹶·â¤ËÆüìǽÎϤòÉղä·¤Þ¤¹"
+"ÂǷ⹶·â¤ËÆüìǽÎϤòÉղä·¤Þ¤¹",
+"Ũ¤ò¼ÙË⤷¤Ä¤ÄÉü½²¤òÁÀ¤¤¤Þ¤¹"
 #else
 "Good at detection and healing.",
 "Utility and protective spells.",
@@ -2020,7 +2028,8 @@ static char realm_subinfo[VALID_REALM][41] =
 "Good at both offence and defence.",
 "Destroys evil creatures.",
 "Song with magical effects.",
-"Special attacks on melee."
+"Special attacks on melee.",
+"Good at obstacle and revenge."
 #endif
 };
 
@@ -2030,7 +2039,12 @@ static char realm_subinfo[VALID_REALM][41] =
  */
 static s16b stat_limit[6];
 
-static s16b chara_limit[6];
+static struct {
+       s16b agemin, agemax;
+       s16b htmin, htmax;
+       s16b wtmin, wtmax;
+       s16b scmin, scmax;
+} chara_limit;
 
 /*
  * Autoroll matches
@@ -2059,7 +2073,7 @@ static void show_help(cptr helpfile)
        screen_save();
 
        /* Peruse the help file */
-        (void)show_file(TRUE, helpfile, NULL, 0, 0);
+       (void)show_file(TRUE, helpfile, NULL, 0, 0);
 
        /* Load screen */
        screen_load();
@@ -2119,7 +2133,7 @@ static byte choose_realm(s32b choices, int *count)
        if (choices & CH_ENCHANT)
        {
                (*count)++;
-               auto_select = REALM_ENCHANT;
+               auto_select = REALM_CRAFT;
        }
        if (choices & CH_DAEMON)
        {
@@ -2141,6 +2155,11 @@ static byte choose_realm(s32b choices, int *count)
                (*count)++;
                auto_select = REALM_HISSATSU;
        }
+       if (choices & CH_HEX)
+       {
+               (*count)++;
+               auto_select = REALM_HEX;
+       }
 
        clear_from(10);
 
@@ -2171,10 +2190,10 @@ static byte choose_realm(s32b choices, int *count)
 #endif
 
        cs = 0;
-       for (i = 0; i<16; i++)
+       for (i = 0; i<32; i++)
        {
                /* Analize realms */
-               if (choices & (1 << i))
+               if (choices & (1L << i))
                {
                        if (p_ptr->realm1 == i+1)
                        {
@@ -2230,7 +2249,7 @@ static byte choose_realm(s32b choices, int *count)
                                c_put_str(TERM_L_BLUE, realm_names[picks[cs]], 3, 40);
                                put_str(": Characteristic", 3, 40+strlen(realm_names[picks[cs]]));
 #endif
-                               put_str(realm_subinfo[picks[cs]-1], 4, 40);
+                               put_str(realm_subinfo[technic2magic(picks[cs])-1], 4, 40);
                        }
                        c_put_str(TERM_YELLOW, cur, 12 + (cs/5), 2 + 15 * (cs%5));
                        os = cs;
@@ -2296,20 +2315,20 @@ static byte choose_realm(s32b choices, int *count)
                }
                else k = -1;
                if (c == '?')
-                {
-#ifdef JP                 
-                        show_help("jmagic.txt#MagicRealms");
+               {
+#ifdef JP
+                       show_help("jmagic.txt#MagicRealms");
 #else
-                        show_help("magic.txt#MagicRealms");
+                       show_help("magic.txt#MagicRealms");
 #endif
-                }
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth option((*)s effect score)");
 #endif
 
                        screen_load();
@@ -2329,7 +2348,7 @@ static byte choose_realm(s32b choices, int *count)
  */
 static bool get_player_realms(void)
 {
-        int i, count;
+       int i, count;
 
        /* Clean up infomation of modifications */
        put_str("                                   ", 3, 40);
@@ -2341,7 +2360,7 @@ static bool get_player_realms(void)
        p_ptr->realm2 = 255;
        while (1)
        {
-               char temp[80*8];
+               char temp[80*10];
                cptr t;
                count = 0;
                p_ptr->realm1 = choose_realm(realm_choices1[p_ptr->pclass], &count);
@@ -2355,9 +2374,9 @@ static bool get_player_realms(void)
                put_str("                                   ", 4, 40);
                put_str("                                   ", 5, 40);
 
-               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm1)-1], 74, temp);
+               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm1)-1], 74, temp, sizeof(temp));
                t = temp;
-               for (i = 0; i< 6; i++)
+               for (i = 0; i < 10; i++)
                {
                        if(t[0] == 0)
                                break; 
@@ -2378,12 +2397,12 @@ static bool get_player_realms(void)
                        (void)inkey();
                        prt("", 0, 0);
                        break;
-                }
+               }
 else
 #ifdef JP
-                if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-                if (get_check("Are you sure? ")) break;
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
        }
 
@@ -2418,7 +2437,7 @@ else
                        put_str("                                   ", 4, 40);
                        put_str("                                   ", 5, 40);
 
-                       roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 74, temp);
+                       roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 74, temp, sizeof(temp));
                        t = temp;
                        for (i = 0; i< 6; i++)
                        {
@@ -2443,9 +2462,9 @@ else
                                break;
                        }
 #ifdef JP
-                       else if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+                       else if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-                        else if (get_check("Are you sure? ")) break;
+                       else if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
                }
                if (p_ptr->realm2)
@@ -2576,11 +2595,8 @@ static void load_prev_data(bool swap)
 
 /*
  * Returns adjusted stat -JK-  Algorithm by -JWT-
- *
- * auto_roll is boolean and states maximum changes should be used rather
- * than random ones to allow specification of higher values to wait for
  */
-static int adjust_stat(int value, int amount, int auto_roll)
+static int adjust_stat(int value, int amount)
 {
        int i;
 
@@ -2721,6 +2737,9 @@ void get_max_stats(void)
                        p_ptr->stat_cur[i] = j;
        }
        p_ptr->knowledge &= ~(KNOW_STAT);
+
+       /* Redisplay the stats later */
+       p_ptr->redraw |= (PR_STATS);
 }
 
 
@@ -2729,7 +2748,7 @@ void get_max_stats(void)
  */
 static void get_extra(bool roll_hitdie)
 {
-       int             i, j, min_value, max_value;
+       int i, j;
 
        /* Experience factor */
        if (p_ptr->prace == RACE_ANDROID) p_ptr->expfact = rp_ptr->r_exp;
@@ -2746,17 +2765,17 @@ static void get_extra(bool roll_hitdie)
 
        for (i = 0; i < 64; i++)
        {
-               if (p_ptr->pclass == CLASS_SORCERER) p_ptr->spell_exp[i] = 1600;
-               else if (p_ptr->pclass == CLASS_RED_MAGE) p_ptr->spell_exp[i] = 1200;
-               else p_ptr->spell_exp[i] = 0;
+               if (p_ptr->pclass == CLASS_SORCERER) p_ptr->spell_exp[i] = SPELL_EXP_MASTER;
+               else if (p_ptr->pclass == CLASS_RED_MAGE) p_ptr->spell_exp[i] = SPELL_EXP_SKILLED;
+               else p_ptr->spell_exp[i] = SPELL_EXP_UNSKILLED;
        }
 
        for (i = 0; i < 5; i++)
                for (j = 0; j < 64; j++)
                        p_ptr->weapon_exp[i][j] = s_info[p_ptr->pclass].w_start[i][j];
-       if(p_ptr->pseikaku == SEIKAKU_SEXY)
+       if ((p_ptr->pseikaku == SEIKAKU_SEXY) && (p_ptr->weapon_exp[TV_HAFTED-TV_WEAPON_BEGIN][SV_WHIP] < WEAPON_EXP_BEGINNER))
        {
-               p_ptr->weapon_exp[TV_HAFTED-TV_BOW][SV_WHIP] = 4000;
+               p_ptr->weapon_exp[TV_HAFTED-TV_WEAPON_BEGIN][SV_WHIP] = WEAPON_EXP_BEGINNER;
        }
 
        for (i = 0; i < 10; i++)
@@ -2769,45 +2788,7 @@ static void get_extra(bool roll_hitdie)
                p_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
 
        /* Roll for hit point unless quick-start */
-       if (roll_hitdie)
-       {
-               /* Minimum hitpoints at highest level */
-               min_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 3 / 8;
-               min_value += p_ptr->hitdie;
-
-               /* Maximum hitpoints at highest level */
-               max_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 5 / 8;
-               max_value += p_ptr->hitdie;
-
-               /* Roll out the hitpoints */
-               while (TRUE)
-               {
-                       /* Pre-calculate level 1 hitdice */
-                       p_ptr->player_hp[0] = p_ptr->hitdie;
-
-                       for (i = 1; i < 4; i++)
-                       {
-                               j = randint1(p_ptr->hitdie);
-                               p_ptr->player_hp[0] += j;
-                       }
-
-                       /* Roll the hitpoint values */
-                       for (i = 1; i < PY_MAX_LEVEL; i++)
-                       {
-                               j = randint1(p_ptr->hitdie);
-                               p_ptr->player_hp[i] = p_ptr->player_hp[i - 1] + j;
-                       }
-
-                       /* XXX Could also require acceptable "mid-level" hitpoints */
-
-                       /* Require "valid" hitpoints at highest level */
-                       if (p_ptr->player_hp[PY_MAX_LEVEL - 1] < min_value) continue;
-                       if (p_ptr->player_hp[PY_MAX_LEVEL - 1] > max_value) continue;
-
-                       /* Acceptable */
-                       break;
-               }
-       }
+       if (roll_hitdie) do_cmd_rerate_aux();
 
        /* Initial hitpoints */
        p_ptr->mhp = p_ptr->player_hp[0];
@@ -3000,7 +2981,7 @@ static void get_history(void)
                        chart = 148;
                        break;
                }
-               case RACE_KUTA:
+               case RACE_KUTAR:
                {
                        chart = 154;
                        break;
@@ -3061,48 +3042,58 @@ static void get_history(void)
        while ((n > 0) && (s[n-1] == ' ')) s[--n] = '\0';
 
        {
-        char temp[64*4];
-        roff_to_buf(s, 60, temp);
-        t = temp;
-        for(i=0 ; i<4 ; i++){
-             if(t[0]==0)break; 
-             else {strcpy(p_ptr->history[i], t);t += strlen(t)+1;}
-             }
+       char temp[64*4];
+       roff_to_buf(s, 60, temp, sizeof(temp));
+       t = temp;
+       for(i=0 ; i<4 ; i++){
+            if(t[0]==0)break; 
+            else {strcpy(p_ptr->history[i], t);t += strlen(t)+1;}
+            }
        }
 }
 
 
 /*
- * Computes character's age, height, and weight
- * by henkma
+ * Get character's height and weight
  */
-static void get_ahw(void)
+void get_height_weight(void)
 {
-  int h_percent; /* ¿ÈŤ¬Ê¿¶Ñ¤Ë¤¯¤é¤Ù¤Æ¤É¤Î¤¯¤é¤¤°ã¤¦¤«. */
-
+       int h_percent; /* ¿ÈŤ¬Ê¿¶Ñ¤Ë¤¯¤é¤Ù¤Æ¤É¤Î¤¯¤é¤¤°ã¤¦¤«. */
 
-  /* Calculate the age */
-  p_ptr->age = rp_ptr->b_age + randint1(rp_ptr->m_age);
-  
-  /* Calculate the height/weight for males */
-  if (p_ptr->psex == SEX_MALE)
+       /* Calculate the height/weight for males */
+       if (p_ptr->psex == SEX_MALE)
        {
-         p_ptr->ht = randnor(rp_ptr->m_b_ht, rp_ptr->m_m_ht);
-         h_percent = (int)(p_ptr->ht) * 100 / (int)(rp_ptr->m_b_ht);
-         p_ptr->wt = randnor((int)(rp_ptr->m_b_wt) * h_percent /100
-                                                 , (int)(rp_ptr->m_m_wt) * h_percent / 300 );
+               p_ptr->ht = randnor(rp_ptr->m_b_ht, rp_ptr->m_m_ht);
+               h_percent = (int)(p_ptr->ht) * 100 / (int)(rp_ptr->m_b_ht);
+               p_ptr->wt = randnor((int)(rp_ptr->m_b_wt) * h_percent /100
+                                   , (int)(rp_ptr->m_m_wt) * h_percent / 300 );
        }
   
-  /* Calculate the height/weight for females */
-  else if (p_ptr->psex == SEX_FEMALE)
+       /* Calculate the height/weight for females */
+       else if (p_ptr->psex == SEX_FEMALE)
        {
-         p_ptr->ht = randnor(rp_ptr->f_b_ht, rp_ptr->f_m_ht);
-         h_percent = (int)(p_ptr->ht) * 100 / (int)(rp_ptr->f_b_ht);
-         p_ptr->wt = randnor((int)(rp_ptr->f_b_wt) * h_percent /100
-                                                 , (int)(rp_ptr->f_m_wt) * h_percent / 300 );
+               p_ptr->ht = randnor(rp_ptr->f_b_ht, rp_ptr->f_m_ht);
+               h_percent = (int)(p_ptr->ht) * 100 / (int)(rp_ptr->f_b_ht);
+               p_ptr->wt = randnor((int)(rp_ptr->f_b_wt) * h_percent /100
+                                   , (int)(rp_ptr->f_m_wt) * h_percent / 300 );
        }
 }
 
+
+/*
+ * Computes character's age, height, and weight
+ * by henkma
+ */
+static void get_ahw(void)
+{
+       /* Get character's age */
+       p_ptr->age = rp_ptr->b_age + randint1(rp_ptr->m_age);
+
+       /* Get character's height and weight */
+       get_height_weight();
+}
+
+
 /*
  * Get the player's starting money
  */
@@ -3163,7 +3154,7 @@ static void birth_put_stats(void)
                        j = rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i];
 
                        /* Obtain the current stat */
-                       m = adjust_stat(p_ptr->stat_max[i], j, TRUE);
+                       m = adjust_stat(p_ptr->stat_max[i], j);
 
                        /* Put the stat */
                        cnv_stat(m, buf);
@@ -3202,6 +3193,24 @@ static void birth_put_stats(void)
 }
 
 
+static void k_info_reset(void)
+{
+       int i;
+
+       /* Reset the "objects" */
+       for (i = 1; i < max_k_idx; i++)
+       {
+               object_kind *k_ptr = &k_info[i];
+
+               /* Reset "tried" */
+               k_ptr->tried = FALSE;
+
+               /* Reset "aware" */
+               k_ptr->aware = FALSE;
+       }
+}
+
+
 /*
  * Clear all the global "character" data
  */
@@ -3209,6 +3218,8 @@ static void player_wipe(void)
 {
        int i;
 
+       /* Hack -- free the "last message" string */
+       if (p_ptr->last_message) string_free(p_ptr->last_message);
 
        /* Hack -- zero the struct */
        (void)WIPE(p_ptr, player_type);
@@ -3269,10 +3280,15 @@ static void player_wipe(void)
 
                /* Hack -- Reset the max counter */
                if (r_ptr->flags1 & RF1_UNIQUE) r_ptr->max_num = 1;
-               if (r_ptr->flags7 & RF7_UNIQUE_7) r_ptr->max_num = 5;
 
-               /* Clear player kills */
+               /* Hack -- Non-unique Nazguls are semi-unique */
+               else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num = MAX_NAZGUL_NUM;
+
+               /* Clear visible kills in this life */
                r_ptr->r_pkills = 0;
+
+               /* Clear all kills in this life */
+               r_ptr->r_akills = 0;
        }
 
 
@@ -3307,6 +3323,7 @@ static void player_wipe(void)
        cheat_xtra = FALSE;
        cheat_know = FALSE;
        cheat_live = FALSE;
+       cheat_save = FALSE;
 
        /* Assume no winning game */
        p_ptr->total_winner = FALSE;
@@ -3318,7 +3335,7 @@ static void player_wipe(void)
 
        /* Assume no cheating */
        p_ptr->noscore = 0;
-        p_ptr->wizard = FALSE;
+       p_ptr->wizard = FALSE;
 
        /* Not waiting to report score */
        p_ptr->wait_report_score = FALSE;
@@ -3327,16 +3344,16 @@ static void player_wipe(void)
        p_ptr->pet_follow_distance = PET_FOLLOW_DIST;
        p_ptr->pet_extra_flags = (PF_TELEPORT | PF_ATTACK_SPELL | PF_SUMMON_SPELL);
 
-        /* Wipe the recall depths */
-        for (i = 0; i < max_d_idx; i++)
-        {
+       /* Wipe the recall depths */
+       for (i = 0; i < max_d_idx; i++)
+       {
                max_dlv[i] = 0;
-        }
+       }
 
        p_ptr->visit = 1;
 
-        /* Reset wild_mode to FALSE */
-        p_ptr->wild_mode = FALSE;
+       /* Reset wild_mode to FALSE */
+       p_ptr->wild_mode = FALSE;
 
        for (i = 0; i < 108; i++)
        {
@@ -3351,7 +3368,6 @@ static void player_wipe(void)
        p_ptr->arena_number = 0;
        p_ptr->inside_arena = FALSE;
        p_ptr->inside_quest = 0;
-       p_ptr->leftbldg = FALSE;
        for (i = 0; i < MAX_MANE; i++)
        {
                p_ptr->mane_spell[i] = -1;
@@ -3360,12 +3376,6 @@ static void player_wipe(void)
        p_ptr->mane_num = 0;
        p_ptr->exit_bldg = TRUE; /* only used for arena now -KMW- */
 
-       /* Reset rewards */
-       for (i = 0; i < MAX_BACT; i++)
-       {
-               p_ptr->rewards[i] = 0;
-       }
-
        /* Bounty */
        p_ptr->today_mon = 0;
 
@@ -3393,73 +3403,102 @@ static void player_wipe(void)
        }
 }
 
+
 /*
- *  Initialize random quests and final quests
+ *  Hook function for quest monsters
  */
-static void init_dungeon_quests(int number_of_quests)
+static bool mon_hook_quest(int r_idx)
 {
-       int i;
-       monster_race    *r_ptr;
+       monster_race *r_ptr = &r_info[r_idx];
 
-       /* Init the random quests */
-       init_flags = INIT_ASSIGN;
-       p_ptr->inside_quest = MIN_RANDOM_QUEST;
+       /* Random quests are in the dungeon */
+       if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
 
-       process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+       /* No random quests for aquatic monsters */
+       if (r_ptr->flags7 & RF7_AQUATIC) return FALSE;
+
+       /* No random quests for multiplying monsters */
+       if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE;
+
+       /* No quests to kill friendly monsters */
+       if (r_ptr->flags7 & RF7_FRIENDLY) return FALSE;
+
+       return TRUE;
+}
 
-       p_ptr->inside_quest = 0;
+
+/*
+ * Determine the random quest uniques
+ */
+void determine_random_questor(quest_type *q_ptr)
+{
+       int          r_idx;
+       monster_race *r_ptr;
 
        /* Prepare allocation table */
-       get_mon_num_prep(monster_quest, NULL);
+       get_mon_num_prep(mon_hook_quest, NULL);
 
-       /* Remove QUESTOR flag */
-       for (i = 1; i < max_r_idx; i++)
+       while (1)
        {
-               r_ptr = &r_info[i];
-               if (r_ptr->flags1 & RF1_QUESTOR) r_ptr->flags1 &= ~RF1_QUESTOR;
-       }
+               /*
+                * Random monster 5 - 10 levels out of depth
+                * (depending on level)
+                */
+               r_idx = get_mon_num(q_ptr->level + 5 + randint1(q_ptr->level / 10));
+               r_ptr = &r_info[r_idx];
 
-       /* Generate quests */
-       for (i = MIN_RANDOM_QUEST + number_of_quests - 1; i >= MIN_RANDOM_QUEST; i--)
-       {
-               quest_type      *q_ptr = &quest[i];
-               monster_race    *quest_r_ptr;
-               int             r_idx;
+               if (!(r_ptr->flags1 & RF1_UNIQUE)) continue;
 
-               q_ptr->status = QUEST_STATUS_TAKEN;
+               if (r_ptr->flags1 & RF1_QUESTOR) continue;
 
-               while (1)
-               {
-                       /*
-                        * Random monster 5 - 10 levels out of depth
-                        * (depending on level)
-                        */
-                       r_idx = get_mon_num(q_ptr->level + 5 + randint1(q_ptr->level / 10));
-                       r_ptr = &r_info[r_idx];
+               if (r_ptr->rarity > 100) continue;
+
+               if (r_ptr->flags7 & RF7_FRIENDLY) continue;
 
-                       if(!(r_ptr->flags1 & RF1_UNIQUE)) continue;
+               if (r_ptr->flags7 & RF7_AQUATIC) continue;
 
-                       if(r_ptr->flags1 & RF1_QUESTOR) continue;
+               if (r_ptr->flags8 & RF8_WILD_ONLY) continue;
 
-                       if(r_ptr->flags6 & RF6_SPECIAL) continue;
+               if (no_questor_or_bounty_uniques(r_idx)) continue;
 
-                       if(r_ptr->flags7 & RF7_FRIENDLY) continue;
+               /*
+                * Accept monsters that are 2 - 6 levels
+                * out of depth depending on the quest level
+                */
+               if (r_ptr->level > (q_ptr->level + (q_ptr->level / 20))) break;
+       }
 
-                       if(r_ptr->flags7 & RF7_AQUATIC) continue;
+       q_ptr->r_idx = r_idx;
+}
 
-                       if(r_ptr->flags8 & RF8_WILD_ONLY) continue;
 
-                       /*
-                        * Accept monsters that are 2 - 6 levels
-                        * out of depth depending on the quest level
-                        */
-                       if (r_ptr->level > (q_ptr->level + (q_ptr->level / 20))) break;
-               }
+/*
+ *  Initialize random quests and final quests
+ */
+static void init_dungeon_quests(void)
+{
+       int number_of_quests = MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1;
+       int i;
 
-               q_ptr->r_idx = r_idx;
-               quest_r_ptr = &r_info[q_ptr->r_idx];
+       /* Init the random quests */
+       init_flags = INIT_ASSIGN;
+       p_ptr->inside_quest = MIN_RANDOM_QUEST;
+
+       process_dungeon_file("q_info.txt", 0, 0, 0, 0);
+
+       p_ptr->inside_quest = 0;
+
+       /* Generate quests */
+       for (i = MIN_RANDOM_QUEST + number_of_quests - 1; i >= MIN_RANDOM_QUEST; i--)
+       {
+               quest_type      *q_ptr = &quest[i];
+               monster_race    *quest_r_ptr;
+
+               q_ptr->status = QUEST_STATUS_TAKEN;
+               determine_random_questor(q_ptr);
 
                /* Mark uniques */
+               quest_r_ptr = &r_info[q_ptr->r_idx];
                quest_r_ptr->flags1 |= RF1_QUESTOR;
 
                q_ptr->max_num = 1;
@@ -3469,13 +3508,13 @@ static void init_dungeon_quests(int number_of_quests)
        init_flags = INIT_ASSIGN;
        p_ptr->inside_quest = QUEST_OBERON;
 
-       process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+       process_dungeon_file("q_info.txt", 0, 0, 0, 0);
 
        quest[QUEST_OBERON].status = QUEST_STATUS_TAKEN;
 
        p_ptr->inside_quest = QUEST_SERPENT;
 
-       process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
+       process_dungeon_file("q_info.txt", 0, 0, 0, 0);
 
        quest[QUEST_SERPENT].status = QUEST_STATUS_TAKEN;
        p_ptr->inside_quest = 0;
@@ -3493,15 +3532,84 @@ static void init_turn(void)
        {
                /* Undead start just after midnight */
                turn = (TURNS_PER_TICK*3 * TOWN_DAWN) / 4 + 1;
+               turn_limit = TURNS_PER_TICK * TOWN_DAWN * MAX_DAYS + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
        }
        else
        {
                turn = 1;
+               turn_limit = TURNS_PER_TICK * TOWN_DAWN * (MAX_DAYS - 1) + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
        }
 
        dungeon_turn = 1;
+       dungeon_turn_limit = TURNS_PER_TICK * TOWN_DAWN * (MAX_DAYS - 1) + TURNS_PER_TICK * TOWN_DAWN * 3 / 4;
 }
 
+
+/* 
+ * Try to wield everything wieldable in the inventory. 
+ * Code taken from Angband 3.1.0 under Angband license
+ */ 
+static void wield_all(void) 
+{ 
+       object_type *o_ptr; 
+       object_type *i_ptr; 
+       object_type object_type_body; 
+       int slot; 
+       int item; 
+       /* Scan through the slots backwards */ 
+       for (item = INVEN_PACK - 1; item >= 0; item--) 
+       { 
+               o_ptr = &inventory[item]; 
+               /* Skip non-objects */ 
+               if (!o_ptr->k_idx) continue; 
+               /* Make sure we can wield it and that there's nothing else in that slot */ 
+               slot = wield_slot(o_ptr); 
+               if (slot < INVEN_RARM) continue; 
+               if (slot == INVEN_LITE) continue; /* Does not wield toaches because buys a lantern soon */
+               if (inventory[slot].k_idx) continue; 
+               /* Get local object */ 
+               i_ptr = &object_type_body; 
+               object_copy(i_ptr, o_ptr); 
+               /* Modify quantity */ 
+               i_ptr->number = 1; 
+               /* Decrease the item (from the pack) */ 
+               if (item >= 0) 
+               { 
+                       inven_item_increase(item, -1); 
+                       inven_item_optimize(item); 
+               } 
+               /* Decrease the item (from the floor) */ 
+               else 
+               { 
+                       floor_item_increase(0 - item, -1); 
+                       floor_item_optimize(0 - item); 
+               } 
+               /* Get the wield slot */ 
+               o_ptr = &inventory[slot]; 
+               /* Wear the new stuff */ 
+               object_copy(o_ptr, i_ptr); 
+               /* Increase the weight */ 
+               p_ptr->total_weight += i_ptr->weight; 
+               /* Increment the equip counter by hand */ 
+               equip_cnt++;
+
+       } 
+       return; 
+} 
+
+
 /*
  * Each player starts out with a few items, given as tval/sval pairs.
  * In addition, he always has some food and a few torches.
@@ -3628,7 +3736,7 @@ static byte player_init[MAX_CLASS][3][2] =
        },
 
        {
-               /* Harper */
+               /* Bard */
                { TV_MUSIC_BOOK, 0 },
                { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR},
                { TV_SWORD, SV_SHORT_SWORD },
@@ -3663,7 +3771,7 @@ static byte player_init[MAX_CLASS][3][2] =
        },
 
        {
-               /* Kihei */
+               /* Cavalry */
                { TV_BOW, SV_SHORT_BOW },
                { TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL},
                { TV_POLEARM, SV_BROAD_SPEAR}
@@ -3677,7 +3785,7 @@ static byte player_init[MAX_CLASS][3][2] =
        },
 
        {
-               /* Kaji */
+               /* Weaponsmith */
                { TV_RING, SV_RING_RES_FEAR }, /* Warriors need it! */
                { TV_HARD_ARMOR, SV_CHAIN_MAIL },
                { TV_POLEARM, SV_BROAD_AXE }
@@ -3694,10 +3802,50 @@ static byte player_init[MAX_CLASS][3][2] =
                { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
                { TV_SWORD, SV_DAGGER }
        },
+       {
+               /* Sniper */
+               { TV_BOW, SV_LIGHT_XBOW },
+               { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
+               { TV_SWORD, SV_DAGGER }
+       },
 };
 
 
 /*
+ * Hook function for human corpses
+ */
+static bool monster_hook_human(int r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE;
+
+       if (my_strchr("pht", r_ptr->d_char)) return TRUE;
+
+       return FALSE;
+}
+
+
+/*
+ * Add an outfit object
+ */
+static void add_outfit(object_type *o_ptr)
+{
+       s16b slot;
+
+       object_aware(o_ptr);
+       object_known(o_ptr);
+       slot = inven_carry(o_ptr);
+
+       /* Auto-inscription */
+       autopick_alter_item(slot, FALSE);
+
+       /* Now try wielding everything */ 
+       wield_all(); 
+}
+
+
+/*
  * Init players with some belongings
  *
  * Having an item makes the player "aware" of its purpose.
@@ -3716,36 +3864,71 @@ void player_outfit(void)
        /* Give the player some food */
        switch (p_ptr->prace)
        {
-               case RACE_GOLEM:
-               case RACE_SKELETON:
-               case RACE_ZOMBIE:
-               case RACE_VAMPIRE:
-               case RACE_SPECTRE:
-               case RACE_ENT:
-               case RACE_DEMON:
-               case RACE_ANDROID:
-               {
-                       if (p_ptr->pclass == CLASS_BERSERKER) break;
-                       /* Scrolls of satisfy hunger */
-                       object_prep(q_ptr, lookup_kind(TV_SCROLL, SV_SCROLL_SATISFY_HUNGER));
-                       q_ptr->number = (byte)rand_range(2, 5);
-                       object_aware(q_ptr);
-                       object_known(q_ptr);
+       case RACE_VAMPIRE:
+               /* Nothing! */
+               /* Vampires can drain blood of creatures */
+               break;
 
-                       (void)inven_carry(q_ptr);
+       case RACE_DEMON:
+               /* Demon can drain vitality from humanoid corpse */
 
-                       break;
-               }
-               default:
-               {
-                       /* Food rations */
-                       object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
-                       q_ptr->number = (byte)rand_range(3, 7);
-                       object_aware(q_ptr);
-                       object_known(q_ptr);
+               /* Prepare allocation table */
+               get_mon_num_prep(monster_hook_human, NULL);
 
-                       (void)inven_carry(q_ptr);
+               for (i = rand_range(3,4); i > 0; i--)
+               {
+                       object_prep(q_ptr, lookup_kind(TV_CORPSE, SV_CORPSE));
+                       q_ptr->pval = get_mon_num(2);
+                       q_ptr->number = 1;
+                       add_outfit(q_ptr);
                }
+               break;
+
+#if 0
+       case RACE_SKELETON:
+               /* Some Skeletons */
+               object_prep(q_ptr, lookup_kind(TV_SKELETON, SV_ANY));
+               q_ptr->number = (byte)rand_range(7, 12);
+               add_outfit(q_ptr);
+               break;
+#endif
+       case RACE_SKELETON:
+       case RACE_GOLEM:
+       case RACE_ZOMBIE:
+       case RACE_SPECTRE:
+               /* Staff (of Nothing) */
+               object_prep(q_ptr, lookup_kind(TV_STAFF, SV_STAFF_NOTHING));
+               q_ptr->number = 1;
+
+               add_outfit(q_ptr);
+               break;
+
+       case RACE_ENT:
+               /* Potions of Water */
+               object_prep(q_ptr, lookup_kind(TV_POTION, SV_POTION_WATER));
+               q_ptr->number = (byte)rand_range(15, 23);
+               add_outfit(q_ptr);
+
+               break;
+
+       case RACE_ANDROID:
+               /* Flasks of oil */
+               object_prep(q_ptr, lookup_kind(TV_FLASK, SV_ANY));
+
+               /* Fuel with oil (move pval to xtra4) */
+               apply_magic(q_ptr, 1, AM_NO_FIXED_ART);
+
+               q_ptr->number = (byte)rand_range(7, 12);
+               add_outfit(q_ptr);
+
+               break;
+
+       default:
+               /* Food rations */
+               object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
+               q_ptr->number = (byte)rand_range(3, 7);
+
+               add_outfit(q_ptr);
        }
 
        /* Get local object */
@@ -3758,10 +3941,7 @@ void player_outfit(void)
 
                q_ptr->number = (byte)rand_range(2, 5);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        else if (p_ptr->pclass != CLASS_NINJA)
        {
@@ -3769,10 +3949,8 @@ void player_outfit(void)
                object_prep(q_ptr, lookup_kind(TV_LITE, SV_LITE_TORCH));
                q_ptr->number = (byte)rand_range(3, 7);
                q_ptr->xtra4 = rand_range(3, 7) * 500;
-               object_aware(q_ptr);
-               object_known(q_ptr);
 
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
 
        /* Get local object */
@@ -3784,20 +3962,14 @@ void player_outfit(void)
                object_prep(q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
                q_ptr->number = (byte)rand_range(15, 20);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        if (p_ptr->pclass == CLASS_RANGER)
        {
                /* Hack -- Give the player some arrows */
                object_prep(q_ptr, lookup_kind(TV_BOW, SV_SHORT_BOW));
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_ARCHER)
        {
@@ -3805,10 +3977,7 @@ void player_outfit(void)
                object_prep(q_ptr, lookup_kind(TV_ARROW, SV_AMMO_NORMAL));
                q_ptr->number = (byte)rand_range(15, 20);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_HIGH_MAGE)
        {
@@ -3817,10 +3986,7 @@ void player_outfit(void)
                q_ptr->number = 1;
                q_ptr->pval = (byte)rand_range(25, 30);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_SORCERER)
        {
@@ -3830,10 +3996,7 @@ void player_outfit(void)
                        object_prep(q_ptr, lookup_kind(i, 0));
                        q_ptr->number = 1;
 
-                       object_aware(q_ptr);
-                       object_known(q_ptr);
-
-                       (void)inven_carry(q_ptr);
+                       add_outfit(q_ptr);
                }
        }
        else if (p_ptr->pclass == CLASS_TOURIST)
@@ -3844,51 +4007,33 @@ void player_outfit(void)
                        object_prep(q_ptr, lookup_kind(TV_SHOT, SV_AMMO_LIGHT));
                        q_ptr->number = (byte)rand_range(15, 20);
 
-                       object_aware(q_ptr);
-                       object_known(q_ptr);
-
-                       (void)inven_carry(q_ptr);
+                       add_outfit(q_ptr);
                }
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_BISCUIT));
                q_ptr->number = (byte)rand_range(2, 4);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_WAYBREAD));
                q_ptr->number = (byte)rand_range(2, 4);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_JERKY));
                q_ptr->number = (byte)rand_range(1, 3);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_ALE));
                q_ptr->number = (byte)rand_range(2, 4);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_WINE));
                q_ptr->number = (byte)rand_range(2, 4);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_NINJA)
        {
@@ -3896,10 +4041,15 @@ void player_outfit(void)
                object_prep(q_ptr, lookup_kind(TV_SPIKE, 0));
                q_ptr->number = (byte)rand_range(15, 20);
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
+               add_outfit(q_ptr);
+       }
+       else if (p_ptr->pclass == CLASS_SNIPER)
+       {
+               /* Hack -- Give the player some bolts */
+               object_prep(q_ptr, lookup_kind(TV_BOLT, SV_AMMO_NORMAL));
+               q_ptr->number = (byte)rand_range(15, 20);
 
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
 
        if(p_ptr->pseikaku == SEIKAKU_SEXY)
@@ -3945,11 +4095,11 @@ void player_outfit(void)
                        q_ptr->name2 = EGO_BRAND_POIS;
                }
 
-               object_aware(q_ptr);
-               object_known(q_ptr);
-
-               (void)inven_carry(q_ptr);
+               add_outfit(q_ptr);
        }
+
+       /* Hack -- make aware of the water */
+       k_info[lookup_kind(TV_POTION, SV_POTION_WATER)].aware = TRUE;
 }
 
 
@@ -4108,20 +4258,20 @@ static bool get_player_race(void)
                }
                else k = -1;
                if (c == '?')
-                {
-#ifdef JP                 
-                        show_help("jraceclas.txt#TheRaces");
+               {
+#ifdef JP
+                       show_help("jraceclas.txt#TheRaces");
 #else
-                        show_help("raceclas.txt#TheRaces");
+                       show_help("raceclas.txt#TheRaces");
 #endif
-                }
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
                        screen_load();
                }
@@ -4132,10 +4282,9 @@ static bool get_player_race(void)
        p_ptr->prace = k;
 
        rp_ptr = &race_info[p_ptr->prace];
-       str = rp_ptr->title;
 
        /* Display */
-       c_put_str(TERM_L_BLUE, str, 4, 15);
+       c_put_str(TERM_L_BLUE, rp_ptr->title, 4, 15);
 
        /* Success */
        return TRUE;
@@ -4323,20 +4472,20 @@ static bool get_player_class(void)
                }
                else k = -1;
                if (c == '?')
-                {
-#ifdef JP                 
-                        show_help("jraceclas.txt#TheClasses");
+               {
+#ifdef JP
+                       show_help("jraceclas.txt#TheClasses");
 #else
-                        show_help("raceclas.txt#TheClasses");
+                       show_help("raceclas.txt#TheClasses");
 #endif
-                }
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                        screen_load();
@@ -4348,15 +4497,10 @@ static bool get_player_class(void)
        p_ptr->pclass = k;
        cp_ptr = &class_info[p_ptr->pclass];
        mp_ptr = &m_info[p_ptr->pclass];
-       str = cp_ptr->title;
 
 
        /* Display */
-#ifdef JP
-       c_put_str(TERM_L_BLUE, str, 5, 15);
-#else
        c_put_str(TERM_L_BLUE, cp_ptr->title, 5, 15);
-#endif
 
        return TRUE;
 }
@@ -4504,7 +4648,7 @@ static bool get_player_seikaku(void)
                if (c == '8')
                {
                        if (cs >= 4) cs -= 4;
-                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       if (cs != MAX_SEIKAKU && seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
                        {
                                if((cs - 4) > 0)
                                        cs -= 4;
@@ -4515,7 +4659,7 @@ static bool get_player_seikaku(void)
                if (c == '4')
                {
                        if (cs > 0) cs--;
-                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       if (cs != MAX_SEIKAKU && seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
                        {
                                if((cs - 1) > 0)
                                        cs--;
@@ -4526,7 +4670,7 @@ static bool get_player_seikaku(void)
                if (c == '6')
                {
                        if (cs < MAX_SEIKAKU) cs++;
-                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       if (cs != MAX_SEIKAKU && seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
                        {
                                if((cs + 1) <= MAX_SEIKAKU)
                                        cs++;
@@ -4537,7 +4681,7 @@ static bool get_player_seikaku(void)
                if (c == '2')
                {
                        if ((cs + 4) <= MAX_SEIKAKU) cs += 4;
-                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       if (cs != MAX_SEIKAKU && seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
                        {
                                if((cs + 4) <= MAX_SEIKAKU)
                                        cs += 4;
@@ -4565,20 +4709,20 @@ static bool get_player_seikaku(void)
                }
                else k = -1;
                if (c == '?')
-                {
-#ifdef JP                 
-                        show_help("jraceclas.txt#ThePersonalities");
+               {
+#ifdef JP
+                       show_help("jraceclas.txt#ThePersonalities");
 #else
-                        show_help("raceclas.txt#ThePersonalities");
+                       show_help("raceclas.txt#ThePersonalities");
 #endif
-                }
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                        screen_load();
@@ -4644,7 +4788,7 @@ static bool get_stat_limits(void)
                j = rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i];
 
                /* Obtain the "maximal" stat */
-               m = adjust_stat(17, j, TRUE);
+               m = adjust_stat(17, j);
 
                /* Save the maximum */
                mval[i] = m;
@@ -4670,7 +4814,7 @@ static bool get_stat_limits(void)
                }
 
                /* Obtain the current stat */
-               m = adjust_stat(cval[i], j, TRUE);
+               m = adjust_stat(cval[i], j);
 
                /* Above 18 */
                if (m > 18)
@@ -4734,7 +4878,7 @@ static bool get_stat_limits(void)
                                j = rp_ptr->r_adj[cs] + cp_ptr->c_adj[cs] + ap_ptr->a_adj[cs];
 
                                /* Obtain the current stat */
-                               m = adjust_stat(cval[cs], j, TRUE);
+                               m = adjust_stat(cval[cs], j);
                                
                                /* Above 18 */
                                if (m > 18)
@@ -4769,13 +4913,11 @@ static bool get_stat_limits(void)
                c = inkey();
                switch ( c ){
                case 'Q':
-                       birth_quit();
-                       break;
+                       birth_quit();
                case 'S':
-                       return (FALSE); 
-                       break;
+                       return FALSE;
                case ESCAPE:
-                       break;
+                       break;
                case ' ':
                case '\r':
                case '\n':
@@ -4840,26 +4982,24 @@ static bool get_stat_limits(void)
                        }
                        break;
                case '?':
-                {
-#ifdef JP                 
-                        show_help("jbirth.txt#AutoRoller");
+#ifdef JP
+                       show_help("jbirth.txt#AutoRoller");
 #else
-                        show_help("birth.txt#AutoRoller");
+                       show_help("birth.txt#AutoRoller");
 #endif
-                }
                        break;
                case '=':
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                        screen_load();
                        break;
                default:
-                       bell();
+                       bell();
                        break;
                }
                if(c == ESCAPE || ((c == ' ' || c == '\r' || c == '\n') && cs == 6))break;
@@ -4878,17 +5018,21 @@ static bool get_stat_limits(void)
 #ifdef ALLOW_AUTOROLLER
 static bool get_chara_limits(void)
 {
+#define MAXITEMS 8
+
        int i, j, m, cs, os;
-       int mval[6], cval[6];
+       int mval[MAXITEMS], cval[MAXITEMS];
        int max_percent, min_percent;
        char c;
        char buf[80], cur[80];
-       char param[3][80] = {
+       cptr itemname[] = {
 #ifdef JP
+               "ǯÎð",
                "¿ÈĹ(¥¤¥ó¥Á)",
                "ÂνÅ(¥Ý¥ó¥É)",
                "¼Ò²ñŪÃÏ°Ì"
 #else
+               "age",
                "height",
                "weight",
                "social class"
@@ -4927,31 +5071,38 @@ static bool get_chara_limits(void)
 #endif
 
        /* Output the maximum stats */
-       for (i = 0; i < 6; i++)
+       for (i = 0; i < MAXITEMS; i++)
        {
                /* Obtain the "maximal" stat */
                switch (i)
                {
-               case 0: /* Minimum height */
+               case 0: /* Minimum age */
+                       m = rp_ptr->b_age + 1;
+                       break;
+               case 1: /* Maximum age */
+                       m = rp_ptr->b_age + rp_ptr->m_age;
+                       break;
+
+               case 2: /* Minimum height */
                        if (p_ptr->psex == SEX_MALE) m = rp_ptr->m_b_ht-rp_ptr->m_m_ht*4+1;
                        else m = rp_ptr->f_b_ht-rp_ptr->f_m_ht*4+1;
                        break;
-               case 1: /* Maximum height */
+               case 3: /* Maximum height */
                        if (p_ptr->psex == SEX_MALE) m = rp_ptr->m_b_ht+rp_ptr->m_m_ht*4-1;
                        else m = rp_ptr->f_b_ht+rp_ptr->f_m_ht*4-1;
                        break;
-               case 2: /* Minimum weight */
+               case 4: /* Minimum weight */
                        if (p_ptr->psex == SEX_MALE) m = (rp_ptr->m_b_wt * min_percent / 100) - (rp_ptr->m_m_wt * min_percent / 75) +1;
                        else m = (rp_ptr->f_b_wt * min_percent / 100) - (rp_ptr->f_m_wt * min_percent / 75) +1;
                        break;
-               case 3: /* Maximum weight */
+               case 5: /* Maximum weight */
                        if (p_ptr->psex == SEX_MALE) m = (rp_ptr->m_b_wt * max_percent / 100) + (rp_ptr->m_m_wt * max_percent / 75) -1;
                        else m = (rp_ptr->f_b_wt * max_percent / 100) + (rp_ptr->f_m_wt * max_percent / 75) -1;
                        break;
-               case 4: /* Minimum social class */
+               case 6: /* Minimum social class */
                        m = 1;
                        break;
-               case 5: /* Maximum social class */
+               case 7: /* Maximum social class */
                        m = 100;
                        break;
                default:
@@ -4964,10 +5115,10 @@ static bool get_chara_limits(void)
                cval[i] = m;
        }
 
-       for (i = 0; i < 3; i++)
+       for (i = 0; i < 4; i++)
        {
                /* Prepare a prompt */
-               sprintf(buf, "%-12s (%3d - %3d)", param[i], mval[i*2], mval[i*2+1]);
+               sprintf(buf, "%-12s (%3d - %3d)", itemname[i], mval[i*2], mval[i*2+1]);
 
                /* Dump the prompt */
                put_str(buf, 14 + i, 20);
@@ -4981,30 +5132,29 @@ static bool get_chara_limits(void)
        
        /* Get a minimum stat */
        cs = 0;
-       os = 6;
+       os = MAXITEMS;
        while (TRUE)
        {
                /* Move Cursol */
                if (cs != os)
                {
-                       if(os == 6)
-                       {
 #ifdef JP
-                               c_put_str(TERM_WHITE, "·èÄꤹ¤ë", 18, 35);
+                       const char accept[] = "·èÄꤹ¤ë";
 #else
-                               c_put_str(TERM_WHITE, "Accept", 18, 35);
+                       const char accept[] = "Accept";
 #endif
+                       if(os == MAXITEMS)
+                       {
+                               c_put_str(TERM_WHITE, accept, 19, 35);
                        }
-                       else if(os < 6)
+                       else
+                       {
                                c_put_str(TERM_WHITE, cur, 14 + os/2, 45 + 8 * (os%2));
+                       }
                        
-                       if(cs == 6)
+                       if(cs == MAXITEMS)
                        {
-#ifdef JP
-                               c_put_str(TERM_YELLOW, "·èÄꤹ¤ë", 18, 35);
-#else
-                               c_put_str(TERM_YELLOW, "Accept", 18, 35);
-#endif
+                               c_put_str(TERM_YELLOW, accept, 19, 35);
                        }
                        else
                        {
@@ -5020,7 +5170,6 @@ static bool get_chara_limits(void)
                switch (c){
                case 'Q':
                        birth_quit();
-                       break;
                case 'S':
                        return (FALSE);
                case ESCAPE:
@@ -5028,7 +5177,7 @@ static bool get_chara_limits(void)
                case ' ':
                case '\r':
                case '\n':
-                       if(cs == 6) break;
+                       if(cs == MAXITEMS) break;
                        cs++;
                        c = '6';
                        break;
@@ -5038,8 +5187,8 @@ static bool get_chara_limits(void)
                        break;
                case '2':
                case 'j':
-                       if (cs < 6) cs += 2;
-                       if (cs > 6) cs = 6;
+                       if (cs < MAXITEMS) cs += 2;
+                       if (cs > MAXITEMS) cs = MAXITEMS;
                        break;
                case '4':
                case 'h':
@@ -5047,11 +5196,11 @@ static bool get_chara_limits(void)
                        break;
                case '6':
                case 'l':
-                       if (cs < 6) cs++;
+                       if (cs < MAXITEMS) cs++;
                        break;
                case '-':
                case '<':
-                       if (cs != 6)
+                       if (cs != MAXITEMS)
                        {
                                if(cs%2)
                                {
@@ -5073,7 +5222,7 @@ static bool get_chara_limits(void)
                        break;
                case '+':
                case '>':
-                       if (cs != 6)
+                       if (cs != MAXITEMS)
                        {
                                if(cs%2)
                                {
@@ -5094,7 +5243,7 @@ static bool get_chara_limits(void)
                        }
                        break;
                case 'm':
-                       if(cs != 6)
+                       if(cs != MAXITEMS)
                        {
                                if(cs%2)
                                {
@@ -5115,7 +5264,7 @@ static bool get_chara_limits(void)
                        }
                        break;
                case 'n':
-                       if(cs != 6)
+                       if(cs != MAXITEMS)
                        {
                                if(cs%2)
                                {
@@ -5136,18 +5285,18 @@ static bool get_chara_limits(void)
                        }
                        break;
                case '?':
-#ifdef JP                 
-                        show_help("jbirth.txt#AutoRoller");
+#ifdef JP
+                       show_help("jbirth.txt#AutoRoller");
 #else
-                        show_help("birth.txt#AutoRoller");
+                       show_help("birth.txt#AutoRoller");
 #endif
                        break;
                case '=':
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                        screen_load();
@@ -5156,98 +5305,231 @@ static bool get_chara_limits(void)
                        bell();
                        break;
                }
-               if(c == ESCAPE || ((c == ' ' || c == '\r' || c == '\n') && cs == 6))break;
+               if(c == ESCAPE || ((c == ' ' || c == '\r' || c == '\n') && cs == MAXITEMS))break;
        }
 
        /* Input the minimum stats */
-       for (i = 0; i < 6; i++)
-       {
-               /* Save the minimum stat */
-               chara_limit[i] = (cval[i] > 0) ? cval[i] : 0;
-       }
+       chara_limit.agemin = cval[0];
+       chara_limit.agemax = cval[1];
+       chara_limit.htmin = cval[2];
+       chara_limit.htmax = cval[3];
+       chara_limit.wtmin = cval[4];
+       chara_limit.wtmax = cval[5];
+       chara_limit.scmin = cval[6];
+       chara_limit.scmax = cval[7];
+
        return TRUE;
 }
 #endif
 
+#define HISTPREF_LIMIT 1024
+static char *histpref_buf = NULL;
+
 /*
- *  Character background edit-mode
+ * Hook function for reading the histpref.prf file.
  */
-static void edit_history(void)
+void add_history_from_pref_line(cptr t)
 {
-        char old_history[4][60];
-       char c;
-       int y = 0, x = 0;
-       int i, j;
+       /* Do nothing if the buffer is not ready */
+       if (!histpref_buf) return;
 
-        /* Edit character background */
-        for (i = 0; i < 4; i++)
-        {
-                sprintf(old_history[i], "%s", p_ptr->history[i]);
-        }
-        /* Turn 0 to space */
-       for (i = 0; i < 4; i++)
+       my_strcat(histpref_buf, t, HISTPREF_LIMIT);
+}
+
+
+static bool do_cmd_histpref(void)
+{
+       char buf[80];
+       errr err;
+       int i, j, n;
+       char *s, *t;
+       char temp[64 * 4];
+       char histbuf[HISTPREF_LIMIT];
+
+#ifdef JP
+       if (!get_check("À¸¤¤Î©¤ÁÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return FALSE;
+#else
+       if (!get_check("Load background history preference file? ")) return FALSE;
+#endif
+
+       /* Prepare the buffer */
+       histbuf[0] = '\0';
+       histpref_buf = histbuf;
+
+#ifdef JP
+       sprintf(buf, "histedit-%s.prf", player_base);
+#else
+       sprintf(buf, "histpref-%s.prf", player_base);
+#endif
+       err = process_histpref_file(buf);
+
+       /* Process 'hist????.prf' if 'hist????-<name>.prf' doesn't exist */
+       if (0 > err)
+       {
+#ifdef JP
+               strcpy(buf, "histedit.prf");
+#else
+               strcpy(buf, "histpref.prf");
+#endif
+               err = process_histpref_file(buf);
+       }
+
+       if (err)
+       {
+#ifdef JP
+               msg_print("À¸¤¤Î©¤ÁÀßÄê¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
+#else
+               msg_print("Failed to load background history preference.");
+#endif
+               msg_print(NULL);
+
+               /* Kill the buffer */
+               histpref_buf = NULL;
+
+               return FALSE;
+       }
+       else if (!histpref_buf[0])
+       {
+#ifdef JP
+               msg_print("Í­¸ú¤ÊÀ¸¤¤Î©¤ÁÀßÄê¤Ï¤³¤Î¥Õ¥¡¥¤¥ë¤Ë¤¢¤ê¤Þ¤»¤ó¡£");
+#else
+               msg_print("There does not exist valid background history preference.");
+#endif
+               msg_print(NULL);
+
+               /* Kill the buffer */
+               histpref_buf = NULL;
+
+               return FALSE;
+       }
+
+       /* Clear the previous history strings */
+       for (i = 0; i < 4; i++) p_ptr->history[i][0] = '\0';
+
+       /* Skip leading spaces */
+       for (s = histpref_buf; *s == ' '; s++) /* loop */;
+
+       /* Get apparent length */
+       n = strlen(s);
+
+       /* Kill trailing spaces */
+       while ((n > 0) && (s[n - 1] == ' ')) s[--n] = '\0';
+
+       roff_to_buf(s, 60, temp, sizeof(temp));
+       t = temp;
+       for (i = 0; i < 4; i++)
+       {
+               if (t[0] == 0) break;
+               else
+               {
+                       strcpy(p_ptr->history[i], t);
+                       t += strlen(t) + 1;
+               }
+       }
+
+       /* Fill the remaining spaces */
+       for (i = 0; i < 4; i++)
        {
                for (j = 0; p_ptr->history[i][j]; j++) /* loop */;
 
                for (; j < 59; j++) p_ptr->history[i][j] = ' ';
                p_ptr->history[i][59] = '\0';
        }
-        display_player(1);
+
+       /* Kill the buffer */
+       histpref_buf = NULL;
+
+       return TRUE;
+}
+
+/*
+ *  Character background edit-mode
+ */
+static void edit_history(void)
+{
+       char old_history[4][60];
+       int y = 0, x = 0;
+       int i, j;
+
+       /* Edit character background */
+       for (i = 0; i < 4; i++)
+       {
+               sprintf(old_history[i], "%s", p_ptr->history[i]);
+       }
+       /* Turn 0 to space */
+       for (i = 0; i < 4; i++)
+       {
+               for (j = 0; p_ptr->history[i][j]; j++) /* loop */;
+
+               for (; j < 59; j++) p_ptr->history[i][j] = ' ';
+               p_ptr->history[i][59] = '\0';
+       }
+       display_player(1);
 #ifdef JP
-        c_put_str(TERM_L_GREEN, "(¥­¥ã¥é¥¯¥¿¡¼¤ÎÀ¸¤¤Î©¤Á - ÊÔ½¸¥â¡¼¥É)", 11, 20);
+       c_put_str(TERM_L_GREEN, "(¥­¥ã¥é¥¯¥¿¡¼¤ÎÀ¸¤¤Î©¤Á - ÊÔ½¸¥â¡¼¥É)", 11, 20);
+       put_str("[ ¥«¡¼¥½¥ë¥­¡¼¤Ç°ÜÆ°¡¢Enter¤Ç½ªÎ»¡¢Ctrl-A¤Ç¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß ]", 17, 10);
 #else
-        c_put_str(TERM_L_GREEN, "(Character Background - Edit Mode)", 11, 20);
+       c_put_str(TERM_L_GREEN, "(Character Background - Edit Mode)", 11, 20);
+       put_str("[ Cursor key for Move, Enter for End, Ctrl-A for Read pref ]", 17, 10);
 #endif
 
-        while (TRUE)
-        {
-                for (i = 0; i < 4; i++)
-                {
-                        put_str(p_ptr->history[i], i + 12, 10);
-                }
+       while (TRUE)
+       {
+               int skey;
+               char c;
+
+               for (i = 0; i < 4; i++)
+               {
+                       put_str(p_ptr->history[i], i + 12, 10);
+               }
 #ifdef JP
                if (iskanji2(p_ptr->history[y], x))
                        c_put_str(TERM_L_BLUE, format("%c%c", p_ptr->history[y][x],p_ptr->history[y][x+1]), y + 12, x + 10);
                else
 #endif
-                c_put_str(TERM_L_BLUE, format("%c", p_ptr->history[y][x]), y + 12, x + 10);
+               c_put_str(TERM_L_BLUE, format("%c", p_ptr->history[y][x]), y + 12, x + 10);
 
                /* Place cursor just after cost of current stat */
-                Term_gotoxy(x + 10, y + 12);
+               Term_gotoxy(x + 10, y + 12);
 
-                c = inkey();
+               /* Get special key code */
+               skey = inkey_special(TRUE);
 
-                if (c == '8')
-                {
-                        y--;
-                        if (y < 0) y = 3;
+               /* Get a character code */
+               if (!(skey & SKEY_MASK)) c = (char)skey;
+               else c = 0;
+
+               if (skey == SKEY_UP || c == KTRL('p'))
+               {
+                       y--;
+                       if (y < 0) y = 3;
 #ifdef JP
                        if ((x > 0) && (iskanji2(p_ptr->history[y], x-1))) x--;
 #endif
-                }
-                else if (c == '2')
-                {
-                        y++;
-                        if (y > 3) y = 0;
+               }
+               else if (skey == SKEY_DOWN || c == KTRL('n'))
+               {
+                       y++;
+                       if (y > 3) y = 0;
 #ifdef JP
                        if ((x > 0) && (iskanji2(p_ptr->history[y], x-1))) x--;
 #endif
-                }
-                else if (c == '6')
-                {
+               }
+               else if (skey == SKEY_RIGHT || c == KTRL('f'))
+               {
 #ifdef JP
                        if (iskanji2(p_ptr->history[y], x)) x++;
 #endif
-                        x++;
-                        if (x > 58)
+                       x++;
+                       if (x > 58)
                        {
                                x = 0;
                                if (y < 3) y++;
                        }
-                }
-                else if (c == '4')
-                {
-                        x--;
+               }
+               else if (skey == SKEY_LEFT || c == KTRL('b'))
+               {
+                       x--;
                        if (x < 0)
                        {
                                if (y)
@@ -5261,20 +5543,43 @@ static void edit_history(void)
 #ifdef JP
                        if ((x > 0) && (iskanji2(p_ptr->history[y], x-1))) x--;
 #endif
-                }
-                else if (c == '\r')
-                {
-                        break;
-                }
-                else if (c == ESCAPE)
-                {
-                        for (i = 0; i < 4; i++)
-                        {
-                                sprintf(p_ptr->history[i], "%s", old_history[i]);
-                                put_str(p_ptr->history[i], i + 12, 10);
-                        }
-                        break;
-                }
+               }
+               else if (c == '\r' || c == '\n')
+               {
+                       Term_erase(0, 11, 255);
+                       Term_erase(0, 17, 255);
+#ifdef JP
+                       put_str("(¥­¥ã¥é¥¯¥¿¡¼¤ÎÀ¸¤¤Î©¤Á - ÊÔ½¸ºÑ¤ß)", 11, 20);
+#else
+                       put_str("(Character Background - Edited)", 11, 20);
+#endif
+                       break;
+               }
+               else if (c == ESCAPE)
+               {
+                       clear_from(11);
+#ifdef JP
+                       put_str("(¥­¥ã¥é¥¯¥¿¡¼¤ÎÀ¸¤¤Î©¤Á)", 11, 25);
+#else
+                       put_str("(Character Background)", 11, 25);
+#endif
+
+                       for (i = 0; i < 4; i++)
+                       {
+                               sprintf(p_ptr->history[i], "%s", old_history[i]);
+                               put_str(p_ptr->history[i], i + 12, 10);
+                       }
+                       break;
+               }
+               else if (c == KTRL('A'))
+               {
+                       if (do_cmd_histpref())
+                       {
+#ifdef JP
+                               if ((x > 0) && (iskanji2(p_ptr->history[y], x - 1))) x--;
+#endif
+                       }
+               }
                else if (c == '\010')
                {
                        x--;
@@ -5288,7 +5593,7 @@ static void edit_history(void)
                                else x = 0;
                        }
 
-                        p_ptr->history[y][x] = ' ';
+                       p_ptr->history[y][x] = ' ';
 #ifdef JP
                        if ((x > 0) && (iskanji2(p_ptr->history[y], x - 1)))
                        {
@@ -5300,9 +5605,9 @@ static void edit_history(void)
 #ifdef JP
                else if (iskanji(c) || isprint(c))
 #else
-                else if (isprint(c)) /* BUGFIX */
+               else if (isprint(c)) /* BUGFIX */
 #endif
-                {
+               {
 #ifdef JP
                        if (iskanji2(p_ptr->history[y], x))
                        {
@@ -5328,15 +5633,15 @@ static void edit_history(void)
                                c = inkey();
                        }
 #endif
-                        p_ptr->history[y][x++] = c;
+                       p_ptr->history[y][x++] = c;
                        if (x > 58)
                        {
                                x = 0;
                                y++;
                                if (y > 3) y = 0;
                        }
-                }
-        } /* while (TRUE) */
+               }
+       } /* while (TRUE) */
 
 }
 
@@ -5351,7 +5656,6 @@ static void edit_history(void)
 static bool player_birth_aux(void)
 {
        int i, k, n, cs, os;
-       int number_of_quests;
 
        int mode = 0;
 
@@ -5371,7 +5675,6 @@ static bool player_birth_aux(void)
        char b2 = ']';
 
        char buf[80], cur[80];
-       char inp[80];
 
 
        /*** Intro ***/
@@ -5419,88 +5722,6 @@ static bool player_birth_aux(void)
 #endif
 
 
-       /*** Quick Start ***/
-
-       if (previous_char.quick_ok)
-       {
-               bool do_quick_start = FALSE;
-
-               /* Extra info */
-#ifdef JP
-       put_str("¥¯¥¤¥Ã¥¯¡¦¥¹¥¿¡¼¥È¤ò»È¤¦¤È°ÊÁ°¤ÈÁ´¤¯Æ±¤¸¥­¥ã¥é¥¯¥¿¡¼¤Ç»Ï¤á¤é¤ì¤Þ¤¹¡£", 11, 5);
-#else
-       put_str("Do you want to use the quick start function(same character as your last one).", 11, 2);
-#endif
-
-               /* Choose */
-               while (1)
-               {
-#ifdef JP
-                       put_str("¥¯¥¤¥Ã¥¯¡¦¥¹¥¿¡¼¥È¤ò»È¤¤¤Þ¤¹¤«¡©[y/n]", 14, 10);
-#else
-                       put_str("Use quick start? [y/n]", 14, 10);
-#endif
-                       c = inkey();
-                       if (c == 'Q') quit(NULL);
-                       else if (c == 'S') return (FALSE);
-                        else if (c == '?')
-                        {
-#ifdef JP                 
-                                show_help("jbirth.txt#QuickStart");
-#else
-                                show_help("birth.txt#QuickStart");
-#endif
-                        }
-                       else if ((c == 'y') || (c == 'Y'))
-                       {
-                               do_quick_start = TRUE;
-                               break;
-                       }
-                       else
-                       {
-                               do_quick_start = FALSE;
-                               break;
-                       }
-               }
-
-               if (do_quick_start)
-               {
-                       load_prev_data(FALSE);
-                       init_dungeon_quests(previous_char.quests);
-                       init_turn();
-
-                       sp_ptr = &sex_info[p_ptr->psex];
-                       rp_ptr = &race_info[p_ptr->prace];
-                       cp_ptr = &class_info[p_ptr->pclass];
-                        mp_ptr = &m_info[p_ptr->pclass];
-                       ap_ptr = &seikaku_info[p_ptr->pseikaku];
-
-                       /* Calc hitdie, but don't roll */
-                       get_extra(FALSE);
-
-                       /* Calculate the bonuses and hitpoints */
-                       p_ptr->update |= (PU_BONUS | PU_HP);
-
-                       /* Update stuff */
-                       update_stuff();
-
-                       /* Fully healed */
-                       p_ptr->chp = p_ptr->mhp;
-
-                       /* Fully rested */
-                       p_ptr->csp = p_ptr->msp;
-
-                       /* Process the player name */
-                       process_player_name(FALSE);
-
-                       return TRUE;
-               }
-
-               /* Clean up */
-               clear_from(10);
-       }
-
-
        /*** Player sex ***/
 
        /* Extra info */
@@ -5516,14 +5737,12 @@ static bool player_birth_aux(void)
        {
                /* Analyze */
                sp_ptr = &sex_info[n];
-               str = sp_ptr->title;
-
 
                /* Display */
 #ifdef JP
-               sprintf(buf, "%c%c%s", I2A(n), p2, str);
+               sprintf(buf, "%c%c%s", I2A(n), p2, sp_ptr->title);
 #else
-               sprintf(buf, "%c%c %s", I2A(n), p2, str);
+               sprintf(buf, "%c%c %s", I2A(n), p2, sp_ptr->title);
 #endif
                put_str(buf, 12 + (n/5), 2 + 15 * (n%5));
        }
@@ -5608,9 +5827,9 @@ static bool player_birth_aux(void)
                {
                        screen_save();
 #ifdef JP
-                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                        screen_load();
@@ -5621,11 +5840,9 @@ static bool player_birth_aux(void)
        /* Set sex */
        p_ptr->psex = k;
        sp_ptr = &sex_info[p_ptr->psex];
-       str = sp_ptr->title;
-
 
        /* Display */
-       c_put_str(TERM_L_BLUE, str, 3, 15);
+       c_put_str(TERM_L_BLUE, sp_ptr->title, 3, 15);
 
        /* Clean up */
        clear_from(10);
@@ -5634,17 +5851,17 @@ static bool player_birth_aux(void)
        p_ptr->prace = 0;
        while(1)
        {
-               char temp[80*9];
+               char temp[80*10];
                cptr t;
 
                if (!get_player_race()) return FALSE;
 
                clear_from(10);
 
-               roff_to_buf(race_jouhou[p_ptr->prace], 74, temp);
+               roff_to_buf(race_jouhou[p_ptr->prace], 74, temp, sizeof(temp));
                t = temp;
 
-               for (i = 0; i< 9; i++)
+               for (i = 0; i< 10; i++)
                {
                        if(t[0] == 0)
                                break; 
@@ -5655,9 +5872,9 @@ static bool player_birth_aux(void)
                        }
                }
 #ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-               if (get_check("Are you sure? ")) break;
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
                clear_from(10);
                c_put_str(TERM_WHITE, "              ", 4, 15);
@@ -5676,7 +5893,7 @@ static bool player_birth_aux(void)
                if (!get_player_class()) return FALSE;
 
                clear_from(10);
-               roff_to_buf(class_jouhou[p_ptr->pclass], 74, temp);
+               roff_to_buf(class_jouhou[p_ptr->pclass], 74, temp, sizeof(temp));
                t = temp;
 
                for (i = 0; i< 9; i++)
@@ -5691,9 +5908,9 @@ static bool player_birth_aux(void)
                }
 
 #ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-               if (get_check("Are you sure? ")) break;
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
                c_put_str(TERM_WHITE, "              ", 5, 15);
        }
@@ -5711,7 +5928,7 @@ static bool player_birth_aux(void)
                if (!get_player_seikaku()) return FALSE;
 
                clear_from(10);
-               roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 74, temp);
+               roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 74, temp, sizeof(temp));
                t = temp;
 
                for (i = 0; i< 6; i++)
@@ -5725,9 +5942,9 @@ static bool player_birth_aux(void)
                        }
                }
 #ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-               if (get_check("Are you sure? ")) break;
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
                c_put_str(TERM_L_BLUE, player_name, 1, 34);
                prt("", 1, 34+strlen(player_name));
@@ -5741,9 +5958,9 @@ static bool player_birth_aux(void)
 
        screen_save();
 #ifdef JP
-       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+       do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+       do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
        screen_load();
@@ -5771,85 +5988,9 @@ static bool player_birth_aux(void)
 
 #endif /* ALLOW_AUTOROLLER */
 
-       /* Clean up */
-       clear_from(10);
-
-       /*** User enters number of quests ***/
-       /* Heino Vander Sanden and Jimmy De Laet */
-
-       /* Extra info */
-#ifdef JP
-       put_str("ɬ¿Ü¤Î¥¯¥¨¥¹¥È(¥ª¥Ù¥í¥óµÚ¤Óº®Æ٤Υµ¡¼¥Ú¥ó¥È)¤Ë²Ã¤¨¤Æ¡¢ÄɲäΥ¯¥¨¥¹¥È¤Î", 10, 5);
-       put_str("¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£", 11, 5);
-       put_str("Äɲ寥¨¥¹¥È¤ò¹Ô¤Ê¤¤¤¿¤¯¤Ê¤¤¾ì¹ç¤Ï '0'¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£", 12, 5);
-       put_str("¥é¥ó¥À¥à¤Ë·èÄꤹ¤ë¤Ë¤Ï'*'¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£", 13, 5);
-#else
-       put_str("You can enter the number of quests you'd like to perform in addition", 10, 5);
-       put_str("to the two obligatory ones ( Oberon and the Serpent of Chaos )", 11, 5);
-       put_str("In case you do not want any additional quests, just enter 0", 12, 5);
-       put_str("If you want a random number of random quests, just enter *", 13, 5);
-#endif
-
-       /* Ask the number of additional quests */
-       while (TRUE)
-       {
-
-#ifdef JP
-               put_str(format("Äɲ寥¨¥¹¥È¤Î¿ô (%u°Ê²¼) ", MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1), 15, 5);
-#else
-               put_str(format("Number of additional quests? (<%u) ", MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 2), 15, 5);
-#endif
-
-
-               /* Get a the number of additional quest */
-               while (TRUE)
-               {
-                       /* Move the cursor */
-                       put_str("", 15, 40);
-
-                       /* Default */
-                       strcpy(inp, "10");
-
-                       /* Get a response (or escape) */
-                       if (!askfor_aux(inp, 2)) strcpy(inp, "10");
-
-                       /* Quit */
-                       if (inp[0] == 'Q') birth_quit();
-
-                       /* Start over */
-                       if (inp[0] == 'S') return (FALSE);
-
-                       /* Check for random number of quests */
-                       if (inp[0] == '*')
-                       {
-                               /* 0 to 10 random quests */
-                               number_of_quests = randint0(11);
-                       }
-                        else if (inp[0] == '?')
-                        {
-#ifdef JP                 
-                                show_help("jbirth.txt#RandomQuests");
-#else
-                                show_help("birth.txt#RandomQuests");
-#endif
-                                continue;
-                        }
-                       else
-                       {
-                               number_of_quests = atoi(inp);
-                       }
-
-                       /* Break on valid input */
-                       if ((number_of_quests <= MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1) && (number_of_quests >= 0)) break;
-               }
-               break;
-       }
-
        /* Clear */
        clear_from(10);
 
-       init_dungeon_quests(number_of_quests);
-
        /* Reset turn; before auto-roll and after choosing race */
        init_turn();
 
@@ -5934,7 +6075,7 @@ static bool player_birth_aux(void)
                                j = rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i];
 
                                /* Obtain the current stat */
-                               m = adjust_stat(stat_limit[i], j, TRUE);
+                               m = adjust_stat(stat_limit[i], j);
 
                                /* Put the stat */
                                cnv_stat(m, buf);
@@ -5997,9 +6138,10 @@ static bool player_birth_aux(void)
 
                                if (autochara)
                                {
-                                       if ((p_ptr->ht < chara_limit[0]) || (p_ptr->ht > chara_limit[1])) accept = FALSE;
-                                       if ((p_ptr->wt < chara_limit[2]) || (p_ptr->wt > chara_limit[3])) accept = FALSE;
-                                       if ((p_ptr->sc < chara_limit[4]) || (p_ptr->sc > chara_limit[5])) accept = FALSE;
+                                       if ((p_ptr->age < chara_limit.agemin) || (p_ptr->age > chara_limit.agemax)) accept = FALSE;
+                                       if ((p_ptr->ht < chara_limit.htmin) || (p_ptr->ht > chara_limit.htmax)) accept = FALSE;
+                                       if ((p_ptr->wt < chara_limit.wtmin) || (p_ptr->wt > chara_limit.wtmax)) accept = FALSE;
+                                       if ((p_ptr->sc < chara_limit.scmin) || (p_ptr->sc > chara_limit.scmax)) accept = FALSE;
                                }
                                if (accept) break;
                        }
@@ -6033,7 +6175,7 @@ static bool player_birth_aux(void)
                                        /* Roll for age/height/weight */
                                        get_ahw();
 
-                                       /* Roll for social class */
+                                       /* Roll for social class */
                                        get_history();
 
                                        break;
@@ -6146,10 +6288,10 @@ static bool player_birth_aux(void)
                        /* Help */
                        if (c == '?')
                        {
-#ifdef JP                 
-                                show_help("jbirth.txt#AutoRoller");
+#ifdef JP
+                               show_help("jbirth.txt#AutoRoller");
 #else
-                                show_help("birth.txt#AutoRoller");
+                               show_help("birth.txt#AutoRoller");
 #endif
                                continue;
                        }
@@ -6157,9 +6299,9 @@ static bool player_birth_aux(void)
                        {
                                screen_save();
 #ifdef JP
-                               do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                               do_cmd_options_aux(OPT_PAGE_BIRTH, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                               do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                               do_cmd_options_aux(OPT_PAGE_BIRTH, "Birth Option((*)s effect score)");
 #endif
 
                                screen_load();
@@ -6189,6 +6331,12 @@ static bool player_birth_aux(void)
        /* Clear prompt */
        clear_from(23);
 
+       /* Get a name, recolor it, prepare savefile */
+       get_name();
+
+       /* Process the player name */
+       process_player_name(creating_savefile);
+
        /*** Edit character background ***/
        edit_history();
 
@@ -6196,10 +6344,6 @@ static bool player_birth_aux(void)
 
        get_max_stats();
 
-       /* Get a name, recolor it, prepare savefile */
-
-       get_name();
-
        get_virtues();
 
        /* Prompt for it */
@@ -6219,9 +6363,12 @@ static bool player_birth_aux(void)
        /* Start over */
        if (c == 'S') return (FALSE);
 
+
+       /* Initialize random quests */
+       init_dungeon_quests();
+
        /* Save character data for quick start */
        save_prev_data(&previous_char);
-       previous_char.quests = number_of_quests;
        previous_char.quick_ok = TRUE;
 
        /* Accept */
@@ -6230,6 +6377,91 @@ static bool player_birth_aux(void)
 
 
 /*
+ * Ask whether the player use Quick Start or not.
+ */
+static bool ask_quick_start(void)
+{
+       /* Doesn't have previous data */
+       if (!previous_char.quick_ok) return FALSE;
+
+
+       /* Clear screen */
+       Term_clear();
+
+       /* Extra info */
+#ifdef JP
+       put_str("¥¯¥¤¥Ã¥¯¡¦¥¹¥¿¡¼¥È¤ò»È¤¦¤È°ÊÁ°¤ÈÁ´¤¯Æ±¤¸¥­¥ã¥é¥¯¥¿¡¼¤Ç»Ï¤á¤é¤ì¤Þ¤¹¡£", 11, 5);
+#else
+       put_str("Do you want to use the quick start function(same character as your last one).", 11, 2);
+#endif
+
+       /* Choose */
+       while (1)
+       {
+               char c;
+
+#ifdef JP
+               put_str("¥¯¥¤¥Ã¥¯¡¦¥¹¥¿¡¼¥È¤ò»È¤¤¤Þ¤¹¤«¡©[y/N]", 14, 10);
+#else
+               put_str("Use quick start? [y/N]", 14, 10);
+#endif
+               c = inkey();
+
+               if (c == 'Q') quit(NULL);
+               else if (c == 'S') return (FALSE);
+               else if (c == '?')
+               {
+#ifdef JP
+                       show_help("jbirth.txt#QuickStart");
+#else
+                       show_help("birth.txt#QuickStart");
+#endif
+               }
+               else if ((c == 'y') || (c == 'Y'))
+               {
+                       /* Yes */
+                       break;
+               }
+               else
+               {
+                       /* No */
+                       return FALSE;
+               }
+       }
+
+       load_prev_data(FALSE);
+       init_dungeon_quests();
+       init_turn();
+
+       sp_ptr = &sex_info[p_ptr->psex];
+       rp_ptr = &race_info[p_ptr->prace];
+       cp_ptr = &class_info[p_ptr->pclass];
+       mp_ptr = &m_info[p_ptr->pclass];
+       ap_ptr = &seikaku_info[p_ptr->pseikaku];
+
+       /* Calc hitdie, but don't roll */
+       get_extra(FALSE);
+
+       /* Calculate the bonuses and hitpoints */
+       p_ptr->update |= (PU_BONUS | PU_HP);
+
+       /* Update stuff */
+       update_stuff();
+
+       /* Fully healed */
+       p_ptr->chp = p_ptr->mhp;
+
+       /* Fully rested */
+       p_ptr->csp = p_ptr->msp;
+
+       /* Process the player name */
+       process_player_name(FALSE);
+
+       return TRUE;
+}
+
+
+/*
  * Create a new character.
  *
  * Note that we may be called with "junk" leftover in the various
@@ -6240,7 +6472,7 @@ void player_birth(void)
        int i, j;
        char buf[80];
 
-        playtime = 0;
+       playtime = 0;
 
        /* 
         * Wipe monsters in old dungeon
@@ -6248,14 +6480,23 @@ void player_birth(void)
         */
        wipe_m_list();
 
+       /* Wipe the player */
+       player_wipe();
+
        /* Create a new character */
-       while (1)
+
+       /* Quick start? */
+       if (!ask_quick_start())
        {
-               /* Wipe the player */
-               player_wipe();
+               /* No, normal start */
+               while (1)
+               {
+                       /* Roll up a new character */
+                       if (player_birth_aux()) break;
 
-               /* Roll up a new character */
-               if (player_birth_aux()) break;
+                       /* Wipe the player */
+                       player_wipe();
+               }
        }
 
        /* Note player birth in the message recall */
@@ -6339,13 +6580,13 @@ void player_birth(void)
 
 void dump_yourself(FILE *fff)
 {
-       char temp[80*8];
+       char temp[80*10];
        int i;
        cptr t;
 
        if (!fff) return;
 
-       roff_to_buf(race_jouhou[p_ptr->prace], 78, temp);
+       roff_to_buf(race_jouhou[p_ptr->prace], 78, temp, sizeof(temp));
        fprintf(fff, "\n\n");
 #ifdef JP
        fprintf(fff, "¼ï²: %s\n", race_info[p_ptr->prace].title);
@@ -6353,14 +6594,14 @@ void dump_yourself(FILE *fff)
        fprintf(fff, "Race: %s\n", race_info[p_ptr->prace].title);
 #endif
        t = temp;
-       for (i = 0; i < 8; i++)
+       for (i = 0; i < 10; i++)
        {
                if(t[0] == 0)
                        break; 
                fprintf(fff, "%s\n",t);
                t += strlen(t) + 1;
        }
-       roff_to_buf(class_jouhou[p_ptr->pclass], 78, temp);
+       roff_to_buf(class_jouhou[p_ptr->pclass], 78, temp, sizeof(temp));
        fprintf(fff, "\n");
 #ifdef JP
        fprintf(fff, "¿¦¶È: %s\n", class_info[p_ptr->pclass].title);
@@ -6368,14 +6609,14 @@ void dump_yourself(FILE *fff)
        fprintf(fff, "Class: %s\n", class_info[p_ptr->pclass].title);
 #endif
        t = temp;
-       for (i = 0; i < 8; i++)
+       for (i = 0; i < 10; i++)
        {
                if(t[0] == 0)
                        break; 
                fprintf(fff, "%s\n",t);
                t += strlen(t) + 1;
        }
-       roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 78, temp);
+       roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 78, temp, sizeof(temp));
        fprintf(fff, "\n");
 #ifdef JP
        fprintf(fff, "À­³Ê: %s\n", seikaku_info[p_ptr->pseikaku].title);
@@ -6393,7 +6634,7 @@ void dump_yourself(FILE *fff)
        fprintf(fff, "\n");
        if (p_ptr->realm1)
        {
-               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm1)-1], 78, temp);
+               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm1)-1], 78, temp, sizeof(temp));
 #ifdef JP
                fprintf(fff, "ËâË¡: %s\n", realm_names[p_ptr->realm1]);
 #else
@@ -6411,7 +6652,7 @@ void dump_yourself(FILE *fff)
        fprintf(fff, "\n");
        if (p_ptr->realm2)
        {
-               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 78, temp);
+               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 78, temp, sizeof(temp));
 #ifdef JP
                fprintf(fff, "ËâË¡: %s\n", realm_names[p_ptr->realm2]);
 #else