OSDN Git Service

This commit was manufactured by cvs2svn to create tag
[hengbandforosx/hengbandosx.git] / src / birth.c
index 30143ff..1796a24 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"
  * system may have problems because the user can't stop the
  * autoroller for this number of rolls.
  */
-#define AUTOROLLER_STEP                25L
+#define AUTOROLLER_STEP 5431L
 
 /*
  * Define this to cut down processor use while autorolling
  */
-/*#define AUTOROLLER_DELAY*/
+#if 0
+#  define AUTOROLLER_DELAY
+#endif
 
 /*
  * Maximum number of tries for selection of a proper quest monster
 /*
  * Forward declare
  */
-typedef struct birther birther;
-
-/*
- * A structure to hold "rolled" information
- */
-struct birther
-{
-       s16b age;
-       s16b wt;
-       s16b ht;
-       s16b sc;
-
-       s32b au;
-
-       s16b stat[6];
-       s16b hp[50];
-
-       s16b chaos_patron;
-
-       char history[4][60];
-};
-
-
-
-/*
- * The last character displayed
- */
-static birther prev;
-
-
-
-/*
- * Forward declare
- */
 typedef struct hist_type hist_type;
 
 /*
@@ -760,7 +728,7 @@ static hist_type bg[] =
 
 
 #ifdef JP
-       {"¤¢¤Ê¤¿¤Ï½÷²¦¥¯¥é¥³¥ó¤Î²¿¿Í¤«¤Î»Ò¶¡¤Î¤¦¤Á¤Î°ì¿Í¤Ç¤¹¡£"
+       {"¤¢¤Ê¤¿¤Ï½÷²¦¥¯¥é¥å³¥ó¤Î²¿¿Í¤«¤Î»Ò¶¡¤Î¤¦¤Á¤Î°ì¿Í¤Ç¤¹¡£"
        , 100, 84, 85, 50 },
 
        {"¤¢¤Ê¤¿¤ÏÀÖ¤¤È©¤È", 40, 85, 86, 50 },
@@ -1278,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 },
@@ -1385,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
@@ -1497,9 +1465,87 @@ static hist_type bg[] =
 #endif
 
 #ifdef JP
-       {"¤¢¤Ê¤¿¤Ï¥¹¥­¡¼¥ê¥Õ¥È¤Ë¾è¤Ã¤¿¤ê¤¹¤ë¤­¤ï¤á¤ÆÄ̾ï¤Î¥¯¥¿¡¼¤Ç¤¹¡£¤¢¤Ê¤¿¤ÎÌÓ¤ÏÜô¿§¤Ç¤¹¡£", 65, 154, 0, 55},
-       {"¤¢¤Ê¤¿¤ÏÄ̾ï¤Î¥¯¥¿¡¼Ã£¤¬Íê¤ê¤Ë¤·¤Æ¤¤¤ë¥Ñ¥Ñ¥¯¥¿¡¼¤Ç¤¹¡£¤¢¤Ê¤¿¤ÎÌÓ¤ÏÎп§¤Ç¤¹¡£", 95, 154, 0, 65},
-       {"¤¢¤Ê¤¿¤Ï¤È¤Æ¤âÄÁ¤·¤¤¥È¥é¥¯¥¿¡¼¤Ç¤¹¡£¤¢¤Ê¤¿¤ÎÌӤϥȥé¤Î¤è¤¦¤Ê²«¤È¹õ¤Î¼ÊÌÏÍͤǤ¹¡£", 100, 154, 0, 80},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¶¥¯¥¶¥¯¥Ç¥¶¡¼¥È¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 4, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥°¥é¥°¥é¥¿¥ï¡¼¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 8, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥۥإۥض®Ã«¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 12, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥɥץɥ×ÃÓ¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 16, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Æ¥¯»¨µ»¾ì¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 20, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥Õ¥à¥Õ¥àȪ¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 24, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¯¥Î¥¯¥ÎÂì¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 28, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¯¥ê¥¯¥êÀî¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 32, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥê¥Æ¥ê¥­¥ã¥ó¥×¾ì¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 36, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¯¥¿¡¼ÁüÁ°¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 40, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥ÎÅò¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 44, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥¢¥¤¥é¥ó¥É¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 48, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥Þ¥ê¥ó¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 52, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥É¡¼¥à¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 56, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥Û¡¼¥ë¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 60, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¹â¸¶¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 64, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î»Ô̱²ñ´Û¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 68, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¸ø±à¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 72, 154, 159, 50},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¹¥¤¥¹¥¤¥¢¥ë¥×¥¹¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 76, 154, 159, 65},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥Ò¥½¥Ò¥½¿¹¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 80, 154, 159, 65},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥ÎÀ¸ÂÖ¸¦µæ½ê¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 84, 154, 159, 65},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥í¥±¥Ã¥Èȯ¼ÍÂæ¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 88, 154, 159, 65},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥Á¥ã¥¤¥Ê¥¦¥©¡¼¥ë¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 92, 154, 159, 65},
+       {"¤¢¤Ê¤¿¤ÏÉáÃÊ¥¹¥Ú¡¼¥¹¥¦¥©¡¼¥ë¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 96, 154, 159, 70},
+       {"¤¢¤Ê¤¿¤ÏÉáÃʥƥ¯¥Î¥ê¥¾¡¼¥È¥Û¥Æ¥ë¤ÇÍ·¤ó¤Ç¤¤¤ë¡¢", 100, 154, 159, 75},
+
+       {"ÉáÄ̤Υ¯¥¿¡¼¤Ç¤¹¡£", 70, 159, 160, 50},
+       {"¤ß¤ó¤Ê¤¬Íê¤ê¤Ë¤·¤Æ¤¤¤ë¿Æ¥¯¥¿¡¼¤Ç¤¹¡£", 85, 159, 160, 65},
+       {"ºû¤¬Â繥ʪ¤Ê¥Ñ¥ó¥À¥¯¥¿¡¼¤Ç¤¹¡£", 92, 159, 161, 75},
+       {"¤È¤Æ¤âÄÁ¤·¤¤¥È¥é¥¯¥¿¡¼¤Ç¤¹¡£", 96, 159, 162, 80},
+       {"¤È¤Æ¤âÄÁ¤·¤¤¥Ô¥«¥¯¥¿¡¼¤Ç¤¹¡£", 100, 159, 163, 90},
+
+       {"¤¢¤Ê¤¿¤ÏÀÖ¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 6, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï¥¯¥ê¡¼¥à¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 12, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï²«ÅÚ¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 18, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï²«¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 24, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï²«Î理ÎÌÓ¤ò¤â¤Á¡¢", 30, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤ÏËõÃ㿧¤ÎÌÓ¤ò¤â¤Á¡¢", 36, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤ÏÇ»¤¤Î理ÎÌÓ¤ò¤â¤Á¡¢", 42, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤ÏÀÄÎ理ÎÌÓ¤ò¤â¤Á¡¢", 48, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï¿å¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 54, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤ÏÇö¤¤»ç¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 60, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï»ç¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 65, 160, 164, 50},
+       {"¤¢¤Ê¤¿¤Ï°«¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 70, 160, 164, 60},
+       {"¤¢¤Ê¤¿¤Ï¥Ô¥ó¥¯¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 75, 160, 164, 60},
+       {"¤¢¤Ê¤¿¤ÏÇò¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 80, 160, 164, 60},
+       {"¤¢¤Ê¤¿¤ÏÀÄ¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 85, 160, 164, 65},
+       {"¤¢¤Ê¤¿¤Ï¹õ¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 90, 160, 164, 65},
+       {"¤¢¤Ê¤¿¤ÏÎ理ÎÌÓ¤ò¤â¤Á¡¢", 95, 160, 164, 65},
+       {"¤¢¤Ê¤¿¤ÏÜô¿§¤ÎÌÓ¤ò¤â¤Á¡¢", 100, 160, 164, 70},
+       {"¤¢¤Ê¤¿¤Ï¥Ñ¥ó¥À¤Î¤è¤¦¤ÊÇò¤È¹õ¤ÎÈÃÌÏÍͤÎÌÓ¤ò¤â¤Á¡¢", 100, 161, 164, 70},
+       {"¤¢¤Ê¤¿¤Ï¥È¥é¤Î¤è¤¦¤Ê²«¤È¹õ¤Î¼ÊÌÏÍͤÎÌÓ¤ò¤â¤Á¡¢", 100, 162, 164, 70},
+       {"¤¢¤Ê¤¿¤ÏÌÀ¤ë¤¯µ±¤¤¤Æ¤¤¤Æ¡¢", 100, 163, 164, 70},
+
+       {"¥Þ¥Õ¥é¡¼¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 4, 164, 0, 50},
+       {"¥é¥¤¥¿¡¼¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 8, 164, 0, 50},
+       {"¥ê¥â¥³¥ó¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 12, 164, 0, 50},
+       {"¼ê¤Ì¤°¤¤¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 16, 164, 0, 50},
+       {"µíÆý¥Ó¥ó¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 20, 164, 0, 50},
+       {"¥Ó¥ó¤Î¤Õ¤¿¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 24, 164, 0, 50},
+       {"Ìîµå˹¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 28, 164, 0, 50},
+       {"É⤭ÎؤòÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 32, 164, 0, 50},
+       {"¥Ð¥Ã¥È¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 36, 164, 0, 50},
+       {"Â纬¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 40, 164, 0, 50},
+       {"¥ê¥å¥Ã¥¯¥µ¥Ã¥¯¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 44, 164, 0, 50},
+       {"¾­´ýÈפòÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 48, 164, 0, 50},
+       {"¾­´ý¤Î¶ð¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 52, 164, 0, 50},
+       {"»±¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 56, 164, 0, 50},
+       {"¤ä¤«¤ó¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 60, 164, 0, 50},
+       {"¤Û¤¦¤­¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 64, 164, 0, 50},
+       {"¥Æ¥£¥Ã¥·¥åÈ¢¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 68, 164, 0, 50},
+       {"¥À¥ë¥Þ¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 71, 164, 0, 50},
+       {"¥Ë¥ó¥¸¥ó¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 75, 164, 0, 60},
+       {"¥Û¥ë¥ó¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 79, 164, 0, 60},
+       {"¤ß¤«¤óÈ¢¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 83, 164, 0, 60},
+       {"ÊõÈ¢¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 86, 164, 0, 60},
+       {"¥Æ¥ó¥¬¥í¥ó¥Ï¥Ã¥È¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 90, 164, 0, 60},
+       {"¥¢¥Õ¥í¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 94, 164, 0, 65},
+       {"¤·¤ã¤±¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 97, 164, 0, 65},
+       {"39¥Ü¥¦¥ä¤òÊõʪ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£", 100, 164, 0, 70},
+
 #else
        {"You are a normal Kutar.  You have orange colored fur.", 65, 154, 0, 55},
        {"You are a father Kutar, the patriarch of many normal Kutars.  You have green colored fur.", 95, 154, 0, 65},
@@ -1541,7 +1587,7 @@ static hist_type bg[] =
        {"You have come from the twenty-second century ", 100, 155, 156, 100},
 
        {"as a project prototype. ", 10, 156, 157, 50},
-       {"to educate children. ", 30, 157, 157, 60},
+       {"to educate children. ", 30, 156, 157, 60},
        {"to look after someone. ", 50, 156, 157, 70},
        {"as a substitute for a dead child. ", 60, 156, 157, 10},
        {"as a combat trooper. ", 90, 156, 157, 20},
@@ -1613,109 +1659,109 @@ static cptr race_jouhou[MAX_RACES] =
   
 "ÃϹö¤«¤é¤ä¤Ã¤Æ¤­¤¿°­ËâŪ¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤«¤éÌÓ·ù¤¤¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÂçÄñ¤Î¿¦¶È¤ò¤«¤Ê¤ê¤¦¤Þ¤¯¤³¤Ê¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥¤¥ó¥×¤ÏÀ¸¤Þ¤ì¤Ä¤­²Ð¤ËÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£",
   
-"¥´¡¼¥ì¥à¤ÏÅ¥¤Î¤è¤¦¤ÊÀ¸Ì¿¤Î¤Ê¤¤ºàÎÁ¤«¤é¤Ä¤¯¤é¤ì¡¢À¸Ì¿¤ò¿á¤­¹þ¤Þ¤ì¤¿¿Í¹©Åª¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ë¤Ï»×¹Í¤È¤¤¤¦¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¤½¤Î¤¿¤áËâË¡¤Ë°Í¸¤¹¤ë¿¦¶È¤Ç¤ÏÌòΩ¤¿¤º¤Ç¤¹¡£¤·¤«¤·Àï»Î¤È¤·¤Æ¤ÏÂçÊѤ˥¿¥Õ¤Ç¤¹¡£Èà¤é¤ÏÆǤËÂÑÀ­¤ò»ý¤Á¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤ËËãáãÃΤ餺¤Ç¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢Èà¤é¤ÏÀ¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Ä¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥´¡¼¥ì¥à¤ÏÄ̾ï¤Î¿©Êª¤«¤é¤Ï¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¾Ã²½¤Ë¤Ï»þ´Ö¤¬¤«¤«¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤Î´è¾æ¤Ê¿ÈÂΤΤ¿¤á¡¢AC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤Ë·è¤·¤Æµ¤À䤵¤»¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£",
+"¥´¡¼¥ì¥à¤ÏÅ¥¤Î¤è¤¦¤ÊÀ¸Ì¿¤Î¤Ê¤¤ºàÎÁ¤«¤é¤Ä¤¯¤é¤ì¡¢À¸Ì¿¤ò¿á¤­¹þ¤Þ¤ì¤¿¿Í¹©Åª¤ÊÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ë¤Ï»×¹Í¤È¤¤¤¦¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¤½¤Î¤¿¤áËâË¡¤Ë°Í¸¤¹¤ë¿¦¶È¤Ç¤ÏÌòΩ¤¿¤º¤Ç¤¹¡£¤·¤«¤·Àï»Î¤È¤·¤Æ¤ÏÂçÊѤ˥¿¥Õ¤Ç¤¹¡£Èà¤é¤ÏÆǤËÂÑÀ­¤ò»ý¤Á¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤ËËãáãÃΤ餺¤Ç¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢Èà¤é¤ÏÀ¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Ä¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¥´¡¼¥ì¥à¤ÏÄ̾ï¤Î¿©Êª¤«¤é¤Ï¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤ÆÆ°Îϸ»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤Î´è¾æ¤Ê¿ÈÂΤΤ¿¤á¡¢AC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤ë¤³¤È¤¬¤Ç¤­¡¢¤µ¤é¤Ë·è¤·¤Æµ¤À䤵¤»¤é¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£",
   
-"¥¹¥±¥ë¥È¥ó¤Ë¤Ï2¤Ä¤Î¥¿¥¤¥×¤¬Â¸ºß¤·¤Þ¤¹¡£ÉáÄ̤ÎÀï»Î¥¿¥¤¥×¤È¡¢¥ê¥Ã¥Á¤È¸Æ¤Ð¤ì¤ë¼öʸ¤ò»È¤¦¥¹¥±¥ë¥È¥ó¤Ç¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÆǤäÀ¸Ì¿Îϵۼý¹¶·â¤ò¿´ÇÛ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£Èà¤é¤ÏʪÂΤòÃγФ¹¤ë¤Î¤Ë´ã¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¸«¤¨¤Ê¤¤Êª¤ËñÙ¤µ¤ì¤Þ¤»¤ó¡£Èà¤é¤Î¹ü¤Ï¤È¤¬¤Ã¤¿ÇËÊҤΤ褦¤Ê¤â¤Î¤ËÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£Ìô¤ä¿©Êª¤Î»ý¤Ä¸ú²Ì¤Ï¥¹¥±¥ë¥È¥ó¤Î°ß¡Ê¸ºß¤·¤Þ¤»¤ó¤¬¡Ë¤òÄ̲᤹¤ë¤³¤È¤Ê¤¯¤½¤ÎÎϤòȯ´ø¤·¤Þ¤¹¤¬¡¢Ìô¤ä¿©Êª¼«ÂΤÏÈà¤Î³Ü¤òÄ̤êÈ´¤±¤ÆÍî¤Á¤Æ¤·¤Þ¤¤¡¢±ÉÍܤòµÛ¼ý¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£",
+"¥¹¥±¥ë¥È¥ó¤Ë¤Ï2¤Ä¤Î¥¿¥¤¥×¤¬Â¸ºß¤·¤Þ¤¹¡£ÉáÄ̤ÎÀï»Î¥¿¥¤¥×¤È¡¢¥ê¥Ã¥Á¤È¸Æ¤Ð¤ì¤ë¼öʸ¤ò»È¤¦¥¹¥±¥ë¥È¥ó¤Ç¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÆǤäÀ¸Ì¿Îϵۼý¹¶·â¤ò¿´ÇÛ¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£Èà¤é¤ÏʪÂΤòÃγФ¹¤ë¤Î¤Ë´ã¤òÍøÍѤ·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¸«¤¨¤Ê¤¤Êª¤ËñÙ¤µ¤ì¤Þ¤»¤ó¡£Èà¤é¤Î¹ü¤Ï¤È¤¬¤Ã¤¿ÇËÊҤΤ褦¤Ê¤â¤Î¤ËÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ËÂФ¹¤ëÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£Ìô¤ä¿©Êª¤Î»ý¤Ä¸ú²Ì¤Ï¥¹¥±¥ë¥È¥ó¤Î°ß¡Ê¸ºß¤·¤Þ¤»¤ó¤¬¡Ë¤òÄ̲᤹¤ë¤³¤È¤Ê¤¯¤½¤ÎÎϤòȯ´ø¤·¤Þ¤¹¤¬¡¢Ìô¤ä¿©Êª¼«ÂΤÏÈà¤Î³Ü¤òÄ̤êÈ´¤±¤ÆÍî¤Á¤Æ¤·¤Þ¤¤¡¢±ÉÍܤòµÛ¼ý¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤½¤ÎÂå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
-"¥¾¥ó¥Ó¤Ï¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ê¡¢À¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Á¡¢¥¹¥±¥ë¥È¥ó¤Î¤è¤¦¤Ë¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ÎÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÆǤËÂÑÀ­¤ò»ý¤Á¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¡Ê¥¹¥±¥ë¥È¥ó¤È¤Ï°ã¤¤¡ËÀڤ빶·â¤Ë¤Ï¼å¤¤¤Ç¤¹¤¬¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥´¡¼¥ì¥à¤Î¤è¤¦¤Ë¡¢Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¾Ã²½µÛ¼ý¤ÏÃÙ¤¤¤Ç¤¹¡£",
+"¥¾¥ó¥Ó¤Ï¥¢¥ó¥Ç¥Ã¥É¤Ç¤¢¤ê¡¢À¸Ì¿Îϵۼý¹¶·â¤ËÂÑÀ­¤ò»ý¤Á¡¢¥¹¥±¥ë¥È¥ó¤Î¤è¤¦¤Ë¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤ÐÎ䵤¤ÎÂÑÀ­¤ò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÆǤËÂÑÀ­¤ò»ý¤Á¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¡Ê¥¹¥±¥ë¥È¥ó¤È¤Ï°ã¤¤¡ËÀڤ빶·â¤Ë¤Ï¼å¤¤¤Ç¤¹¤¬¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥´¡¼¥ì¥à¤Î¤è¤¦¤Ë¡¢Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
 "¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¢¤ëµÛ·ìµ´¤Ï¡¢°Ú·É¤ÎÇ°¤ò¸Æ¤Óµ¯¤³¤¹³°¸«¤ò¤·¤Æ¤¤¤Þ¤¹¡£¥¢¥ó¥Ç¥Ã¥É¤ÎÎã¤Ë¤â¤ì¤º¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢ÃϹö¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢Î䵤¤ÈÆǤËÂФ¹¤ëÂÑÀ­¤âÈ÷¤¨¤Æ¤¤¤Þ¤¹¡£¤·¤«¤·¡¢¿·Á¯¤Ê·ì±Õ¤Ë¾ï¤Ëµ²¤¨¤Æ¤ª¤ê¡¢¤½¤ì¤Ï¶á¤¯¤Ë¤¤¤ëÀ¸Êª¤«¤é·ì±Õ¤òµÛ¤¦¤³¤È¤Ë¤è¤Ã¤Æ¤Î¤ßËþ¤¿¤µ¤ì¤Þ¤¹¡£¤³¤Î¶¯ÎϤÊÀ¸Êª¤Ï¿¼¹ï¤Ê¼åÅÀ¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£ÂÀÍÛ¸÷Àþ¡Ê¤ä¸÷¸»¡Ë¤ÏÈà¤é¤ÎÇËÌǤò°ÕÌ£¤·¤Þ¤¹¡£¹¬±¿¤Ë¤â¡¢µÛ·ìµ´¤Ï¤½¤Î¿ÈÂΤ«¤é¡Ö°Å¹õ¤Î¸÷¡×¤Î¥ª¡¼¥é¤òÊü½Ð¤·¤Æ¤¤¤Þ¤¹¡£°ìÊý¡¢°Å°Ç¤ÏÈà¤é¤ò¤è¤ê¶¯ÎϤˤ¹¤ë¤â¤Î¤Ç¤¹¡£",
   
-"Í©Îî¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¹¡£Èà¤é¤ÏÉÔµ¤Ì£¤ÊÎп§¤Î¸÷¤ËÊñ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£È¾Êª¼ÁŪ¤Ê¸ºß¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¤È¤­¤Ë¤ÏÊɤÎÌ©Å٤ˤè¤Ã¤Æ½ý¤Ä¤±¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Â¾¤Î¥¢¥ó¥Ç¥Ã¥ÉƱÍÍ¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢ÆǤÈÎ䵤¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¡¢¤µ¤é¤ËÃϹö¤ËÂФ¹¤ëÂÑÀ­¤â»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬½½Ê¬¤Ë¾å¤¬¤ë¤ÈÈà¤é¤Ï¥Æ¥ì¥Ñ¥·¡¼¤ò³ÍÆÀ¤·¤Þ¤¹¡£Í©Îî¤ÏÂî±Û¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¿ÈÂÎŪÆÃÀ­¤ÏÈó¾ï¤ËÉϼå¤Ç¤¹¡£",
+"Í©Îî¤Ï¶¯ÎϤʥ¢¥ó¥Ç¥Ã¥É¤Î°ì¼ï¤Ç¤¹¡£Èà¤é¤ÏÉÔµ¤Ì£¤ÊÎп§¤Î¸÷¤ËÊñ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£È¾Êª¼ÁŪ¤Ê¸ºß¤Ç¤¢¤ëÈà¤é¤Ï¡¢ÊɤòÄ̤êÈ´¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¤È¤­¤Ë¤ÏÊɤÎÌ©Å٤ˤè¤Ã¤Æ½ý¤Ä¤±¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Â¾¤Î¥¢¥ó¥Ç¥Ã¥ÉƱÍÍ¡¢Èà¤é¤âÀ¸Ì¿ÎϤòµÛ¼ý¤µ¤ì¤ë¤³¤È¤¬¤Ê¤¯¡¢¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢ÆǤÈÎ䵤¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¡¢¤µ¤é¤ËÃϹö¤ËÂФ¹¤ëÂÑÀ­¤â»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬½½Ê¬¤Ë¾å¤¬¤ë¤ÈÈà¤é¤Ï¥Æ¥ì¥Ñ¥·¡¼¤ò³ÍÆÀ¤·¤Þ¤¹¡£Í©Îî¤ÏÂî±Û¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤½¤Î¿ÈÂÎŪÆÃÀ­¤ÏÈó¾ï¤ËÉϼå¤Ç¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËËâË¡ËÀ¤ä¾ó¤«¤éËâÎϤòµÛ¼ý¤·¤Æ¥¨¥Í¥ë¥®¡¼¸»¤Ë¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
 "ÍÅÀº¤ÏÈó¾ï¤Ë¾®¤µ¤¤¤Ç¤¹¡£Èà¤é¤Ï¾®¤µ¤ÊÍã¤ò»ý¤Á¡¢æ«¤ä´í¸±¤ÊÃÏ·Á¤òÈô¤Ó±Û¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Èà¤é¤ÏÆü¸÷¤òÂçÊѹ¥¤ß¡¢¸÷¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¿ÈÂÎŪ¤Ë¤Ï¤â¤Ã¤È¤âÉϼå¤Ê¼ï²¤Î°ì¤Ä¤Ç¤¹¤¬¡¢ÍÅÀº¤ÏËâË¡¤ÎÌ̤ÇÂçÊѤʺÍǽ¤ò»ý¤Ã¤Æ¤ª¤ê¡¢Èó¾ï¤Ë½ÏÎý¤·¤¿ËâË¡»È¤¤¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¹â¥ì¥Ù¥ë¤Ç¤Ï¤è¤ê®¤¯Èô¤Ö¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£",
   
 "¤³¤Î¼ï²¤Ï¥«¥ª¥¹¤Ë¤è¤Ã¤Æ¤Ä¤¯¤é¤ì¤¿ËÁÆÂŪ¤Ç·ù°­¤µ¤ì¤ë¸ºß¤Ç¤¹¡£Èà¤é¤ÏÆÈΩ¤·¤¿¼ï²¤Ç¤Ï¤Ê¤¯¡¢¿Í´Ö·¿¼ï²¡¢ÂçÄñ¤Ï¿Í´Ö¤¬¥«¥ª¥¹¤Ë¤è¤Ã¤ÆÏĤá¤é¤ì¤¿Â¸ºß¡¢¤â¤·¤¯¤Ï¿Í´Ö¤È½Ã¤Î°­Ì´¤Î¤è¤¦¤Ê¸òÇÛ¼ï¤Ç¤¹¡£Á´¤Æ¤Î½Ã¿Í¤Ï¥«¥ª¥¹¤ËÌÕ½¾¤·¤Æ¤ª¤ê¡¢¤½¤Î¤¿¤áº®Íð¤È²»¤ËÂФ·¤ÆÂÑÀ­¤òÈ÷¤¨¤Æ¤¤¤Þ¤¹¤¬¡¢½ã¿è¤Ê¥í¥°¥ë¥¹¤Ï¤Þ¤ÀÈà¤é¤ËÂФ·¸ú²Ì¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£½Ã¿Í¤Ïº®ÆÙ¤ò¹¥¤ß¡¢¤½¤ì¤ÏÈà¤é¤ò¤µ¤é¤ËÏĤá¤Þ¤¹¡£½Ã¿Í¤ÏÆÍÁ³ÊÑ°Û¤òµ¯¤³¤·¤ä¤¹¤¤À­¼Á¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£Èà¤é¤¬¤Ä¤¯¤é¤ì¤¿¤È¤­¡¢¥é¥ó¥À¥à¤ÊÊÑ°Û¤ò¼õ¤±¤Þ¤¹¡£¤½¤Î¸å¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤´¤È¤Ë°ã¤¦ÊÑ°Û¤ò¼õ¤±¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£",
   
-"¥¨¥ó¥È¤ÏÈó¾ï¤Ë¶¯¤¯¡¢¸­¤¤¤Ç¤¹¤¬¡¢¤½¤ÎµðÂ礵¤æ¤¨¤Ë櫤βò½ü¤ä¤³¤Ã¤½¤ê¤ÈÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£À®Ä¹¤¹¤ë¤Ë¤Ä¤ì¤ÆÏÓÎϤäÂѵ×ÎϤ¬¾å¤¬¤ê¤Þ¤¹¤¬¡¢´ïÍѤµ¤Ï²¼¤¬¤Ã¤Æ¤¤¤­¤Þ¤¹¡£Èà¤é¤Ë¤ÏÂ礭¤Ê·çÅÀ¤¬¤¢¤ê¡¢±ê¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£",
+"¥¨¥ó¥È¤ÏÈó¾ï¤Ë¶¯¤¯¡¢¸­¤¤¤Ç¤¹¤¬¡¢¤½¤ÎµðÂ礵¤æ¤¨¤Ë櫤βò½ü¤ä¤³¤Ã¤½¤ê¤ÈÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£À®Ä¹¤¹¤ë¤Ë¤Ä¤ì¤ÆÏÓÎϤäÂѵ×ÎϤ¬¾å¤¬¤ê¤Þ¤¹¤¬¡¢´ïÍѤµ¤Ï²¼¤¬¤Ã¤Æ¤¤¤­¤Þ¤¹¡£Èà¤é¤Ë¤ÏÂ礭¤Ê·çÅÀ¤¬¤¢¤ê¡¢±ê¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢Âå¤ï¤ê¤ËÌôÅù¤«¤é¿åʬ¤òÀݼ褹¤ë»ö¤Ç³èÆ°¤Ç¤­¤Þ¤¹¡£",
   
 "Å·»È¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥¢¥ë¥³¥ó¤Ï¡¢Á´¤Æ¤Î¥¹¥­¥ë¤Ë½Ï㤷¤Æ¤ª¤ê¡¢¶¯¤¯¤Æ¸­¤¯¡¢Èó¾ï¤Ë¿Íµ¤¤¬¤¢¤ê¤Þ¤¹¡£Èà¤é¤ÏÌܤ˸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¡¢¤½¤ÎÍã¤Ç櫤ä´í¸±¤ÊÃÏ·Á¤òÈô¤Ó±Û¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢Èó¾ï¤ËÀ®Ä¹¤¬ÃÙ¤¤¤È¤¤¤¦·çÅÀ¤â¤¢¤ê¤Þ¤¹¡£",
   
-"°­Ëâ¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥Ð¥ë¥í¥°¤Ï¡¢¶¯¤¯¡¢ÃÎŪ¤Ç¡¢¤Þ¤¿¥¿¥Õ¤Ç¤â¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Èà¤é¤Ï¿À¤ò¿®¤¸¤è¤¦¤È¤Ï¤»¤º¡¢¥×¥ê¡¼¥¹¥È¤Ë¤ÏÁ´¤¯¸þ¤¤¤Æ¤¤¤Þ¤»¤ó¡£±ê¤ÈÃϹö¡¢À¸Ì¿Îϵۼý¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÃϹö¤ä²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ÈàÅù¤Ï¤Û¤È¤ó¤É¤Îµ»Ç½¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÀŤ«¤ËÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£",
+"°­Ëâ¤Î¾å°Ì¼ï¤Ç¤¢¤ë¥Ð¥ë¥í¥°¤Ï¡¢¶¯¤¯¡¢ÃÎŪ¤Ç¡¢¤Þ¤¿¥¿¥Õ¤Ç¤â¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Èà¤é¤Ï¿À¤ò¿®¤¸¤è¤¦¤È¤Ï¤»¤º¡¢¥×¥ê¡¼¥¹¥È¤Ë¤ÏÁ´¤¯¸þ¤¤¤Æ¤¤¤Þ¤»¤ó¡£±ê¤ÈÃϹö¡¢À¸Ì¿Îϵۼý¤Ø¤ÎÂÑÀ­¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¸«¤¨¤Ê¤¤¤â¤Î¤ò¸«¤ëǽÎϤò³ÍÆÀ¤·¤Þ¤¹¡£¤Þ¤¿¡¢ÃϹö¤ä²Ð±ê¤Î¥Ö¥ì¥¹¤òÅǤ¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£ÈàÅù¤Ï¤Û¤È¤ó¤É¤Îµ»Ç½¤ÇÍ¥¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ÀŤ«¤ËÊ⤯¤³¤È¤Ï¶ì¼ê¤Ç¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤É±ÉÍܤòÀݼè¤Ç¤­¤Þ¤»¤ó¤¬¡¢¿Í´Ö¥¿¥¤¥×¤òÀ¸ìӤˤ¹¤ë»ö¤ÇÀºÎϤò²óÉü¤¹¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£",
   
-"¥É¥¥¥Ê¥À¥ó¤Ï¿¤¯¤Î¥¢¥É¥Ð¥ó¥Æ¡¼¥¸¤ò¼ø¤±¤é¤ì¤¿¡¢¤¦¤ï¤µ¤Ë¤è¤ì¤ÐÉÔ»à¤Î¼ï²¤Ç¤¹¡£Èà¤é¤ÏÃγÐ, ÀïÆ®, ¼Í·â¤ËÍ¥¤ì¤Æ¤ª¤ê¡¢Â¾¤ÎÌ̤Ǥ⤫¤Ê¤ê½ÏÎý¤·¤Æ¤¤¤Þ¤¹¡£Â¿¤¯¤Î¤â¤Î¤ò¸«¤Æ¤­¤Æ¤ª¤ê¡¢¿·Á¯¤Ê¤â¤Î¤Ï¤¢¤Þ¤ê¤Ê¤¤¤¿¤á¡¢Èà¤é¤ÎÀ®Ä¹¤Ï¤ä¤äÃÙ¤¤¤Ç¤¹¡£Èà¤é¤Ï¤È¤Æ¤â¥¿¥Õ¤Ç´è¶¯¤Ç¤¢¤ê¡¢Èà¤é¤ÎÂѵ×ÎϤ¬²¼¤¬¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£",
+"¥É¥¥¥Ê¥À¥ó¤ÏÀ¾Êý¤«¤éÍ褿¶þ¶¯¤Ê¼ï²¤Ç¤¹¡£¤³¤Î¤¤¤Ë¤·¤¨¤Î¼ï²¤ÏÁ´¤Æ¤ÎÎΰè¤Ë¤ª¤¤¤Æ¿Í´Ö¤ÎǽÎϤòο²ï¤·¡¢ÆäËÂѵ×ÎϤ˴ؤ·¤Æ¤Ï¤½¤ì¤¬¸²Ãø¤Ç¤¹¡£¤·¤«¤·¤Ê¤¬¤é¤³¤Î¼ï²¤ÏÁ´¤Æ¤ËÂî±Û¤·¤Æ¤¤¤ë¤³¤È¤¬ºÒ¤¤¤·¤Æ¡¢¤³¤ÎÀ¤³¦¤Ë¤Ï¿·¤·¤¤·Ð¸³¤È¤¤¤Ã¤¿¤â¤Î¤¬¤Û¤È¤ó¤É¤Ê¤¯¡¢¥ì¥Ù¥ë¤ò¾å¤²¤ë¤³¤È¤¬Èó¾ï¤Ëº¤Æñ¤Ç¤¹¡£Èà¤é¤Ï¤È¤Æ¤â¥¿¥Õ¤Ç´è¶¯¤Ç¤¢¤ê¡¢Èà¤é¤ÎÂѵ×ÎϤ¬²¼¤¬¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£",
   
 "±Æ¥Õ¥§¥¢¥ê¡¼¤Ï¿Í´Ö¤è¤ê¤ä¤äÂ礭¤¤ÍÅÀºÂ²¤Ç¡¢Íã¤ò»ý¤Á¡¢æ«¤ä´í¸±¤ÊÃÏ·Á¤òÈô¤Ó±Û¤¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢Èà¤é¤ÏÆü¸÷¤ò·ù¤¤¡¢Á®¸÷¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ÆùÂÎŪ¤Ë¤ÏÈó¾ï¤ËÉϼå¤Ç¤¹¤¬¡¢ËâË¡¤ÎÌ̤ǤÏÍ¥¤ì¤¿Ç½ÎϤò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ë¤Ï¤¹¤Ð¤é¤·¤¤Ä¹½ê¤¬°ì¤Ä¤¢¤ê¡¢¥â¥ó¥¹¥¿¡¼¤ÎÈ¿´¶¤ò¤«¤¦¤è¤¦¤Ê¶¯ÎϤʥ¢¥¤¥Æ¥à¤òÁõÈ÷¤·¤Æ¤â¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£¤¿¤À¤·¤½¤Î¾ì¹ç¤Ç¤â±£Ì©¹ÔưǽÎϤ¬²¼¤¬¤ê¡¢¤Þ¤¿¡¢¼«Ê¬¼«¿È¤ÎÀ­³Ê¤Ë¤è¤Ã¤ÆÈ¿´¶¤ò¤«¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¸ú²Ì¤¬¤¢¤ê¤Þ¤»¤ó¡£",
   
 "¥¯¥¿¡¼¤È¤·¤Æ¤¤¤ë̵ɽ¾ð¤ÎÆæ¤ÎÀ¸Êª¤Ç¤¹¡£Èà¤é¤Ï³°¸«¤¬¤«¤ï¤¤¤é¤·¤¤¤¿¤á¡¢Ì¥ÎϤ¬¹â¤¤¤Ç¤¹¡£Èà¤é¤Ïº®Í𤷤ޤ»¤ó¡£¤Ê¤¼¤Ê¤é¡¢º®Í𤷤Ƥ⥯¥¿¡¼¤È¤·¤Æ¤¤¤ë¤¿¤áÊѤï¤ê¤Ê¤¤¤«¤é¤Ç¤¹¡£¤·¤«¤â¡¢¤½¤Î¥¯¥¿¡¼¤È¤·¤Æ¤¤¤ë³°¸«¤«¤éŨ¤Ë¸«¤Ä¤«¤ê¤Ë¤¯¤¤¤Ç¤¹¡£¤·¤«¤·¡¢Èà¤é¤ÏÃí°ÕÎϤ¬¾¯¤Ê¤¤¤¿¤áõº÷¤äÃγÐǽÎϤϰ­¤¤¤Ç¤¹¡£Èà¤é¤Ï¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤È²£¤Ë¿­¤Ó¤ÆAC¤ò¾å¤²¤ëµ»¤ò³Ð¤¨¤Þ¤¹¤¬¡¢¿­¤Ó¤Æ¤¤¤ë´Ö¤ÏËâË¡ËɸæǽÎϤÏÄ㤯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£",
   
-"¥¢¥ó¥É¥í¥¤¥É¤Ïµ¡³£¤Î¿ÈÂΤò»ý¤Ä¿Í¹©Åª¤Ê¸ºß¤Ç¤¹¡£ËâË¡¤ò¤¦¤Þ¤¯»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢Àï»Î¤È¤·¤Æ¤ÏÈó¾ï¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤Î¤è¤¦¤Ë·Ð¸³ÃͤòÆÀ¤ÆÀ®Ä¹¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¿ÈÂΤ˿ȤˤĤ±¤ëÁõÈ÷¤Ë¤è¤Ã¤ÆÀ®Ä¹¤·¤Þ¤¹¡£¤¿¤À¤·¡¢»ØÎØ¡¢¥¢¥ß¥å¥ì¥Ã¥È¡¢¸÷¸»¤ÏÀ®Ä¹¤Ë±Æ¶Á¤·¤Þ¤»¤ó¡£Èà¤é¤ÏÆǤÎÂÑÀ­¤ò»ý¤Á¡¢ËãáãÃΤ餺¤Ç¡¢À¸Ì¿ÎϤòµÛ¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¿ÈÂΤ¬´è¾æ¤Ê¤Î¤ÇAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤Þ¤¹¡£¤·¤«¤·¿ÈÂΤΤ¤¤¿¤ë¤È¤³¤í¤ËÅŻҲóÏ©¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¿¤á¡¢ÅÅ·â¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£"
+"¥¢¥ó¥É¥í¥¤¥É¤Ïµ¡³£¤Î¿ÈÂΤò»ý¤Ä¿Í¹©Åª¤Ê¸ºß¤Ç¤¹¡£ËâË¡¤ò¤¦¤Þ¤¯»È¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤¬¡¢Àï»Î¤È¤·¤Æ¤ÏÈó¾ï¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹¡£Èà¤é¤Ï¾¤Î¼ï²¤Î¤è¤¦¤Ë·Ð¸³ÃͤòÆÀ¤ÆÀ®Ä¹¤¹¤ë¤È¤¤¤¦¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¿ÈÂΤ˿ȤˤĤ±¤ëÁõÈ÷¤Ë¤è¤Ã¤ÆÀ®Ä¹¤·¤Þ¤¹¡£¤¿¤À¤·¡¢»ØÎØ¡¢¥¢¥ß¥å¥ì¥Ã¥È¡¢¸÷¸»¤ÏÀ®Ä¹¤Ë±Æ¶Á¤·¤Þ¤»¤ó¡£Èà¤é¤ÏÆǤÎÂÑÀ­¤ò»ý¤Á¡¢ËãáãÃΤ餺¤Ç¡¢À¸Ì¿ÎϤòµÛ¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¡£¤Þ¤¿¡¢¿ÈÂΤ¬´è¾æ¤Ê¤Î¤ÇAC¤Ë¥Ü¡¼¥Ê¥¹¤òÆÀ¤Þ¤¹¡£¤·¤«¤·¿ÈÂΤΤ¤¤¿¤ë¤È¤³¤í¤ËÅŻҲóÏ©¤¬ÁȤ߹þ¤Þ¤ì¤Æ¤¤¤ë¤¿¤á¡¢ÅÅ·â¤Ë¤è¤Ã¤ÆÄ̾ï¤è¤ê¤âÂ礭¤Ê¥À¥á¡¼¥¸¤ò¼õ¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¡£Èà¤é¤Ï¿©Êª¤«¤é¤Û¤È¤ó¤ÉÆ°ÎϤòÆÀ¤é¤ì¤Þ¤»¤ó¤¬¡¢Ìý¤òÊäµë¤¹¤ë»ö¤ÇÆ°Îϸ»¤òÆÀ¤ë»ö¤¬¤Ç¤­¤Þ¤¹¡£"
 
 #else
 
-"The human is the base character. All other races are compared to them. Humans can choose any class and are average at everything. Humans tend to go up levels faster than most other races because of their shorter life spans. No racial adjustments or intrinsics occur to characters choosing human.",
+"The human is the base character.  All other races are compared to them.  Humans can choose any class and are average at everything.  Humans tend to go up levels faster than most other races because of their shorter life spans.  No racial adjustments or intrinsics occur to characters choosing human.",
 
-"Half-elves tend to be smarter and faster than humans, but not as strong. Half-elves are slightly better at searching, disarming, saving throws, stealth, bows, and magic, but they are not as good at hand weapons. Half-elves may choose any class and do not receive any intrinsic abilities.",
+"Half-elves tend to be smarter and faster than humans, but not as strong.  Half-elves are slightly better at searching, disarming, saving throws, stealth, bows, and magic, but they are not as good at hand weapons.  Half-elves may choose any class and do not receive any intrinsic abilities.",
 
-"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.",
+"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 their dexterity sustained.",
 
-"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.",
+"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.",
 
-"Dwarves are the headstrong miners and fighters of legend. Dwarves tend to be stronger and tougher but slower and less intelligent than humans. Because they are so headstrong and are somewhat wise, they resist spells which are cast on them.  They are very good at searching, perception, fighting, and bows. Dwarves  have a miserable stealth. They can never be blinded.",
+"Dwarves are the headstrong miners and fighters of legend.  Dwarves tend to be stronger and tougher but slower and less intelligent than humans.  Because they are so headstrong and are somewhat wise, they resist spells which are cast on them.  They are very good at searching, perception, fighting, and bows.  Dwarves  have a miserable stealth.  They can never be blinded.",
 
-"Half-orcs make excellent warriors, but are terrible at magic. They are as bad as dwarves at stealth, and horrible at searching, disarming, and perception. Half-orcs are quite ugly, and tend to pay more for goods in town. Because of their preference to living underground to on the surface, half-orcs resist darkness attacks.",
+"Half-orcs make excellent warriors, but are terrible at magic.  They are as bad as dwarves at stealth, and horrible at searching, disarming, and perception.  Half-orcs are quite ugly, and tend to pay more for goods in town.  Because of their preference to living underground to on the surface, half-orcs resist darkness attacks.",
 
-"Half-Trolls are incredibly strong, and have more hit points than most other races. They are also very stupid and slow. They are bad at searching, disarming, perception, and stealth. They are so ugly that a Half-Orc grimaces in their presence. They also happen to be fun to run... Half-trolls always have their strength sustained. At higher levels, Half-Trolls regenerate wounds automatically, and if he or her is warrior slowly.",
+"Half-Trolls are incredibly strong, and have more hit points than most other races.  They are also very stupid and slow.  They are bad at searching, disarming, perception, and stealth.  They are so ugly that a Half-Orc grimaces in their presence.  They also happen to be fun to run...  Half-trolls always have their strength sustained.  At higher levels, Half-Trolls regenerate wounds automatically, and if he or her is warrior slowly.",
 
-"The Amberites are a reputedly immortal race, who are endowed with numerous advantages in addition to their longevity. They are very tough and their constitution cannot be reduced, and their ability to heal wounds far surpasses that of any other race. Having seen virtually everything, very little is new to them, and they gain levels much slower than the other races.",
+"The Amberites are a reputedly immortal race, who are endowed with numerous advantages in addition to their longevity.  They are very tough and their constitution cannot be reduced, and their ability to heal wounds far surpasses that of any other race.  Having seen virtually everything, very little is new to them, and they gain levels much slower than the other races.",
 
-"High-elves are a race of immortal beings dating from the beginning of time. They are masters of all skills, and are strong and intelligent, although their wisdom is sometimes suspect. High-elves begin their lives able to see the unseen, and resist light effects just like regular elves. However, there are few things that they have not seen already, and experience is very hard for them to gain.",
+"High-elves are a race of immortal beings dating from the beginning of time.  They are masters of all skills, and are strong and intelligent, although their wisdom is sometimes suspect.  High-elves begin their lives able to see the unseen, and resist light effects just like regular elves.  However, there are few things that they have not seen already, and experience is very hard for them to gain.",
 
-"Barbarians are hardy men of the north. They are fierce in combat, and their wrath is feared throughout the world. Combat is their life: they feel no fear, and they learn to enter battle frenzy at will even sooner than half-trolls. Barbarians are, however, suspicious of magic, which makes magic devices fairly hard for them to use. ",
+"Barbarians are hardy men of the north.  They are fierce in combat, and their wrath is feared throughout the world.  Combat is their life: they feel no fear, and they learn to enter battle frenzy at will even sooner than half-trolls.  Barbarians are, however, suspicious of magic, which makes magic devices fairly hard for them to use. ",
 
-"Half-Ogres are like Half-Orcs, only more so. They are big, bad, and stupid. For warriors, they have all the necessary attributes, and they can even become wizards: after all, they are related to Ogre Magi, from whom they have learned the skill of setting trapped runes once their level is high enough. Like Half-Orcs, they resist darkness, and like Half-Trolls, they have their strength sustained.",
+"Half-Ogres are like Half-Orcs, only more so.  They are big, bad, and stupid.  For warriors, they have all the necessary attributes, and they can even become wizards: after all, they are related to Ogre Magi, from whom they have learned the skill of setting trapped runes once their level is high enough.  Like Half-Orcs, they resist darkness, and like Half-Trolls, they have their strength sustained.",
 
-"Half-Giants limited intelligence makes it difficult for them to become full spellcasters, but with their huge strength they make excellent warriors. Their thick skin makes them resistant to shards, and like Half-Ogres and Half-Trolls, they have their strength sustained.",
+"Half-Giants limited intelligence makes it difficult for them to become full spellcasters, but with their huge strength they make excellent warriors.  Their thick skin makes them resistant to shards, and like Half-Ogres and Half-Trolls, they have their strength sustained.",
 
-"Half-mortal descendants of the mighty titans, these immensely powerful creatures put almost any other race to shame. They may lack the fascinating special powers of certain other races, but their enhanced attributes more than make up for that. They learn to estimate the strengths of their foes, and their love for law and order makes them resistant to the effects of Chaos.",
+"Half-mortal descendants of the mighty titans, these immensely powerful creatures put almost any other race to shame.  They may lack the fascinating special powers of certain other races, but their enhanced attributes more than make up for that.  They learn to estimate the strengths of their foes, and their love for law and order makes them resistant to the effects of Chaos.",
 
-"With but one eye, a Cyclops can see more than many with two eyes. They are headstrong, and loud noises bother them very little. They are not quite qualified for the magic using professions, but as a certain Mr. Ulysses can testify, their accuracy with thrown rocks can be deadly...",
+"With but one eye, a Cyclops can see more than many with two eyes.  They are headstrong, and loud noises bother them very little.  They are not quite qualified for the magic using professions, but as a certain Mr.  Ulysses can testify, their accuracy with thrown rocks can be deadly...",
 
-"Yeeks are among the most pathetic creatures. Fortunately, their horrible screams can scare away less confident foes, and their skin becomes more and more resistant to acid, as they gain experience. But having said that, even a mediocre monster can wipe the proverbial floor with an unwary Yeek.",
+"Yeeks are among the most pathetic creatures.  Fortunately, their horrible screams can scare away less confident foes, and their skin becomes more and more resistant to acid, as they gain experience.  But having said that, even a mediocre monster can wipe the proverbial floor with an unwary Yeek.",
 
-"Klackons are bizarre semi-intelligent ant-like insectoid creatures. They make great fighters, but their mental abilities are severely limited. Obedient and well-ordered, they can never be confused. They are also very nimble, and become faster as they advance levels. They are also very acidic, inherently resisting acid, and capable of spitting acid at higher levels. ",
+"Klackons are bizarre semi-intelligent ant-like insectoid creatures.  They make great fighters, but their mental abilities are severely limited.  Obedient and well-ordered, they can never be confused.  They are also very nimble, and become faster as they advance levels.  They are also very acidic, inherently resisting acid, and capable of spitting acid at higher levels. ",
 
-"Kobolds are a weak goblin race. They love poisoned weapons, and can learn to throw poisoned darts (of which they carry an unlimited supply). They are also inherently resistant to poison, although they are not one of the more powerful races.",
+"Kobolds are a weak goblin race.  They love poisoned weapons, and can learn to throw poisoned darts (of which they carry an unlimited supply).  They are also inherently resistant to poison, although they are not one of the more powerful races.",
 
-"The hated and persecuted race of nocturnal dwarves, these cave-dwellers are not much bothered by darkness. Their natural inclination to magical items has made them immune to effects which could drain away magical energy.",
+"The hated and persecuted race of nocturnal dwarves, these cave-dwellers are not much bothered by darkness.  Their natural inclination to magical items has made them immune to effects which could drain away magical energy.",
 
-"Another dark, cave-dwelling race, likewise unhampered by darkness attacks, the Dark Elves have a long tradition and knowledge of magic. They have an inherent magic missile attack available to them at a low level. With their keen sight, they also learn to see invisible things as their relatives High-Elves do, but at a higher level.",
+"Another dark, cave-dwelling race, likewise unhampered by darkness attacks, the Dark Elves have a long tradition and knowledge of magic.  They have an inherent magic missile attack available to them at a low level.  With their keen sight, they also learn to see invisible things as their relatives High-Elves do, but at a higher level.",
 
-"A humanoid race with dragon-like attributes. As they advance levels, they gain new elemental resistances (up to Poison Resistance), and they also have a breath weapon, which becomes more powerful with experience. The exact type of the breath weapon depends on the Draconian's class and level. With their wings, they can easily escape any pit trap unharmed.",
+"A humanoid race with dragon-like attributes.  As they advance levels, they gain new elemental resistances (up to Poison Resistance), and they also have a breath weapon, which becomes more powerful with experience.  The exact type of the breath weapon depends on the Draconian's class and level.  With their wings, they can easily escape any pit trap unharmed.",
 
-"A secretive and mysterious ancient race. Their civilization may well be older than any other on our planet, and their intelligence and wisdom are naturally sustained, and are so great that they enable Mind Flayers to become more powerful spellcasters than any other race, even if their physical attributes are a good deal less admirable. As they advance levels, they gain the powers of See Invisible and Telepathy.",
+"A secretive and mysterious ancient race.  Their civilization may well be older than any other on our planet, and their intelligence and wisdom are naturally sustained, and are so great that they enable Mind Flayers to become more powerful spellcasters than any other race, even if their physical attributes are a good deal less admirable.  As they advance levels, they gain the powers of See Invisible and Telepathy.",
 
-"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 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.",
+"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.",
+"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.",
+ "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 slow but strong, and very susceptible to fire. As the Shepherds of the Trees, they have the innate ability to cause trees to rise about them for protection.",
+"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.",
+"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. ",
+"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. ",
 
-"Shadow Fairies are one of the several fairy races. They have wings, and can fly over traps that may open up beneath them. Shadow Fairies must beware of sunlight, as they are vulnerable to bright light. They are physically weak, but have advantages in using magic and are amazingly stealthy. Shadow Fairies have a wonderful advantage in that they never aggravate monsters (If their equipment normally aggravates monsters, they only suffer a penalty to stealth, but if they aggravate by their personality itself, the advantage will be lost).",
+"Shadow Fairies are one of the several fairy races.  They have wings, and can fly over traps that may open up beneath them.  Shadow Fairies must beware of sunlight, as they are vulnerable to bright light.  They are physically weak, but have advantages in using magic and are amazingly stealthy.  Shadow Fairies have a wonderful advantage in that they never aggravate monsters (If their equipment normally aggravates monsters, they only suffer a penalty to stealth, but if they aggravate by their personality itself, the advantage will be lost).",
 
-"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.",
+"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
 };
@@ -1769,69 +1815,69 @@ static cptr class_jouhou[MAX_CLASS] =
   
 "µ³Ê¼¤ÏÇϤ˾è¤êÀï¾ì¤ò¶î¤±È´¤±¤ë¥¨¥ê¡¼¥ÈÀï»Î¤Ç¤¹¡£ËâË¡¤Ï»È¤¨¤Þ¤»¤ó¤¬¡¢ÇϾ夫¤é¤Î°µÅÝŪ¤Ê¹¶·âÎϤò¸Ø¤ë¾å¤Ë¡¢¹â¤¤µ¡Æ°ÎϤòÀ¸¤«¤·¤¿¼Í·â¤ò¤âÆÀ°Õ¤È¤·¤Æ¤¤¤Þ¤¹¡£¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¡¢ÌîÀ¸¤Î¥â¥ó¥¹¥¿¡¼¤Ë¤Þ¤¿¤¬¤ê̵ÍýÌðÍý¼ê¤Ê¤º¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Èà¤é¤Ï¸Ê¤ÎÆùÂΤÈÀº¿À¤Ë¸Ø¤ê¤ò»ý¤Á¡¢ËâË¡Æ»¶ñ¤Ë¤Ï¤¢¤Þ¤êÍê¤í¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£",
   
-"¶¸Àï»Î¤ÏÅܤ궸¤Ã¤ÆÉð´ï¤ò¿¶¤ë¤¦¶²¤ë¤Ù¤­Àï»Î¤Ç¤¹¡£Á´¿¦¶ÈÃæºÇ¹â¤ÎÆùÂÎǽÎϤò¸Ø¤ê¡¢¶²ÉݤÈËãáã¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¤½¤Î¶¯¿Ù¤ÊÆùÂΤÇÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËÉð´ï¤Ê¤·¤ÇÀ臘¤³¤È¤ä¡¢¼ö¤¤¤Î¤«¤±¤é¤ì¤¿ÁõÈ÷¤òÎϤŤ¯¤ÇÇí¤¬¤¹¤³¤È¤¬¤Ç¤­¡¢¤¤¤¯¤Ä¤«¤Îµ»¤ò(È¿ËâË¡¾õÂ֤Ǥâ)»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢´¬Êª¤äËâË¡Æ»¶ñ¤ÏÁ´¤¯»È¤¦¤³¤È¤¬¤Ç¤­¤º¡¢æ«¤Î²ò½ü¤ä±£Ì©¹ÔÆ°¡¢Ãµº÷¡¢ËâË¡Ëɸ桢Èô¤ÓÆ»¶ñ¤Îµ»Ç½¤Ë´Ø¤·¤Æ¤ÏÀä˾Ū¤Ç¤¹¡£¤Ò¤¿¤¹¤é²¥¤Ã¤ÆÆ»¤ò³«¤¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£¥¢¥ó¥Ð¥é¥¤¥È¤ÈÍ©Îî¤ÏÈó¾ï¤Ë¾¡Íø¤·¤ä¤¹¤¤¤Ç¤¹¤¬¥¹¥³¥¢¤¬¤«¤Ê¤êÄ㤯½¤Àµ¤µ¤ì¤Þ¤¹¡£",
+"¶¸Àï»Î¤ÏÅܤ궸¤Ã¤ÆÉð´ï¤ò¿¶¤ë¤¦¶²¤ë¤Ù¤­Àï»Î¤Ç¤¹¡£Á´¿¦¶ÈÃæºÇ¹â¤ÎÆùÂÎǽÎϤò¸Ø¤ê¡¢¶²ÉݤÈËãáã¤ËÂФ¹¤ëÂÑÀ­¤ò»ý¤Á¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ì¤Ð¤½¤Î¶¯¿Ù¤ÊÆùÂΤÇÌð¤Î¼öʸ¤òÄ·¤ÍÊÖ¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËÉð´ï¤Ê¤·¤ÇÀ臘¤³¤È¤ä¡¢¼ö¤¤¤Î¤«¤±¤é¤ì¤¿ÁõÈ÷¤òÎϤŤ¯¤ÇÇí¤¬¤¹¤³¤È¤¬¤Ç¤­¡¢¤¤¤¯¤Ä¤«¤Îµ»¤ò(È¿ËâË¡¾õÂ֤Ǥâ)»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤·¡¢´¬Êª¤äËâË¡Æ»¶ñ¤ÏÁ´¤¯»È¤¦¤³¤È¤¬¤Ç¤­¤º¡¢æ«¤Î²ò½ü¤ä±£Ì©¹ÔÆ°¡¢Ãµº÷¡¢ËâË¡Ëɸ桢Èô¤ÓÆ»¶ñ¤Îµ»Ç½¤Ë´Ø¤·¤Æ¤ÏÀä˾Ū¤Ç¤¹¡£¤Ò¤¿¤¹¤é²¥¤Ã¤ÆÆ»¤ò³«¤¯¤·¤«¤¢¤ê¤Þ¤»¤ó¡£Í©Îî¤ÏÈó¾ï¤Ë¾¡Íø¤·¤ä¤¹¤¤¤Ç¤¹¤¬¥¹¥³¥¢¤¬¤«¤Ê¤êÄ㤯½¤Àµ¤µ¤ì¤Þ¤¹¡£",
 
 "ÃÃÌê»Õ¤ÏÉð´ï¤äËɶñ¤ò¼«Ê¬¤Ç¶¯²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Æüì¸ú²Ì¤ò»ý¤ÄÉð´ï¤äËɶñ¤«¤éÆüì¸ú²Ì¤Î¸µ¤È¤Ê¤ë¥¨¥Ã¥»¥ó¥¹¤ò¼è¤ê½Ð¤·¡¢Ê̤ÎÉð´ï¤äËɶñ¤Ë¥¨¥Ã¥»¥ó¥¹¤òÉղ乤뤳¤È¤Ë¤è¤Ã¤Æ¤½¤ÎÆüì¸ú²Ì¤òÉղäǤ­¤Þ¤¹¡£¤¢¤ëÄøÅÙ¤ÎÀïƮǽÎϤâ»ý¤Á¤Þ¤¹¤¬¡¢ËâË¡¤Ï°ìÀÚ»ÈÍѤǤ­¤º¡¢±£Ì©¤äËâË¡Ëɸæ¤Îµ»Ç½¤âÄ㤯¤Ê¤ê¤Þ¤¹¡£",
 
 "¶À»È¤¤¤Ï¡¢ËâÎϤιþ¤á¤é¤ì¤¿¶À¤òºî¤ê½Ð¤·¤Æ¡¢¤½¤ì¤ò¿¨ÇޤȤ·¤Æ¹¶·â¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤­¤ë¶ÀËâË¡¤ò»È¤¤¤Þ¤¹¡£¶À»È¤¤¤Ï¶À¤Î¾å¤Ç¼ÂÎϤòȯ´ø¤·¡¢¶À¤Î¾å¤Ç¤ÏÁÇÁᤤ¥Æ¥ì¥Ý¡¼¥È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£ËâË¡¤Î¶À¤Ï¡¢¥ì¥Ù¥ë¤Ë¤è¤Ã¤Æ°ìÅÙ¤ËÀ©¸æ¤Ç¤­¤ë¿ô¤¬À©¸Â¤µ¤ì¤Þ¤¹¡£¶ÀËâË¡¤ËɬÍפÊǽÎϤÏÃÎǽ¤Ç¤¹¡£",
 
-"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤­°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤­°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤­¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£"
+"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤­°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤­°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤­¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤­¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£"
 
 #else
 
-"A Warrior is a hack-and-slash character, who solves most of his problems by cutting them to pieces, but will occasionally fall back on the help of a magical device. Unfortunately, many high-level devices may be forever beyond their use.",
+"A Warrior is a hack-and-slash character, who solves most of his problems by cutting them to pieces, but will occasionally fall back on the help of a magical device.  Unfortunately, many high-level devices may be forever beyond their use.",
 
-"A Mage is a spell caster that must live by his wits as he cannot hope to simply hack his way through the dungeon like a warrior. In addition to his spellbooks, a mage should carry a range of magical devices to help him in his endeavors which he can master far more easily than anyone else. A mage's prime statistic is Intelligence as this determines his spell casting ability. ",
+"A Mage is a spell caster that must live by his wits as he cannot hope to simply hack his way through the dungeon like a warrior.  In addition to his spellbooks, a mage should carry a range of magical devices to help him in his endeavors which he can master far more easily than anyone else.  A mage's prime statistic is Intelligence as this determines his spell casting ability. ",
 
-"A Priest is a character devoted to serving a higher power. They explore the dungeon in the service of their God. Since Priests receive new prayers as gifts from their patron deity, they cannot choose which ones they will learn. Priests are familiar with magical devices which they believe act as foci for divine intervention in the natural order of things. A priest wielding an edged weapon will be so uncomfortable with it that his fighting ability. A Priest's primary stat is Wisdom since this determine his success at praying to his deity. ",
+"A Priest is a character devoted to serving a higher power.  They explore the dungeon in the service of their God.  Since Priests receive new prayers as gifts from their patron deity, they cannot choose which ones they will learn.  Priests are familiar with magical devices which they believe act as foci for divine intervention in the natural order of things.  A priest wielding an edged weapon will be so uncomfortable with it that his fighting ability.  A Priest's primary stat is Wisdom since this determine his success at praying to his deity. ",
 
-"A Rogue is a character that prefers to live by his cunning, but is capable of fighting his way out of a tight spot. Rogues are good at locating hidden traps and doors and are the masters of disarming traps and picking locks. A rogue has a high stealth allowing him to sneak around many creatures without having to fight, or to get in a telling first blow. A rogue may also backstab a fleeing monster. Intelligence determines a Rogue's spell casting ability.",
+"A Rogue is a character that prefers to live by his cunning, but is capable of fighting his way out of a tight spot.  Rogues are good at locating hidden traps and doors and are the masters of disarming traps and picking locks.  A rogue has a high stealth allowing him to sneak around many creatures without having to fight, or to get in a telling first blow.  A rogue may also backstab a fleeing monster.  Intelligence determines a Rogue's spell casting ability.",
 
-"A Ranger is a combination of a warrior and a mage who has developed a special affinity for the natural world around him. He is a good fighter and also good about a missile weapon such as a bow. A ranger has a good stealth, good perception, good searching, a good saving throw and is good with magical devices. Intelligence determines a Ranger's spell casting ability.",
+"A Ranger is a combination of a warrior and a mage who has developed a special affinity for the natural world around him.  He is a good fighter and also good about a missile weapon such as a bow.  A ranger has a good stealth, good perception, good searching, a good saving throw and is good with magical devices.  Intelligence determines a Ranger's spell casting ability.",
 
-"A Paladin is a combination of a warrior and a priest. Paladins are very good fighters, but not very good at missile weapons. A paladin lacks much in the way of abilities. He is poor at stealth, perception, searching, and magical devices but has a decent saving throw due to his divine alliance. Wisdom determines a Paradin's success at praying to his deity.",
+"A Paladin is a combination of a warrior and a priest.  Paladins are very good fighters, but not very good at missile weapons.  A paladin lacks much in the way of abilities.  He is poor at stealth, perception, searching, and magical devices but has a decent saving throw due to his divine alliance.  Wisdom determines a Paladin's success at praying to his deity.",
 
-"A Warrior-Mage is precisely what the name suggests: a cross between the warrior and mage classes. While their brothers, the rangers, specialize in Nature magic and survival skills, true Warrior-Mages attempt to reach the best of both worlds. As warriors they are much superior to the usual Mage class. Intelligence determines a Warrior-Mage's spell casting ability.",
+"A Warrior-Mage is precisely what the name suggests: a cross between the warrior and mage classes.  While their brothers, the rangers, specialize in Nature magic and survival skills, true Warrior-Mages attempt to reach the best of both worlds.  As warriors they are much superior to the usual Mage class.  Intelligence determines a Warrior-Mage's spell casting ability.",
 
-"Chaos Warriors are the feared servants of the terrible Demon Lords of Chaos. Every Chaos Warrior has a Patron Demon and, when gaining a level, may receive a reward from his Patron. He might be healed or polymorphed, his stats could be increased, or he might be rewarded with an awesome weapon. On the other hand, the Patrons might surround him with monsters, drain his stats or wreck his equipment or they might simply ignore him. The Demon Lords of Chaos are chaotic and unpredictable indeed. The exact type of reward depends on both the Patron Demon (different Demons give different rewards) and chance.",
+"Chaos Warriors are the feared servants of the terrible Demon Lords of Chaos.  Every Chaos Warrior has a Patron Demon and, when gaining a level, may receive a reward from his Patron.  He might be healed or polymorphed, his stats could be increased, or he might be rewarded with an awesome weapon.  On the other hand, the Patrons might surround him with monsters, drain his stats or wreck his equipment or they might simply ignore him.  The Demon Lords of Chaos are chaotic and unpredictable indeed.  The exact type of reward depends on both the Patron Demon (different Demons give different rewards) and chance.",
 
-"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 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. ",
+"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. ",
 
-"Tourists have visited this world for the purpose of sightseeing. Their fighting skills is bad, and they cannot cast powerful spells. They are the most difficult class to win the game with. Intelligence determines a tourist's spell casting ability.",
+"Tourists have visited this world for the purpose of sightseeing.  Their fighting skills is bad, and they cannot cast powerful spells.  They are the most difficult class to win the game with.  Intelligence determines a tourist's spell casting ability.",
 
 "Imitators have enough fighting skills to survive, but rely on their ability to imitate monster spells.  When monsters in line of sight use spells, they are added to a temporary spell list which the imitator can choose among.  Spells should be imitated quickly, because timing and situation are everything.  An imitator can only repeat a spell once each time he observes it.  Dexterity determines general imitation ability, but a stat related to the specific action is often also taken into account.",
 
-"Beastmasters are in tune with the minds of the creatures of the world of Hengband. They are very good at riding, and have enough fighting ability. They use monsters which summoned or dominated by him as his hands and feet. Beastmasters can cast trump magic, and very good at summoning spell, but they can not summon non-living creatures. Charisma determines a Beastmaster's spell casting ability.",
+"Beastmasters are in tune with the minds of the creatures of the world of Hengband.  They are very good at riding, and have enough fighting ability.  They use monsters which summoned or dominated by him as his hands and feet.  Beastmasters can cast trump magic, and very good at summoning spell, but they can not summon non-living creatures.  Charisma determines a Beastmaster's spell casting ability.",
 
-"Sorcerers are the all-around best magicians, being able to cast any spell from most magic realms without having to learn it. On the downside, they are the worst fighters in the dungeon, being unable to use any weapon but a Wizardstaff.",
+"Sorcerers are the all-around best magicians, being able to cast any spell from most magic realms without having to learn it.  On the downside, they are the worst fighters in the dungeon, being unable to use any weapon but a Wizardstaff.",
 
-"Archers are to bows what warriors are to melee. They are the best class around with any bow, crossbow, or sling. They need a lot of ammunition, but will learn how to make it from junk found in the dungeon. An archer is better than a warrior at stealth, perception, searching and magical devices.",
+"Archers are to bows what warriors are to melee.  They are the best class around with any bow, crossbow, or sling.  They need a lot of ammunition, but will learn how to make it from junk found in the dungeon.  An archer is better than a warrior at stealth, perception, searching and magical devices.",
 
-"Magic-Eaters can absorb the energy of wands, staffs, and rods, and can then use these magics as if they were carrying all of these absorbed devices. They are middling-poor at fighting. A Magic-Eater's prime statistic is intelligence.",
+"Magic-Eaters can absorb the energy of wands, staffs, and rods, and can then use these magics as if they were carrying all of these absorbed devices.  They are middling-poor at fighting.  A Magic-Eater's prime statistic is intelligence.",
 
-"Bards are something like traditional musicians. Their magical attacks are sound-based, and last as long as the Bard has mana. Although a bard cannot sing two or more songs at the same time, he or she does have the advantage that many songs affect all areas in sight. A bard's prime statistic is charisma.",
+"Bards are something like traditional musicians.  Their magical attacks are sound-based, and last as long as the Bard has mana.  Although a bard cannot sing two or more songs at the same time, he or she does have the advantage that many songs affect all areas in sight.  A bard's prime statistic is charisma.",
 
-"Red-Mages can use almost all spells from lower rank spellbooks of most realms without having to learn it. At higher level, they develop the powerful ability \"Double Magic\". However, they have large penalties in the mana costs, minimum levels, and failure rates of spells, and they cannot use any spells from higher rank spellbooks. They are not bad at using magical devices and magic resistance, and are decent fighter, but are bad at other skills. A red-mage's prime statistic is intelligence.",
+"Red-Mages can use almost all spells from lower rank spellbooks of most realms without having to learn it.  At higher level, they develop the powerful ability \"Double Magic\".  However, they have large penalties in the mana costs, minimum levels, and failure rates of spells, and they cannot use any spells from higher rank spellbooks.  They are not bad at using magical devices and magic resistance, and are decent fighter, but are bad at other skills.  A red-mage's prime statistic is intelligence.",
 
-"Samurai, masters of the art of the blade, are the next strongest fighters after Warriors. Their spellpoints do not depend on level, but depend solely on wisdom, and they can use the technique Concentration to temporarily increase SP beyond its usual maximum value. Samurai are not good at most other skills, and many magical devices may be too difficult for them to use. Wisdom determines a Samurai's ability to use the special combat techniques available to him.",
+"Samurai, masters of the art of the blade, are the next strongest fighters after Warriors.  Their spellpoints do not depend on level, but depend solely on wisdom, and they can use the technique Concentration to temporarily increase SP beyond its usual maximum value.  Samurai are not good at most other skills, and many magical devices may be too difficult for them to use.  Wisdom determines a Samurai's ability to use the special combat techniques available to him.",
 
-"A ForceTrainer is a master of the spiritual Force. They prefer fighting with neither weapon nor armor. They are not as good fighters as are Monks, but they can use both magic and the spiritual Force. Wielding weapons or wearing heavy armor disturbs use of the Force. Wisdom is a ForceTrainer's primary stat.",
+"A ForceTrainer is a master of the spiritual Force.  They prefer fighting with neither weapon nor armor.  They are not as good fighters as are Monks, but they can use both magic and the spiritual Force.  Wielding weapons or wearing heavy armor disturbs use of the Force.  Wisdom is a ForceTrainer's primary stat.",
 
-"A Blue-Mage is a spell caster that must live by his wits, as he cannot hope to simply hack his way through the dungeon like a warrior. A major difference between the Mage and the Blue-Mage is the method of learning spells: Blue-Mages may learn spells from monsters by activating his Learning ability. A Blue-Mage's prime statistic is Intelligence as this determines his spell casting ability. ",
+"A Blue-Mage is a spell caster that must live by his wits, as he cannot hope to simply hack his way through the dungeon like a warrior.  A major difference between the Mage and the Blue-Mage is the method of learning spells: Blue-Mages may learn spells from monsters by activating his Learning ability.  A Blue-Mage's prime statistic is Intelligence as this determines his spell casting ability. ",
 
-"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.",
+"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.",
+"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.",
+"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."
 #endif
 };
 
@@ -1867,35 +1913,35 @@ static cptr seikaku_jouhou[MAX_SEIKAKU] =
 
 "\"Ordinary\" is a personality with no special skills or talents, with unmodified stats and skills.",
 
-"\"Mighty\" raises your physical stats and skills, but reduces stats and skills which influence magic. It makes your stats suitable for a warrior. ",
+"\"Mighty\" raises your physical stats and skills, but reduces stats and skills which influence magic.  It makes your stats suitable for a warrior.  Also it directly influences your hit-points and spell fail rate.",
 
-"\"Shrewd\" reduces your physical stats, and raises your intelligence and magical skills. It makes your stats suitable for a mage.",
+"\"Shrewd\" reduces your physical stats, and raises your intelligence and magical skills.  It makes your stats suitable for a mage.  Also it directly influences your hit-points and spell fail rate.",
 
-"\"Pious\" deepens your faith in your God. It makes your physical ability average, and your stats suitable for priest. ",
+"\"Pious\" deepens your faith in your God.  It makes your physical ability average, and your stats suitable for priest. ",
 
 "\"Nimble\" renders you highly skilled comparatively well, but reduces your physical ability. ",
 
-"\"Fearless\" raises both your melee and magical ability. Stats such as magic defense and constitution are reduced. ",
+"\"Fearless\" raises both your melee and magical ability.  Stats such as magic defense and constitution are reduced.  Also it has a direct bad influence on your hit-points.",
 
-"\"Combat\" gives you comparatively high melee and shooting abilities, and average constitution. Other skills such as stealth, magic defence, and magical devices are weakened. All \"Combat\" people have great respect for the legendary \"Combat Echizen\".\n\
+"\"Combat\" gives you comparatively high melee and shooting abilities, and average constitution.  Other skills such as stealth, magic defence, and magical devices are weakened.  All \"Combat\" people have great respect for the legendary \"Combat Echizen\".\n\
 (See \"Death Crimson\" / Ecole Software Corp.)",
 
-"A \"Lazy\" person has no good stats and can do no action well.",
+"A \"Lazy\" person has no good stats and can do no action well.  Also it has a direct bad influence on your spell fail rate.",
 
-"\"Sexy\" rises all of your abilities, but your haughty attitude will aggravate all monsters. Only females can choose this personality.",
+"\"Sexy\" rises all of your abilities, but your haughty attitude will aggravate all monsters.  Only females can choose this personality.",
 
-"A \"Lucky\" man has poor stats, equivalent to a \"Lazy\" person. Mysteriously, however, he can do all things well. Only males can choose this personality.",
+"A \"Lucky\" man has poor stats, equivalent to a \"Lazy\" person.  Mysteriously, however, he can do all things well.  Only males can choose this personality.",
 
-"A \"Patient\" person does things carefully. Patient people have high constitution, and high resilience, but poor abilities in most other skills.",
+"A \"Patient\" person does things carefully.  Patient people have high constitution, and high resilience, but poor abilities in most other skills.  Also it directly influences your hit-points.",
 
-"\"munchkin\" is a personality for beginners. It raises all your stats and skills. With this personality, you can win the game easily, but gain little honor in doing so."
+"\"munchkin\" is a personality for beginners.  It raises all your stats and skills.  With this personality, you can win the game easily, but gain little honor in doing so."
 #endif
 };
 
 static cptr realm_jouhou[VALID_REALM] =
 {
 #ifdef JP
-"À¸Ì¿¤Ï¡Ö¤è¤¤¡×ËâË¡¤Ç¤¹¡£¤³¤ì¤Ï¼£ÎŤäËɸæ¤ËÈó¾ï¤ËÍê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢¹¶·â¼öʸ¤â¤¤¤¯¤Ä¤«»ý¤Ã¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤é¤Ï°­Ëâ¤Î±ø¤ì¤¿¼êÀè¤ËÂй³¤¹¤ë¤¿¤á¤Ë¤è¤¯»È¤ï¤ì¤Þ¤¹¡£",
+"À¸Ì¿¤Ï²óÉüǽÎϤËÍ¥¤ì¤¿ËâË¡¤Ç¤¹¡£¼£ÎŤäËɸ桢´¶ÃÎËâË¡¤¬Â¿¤¯´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¹¶·â¼öʸ¤â¤ï¤º¤«¤Ë»ý¤Ã¤Æ¤¤¤Þ¤¹¡£Æä˹â¥ì¥Ù¥ë¤Î¼öʸ¤Ë¤Ï¥¢¥ó¥Ç¥Ã¥É¤ò¿Ð¤Ëµ¢¤¹ÎϤò¤¢¤ë¤È¸À¤ï¤ì¤Æ¤¤¤Þ¤¹¡£",
 
 "Àç½Ñ¤Ï¡Ömeta¡×Îΰè¤Ç¤¢¤ê¡¢´¶ÃΤä´ÕÄê¡¢¤µ¤é¤ËÂàµÑÍѤμöʸ¤ä¼«¿È¤ÎǽÎϤò¹â¤á¤ë¼öʸ¤Ê¤É¤ÎÊØÍø¤Ê¼öʸ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£¤·¤«¤·¡¢Ä¾Àܹ¶·âÍѤμöʸ¤Ï»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£",
 
@@ -1913,41 +1959,71 @@ static cptr realm_jouhou[VALID_REALM] =
 
 "°­Ëâ¤ÎËâË¡¤Ï°Å¹õ¤ÈƱÍÍÈó¾ï¤Ë¼Ù°­¤Ê¥«¥Æ¥´¥ê¡¼¤Ç¤¹¡£ÍÍ¡¹¤Ê¹¶·âËâË¡¤ËÍ¥¤ì¡¢¤Þ¤¿°­Ëâ¤Î¤´¤È¤­ÃγÐǽÎϤòÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¹â¥ì¥Ù¥ë¤Î¼öʸ¤Ï°­Ëâ¤ò¼«ºß¤ËÁà¤ê¡¢¼«Ê¬¼«¿È¤ÎÆùÂΤò¤â°­Ëâ²½¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£",
 
+"Ç˼٤ϡÖÀµµÁ¡×¤ÎËâË¡¤Ç¤¹¡£Ä¾ÀÜŨ¤ò½ý¤Ä¤±¤ëËâË¡¤¬Â¿¤¯´Þ¤Þ¤ì¡¢Æä˼ٰ­¤ÊŨ¤ËÂФ¹¤ëÎϤ϶²¤ë¤Ù¤­¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Á±ÎɤÊŨ¤Ë¤Ï¤¢¤Þ¤ê¸ú²Ì¤¬¤¢¤ê¤Þ¤»¤ó¡£",
+
 "²Î½¸¤Ï¡¢²Î¤Ë¤è¤Ã¤Æ¸ú²Ì¤òȯ´ø¤¹¤ëËâË¡¤Ç¤¹¡£ËâË¡¤ÈƱÍÍ¡¢»È¤Ã¤¿»þ¤Ë¸ú²Ì¤Î¤¢¤ë¤â¤Î¤È¡¢²Î¤¤Â³¤±¤ë¤³¤È¤Ë¤è¤Ã¤Æ»ý³¤·¤Æ¸ú²Ì¤òȯ´ø¤¹¤ë¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¸å¼Ô¤Î¾ì¹ç¤Ï¡¢MP¤Î³¤¯¸Â¤ê¸ú²Ì¤òȯ´ø¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢Æ±»þ¤Ë²Î¤¨¤ë²Î¤Ï1¤Ä¤À¤±¤È¤¤¤¦À©¸Â¤â¤¢¤ê¤Þ¤¹¡£",
 
 "Éð·Ý¤Î½ñ¤Ï¡¢ÍÍ¡¹¤ÊÀïÆ®¤Îµ»¤Ë¤Ä¤¤¤Æ½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ÎËܤϵ»¤ò³Ð¤¨¤ë¤È¤­¤ËÆɤàɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢°ìÅٳФ¨¤¿µ»¤Ï»È¤¦¤Î¤ËËܤò»ý¤ÄɬÍפϤ¢¤ê¤Þ¤»¤ó¡£µ»¤ò»È¤¦¤È¤­¤Ë¤Ïɬ¤ºÉð´ï¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£"
 
 #else
 
-"Life is 'good' magic; it relies mostly on healing and protective spells. It does have a few attack spells as well, but these are mostly used for harming and banishing foul minions of evil. ",
+"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.",
 
-"Sorcery is a `meta` realm, including enchantment and general spells. It provides superb protection spells, spells to enhance your odds in combat and, most importantly, a vast selection of spells for gathering information. However, Sorcery has one weakness: it has no spells to deal direct damage to your enemies.",
+"Sorcery is a `meta` realm, including enchantment and general spells.  It provides superb protection spells, spells to enhance your odds in combat and, most importantly, a vast selection of spells for gathering information.  However, Sorcery has one weakness: it has no spells to deal direct damage to your enemies.",
 
-"Nature magic makes you master of elements; it provides protection, detection, curing and attack spells. Nature also has a spell of Herbal Healing, which is the only powerful healing spell outside the realm of Life magic.",
+"Nature magic makes you master of elements; it provides protection, detection, curing and attack spells.  Nature also has a spell of Herbal Healing, which is the only powerful healing spell outside the realm of Life magic.",
 
-"There are few types of magic more unpredictable and difficult to control than Chaos magic. Chaos is the very element of unmaking, and the Chaos spells are the most terrible weapons of destruction imaginable. The caster can also call on the primal forces of Chaos to induce mutations in his/her opponents and even him/herself.",
+"There are few types of magic more unpredictable and difficult to control than Chaos magic.  Chaos is the very element of unmaking, and the Chaos spells are the most terrible weapons of destruction imaginable.  The caster can also call on the primal forces of Chaos to induce mutations in his/her opponents and even him/herself.",
 
-"There is no fouler nor more evil category of spells than the necromantic spells of Death Magic. These spells are relatively hard to learn, but at higher levels the spells give the caster power over living and the (un)dead, but the most powerful spells need his / her own blood as the focus, often hurting the caster in the process of casting.",
+"There is no fouler nor more evil category of spells than the necromantic spells of Death Magic.  These spells are relatively hard to learn, but at higher levels the spells give the caster power over living and the (un)dead, but the most powerful spells need his / her own blood as the focus, often hurting the caster in the process of casting.",
 
-"Trump magic has, indeed, an admirable selection of teleportation spells. Since the Trump gateways can also be used to summon other creatures, Trump magic has an equally impressive selection of summoning spells. However, not all monsters appreciate being drawn to another place by Trump user.",
+"Trump magic has, indeed, an admirable selection of teleportation spells.  Since the Trump gateways can also be used to summon other creatures, Trump magic has an equally impressive selection of summoning spells.  However, not all monsters appreciate being drawn to another place by Trump user.",
 
-"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. ",
+"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.",
+"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.",
 
-"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.",
+"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.",
 
-"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."
+"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 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."
 #endif
 };
 
+static char realm_subinfo[VALID_REALM][41] =
+{
+#ifdef JP
+"´¶ÃΤÈËɸæ¤È²óÉü¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"¹¶·â¤Ï¤Ç¤­¤Þ¤»¤ó¤¬Èó¾ï¤ËÊØÍø¤Ç¤¹",
+"´¶ÃΤÈËɸæ¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"Ç˲õŪ¤Ê¹¶·â¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"À¸Ì¿¤Î¤¢¤ëŨ¤Ø¤Î¹¶·â¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"¾¤´­¤È¥Æ¥ì¥Ý¡¼¥È¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"¤ä¤ä¼å¤¤¤Ê¤¬¤é¤âÈó¾ï¤ËÊØÍø¤Ç¤¹",
+"ľÀÜÀïÆ®¤ÎÊä½õ¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"¹¶·â¤ÈËɸæ¤ÎξÌ̤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"¼Ù°­¤Ê²øʪ¤ËÂФ¹¤ë¹¶·â¤ËÍ¥¤ì¤Æ¤¤¤Þ¤¹",
+"ÍÍ¡¹¤ÊËâË¡¸ú²Ì¤ò»ý¤Ã¤¿²Î¤ò²Î¤¤¤Þ¤¹",
+"ÂǷ⹶·â¤ËÆüìǽÎϤòÉղä·¤Þ¤¹"
+#else
+"Good at detection and healing.",
+"Utility and protective spells.",
+"Good at detection and defence.",
+"Offensive and destructive.",
+"Ruins living creatures.",
+"Good at summoning, teleportation.",
+"Very useful but poor a bit.",
+"Support for melee fighting.",
+"Good at both offence and defence.",
+"Destroys evil creatures.",
+"Song with magical effects.",
+"Special attacks on melee."
+#endif
+};
 
-/*
- * Current stats
- */
-static s16b stat_use[6];
 
 /*
  * Autoroll limit
@@ -1973,18 +2049,36 @@ static void birth_quit(void)
        quit(NULL);
 }
 
+
+/*
+ *  Show specific help file
+ */
+static void show_help(cptr helpfile)
+{
+       /* Save screen */
+       screen_save();
+
+       /* Peruse the help file */
+       (void)show_file(TRUE, helpfile, NULL, 0, 0);
+
+       /* Load screen */
+       screen_load();
+}
+
+
 /*
  * Choose from one of the available magical realms
  */
 static byte choose_realm(s32b choices, int *count)
 {
        int picks[VALID_REALM] = {0};
-       int k, i;
+       int k, i, cs, os;
        byte auto_select = REALM_NONE;
        int n = 0;
        char c;
+       char sym[VALID_REALM];
        char p2 = ')';
-       char buf[80];
+       char buf[80], cur[80];
 
        /* Count the choices */
        if (choices & CH_LIFE)
@@ -2032,6 +2126,11 @@ static byte choose_realm(s32b choices, int *count)
                (*count)++;
                auto_select = REALM_DAEMON;
        }
+       if (choices & CH_CRUSADE)
+       {
+               (*count)++;
+               auto_select = REALM_CRUSADE;
+       }
        if (choices & CH_MUSIC)
        {
                (*count)++;
@@ -2043,98 +2142,183 @@ static byte choose_realm(s32b choices, int *count)
                auto_select = REALM_HISSATSU;
        }
 
-       clear_from(14);
+       clear_from(10);
 
        /* Auto-select the realm */
        if ((*count) < 2) return auto_select;
 
-       if (p_ptr->pclass == CLASS_PRIEST)
+       /* Constraint to the 1st realm */
+       if (p_ptr->realm2 != 255)
        {
-               if (p_ptr->realm1 == REALM_LIFE)
-               {
-                       choices &= ~(CH_DEATH | CH_DAEMON);
-               }
-               else if ((p_ptr->realm1 == REALM_DEATH) || (p_ptr->realm1 == REALM_DAEMON))
+               if (p_ptr->pclass == CLASS_PRIEST)
                {
-                       choices &= ~(CH_LIFE);
+                       if (is_good_realm(p_ptr->realm1))
+                       {
+                               choices &= ~(CH_DEATH | CH_DAEMON);
+                       }
+                       else
+                       {
+                               choices &= ~(CH_LIFE | CH_CRUSADE);
+                       }
                }
        }
 
        /* Extra info */
 #ifdef JP
-       Term_putstr(5, 14, -1, TERM_WHITE,
-                   "ËâË¡¤ÎÎΰè¤ÎÁªÂò¤Ë¤è¤ê¤¢¤Ê¤¿¤¬½¬ÆÀ¤¹¤ë¼öʸ¤Î¥¿¥¤¥×¤¬·è¤Þ¤ê¤Þ¤¹¡£");
-#else
-       Term_putstr(5, 14, -1, TERM_WHITE,
-                   "The realm of magic will determine which spells you can learn.");
-#endif
-
-#ifdef JP
-       Term_putstr(5, 15, -1, TERM_WHITE,
-                   "À¸Ì¿¤ÈÀç½Ñ¤ÏËɸæÍѤΡ¢¥«¥ª¥¹¤È°Å¹õ¤ÏÇ˲õŪ¤Ê¼öʸ¤Ç¤¹¡£");
-#else
-        Term_putstr(5, 15, -1, TERM_WHITE,
-                   "Life and Sorcery are protective, Chaos and Death are destructive.");
-#endif
-
-#ifdef JP
-       Term_putstr(5, 16, -1, TERM_WHITE,
-                   "¼«Á³¤Ï¹¶·â¤ÈËɸæ¤ÎξÊý¤Î¼öʸ¤ò´Þ¤ß¤Þ¤¹¡£");
+       put_str ("Ãí°Õ¡§ËâË¡¤ÎÎΰè¤ÎÁªÂò¤Ë¤è¤ê¤¢¤Ê¤¿¤¬½¬ÆÀ¤¹¤ë¼öʸ¤Î¥¿¥¤¥×¤¬·è¤Þ¤ê¤Þ¤¹¡£", 23, 5);
 #else
-       Term_putstr(5, 16, -1, TERM_WHITE,
-                   "Nature has both defensive and offensive spells.");
+       put_str ("Note: The realm of magic will determine which spells you can learn.", 23, 5);
 #endif
 
+       cs = 0;
        for (i = 0; i<16; i++)
        {
-               if (choices & (1 << i) && p_ptr->realm1 != i+1)
+               /* Analize realms */
+               if (choices & (1 << i))
                {
-                       put_str(format("%c%c %s", I2A(n), p2, realm_names[i+1]),
-                               19 + (n/5), 2 + 15 * (n%5));
+                       if (p_ptr->realm1 == i+1)
+                       {
+                               if (p_ptr->realm2 == 255)
+                                       cs = n;
+                               else
+                                       continue;
+                       }
+                       if (p_ptr->realm2 == i+1)
+                               cs = n;
+                       if (n < 26)
+                               sym[n] = I2A(n);
+                       else
+                               sym[n] = ('A' + n - 26);
+                       sprintf(buf, "%c%c %s", sym[n], p2, realm_names[i+1]);
+                       put_str(buf, 12 + (n/5), 2 + 15 * (n%5));
                        picks[n++] = i+1;
                }
        }
+#ifdef JP
+       sprintf(cur, "%c%c %s", '*', p2, "¥é¥ó¥À¥à");
+#else
+       sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
 
        /* Get a realm */
+       k = -1;
+       os = n;
        while (1)       {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       c_put_str(TERM_WHITE, cur, 12 + (os/5), 2 + 15 * (os%5));
+                       put_str("                                   ", 3, 40);
+                       put_str("                                   ", 4, 40);
+
+                       if(cs == n)
+                       {
+#ifdef JP
+                               sprintf(cur, "%c%c %s", '*', p2, "¥é¥ó¥À¥à");
+#else
+                               sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+                       }
+                       else
+                       {
+                               sprintf(cur, "%c%c %s", sym[cs], p2, realm_names[picks[cs]]);
+                               sprintf(buf, "%s", realm_names[picks[cs]]);
+#ifdef JP
+                               c_put_str(TERM_L_BLUE, buf, 3, 40);
+                               put_str("¤ÎÆÃħ", 3, 40+strlen(buf));
+#else
+                               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);
+                       }
+                       c_put_str(TERM_YELLOW, cur, 12 + (cs/5), 2 + 15 * (cs%5));
+                       os = cs;
+               }
+
+               if (k >= 0) break;
+
 #ifdef JP
-sprintf(buf, "Îΰè¤òÁª¤ó¤Ç²¼¤µ¤¤(%c-%c) '*'¤Ç¥é¥ó¥À¥à¡¢'='¤Ç½é´ü¥ª¥×¥·¥ç¥óÀßÄê: ", I2A(0), I2A(n-1));
+               sprintf(buf, "Îΰè¤òÁª¤ó¤Ç²¼¤µ¤¤(%c-%c) ('='½é´ü¥ª¥×¥·¥ç¥óÀßÄê): ", sym[0], sym[n-1]);
 #else
-               sprintf(buf, "Choose a realm (%c-%c), * for random, or = for options: ", I2A(0), I2A(n-1));
+               sprintf(buf, "Choose a realm (%c-%c) ('=' for options): ", sym[0], sym[n-1]);
 #endif
 
-               put_str(buf, 18, 2);
+               put_str(buf, 10, 10);
                c = inkey();
-               if (c == 'Q')
+               if (c == 'Q') birth_quit();
+               if (c == 'S') return 255;
+               if (c == ' ' || c == '\r' || c == '\n')
                {
-                       birth_quit();
+                       if(cs == n)
+                       {
+                               k = randint0(n);
+                               break;
+                       }
+                       else
+                       {
+                               k = cs;
+                               break;
+                       }
                }
-               if (c == 'S') return 255;
                if (c == '*')
                {
-                       k = rand_int(n);
+                       k = randint0(n);
                        break;
                }
+               if (c == '8')
+               {
+                       if (cs >= 5) cs -= 5;
+               }
+               if (c == '4')
+               {
+                       if (cs > 0) cs--;
+               }
+               if (c == '6')
+               {
+                       if (cs < n) cs++;
+               }
+               if (c == '2')
+               {
+                       if ((cs + 5) <= n) cs += 5;
+               }
                k = (islower(c) ? A2I(c) : -1);
-               if ((k >= 0) && (k < n)) break;
-               if (c == '?') do_cmd_help();
+               if ((k >= 0) && (k < n))
+               {
+                       cs = k;
+                       continue;
+               }
+               k = (isupper(c) ? (26 + c - 'A') : -1);
+               if ((k >= 26) && (k < n))
+               {
+                       cs = k;
+                       continue;
+               }
+               else k = -1;
+               if (c == '?')
+               {
+#ifdef JP                 
+                       show_help("jmagic.txt#MagicRealms");
+#else
+                       show_help("magic.txt#MagicRealms");
+#endif
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
                        do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
 
                        screen_load();
                }
-               else bell();
+               else if (c !='2' && c !='4' && c !='6' && c !='8') bell();
        }
 
-
        /* Clean up */
-       clear_from(19);
+       clear_from(10);
 
        return (picks[k]);
 }
@@ -2145,41 +2329,41 @@ do_cmd_options_aux(6, "
  */
 static bool get_player_realms(void)
 {
-        int i, count;
-#ifdef USE_SCRIPT
-       int result = get_player_realms_callback();
+       int i, count;
 
-       if (result == -1)
-               /* Restart */
-               return FALSE;
-       else if (result == 1)
-               /* Success */
-               return TRUE;
-#endif /* USE_SCRIPT */
+       /* Clean up infomation of modifications */
+       put_str("                                   ", 3, 40);
+       put_str("                                   ", 4, 40);
+       put_str("                                   ", 5, 40);
 
        /* Select the first realm */
+       p_ptr->realm1 = REALM_NONE;
+       p_ptr->realm2 = 255;
        while (1)
        {
-               char temp[80*8];
+               char temp[80*10];
                cptr t;
-
-                p_ptr->realm1 = REALM_NONE;
                count = 0;
                p_ptr->realm1 = choose_realm(realm_choices1[p_ptr->pclass], &count);
 
-                if (255 == p_ptr->realm1) return FALSE;
+               if (255 == p_ptr->realm1) return FALSE;
                if (!p_ptr->realm1) break;
-               clear_from(17);
 
-               roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm1)-1], 78, temp);
+               /* Clean up*/
+               clear_from(10);
+               put_str("                                   ", 3, 40);
+               put_str("                                   ", 4, 40);
+               put_str("                                   ", 5, 40);
+
+               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; 
                        else
                        {
-                               prt(t, 18+i, 1);
+                               prt(t, 12+i, 3);
                                t += strlen(t) + 1;
                        }
                }
@@ -2194,22 +2378,24 @@ 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
        }
 
+       /* Select the second realm */
+       p_ptr->realm2 = REALM_NONE;
        if (p_ptr->realm1)
        {
                /* Print the realm */
 #ifdef JP
-put_str("ËâË¡        :", 6, 1);
+               put_str("ËâË¡        :", 6, 1);
 #else
-put_str("Magic       :", 6, 1);
+               put_str("Magic       :", 6, 1);
 #endif
 
                c_put_str(TERM_L_BLUE, realm_names[p_ptr->realm1], 6, 15);
@@ -2225,9 +2411,14 @@ put_str("Magic       :", 6, 1);
 
                        if (255 == p_ptr->realm2) return FALSE;
                        if (!p_ptr->realm2) break;
-                       clear_from(17);
-                       
-                       roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 78, temp);
+
+                       /* Clean up*/
+                       clear_from(10);
+                       put_str("                                   ", 3, 40);
+                       put_str("                                   ", 4, 40);
+                       put_str("                                   ", 5, 40);
+
+                       roff_to_buf(realm_jouhou[technic2magic(p_ptr->realm2)-1], 74, temp, sizeof(temp));
                        t = temp;
                        for (i = 0; i< 6; i++)
                        {
@@ -2235,7 +2426,7 @@ put_str("Magic       :", 6, 1);
                                        break; 
                                else
                                {
-                                       prt(t, 18+i, 1);
+                                       prt(t, 12+i, 3);
                                        t += strlen(t) + 1;
                                }
                        }
@@ -2252,15 +2443,15 @@ put_str("Magic       :", 6, 1);
                                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)
                {
                        /* Print the realm */
-                       c_put_str(TERM_L_BLUE, realm_names[p_ptr->realm2], 7, 15);
+                       c_put_str(TERM_L_BLUE, format("%s, %s", realm_names[p_ptr->realm1], realm_names[p_ptr->realm2]), 6, 15);
                }
        }
 
@@ -2271,37 +2462,48 @@ put_str("Magic       :", 6, 1);
 /*
  * Save the current data for later
  */
-static void save_prev_data(void)
+static void save_prev_data(birther *birther_ptr)
 {
        int i;
 
-
-       /*** Save the current data ***/
-
        /* Save the data */
-       prev.age = p_ptr->age;
-       prev.wt = p_ptr->wt;
-       prev.ht = p_ptr->ht;
-       prev.sc = p_ptr->sc;
-       prev.au = p_ptr->au;
+       birther_ptr->psex = p_ptr->psex;
+       birther_ptr->prace = p_ptr->prace;
+       birther_ptr->pclass = p_ptr->pclass;
+       birther_ptr->pseikaku = p_ptr->pseikaku;
+       birther_ptr->realm1 = p_ptr->realm1;
+       birther_ptr->realm2 = p_ptr->realm2;
+       birther_ptr->age = p_ptr->age;
+       birther_ptr->ht = p_ptr->ht;
+       birther_ptr->wt = p_ptr->wt;
+       birther_ptr->sc = p_ptr->sc;
+       birther_ptr->au = p_ptr->au;
 
        /* Save the stats */
        for (i = 0; i < 6; i++)
        {
-               prev.stat[i] = p_ptr->stat_max[i];
+               birther_ptr->stat_max[i] = p_ptr->stat_max[i];
+               birther_ptr->stat_max_max[i] = p_ptr->stat_max_max[i];
        }
 
-       for(i = 0; i < 50; i++)
+       /* Save the hp */
+       for (i = 0; i < PY_MAX_LEVEL; i++)
        {
-               prev.hp[i] = player_hp[i];
+               birther_ptr->player_hp[i] = p_ptr->player_hp[i];
        }
 
-       prev.chaos_patron = p_ptr->chaos_patron;
+       birther_ptr->chaos_patron = p_ptr->chaos_patron;
+
+       /* Save the virtues */
+       for (i = 0; i < 8; i++)
+       {
+               birther_ptr->vir_types[i] = p_ptr->vir_types[i];
+       }
 
        /* Save the history */
        for (i = 0; i < 4; i++)
        {
-               strcpy(prev.history[i], history[i]);
+               strcpy(birther_ptr->history[i], p_ptr->history[i]);
        }
 }
 
@@ -2309,103 +2511,63 @@ static void save_prev_data(void)
 /*
  * Load the previous data
  */
-static void load_prev_data(void)
+static void load_prev_data(bool swap)
 {
        int i;
 
        birther temp;
 
-
        /*** Save the current data ***/
-
-       /* Save the data */
-       temp.age = p_ptr->age;
-       temp.wt = p_ptr->wt;
-       temp.ht = p_ptr->ht;
-       temp.sc = p_ptr->sc;
-       temp.au = p_ptr->au;
-
-       /* Save the stats */
-       for (i = 0; i < 6; i++)
-       {
-               temp.stat[i] = p_ptr->stat_max[i];
-       }
-
-       /* Save the hp */
-       for (i = 0; i < 50; i++)
-       {
-               temp.hp[i] = player_hp[i];
-       }
-
-       temp.chaos_patron = p_ptr->chaos_patron;
-
-       /* Save the history */
-       for (i = 0; i < 4; i++)
-       {
-               strcpy(temp.history[i], history[i]);
-       }
+       if (swap) save_prev_data(&temp);
 
 
        /*** Load the previous data ***/
 
        /* Load the data */
-       p_ptr->age = prev.age;
-       p_ptr->wt = prev.wt;
-       p_ptr->ht = prev.ht;
-       p_ptr->sc = prev.sc;
-       p_ptr->au = prev.au;
+       p_ptr->psex = previous_char.psex;
+       p_ptr->prace = previous_char.prace;
+       p_ptr->pclass = previous_char.pclass;
+       p_ptr->pseikaku = previous_char.pseikaku;
+       p_ptr->realm1 = previous_char.realm1;
+       p_ptr->realm2 = previous_char.realm2;
+       p_ptr->age = previous_char.age;
+       p_ptr->ht = previous_char.ht;
+       p_ptr->wt = previous_char.wt;
+       p_ptr->sc = previous_char.sc;
+       p_ptr->au = previous_char.au;
 
        /* Load the stats */
        for (i = 0; i < 6; i++)
        {
-               p_ptr->stat_max[i] = prev.stat[i];
-               p_ptr->stat_cur[i] = prev.stat[i];
+               p_ptr->stat_cur[i] = p_ptr->stat_max[i] = previous_char.stat_max[i];
+               p_ptr->stat_max_max[i] = previous_char.stat_max_max[i];
        }
 
        /* Load the hp */
-       for (i = 0; i < 50; i++)
-       {
-               player_hp[i] = prev.hp[i];
-       }
-       p_ptr->mhp = player_hp[0];
-       p_ptr->chp = player_hp[0];
-
-       p_ptr->chaos_patron = prev.chaos_patron;
-
-       /* Load the history */
-       for (i = 0; i < 4; i++)
+       for (i = 0; i < PY_MAX_LEVEL; i++)
        {
-               strcpy(history[i], prev.history[i]);
+               p_ptr->player_hp[i] = previous_char.player_hp[i];
        }
+       p_ptr->mhp = p_ptr->player_hp[0];
+       p_ptr->chp = p_ptr->player_hp[0];
 
+       p_ptr->chaos_patron = previous_char.chaos_patron;
 
-       /*** Save the current data ***/
-
-       /* Save the data */
-       prev.age = temp.age;
-       prev.wt = temp.wt;
-       prev.ht = temp.ht;
-       prev.sc = temp.sc;
-       prev.au = temp.au;
-
-       /* Save the stats */
-       for (i = 0; i < 6; i++)
+       for (i = 0; i < 8; i++)
        {
-               prev.stat[i] = temp.stat[i];
+               p_ptr->vir_types[i] = previous_char.vir_types[i];
        }
 
-       /* Save the hp */
-       for (i = 0; i < 50; i++)
+       /* Load the history */
+       for (i = 0; i < 4; i++)
        {
-               prev.hp[i] = temp.hp[i];
+               strcpy(p_ptr->history[i], previous_char.history[i]);
        }
 
-       prev.chaos_patron = temp.chaos_patron;
-
-       /* Save the history */
-       for (i = 0; i < 4; i++)
+       /*** Save the previous data ***/
+       if (swap)
        {
-               strcpy(prev.history[i], temp.history[i]);
+               COPY(&previous_char, &temp, birther);
        }
 }
 
@@ -2414,11 +2576,8 @@ static void load_prev_data(void)
 
 /*
  * 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;
 
@@ -2474,49 +2633,53 @@ static int adjust_stat(int value, int amount, int auto_roll)
  */
 static void get_stats(void)
 {
-       int             i, j;
-
-       int             bonus;
-
-       int             dice[18];
-
-
        /* Roll and verify some stats */
        while (TRUE)
        {
+               int i;
+               int sum = 0;
+
                /* Roll some dice */
-               for (j = i = 0; i < 18; i++)
+               for (i = 0; i < 2; i++)
                {
-                       /* Roll the dice */
-                       dice[i] = randint(3 + i % 3);
-
-                       /* Collect the maximum */
-                       j += dice[i];
+                       s32b tmp = randint0(60*60*60);
+                       int val;
+
+                       /* Extract 5 + 1d3 + 1d4 + 1d5 */
+                       val = 5 + 3;
+                       val += tmp % 3; tmp /= 3;
+                       val += tmp % 4; tmp /= 4;
+                       val += tmp % 5; tmp /= 5;
+
+                       /* Save that value */
+                       sum += val;
+                       p_ptr->stat_cur[3*i] = p_ptr->stat_max[3*i] = val;
+
+                       /* Extract 5 + 1d3 + 1d4 + 1d5 */
+                       val = 5 + 3;
+                       val += tmp % 3; tmp /= 3;
+                       val += tmp % 4; tmp /= 4;
+                       val += tmp % 5; tmp /= 5;
+
+                       /* Save that value */
+                       sum += val;
+                       p_ptr->stat_cur[3*i+1] = p_ptr->stat_max[3*i+1] = val;
+
+                       /* Extract 5 + 1d3 + 1d4 + 1d5 */
+                       val = 5 + 3;
+                       val += tmp % 3; tmp /= 3;
+                       val += tmp % 4; tmp /= 4;
+                       val += tmp;
+
+                       /* Save that value */
+                       sum += val;
+                       p_ptr->stat_cur[3*i+2] = p_ptr->stat_max[3*i+2] = val;
                }
 
                /* Verify totals */
-               if ((j > 42) && (j < 57)) break;
+               if ((sum > 42+5*6) && (sum < 57+5*6)) break;
                /* 57 was 54... I hate 'magic numbers' :< TY */
        }
-
-       /* Acquire the stats */
-       for (i = 0; i < 6; i++)
-       {
-               /* Extract 5 + 1d3 + 1d4 + 1d5 */
-               j = 5 + dice[3*i] + dice[3*i+1] + dice[3*i+2];
-
-               /* Save that value */
-               p_ptr->stat_max[i] = j;
-
-               /* Obtain a "bonus" for "race" and "class" and "seikaku"*/
-               bonus = rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i];
-
-               /* Start fully healed */
-               p_ptr->stat_cur[i] = p_ptr->stat_max[i];
-
-               /* Efficiency -- Apply the racial/class bonuses */
-               stat_use[i] = modify_stat_value(p_ptr->stat_max[i], bonus);
-       }
 }
 
 void get_max_stats(void)
@@ -2532,7 +2695,7 @@ void get_max_stats(void)
                for (j = i = 0; i < 6; i++)
                {
                        /* Roll the dice */
-                       dice[i] = randint(7);
+                       dice[i] = randint1(7);
 
                        /* Collect the maximum */
                        j += dice[i];
@@ -2561,12 +2724,9 @@ void get_max_stats(void)
 /*
  * Roll for some info that the auto-roller ignores
  */
-static void get_extra(void)
+static void get_extra(bool roll_hitdie)
 {
-       int             i, j, min_value, max_value;
-
-       /* Level one */
-       p_ptr->max_plv = p_ptr->lev = 1;
+       int i, j;
 
        /* Experience factor */
        if (p_ptr->prace == RACE_ANDROID) p_ptr->expfact = rp_ptr->r_exp;
@@ -2575,19 +2735,7 @@ static void get_extra(void)
        if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_NINJA)) && ((p_ptr->prace == RACE_KLACKON) || (p_ptr->prace == RACE_SPRITE)))
                p_ptr->expfact -= 15;
 
-       /* Initialize arena and rewards information -KMW- */
-       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++)
-       {
-               mane_spell[i] = -1;
-               mane_dam[i] = 0;
-       }
-       mane_num = 0;
-       p_ptr->exit_bldg = TRUE; /* only used for arena now -KMW- */
-
+       /* Reset record of race/realm changes */
        p_ptr->start_race = p_ptr->prace;
        p_ptr->old_race1 = 0L;
        p_ptr->old_race2 = 0L;
@@ -2595,30 +2743,21 @@ static void get_extra(void)
 
        for (i = 0; i < 64; i++)
        {
-               if (p_ptr->pclass == CLASS_SORCERER) spell_exp[i] = 1600;
-               else if (p_ptr->pclass == CLASS_RED_MAGE) spell_exp[i] = 1200;
-               else 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++)
-                       weapon_exp[i][j] = weapon_exp_settei[p_ptr->pclass][i][j][0];
-       if(p_ptr->pseikaku == SEIKAKU_SEXY)
+                       p_ptr->weapon_exp[i][j] = s_info[p_ptr->pclass].w_start[i][j];
+       if ((p_ptr->pseikaku == SEIKAKU_SEXY) && (p_ptr->weapon_exp[TV_HAFTED-TV_BOW][SV_WHIP] < WEAPON_EXP_BEGINNER))
        {
-               weapon_exp[TV_HAFTED-TV_BOW][SV_WHIP] = 4000;
-               weapon_exp_settei[p_ptr->pclass][TV_HAFTED-TV_BOW][SV_WHIP][1] = 8000;
+               p_ptr->weapon_exp[TV_HAFTED-TV_BOW][SV_WHIP] = WEAPON_EXP_BEGINNER;
        }
 
        for (i = 0; i < 10; i++)
-               skill_exp[i] = skill_exp_settei[p_ptr->pclass][i][0];
-
-       /* Reset rewards */
-       for (i = 0; i < MAX_BACT; i++)
-       {
-               p_ptr->rewards[i] = 0;
-       }
-
-       p_ptr->today_mon = 0;
+               p_ptr->skill_exp[i] = s_info[p_ptr->pclass].s_start[i];
 
        /* Hitdice */
        if (p_ptr->pclass == CLASS_SORCERER)
@@ -2626,45 +2765,11 @@ static void get_extra(void)
        else
                p_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
 
-       /* 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 */
-               player_hp[0] = p_ptr->hitdie;
-
-               for (i = 1; i < 4; i++)
-               {
-                       j = randint(p_ptr->hitdie);
-                       player_hp[0] += j;
-               }
-
-               /* Roll the hitpoint values */
-               for (i = 1; i < PY_MAX_LEVEL; i++)
-               {
-                       j = randint(p_ptr->hitdie);
-                       player_hp[i] = player_hp[i - 1] + j;
-               }
-
-               /* XXX Could also require acceptable "mid-level" hitpoints */
-
-               /* Require "valid" hitpoints at highest level */
-               if (player_hp[PY_MAX_LEVEL - 1] < min_value) continue;
-               if (player_hp[PY_MAX_LEVEL - 1] > max_value) continue;
-
-               /* Acceptable */
-               break;
-       }
+       /* Roll for hit point unless quick-start */
+       if (roll_hitdie) do_cmd_rerate_aux();
 
        /* Initial hitpoints */
-       p_ptr->mhp = player_hp[0];
+       p_ptr->mhp = p_ptr->player_hp[0];
 }
 
 
@@ -2680,13 +2785,13 @@ static void get_history(void)
        char buf[240];
 
        /* Clear the previous history strings */
-       for (i = 0; i < 4; i++) history[i][0] = '\0';
+       for (i = 0; i < 4; i++) p_ptr->history[i][0] = '\0';
 
        /* Clear the history text */
        buf[0] = '\0';
 
        /* Initial social class */
-       social_class = randint(4);
+       social_class = randint1(4);
 
        /* Starting place */
        switch (p_ptr->prace)
@@ -2879,7 +2984,7 @@ static void get_history(void)
                i = 0;
 
                /* Roll for nobility */
-               roll = randint(100);
+               roll = randint1(100);
 
 
                /* Access the proper entry in the table */
@@ -2896,7 +3001,6 @@ static void get_history(void)
        }
 
 
-
        /* Verify social class */
        if (social_class > 100) social_class = 100;
        else if (social_class < 1) social_class = 1;
@@ -2916,13 +3020,13 @@ 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(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;}
+            }
        }
 }
 
@@ -2937,7 +3041,7 @@ static void get_ahw(void)
 
 
   /* Calculate the age */
-  p_ptr->age = rp_ptr->b_age + randint(rp_ptr->m_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)
@@ -2966,7 +3070,7 @@ static void get_money(void)
        int i, gold;
 
        /* Social Class determines starting gold */
-       gold = (p_ptr->sc * 6) + randint(100) + 300;
+       gold = (p_ptr->sc * 6) + randint1(100) + 300;
        if (p_ptr->pclass == CLASS_TOURIST)
          gold += 2000;
 
@@ -2974,10 +3078,10 @@ static void get_money(void)
        for (i = 0; i < 6; i++)
        {
                /* Mega-Hack -- reduce gold for high stats */
-               if (stat_use[i] >= 18 + 50) gold -= 300;
-               else if (stat_use[i] >= 18 + 20) gold -= 200;
-               else if (stat_use[i] > 18) gold -= 150;
-               else gold -= (stat_use[i] - 8) * 10;
+               if (p_ptr->stat_max[i] >= 18 + 50) gold -= 300;
+               else if (p_ptr->stat_max[i] >= 18 + 20) gold -= 200;
+               else if (p_ptr->stat_max[i] > 18) gold -= 150;
+               else gold -= (p_ptr->stat_max[i] - 8) * 10;
        }
 
        /* Minimum 100 gold */
@@ -3002,7 +3106,7 @@ static void get_money(void)
  */
 static void birth_put_stats(void)
 {
-       int i, p;
+       int i, j, m, p;
        int col;
        byte attr;
        char buf[80];
@@ -3014,14 +3118,29 @@ static void birth_put_stats(void)
                /* Put the stats (and percents) */
                for (i = 0; i < 6; i++)
                {
+                       /* Race/Class bonus */
+                       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);
+
                        /* Put the stat */
-                       cnv_stat(stat_use[i], buf);
+                       cnv_stat(m, buf);
                        c_put_str(TERM_L_GREEN, buf, 3+i, col+24);
 
                        /* Put the percent */
                        if (stat_match[i])
                        {
-                               p = 1000L * stat_match[i] / auto_round;
+                               if (stat_match[i] > 1000000L)
+                               {
+                                       /* Prevent overflow */
+                                       p = stat_match[i] / (auto_round / 1000L);
+                               }
+                               else
+                               {
+                                       p = 1000L * stat_match[i] / auto_round;
+                               }
+                       
                                attr = (p < 100) ? TERM_YELLOW : TERM_L_GREEN;
                                sprintf(buf, "%3d.%d%%", p/10, p%10);
                                c_put_str(attr, buf, 3+i, col+13);
@@ -3056,7 +3175,7 @@ static void player_wipe(void)
        /* Wipe the history */
        for (i = 0; i < 4; i++)
        {
-               strcpy(history[i], "");
+               strcpy(p_ptr->history[i], "");
        }
 
        /* Wipe the quests */
@@ -3109,7 +3228,9 @@ 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;
+
+               /* Hack -- Non-unique Nazguls are semi-unique */
+               else if (r_ptr->flags7 & RF7_NAZGUL) r_ptr->max_num = MAX_NAZGUL_NUM;
 
                /* Clear player kills */
                r_ptr->r_pkills = 0;
@@ -3123,16 +3244,16 @@ static void player_wipe(void)
        /* Wipe the spells */
        if (p_ptr->pclass == CLASS_SORCERER)
        {
-               spell_learned1 = spell_learned2 = 0xffffffffL;
-               spell_worked1 = spell_worked2 = 0xffffffffL;
+               p_ptr->spell_learned1 = p_ptr->spell_learned2 = 0xffffffffL;
+               p_ptr->spell_worked1 = p_ptr->spell_worked2 = 0xffffffffL;
        }
        else
        {
-               spell_learned1 = spell_learned2 = 0L;
-               spell_worked1 = spell_worked2 = 0L;
+               p_ptr->spell_learned1 = p_ptr->spell_learned2 = 0L;
+               p_ptr->spell_worked1 = p_ptr->spell_worked2 = 0L;
        }
-       spell_forgotten1 = spell_forgotten2 = 0L;
-       for (i = 0; i < 64; i++) spell_order[i] = 99;
+       p_ptr->spell_forgotten1 = p_ptr->spell_forgotten2 = 0L;
+       for (i = 0; i < 64; i++) p_ptr->spell_order[i] = 99;
        p_ptr->learned_spells = 0;
        p_ptr->add_spells = 0;
        p_ptr->knowledge = 0;
@@ -3147,51 +3268,233 @@ static void player_wipe(void)
        cheat_xtra = FALSE;
        cheat_know = FALSE;
        cheat_live = FALSE;
+       cheat_save = FALSE;
 
        /* Assume no winning game */
-       total_winner = FALSE;
+       p_ptr->total_winner = FALSE;
 
        world_player = FALSE;
 
        /* Assume no panic save */
-       panic_save = 0;
+       p_ptr->panic_save = 0;
 
        /* Assume no cheating */
-       noscore = 0;
-        wizard = FALSE;
+       p_ptr->noscore = 0;
+       p_ptr->wizard = FALSE;
 
        /* Not waiting to report score */
-       wait_report_score = FALSE;
+       p_ptr->wait_report_score = FALSE;
 
        /* Default pet command settings */
        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++)
        {
                p_ptr->magic_num1[i] = 0;
                p_ptr->magic_num2[i] = 0;
        }
-}
 
+       /* Level one */
+       p_ptr->max_plv = p_ptr->lev = 1;
 
-/*
- * Each player starts out with a few items, given as tval/sval pairs.
- * In addition, he always has some food and a few torches.
- */
-static byte player_init[MAX_CLASS][3][2] =
-{
+       /* Initialize arena and rewards information -KMW- */
+       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;
+               p_ptr->mane_dam[i] = 0;
+       }
+       p_ptr->mane_num = 0;
+       p_ptr->exit_bldg = TRUE; /* only used for arena now -KMW- */
+
+       /* Bounty */
+       p_ptr->today_mon = 0;
+
+       /* Reset monster arena */
+       battle_monsters();
+
+       /* Reset mutations */
+       p_ptr->muta1 = 0;
+       p_ptr->muta2 = 0;
+       p_ptr->muta3 = 0;
+
+       /* Reset virtues*/
+       for (i = 0; i < 8; i++) p_ptr->virtues[i]=0;
+
+       /* Set the recall dungeon accordingly */
+       if (vanilla_town)
+       {
+               dungeon_type = 0;
+               p_ptr->recall_dungeon = DUNGEON_ANGBAND;
+       }
+       else
+       {
+               dungeon_type = 0;
+               p_ptr->recall_dungeon = DUNGEON_GALGALS;
+       }
+}
+
+
+/*
+ *  Hook function for quest monsters
+ */
+static bool mon_hook_quest(int r_idx)
+{
+       monster_race *r_ptr = &r_info[r_idx];
+
+       /* Random quests are in the dungeon */
+       if (r_ptr->flags8 & RF8_WILD_ONLY) return FALSE;
+
+       /* 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;
+}
+
+
+/*
+ * 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(mon_hook_quest, NULL);
+
+       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->flags1 & RF1_UNIQUE)) continue;
+
+               if (r_ptr->flags1 & RF1_QUESTOR) continue;
+
+               if (r_ptr->rarity > 100) continue;
+
+               if (r_ptr->flags7 & RF7_FRIENDLY) continue;
+
+               if (r_ptr->flags7 & RF7_AQUATIC) continue;
+
+               if (r_ptr->flags8 & RF8_WILD_ONLY) continue;
+
+               if (no_questor_or_bounty_uniques(r_idx)) 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;
+       }
+
+       q_ptr->r_idx = r_idx;
+}
+
+
+/*
+ *  Initialize random quests and final quests
+ */
+static void init_dungeon_quests(int number_of_quests)
+{
+       int i;
+
+       /* 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;
+       }
+
+       /* Init the two main quests (Oberon + Serpent) */
+       init_flags = INIT_ASSIGN;
+       p_ptr->inside_quest = QUEST_OBERON;
+
+       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.txt", 0, 0, 0, 0);
+
+       quest[QUEST_SERPENT].status = QUEST_STATUS_TAKEN;
+       p_ptr->inside_quest = 0;
+}
+
+/*
+ * Reset turn
+ */
+static void init_turn(void)
+{
+       if ((p_ptr->prace == RACE_VAMPIRE) ||
+           (p_ptr->prace == RACE_SKELETON) ||
+           (p_ptr->prace == RACE_ZOMBIE) ||
+           (p_ptr->prace == RACE_SPECTRE))
+       {
+               /* 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;
+}
+
+/*
+ * Each player starts out with a few items, given as tval/sval pairs.
+ * In addition, he always has some food and a few torches.
+ */
+static byte player_init[MAX_CLASS][3][2] =
+{
        {
                /* Warrior */
                { TV_RING, SV_RING_RES_FEAR }, /* Warriors need it! */
@@ -3299,7 +3602,7 @@ static byte player_init[MAX_CLASS][3][2] =
 
        {
                /* Archer */
-               { TV_BOW, SV_LONG_BOW },
+               { TV_BOW, SV_SHORT_BOW },
                { TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL},
                { TV_SWORD, SV_SHORT_SWORD },
        },
@@ -3312,7 +3615,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 },
@@ -3347,7 +3650,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}
@@ -3361,7 +3664,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 }
@@ -3382,6 +3685,21 @@ static byte player_init[MAX_CLASS][3][2] =
 
 
 /*
+ * 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 (strchr("pht", r_ptr->d_char)) return TRUE;
+
+       return FALSE;
+}
+
+
+/*
  * Init players with some belongings
  *
  * Having an item makes the player "aware" of its purpose.
@@ -3394,60 +3712,93 @@ void player_outfit(void)
        object_type     *q_ptr;
 
 
-#ifdef USE_SCRIPT
-       if (player_outfit_callback()) return;
-#endif /* USE_SCRIPT */
-
        /* Get local object */
        q_ptr = &forge;
 
        /* 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;
 
-#ifdef USE_SCRIPT
-                       q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
+       case RACE_DEMON:
+               /* Demon can drain vitality from humanoid corpse */
 
-                       (void)inven_carry(q_ptr);
+               /* Prepare allocation table */
+               get_mon_num_prep(monster_hook_human, NULL);
 
-                       break;
-               }
-               default:
+               for (i = rand_range(3,4); i > 0; i--)
                {
-                       /* 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);
-
-#ifdef USE_SCRIPT
-                       q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
+                       object_prep(q_ptr, lookup_kind(TV_CORPSE, SV_CORPSE));
+                       q_ptr->pval = get_mon_num(2);
+                       q_ptr->number = 1;
                        (void)inven_carry(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);
+               object_aware(q_ptr);
+               object_known(q_ptr);
+               (void)inven_carry(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;
+               object_aware(q_ptr);
+               object_known(q_ptr);
+
+               (void)inven_carry(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);
+               object_aware(q_ptr);
+               object_known(q_ptr);
+               (void)inven_carry(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);
+               object_aware(q_ptr);
+               object_known(q_ptr);
+               (void)inven_carry(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);
+               object_aware(q_ptr);
+               object_known(q_ptr);
+
+               (void)inven_carry(q_ptr);
        }
 
        /* Get local object */
        q_ptr = &forge;
 
-       if (p_ptr->prace == RACE_VAMPIRE)
+       if ((p_ptr->prace == RACE_VAMPIRE) && (p_ptr->pclass != CLASS_NINJA))
        {
                /* Hack -- Give the player scrolls of DARKNESS! */
                object_prep(q_ptr, lookup_kind(TV_SCROLL, SV_SCROLL_DARKNESS));
@@ -3457,10 +3808,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        else if (p_ptr->pclass != CLASS_NINJA)
@@ -3472,10 +3819,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-       q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
 
@@ -3491,10 +3834,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        if (p_ptr->pclass == CLASS_RANGER)
@@ -3505,10 +3844,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_ARCHER)
@@ -3520,10 +3855,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_HIGH_MAGE)
@@ -3536,10 +3867,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_SORCERER)
@@ -3553,10 +3880,6 @@ void player_outfit(void)
                        object_aware(q_ptr);
                        object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-                       q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                        (void)inven_carry(q_ptr);
                }
        }
@@ -3571,10 +3894,6 @@ void player_outfit(void)
                        object_aware(q_ptr);
                        object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-                       q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                        (void)inven_carry(q_ptr);
                }
 
@@ -3584,10 +3903,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_WAYBREAD));
@@ -3596,10 +3911,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_JERKY));
@@ -3608,10 +3919,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_ALE));
@@ -3620,10 +3927,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
 
                object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_PINT_OF_WINE));
@@ -3632,10 +3935,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
        else if (p_ptr->pclass == CLASS_NINJA)
@@ -3647,10 +3946,6 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
 
@@ -3700,12 +3995,11 @@ void player_outfit(void)
                object_aware(q_ptr);
                object_known(q_ptr);
 
-#ifdef USE_SCRIPT
-               q_ptr->python = object_create_callback(q_ptr);
-#endif /* USE_SCRIPT */
-
                (void)inven_carry(q_ptr);
        }
+
+       /* Hack -- make aware of the water */
+       k_info[lookup_kind(TV_POTION, SV_POTION_WATER)].aware = TRUE;
 }
 
 
@@ -3714,165 +4008,179 @@ void player_outfit(void)
  */
 static bool get_player_race(void)
 {
-       int     k, n;
+       int     k, n, cs, os;
        cptr    str;
        char    c;
+       char    sym[MAX_RACES];
        char    p2 = ')';
-       char    buf[80];
+       char    buf[80], cur[80];
 
 
-#ifdef USE_SCRIPT
-       int result = get_player_race_callback();
-
-       if (result == -1)
-               /* Restart */
-               return FALSE;
-       else if (result == 1)
-               /* Success */
-               return TRUE;
-#endif /* USE_SCRIPT */
-
        /* Extra info */
-       Term_putstr(5, 14, -1, TERM_WHITE,
+       clear_from(10);
 #ifdef JP
-"¡Ô¼ï²¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎÀèŷŪ¤Ê»ñ¼Á¤ä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£");
+       put_str("Ãí°Õ¡§¡Ô¼ï²¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎÀèŷŪ¤Ê»ñ¼Á¤ä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£", 23, 5);
 #else
-               "Your 'race' determines various intrinsic factors and bonuses.");
+       put_str("Note: Your 'race' determines various intrinsic factors and bonuses.", 23 ,5);
 #endif
 
-       hack_mutation = FALSE;
-
        /* Dump races */
        for (n = 0; n < MAX_RACES; n++)
        {
                /* Analyze */
-               p_ptr->prace = n;
-               rp_ptr = &race_info[p_ptr->prace];
+               rp_ptr = &race_info[n];
                str = rp_ptr->title;
 
                /* Display */
-
-               if (n < RACE_SPECTRE)
+               if (n < 26)
+                       sym[n] = I2A(n);
+               else
+                       sym[n] = ('A' + n - 26);
 #ifdef JP
-sprintf(buf, "%c%c%s", I2A(n), p2, str);
+               sprintf(buf, "%c%c%s", sym[n], p2, str);
 #else
-                       sprintf(buf, "%c%c %s", I2A(n), p2, str);
+               sprintf(buf, "%c%c %s", sym[n], p2, str);
 #endif
+               put_str(buf, 12 + (n/5), 1 + 16 * (n%5));
+
+       }
 
-               else
 #ifdef JP
-                       sprintf(buf, "%d%c%s", (n - RACE_SPECTRE), p2, str); /* HACK */
+       sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
 #else
-                       sprintf(buf, "%d%c %s", (n - RACE_SPECTRE), p2, str); /* HACK */
+       sprintf(cur, "%c%c %s", '*', p2, "Random");
 #endif
 
-               put_str(buf, 16 + (n/5), 1 + 16 * (n%5));
-
-       }
-
        /* Choose */
+       k = -1;
+       cs = p_ptr->prace;
+       os = MAX_RACES;
        while (1)
        {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       c_put_str(TERM_WHITE, cur, 12 + (os/5), 1 + 16 * (os%5));
+                       put_str("                                   ", 3, 40);
+                       if(cs == MAX_RACES)
+                       {
+#ifdef JP
+                               sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+                               sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+                               put_str("                                   ", 4, 40);
+                               put_str("                                   ", 5, 40);
+                       }
+                       else
+                       {
+                               rp_ptr = &race_info[cs];
+                               str = rp_ptr->title;
+#ifdef JP
+                               sprintf(cur, "%c%c%s", sym[cs], p2, str);
+                               c_put_str(TERM_L_BLUE, rp_ptr->title, 3, 40);
+                               put_str("¤Î¼ï²½¤Àµ", 3, 40+strlen(rp_ptr->title));
+                               put_str("ÏÓÎÏ ÃÎǽ ¸­¤µ ´ïÍÑ Âѵנ̥ÎÏ ·Ð¸³ ", 4, 40);
+#else
+                               sprintf(cur, "%c%c %s", sym[cs], p2, str);
+                               c_put_str(TERM_L_BLUE, rp_ptr->title, 3, 40);
+                               put_str(": Race modification", 3, 40+strlen(rp_ptr->title));
+                               put_str("Str  Int  Wis  Dex  Con  Chr   EXP ", 4, 40);
+#endif
+                               sprintf(buf, "%+3d  %+3d  %+3d  %+3d  %+3d  %+3d %+4d%% ",
+                                       rp_ptr->r_adj[0], rp_ptr->r_adj[1], rp_ptr->r_adj[2], rp_ptr->r_adj[3],
+                                       rp_ptr->r_adj[4], rp_ptr->r_adj[5], (rp_ptr->r_exp - 100));
+                               c_put_str(TERM_L_BLUE, buf, 5, 40);
+                       }
+                       c_put_str(TERM_YELLOW, cur, 12 + (cs/5), 1 + 16 * (cs%5));
+                       os = cs;
+               }
+
+               if (k >= 0) break;
+
 #ifdef JP
-sprintf(buf, "¼ï²¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-9) '*'¤Ç¥é¥ó¥À¥à, '='¤Ç½é´ü¥ª¥×¥·¥ç¥óÀßÄê: ", I2A(0));
+               sprintf(buf, "¼ï²¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) ('='½é´ü¥ª¥×¥·¥ç¥óÀßÄê): ", sym[0], sym[MAX_RACES-1]);
 #else
-               sprintf(buf, "Choose a race (%c-9), * for random, or = for options: ", I2A(0));
+               sprintf(buf, "Choose a race (%c-%c) ('=' for options): ", sym[0], sym[MAX_RACES-1]);
 #endif
 
-               put_str(buf, 15, 2);
+               put_str(buf, 10, 10);
                c = inkey();
-               if (c == 'Q')
-               {
-                       birth_quit();
-               }
+               if (c == 'Q') birth_quit();
                if (c == 'S') return (FALSE);
-               if (c == '*')
-               {
-                       k = rand_int(MAX_RACES);
-                       break;
-               }
-               if (c == '{')
+               if (c == ' ' || c == '\r' || c == '\n')
                {
-                       k = RACE_VAMPIRE;
-                       break;
+                       if(cs == MAX_RACES)
+                       {
+                               k = randint0(MAX_RACES);
+                               cs = k;
+                               continue;
+                       }
+                       else
+                       {
+                               k = cs;
+                               break;
+                       }
                }
-               else if (c == '0')
+               if (c == '*')
                {
-                       k = RACE_SPECTRE;
-                       break;
+                       k = randint0(MAX_RACES);
+                       cs = k;
+                       continue;
                }
-               else if (c == '1')
+               if (c == '8')
                {
-                       k = RACE_SPRITE;
-                       break;
+                       if (cs >= 5) cs -= 5;
                }
-               else if (c == '2')
+               if (c == '4')
                {
-                       k = RACE_BEASTMAN;
-                       break;
+                       if (cs > 0) cs--;
                }
-               else if (c == '3')
+               if (c == '6')
                {
-                       k = RACE_ENT;
-                       break;
+                       if (cs < MAX_RACES) cs++;
                }
-               else if (c == '4')
+               if (c == '2')
                {
-                       k = RACE_ANGEL;
-                       break;
+                       if ((cs + 5) <= MAX_RACES) cs += 5;
                }
-               else if (c == '5')
+               k = (islower(c) ? A2I(c) : -1);
+               if ((k >= 0) && (k < MAX_RACES))
                {
-                       k = RACE_DEMON;
-                       break;
+                       cs = k;
+                       continue;
                }
-               else if (c == '6')
+               k = (isupper(c) ? (26 + c - 'A') : -1);
+               if ((k >= 26) && (k < MAX_RACES))
                {
-                       k = RACE_DUNADAN;
-                       break;
+                       cs = k;
+                       continue;
                }
-               else if (c == '7')
+               else k = -1;
+               if (c == '?')
                {
-                       k = RACE_S_FAIRY;
-                       break;
+#ifdef JP                 
+                       show_help("jraceclas.txt#TheRaces");
+#else
+                       show_help("raceclas.txt#TheRaces");
+#endif
                }
-               else if (c == '8')
+               else if (c == '=')
                {
-                       k = RACE_KUTA;
-                       break;
-               }
-               else if (c == '9')
-               {
-                       k = RACE_ANDROID;
-                       break;
-               }
-               else
-               {
-                       k = (islower(c) ? A2I(c) : -1);
-                       if ((k >= 0) && (k < n)) break;
-                       if (c == '?') do_cmd_help();
-                       else if (c == '=')
-                       {
-                               screen_save();
+                       screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                               do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
-
-                               screen_load();
-                       }
-                       else bell();
+                       screen_load();
                }
+               else if (c !='2' && c !='4' && c !='6' && c !='8') bell();
        }
 
        /* Set race */
        p_ptr->prace = k;
 
-       /* Give beastman a mutation at character birth */
-       if (p_ptr->prace == RACE_BEASTMAN)
-               hack_mutation = TRUE;
-
        rp_ptr = &race_info[p_ptr->prace];
        str = rp_ptr->title;
 
@@ -3889,123 +4197,207 @@ do_cmd_options_aux(6, "
  */
 static bool get_player_class(void)
 {
-        int     k, n;
+       int     k, n, cs, os;
        char    c;
+       char    sym[MAX_CLASS_CHOICE];
        char    p2 = ')';
-       char    buf[80];
+       char    buf[80], cur[80];
        cptr    str;
 
 
-#ifdef USE_SCRIPT
-       int result = get_player_class_callback();
-
-       if (result == -1)
-               /* Restart */
-               return FALSE;
-       else if (result == 1)
-               /* Success */
-               return TRUE;
-#endif /* USE_SCRIPT */
-
        /* Extra info */
-       clear_from(13);
-       Term_putstr(5, 14, -1, TERM_WHITE,
+       clear_from(10);
 #ifdef JP
-"¡Ô¿¦¶È¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎÀèŷŪ¤ÊǽÎϤä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£");
+       put_str("Ãí°Õ¡§¡Ô¿¦¶È¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎÀèŷŪ¤ÊǽÎϤä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£", 23, 5);
 #else
-               "Your 'class' determines various intrinsic abilities and bonuses.");
+       put_str("Note: Your 'class' determines various intrinsic abilities and bonuses.", 23, 5);
 #endif
 
-       Term_putstr(5, 15, -1, TERM_WHITE,
 #ifdef JP
-    "()¤Ç°Ï¤Þ¤ì¤¿ÁªÂò»è¤Ï¤³¤Î¼ï²¤Ë¤Ï»÷¹ç¤ï¤Ê¤¤¿¦¶È¤Ç¤¹¡£");
+       put_str("()¤Ç°Ï¤Þ¤ì¤¿ÁªÂò»è¤Ï¤³¤Î¼ï²¤Ë¤Ï»÷¹ç¤ï¤Ê¤¤¿¦¶È¤Ç¤¹¡£", 11, 10);
 #else
-           "Any entries in parentheses should only be used by advanced players.");
+       put_str("Any entries in parentheses should only be used by advanced players.", 11, 5);
 #endif
 
 
        /* Dump classes */
        for (n = 0; n < MAX_CLASS_CHOICE; n++)
        {
-               cptr mod = "";
-               char select = I2A(n);
-
                /* Analyze */
-               p_ptr->pclass = n;
-               cp_ptr = &class_info[p_ptr->pclass];
-               mp_ptr = &magic_info[p_ptr->pclass];
-
+               cp_ptr = &class_info[n];
+               mp_ptr = &m_info[n];
                str = cp_ptr->title;
+               if (n < 26)
+                       sym[n] = I2A(n);
+               else
+                       sym[n] = ('A' + n - 26);
 
-               if (n >= CLASS_NINJA)
-                       select = '0'+n-CLASS_NINJA;
-
+               /* Display */
                if (!(rp_ptr->choice & (1L << n)))
 #ifdef JP
-sprintf(buf, "%c%c(%s)%s", select, p2, str, mod);
+                       sprintf(buf, "%c%c(%s)", sym[n], p2, str);
 #else
-                       sprintf(buf, "%c%c (%s)%s", select, p2, str, mod);
+                       sprintf(buf, "%c%c (%s)", sym[n], p2, str);
 #endif
-
                else
-                       /* Display */
 #ifdef JP
-sprintf(buf, "%c%c%s%s", select, p2, str, mod);
+                       sprintf(buf, "%c%c%s", sym[n], p2, str);
 #else
-                       sprintf(buf, "%c%c %s%s", select, p2, str, mod);
+                       sprintf(buf, "%c%c %s", sym[n], p2, str);
 #endif
 
-
-               put_str(buf, 17 + (n/4), 2 + 19 * (n%4));
+               put_str(buf, 13+ (n/4), 2 + 19 * (n%4));
        }
 
+#ifdef JP
+       sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+       sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+
        /* Get a class */
+       k = -1;
+       cs = p_ptr->pclass;
+       os = MAX_CLASS_CHOICE;
        while (1)
        {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       c_put_str(TERM_WHITE, cur, 13 + (os/4), 2 + 19 * (os%4));
+                       put_str("                                   ", 3, 40);
+                       if(cs == MAX_CLASS_CHOICE)
+                       {
+#ifdef JP
+                               sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+                               sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+                               put_str("                                   ", 4, 40);
+                               put_str("                                   ", 5, 40);
+                       }
+                       else
+                       {
+                               cp_ptr = &class_info[cs];
+                               mp_ptr = &m_info[cs];
+                               str = cp_ptr->title;
+                               if (!(rp_ptr->choice & (1L << cs)))
+#ifdef JP
+                                       sprintf(cur, "%c%c(%s)", sym[cs], p2, str);
+#else
+                                       sprintf(cur, "%c%c (%s)", sym[cs], p2, str);
+#endif
+                               else
+#ifdef JP
+                                       sprintf(cur, "%c%c%s", sym[cs], p2, str);
+#else
+                                       sprintf(cur, "%c%c %s", sym[cs], p2, str);
+#endif
+#ifdef JP
+                                       c_put_str(TERM_L_BLUE, cp_ptr->title, 3, 40);
+                                       put_str("¤Î¿¦¶È½¤Àµ", 3, 40+strlen(cp_ptr->title));
+                                       put_str("ÏÓÎÏ ÃÎǽ ¸­¤µ ´ïÍÑ Âѵנ̥ÎÏ ·Ð¸³ ", 4, 40);
+#else
+                                       c_put_str(TERM_L_BLUE, cp_ptr->title, 3, 40);
+                                       put_str(": Class modification", 3, 40+strlen(cp_ptr->title));
+                                       put_str("Str  Int  Wis  Dex  Con  Chr   EXP ", 4, 40);
+#endif
+                                       sprintf(buf, "%+3d  %+3d  %+3d  %+3d  %+3d  %+3d %+4d%% ",
+                                               cp_ptr->c_adj[0], cp_ptr->c_adj[1], cp_ptr->c_adj[2], cp_ptr->c_adj[3],
+                                               cp_ptr->c_adj[4], cp_ptr->c_adj[5], cp_ptr->c_exp);
+                                       c_put_str(TERM_L_BLUE, buf, 5, 40);
+                       }
+                       c_put_str(TERM_YELLOW, cur, 13 + (cs/4), 2 + 19 * (cs%4));
+                       os = cs;
+               }
+
+               if (k >= 0) break;
+
 #ifdef JP
-sprintf(buf, "¿¦¶È¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) '*'¤Ç¥é¥ó¥À¥à¡¢'='¤Ç½é´ü¥ª¥×¥·¥ç¥óÀßÄê: ", I2A(0), '0'+n-CLASS_NINJA);
+               sprintf(buf, "¿¦¶È¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) ('='½é´ü¥ª¥×¥·¥ç¥óÀßÄê): ", sym[0], sym[MAX_CLASS_CHOICE-1]);
 #else
-               sprintf(buf, "Choose a class (%c-%c), * for random, or = for options: ", I2A(0), '0'+n-CLASS_NINJA);
+               sprintf(buf, "Choose a class (%c-%c) ('=' for options): ",  sym[0], sym[MAX_CLASS_CHOICE-1]);
 #endif
 
-               put_str(buf, 16, 2);
+               put_str(buf, 10, 10);
                c = inkey();
-               if (c == 'Q')
+               if (c == 'Q') birth_quit();
+               if (c == 'S') return (FALSE);
+               if (c == ' ' || c == '\r' || c == '\n')
                {
-                       birth_quit();
+                       if(cs == MAX_CLASS_CHOICE)
+                       {
+                               k = randint0(MAX_CLASS_CHOICE);
+                               cs = k;
+                               continue;
+                       }
+                       else
+                       {
+                               k = cs;
+                               break;
+                       }
                }
-               if (c == 'S') return (FALSE);
                if (c == '*')
                {
-                       k = rand_int(n);
-                       break;
+                       k = randint0(MAX_CLASS_CHOICE);
+                       cs = k;
+                       continue;
                }
-               if (c == '0')
+               if (c == '8')
                {
-                       k = CLASS_NINJA;
-                       break;
+                       if (cs >= 4) cs -= 4;
+               }
+               if (c == '4')
+               {
+                       if (cs > 0) cs--;
+               }
+               if (c == '6')
+               {
+                       if (cs < MAX_CLASS_CHOICE) cs++;
+               }
+               if (c == '2')
+               {
+                       if ((cs + 4) <= MAX_CLASS_CHOICE) cs += 4;
                }
                k = (islower(c) ? A2I(c) : -1);
-               if ((k >= 0) && (k < n)) break;
-               if (c == '?') do_cmd_help();
+               if ((k >= 0) && (k < MAX_CLASS_CHOICE))
+               {
+                       cs = k;
+                       continue;
+               }
+               k = (isupper(c) ? (26 + c - 'A') : -1);
+               if ((k >= 26) && (k < MAX_CLASS_CHOICE))
+               {
+                       cs = k;
+                       continue;
+               }
+               else k = -1;
+               if (c == '?')
+               {
+#ifdef JP                 
+                       show_help("jraceclas.txt#TheClasses");
+#else
+                       show_help("raceclas.txt#TheClasses");
+#endif
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
                        do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
 
                        screen_load();
                }
-               else bell();
+               else if (c !='2' && c !='4' && c !='6' && c !='8') bell();
        }
 
        /* Set class */
        p_ptr->pclass = k;
        cp_ptr = &class_info[p_ptr->pclass];
-       mp_ptr = &magic_info[p_ptr->pclass];
+       mp_ptr = &m_info[p_ptr->pclass];
        str = cp_ptr->title;
 
 
@@ -4025,98 +4417,223 @@ do_cmd_options_aux(6, "
  */
 static bool get_player_seikaku(void)
 {
-       int     k, n;
+       int     k, n, os, cs;
        char    c;
+       char    sym[MAX_SEIKAKU];
        char    p2 = ')';
-       char    buf[80];
+       char    buf[80], cur[80];
        char    tmp[64];
        cptr    str;
 
 
-#ifdef USE_SCRIPT
-       int result = get_player_seikaku_callback();
-
-       if (result == -1)
-               /* Restart */
-               return FALSE;
-       else if (result == 1)
-               /* Success */
-               return TRUE;
-#endif /* USE_SCRIPT */
-
        /* Extra info */
-       clear_from(14);
+       clear_from(10);
 #ifdef JP
-       Term_putstr(5, 14, -1, TERM_WHITE,
-"¡ÔÀ­³Ê¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎǽÎϤä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£        ");
+       put_str("Ãí°Õ¡§¡ÔÀ­³Ê¡Õ¤Ë¤è¤Ã¤Æ¥­¥ã¥é¥¯¥¿¡¼¤ÎǽÎϤä¥Ü¡¼¥Ê¥¹¤¬ÊѲ½¤·¤Þ¤¹¡£", 23, 5);
 #else
-       Term_putstr(5, 14, -1, TERM_WHITE,
-               "Your personality determines various intrinsic abilities and bonuses.");
+       put_str("Note: Your personality determines various intrinsic abilities and bonuses.", 23, 5);
 #endif
 
        /* Dump seikakus */
        for (n = 0; n < MAX_SEIKAKU; n++)
        {
-               cptr mod = "";
-
                if(seikaku_info[n].sex && (seikaku_info[n].sex != (p_ptr->psex+1))) continue;
 
                /* Analyze */
-               p_ptr->pseikaku = n;
-               ap_ptr = &seikaku_info[p_ptr->pseikaku];
+               ap_ptr = &seikaku_info[n];
                str = ap_ptr->title;
+               if (n < 26)
+                       sym[n] = I2A(n);
+               else
+                       sym[n] = ('A' + n - 26);
 
                /* Display */
+               /* Display */
 #ifdef JP
-               sprintf(buf, "%c%c%s%s", I2A(n), p2, str, mod);
+               sprintf(buf, "%c%c%s", I2A(n), p2, str);
 #else
-               sprintf(buf, "%c%c %s%s", I2A(n), p2, str, mod);
+               sprintf(buf, "%c%c %s", I2A(n), p2, str);
 #endif
-               put_str(buf, 17 + (n/4), 2 + 18 * (n%4));
+               put_str(buf, 12 + (n/4), 2 + 18 * (n%4));
        }
 
+#ifdef JP
+       sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+       sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+
        /* Get a seikaku */
+       k = -1;
+       cs = p_ptr->pseikaku;
+       os = MAX_SEIKAKU;
        while (1)
        {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       c_put_str(TERM_WHITE, cur, 12 + (os/4), 2 + 18 * (os%4));
+                       put_str("                                   ", 3, 40);
+                       if(cs == MAX_SEIKAKU)
+                       {
+#ifdef JP
+                               sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+                               sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
+                               put_str("                                   ", 4, 40);
+                               put_str("                                   ", 5, 40);
+                       }
+                       else
+                       {
+                               ap_ptr = &seikaku_info[cs];
+                               str = ap_ptr->title;
+#ifdef JP
+                                       sprintf(cur, "%c%c%s", sym[cs], p2, str);
+#else
+                                       sprintf(cur, "%c%c %s", sym[cs], p2, str);
+#endif
+#ifdef JP
+                                       c_put_str(TERM_L_BLUE, ap_ptr->title, 3, 40);
+                                       put_str("¤ÎÀ­³Ê½¤Àµ", 3, 40+strlen(ap_ptr->title));
+                                       put_str("ÏÓÎÏ ÃÎǽ ¸­¤µ ´ïÍÑ Âѵנ̥ÎÏ      ", 4, 40);
+#else
+                                       c_put_str(TERM_L_BLUE, ap_ptr->title, 3, 40);
+                                       put_str(": Personality modification", 3, 40+strlen(ap_ptr->title));
+                                       put_str("Str  Int  Wis  Dex  Con  Chr       ", 4, 40);
+#endif
+                                       sprintf(buf, "%+3d  %+3d  %+3d  %+3d  %+3d  %+3d       ",
+                                               ap_ptr->a_adj[0], ap_ptr->a_adj[1], ap_ptr->a_adj[2], ap_ptr->a_adj[3],
+                                               ap_ptr->a_adj[4], ap_ptr->a_adj[5]);
+                                       c_put_str(TERM_L_BLUE, buf, 5, 40);
+                       }
+                       c_put_str(TERM_YELLOW, cur, 12 + (cs/4), 2 + 18 * (cs%4));
+                       os = cs;
+               }
+
+               if (k >= 0) break;
+
 #ifdef JP
-sprintf(buf, "À­³Ê¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) '*'¤Ç¥é¥ó¥À¥à¡¢'='¤Ç½é´ü¥ª¥×¥·¥ç¥óÀßÄê: ", I2A(0), I2A(n-1));
+               sprintf(buf, "À­³Ê¤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) ('='½é´ü¥ª¥×¥·¥ç¥óÀßÄê): ", sym[0], sym[MAX_SEIKAKU-1]);
 #else
-               sprintf(buf, "Choose a personality (%c-%c), * for random, or = for options: ", I2A(0), I2A(n-1));
+               sprintf(buf, "Choose a personality (%c-%c) ('=' for options): ", sym[0], sym[MAX_SEIKAKU-1]);
 #endif
 
-               put_str(buf, 16, 2);
+               put_str(buf, 10, 10);
                c = inkey();
-               if (c == 'Q')
+               if (c == 'Q') birth_quit();
+               if (c == 'S') return (FALSE);
+               if (c == ' ' || c == '\r' || c == '\n')
                {
-                       birth_quit();
+                       if(cs == MAX_SEIKAKU)
+                       {
+                               do
+                               {
+                                       k = randint0(MAX_SEIKAKU);
+                               }
+                               while(seikaku_info[k].sex && (seikaku_info[k].sex != (p_ptr->psex+1)));
+                               cs = k;
+                               continue;
+                       }
+                       else
+                       {
+                               k = cs;
+                               break;
+                       }
                }
-               if (c == 'S') return (FALSE);
                if (c == '*')
                {
                        do
                        {
-                               k = rand_int(n);
+                               k = randint0(n);
                        }
                        while(seikaku_info[k].sex && (seikaku_info[k].sex != (p_ptr->psex+1)));
-                       break;
+                       cs = k;
+                       continue;
+               }
+               if (c == '8')
+               {
+                       if (cs >= 4) cs -= 4;
+                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       {
+                               if((cs - 4) > 0)
+                                       cs -= 4;
+                               else
+                                       cs += 4;
+                       }
+               }
+               if (c == '4')
+               {
+                       if (cs > 0) cs--;
+                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       {
+                               if((cs - 1) > 0)
+                                       cs--;
+                               else
+                                       cs++;
+                       }
+               }
+               if (c == '6')
+               {
+                       if (cs < MAX_SEIKAKU) cs++;
+                       if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1)))
+                       {
+                               if((cs + 1) <= MAX_SEIKAKU)
+                                       cs++;
+                               else
+                                       cs--;
+                       }
+               }
+               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 + 4) <= MAX_SEIKAKU)
+                                       cs += 4;
+                               else
+                                       cs -= 4;
+                       }
                }
                k = (islower(c) ? A2I(c) : -1);
-               if ((k >= 0) && (k < n))
+               if ((k >= 0) && (k < MAX_SEIKAKU))
+               {
                        if((seikaku_info[k].sex == 0) || (seikaku_info[k].sex == (p_ptr->psex+1)))
-                               break;
-               if (c == '?') do_cmd_help();
+                       {
+                               cs = k;
+                               continue;
+                       }
+               }
+               k = (isupper(c) ? (26 + c - 'A') : -1);
+               if ((k >= 26) && (k < MAX_SEIKAKU))
+               {
+                       if((seikaku_info[k].sex == 0) || (seikaku_info[k].sex == (p_ptr->psex+1)))
+                       {
+                               cs = k;
+                               continue;
+                       }
+               }
+               else k = -1;
+               if (c == '?')
+               {
+#ifdef JP                 
+                       show_help("jraceclas.txt#ThePersonalities");
+#else
+                       show_help("raceclas.txt#ThePersonalities");
+#endif
+               }
                else if (c == '=')
                {
                        screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
                        do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
 
                        screen_load();
                }
-               else bell();
+               else if (c !='2' && c !='4' && c !='6' && c !='8') bell();
        }
 
        /* Set seikaku */
@@ -4139,537 +4656,1226 @@ do_cmd_options_aux(6, "
        return TRUE;
 }
 
-
-/*
- * Helper function for 'player_birth()'
- *
- * The delay may be reduced, but is recommended to keep players
- * from continuously rolling up characters, which can be VERY
- * expensive CPU wise.  And it cuts down on player stupidity.
- */
-static bool player_birth_aux(void)
+#ifdef ALLOW_AUTOROLLER
+static bool get_stat_limits(void)
 {
-       int i, j, k, m, n, v;
-
-       int mode = 0;
-
-       bool flag = FALSE;
-       bool prev = FALSE;
-
-       cptr str;
-
+       int i, j, m, cs, os;
+       int mval[6], cval[6];
        char c;
-
-#if 0
-       char p1 = '(';
-#endif
-
-       char p2 = ')';
-       char b1 = '[';
-       char b2 = ']';
-
-       char buf[80];
+       char buf[80], cur[80];
        char inp[80];
 
-#ifdef USE_SCRIPT
-       int result;
-#endif /* USE_SCRIPT */
-
-
-       /*** Intro ***/
-
-       /* Clear screen */
-       Term_clear();
-
-       /* Title everything */
-#ifdef JP
-put_str("̾Á°  :", 1,26);
-#else
-               put_str("Name  :", 1,26);
-#endif
-
-#ifdef JP
-put_str("À­ÊÌ        :", 3, 1);
-#else
-       put_str("Sex         :", 3, 1);
-#endif
+       /* Clean up */
+       clear_from(10);
 
+       /* Extra infomation */
 #ifdef JP
-put_str("¼ï²        :", 4, 1);
+       put_str("ºÇÄã¸ÂÆÀ¤¿¤¤Ç½ÎÏÃͤòÀßÄꤷ¤Æ²¼¤µ¤¤¡£", 10, 10);
+       put_str("2/8¤Ç¹àÌÜÁªÂò¡¢4/6¤ÇÃͤÎÁý¸º¡¢Enter¤Ç¼¡¤Ø", 11, 10);
 #else
-       put_str("Race        :", 4, 1);
+       put_str("Set minimum stats.", 10, 10);
+       put_str("2/8 for Select, 4/6 for Change value, Enter for Goto next", 11, 10);
 #endif
-
+       
 #ifdef JP
-put_str("¿¦¶È        :", 5, 1);
+       put_str("         ´ðËÜÃÍ  ¼ï² ¿¦¶È À­³Ê     ¹ç·×ÃÍ  ºÇÂçÃÍ", 13, 10);
 #else
-       put_str("Class       :", 5, 1);
+       put_str("           Base   Rac  Cla  Per      Total  Maximum", 13, 10);
 #endif
 
+       /* Output the maximum stats */
+       for (i = 0; i < 6; i++)
+       {
+               /* Reset the "success" counter */
+               stat_match[i] = 0;
+               cval[i] = 3;
 
-       /* Dump the default name */
-       c_put_str(TERM_L_BLUE, player_name, 1, 34);
+               /* Race/Class bonus */
+               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);
 
-       /*** Instructions ***/
+               /* Save the maximum */
+               mval[i] = m;
 
-       /* Display some helpful information */
+               /* Above 18 */
+               if (m > 18)
+               {
 #ifdef JP
-       Term_putstr(9,  9, -1, TERM_WHITE,
-               "°Ê²¼¤Î¼ÁÌä¤ËÅú¤¨¤Æ²¼¤µ¤¤¡£²óÅú¤Ïɽ¼¨¤µ¤ì¤Æ¤¤¤ëÁªÂò»è¤ÎÃ椫¤é");
-       Term_putstr(9, 10, -1, TERM_WHITE,
-               "Áª¤ó¤Ç²¼¤µ¤¤¡£²óÅúÁªÂò»þ¤Ë 'Q' ¤ò²¡¤¹¤È¥²¡¼¥à¤ò½ªÎ»¡¢'S' ¤ò ");
-       Term_putstr(9, 11, -1, TERM_WHITE,
-               "²¡¤¹¤È½é¤á¤«¤é¤ä¤êľ¤·¡¢'?' ¤ò²¡¤¹¤È¥Ø¥ë¥×¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£");
-       Term_putstr(9, 12, -1, TERM_WHITE,
-               "'Q' ¤È 'S' ¤ÏÂçʸ»ú¤ÇÆþÎϤ·¤Æ²¼¤µ¤¤¡£                       ");
+                       sprintf(cur, "18/%02d", (m - 18));
 #else
-       Term_putstr(5,  9, -1, TERM_WHITE,
-               "Please answer the following questions.  Most of the questions");
-       Term_putstr(5, 10, -1, TERM_WHITE,
-               "display a set of standard answers, and many will also accept");
-       Term_putstr(5, 11, -1, TERM_WHITE,
-               "some special responses, including 'Q' to quit, 'S' to restart,");
-       Term_putstr(5, 12, -1, TERM_WHITE,
-               "and '?' for help.  Note that 'Q' and 'S' must be capitalized.");
+                       sprintf(cur, "18/%02d", (m - 18));
 #endif
-
-
-#ifdef USE_SCRIPT
-       /*
-        * Ask for the world
-        */
-       result = get_world_callback();
-
-       if (result == -1)
-               /* Restart */
-               return FALSE;
-
-       /* Clean up */
-       clear_from(15);
-#endif /* USE_SCRIPT */
-
-       /*** Player sex ***/
-
-       /* Extra info */
+               }
+               
+               /* From 3 to 18 */
+               else
+               {
 #ifdef JP
-       Term_putstr(9, 14, -1, TERM_WHITE,
-               "¡ÔÀ­Ê̡դΰ㤤¤Ï¥²¡¼¥à¾å¤Û¤È¤ó¤É±Æ¶Á¤òµÚ¤Ü¤·¤Þ¤»¤ó¡£");
+                       sprintf(cur, "%2d", m);
 #else
-       Term_putstr(5, 14, -1, TERM_WHITE,
-               "Your 'sex' does not have any significant gameplay effects.");
+                       sprintf(cur, "%2d", m);
 #endif
+               }
 
+               /* Obtain the current stat */
+               m = adjust_stat(cval[i], j);
 
-       /* Prompt for "Sex" */
-       for (n = 0; n < MAX_SEXES; n++)
-       {
-               /* Analyze */
-               p_ptr->psex = n;
-               sp_ptr = &sex_info[p_ptr->psex];
-               str = sp_ptr->title;
-
-
-               /* Display */
+               /* Above 18 */
+               if (m > 18)
+               {
 #ifdef JP
-sprintf(buf, "%c%c%s", I2A(n), p2, str);
+                       sprintf(inp, "18/%02d", (m - 18));
 #else
-               sprintf(buf, "%c%c %s", I2A(n), p2, str);
+                       sprintf(inp, "18/%02d", (m - 18));
 #endif
-
-               put_str(buf, 17 + (n/5), 2 + 15 * (n%5));
-       }
-
-       /* Choose */
-       while (1)
-       {
+               }
+               
+               /* From 3 to 18 */
+               else
+               {
 #ifdef JP
-sprintf(buf, "À­Ê̤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) '*'¤Ç¥é¥ó¥À¥à, '='¤Ç½é´ü¥ª¥×¥·¥ç¥óÀßÄê: ", I2A(0), I2A(n-1));
+                       sprintf(inp, "%2d", m);
 #else
-               sprintf(buf, "Choose a sex (%c-%c), * for random, or = for options: ", I2A(0), I2A(n-1));
+                       sprintf(inp, "%2d", m);
 #endif
+               }
 
-               put_str(buf, 16, 2);
+               /* Prepare a prompt */
+               sprintf(buf, "%6s       %2d   %+3d  %+3d  %+3d  =  %6s  %6s",
+                       stat_names[i], cval[i], rp_ptr->r_adj[i], cp_ptr->c_adj[i],
+                       ap_ptr->a_adj[i], inp, cur);
+               
+               /* Dump the prompt */
+               put_str(buf, 14 + i, 10);
+       }
+       
+       /* Get a minimum stat */
+       cs = 0;
+       os = 6;
+       while (TRUE)
+       {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       if(os == 6)
+                       {
+#ifdef JP
+                               c_put_str(TERM_WHITE, "·èÄꤹ¤ë", 21, 35);
+#else
+                               c_put_str(TERM_WHITE, "Accept", 21, 35);
+#endif
+                       }
+                       else if(os < 6)
+                               c_put_str(TERM_WHITE, cur, 14 + os, 10);
+                       
+                       if(cs == 6)
+                       {
+#ifdef JP
+                               c_put_str(TERM_YELLOW, "·èÄꤹ¤ë", 21, 35);
+#else
+                               c_put_str(TERM_YELLOW, "Accept", 21, 35);
+#endif
+                       }
+                       else
+                       {
+                               /* Race/Class bonus */
+                               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);
+                               
+                               /* Above 18 */
+                               if (m > 18)
+                               {
+#ifdef JP
+                                       sprintf(inp, "18/%02d", (m - 18));
+#else
+                                       sprintf(inp, "18/%02d", (m - 18));
+#endif
+                               }
+                               
+                               /* From 3 to 18 */
+                               else
+                               {
+#ifdef JP
+                                       sprintf(inp, "%2d", m);
+#else
+                                       sprintf(inp, "%2d", m);
+#endif
+                               }
+                               
+                               /* Prepare a prompt */
+                               sprintf(cur, "%6s       %2d   %+3d  %+3d  %+3d  =  %6s",
+                                       stat_names[cs], cval[cs], rp_ptr->r_adj[cs],
+                                       cp_ptr->c_adj[cs], ap_ptr->a_adj[cs], inp);
+                               c_put_str(TERM_YELLOW, cur, 14 + cs, 10);
+                       }
+                       os = cs;
+               }
+               
+               /* Prompt for the minimum stats */
                c = inkey();
-               if (c == 'Q')
+               switch ( c ){
+               case 'Q':
+                       birth_quit();
+               case 'S':
+                       return FALSE;
+               case ESCAPE:
+                       break;
+               case ' ':
+               case '\r':
+               case '\n':
+                       if(cs == 6) break;
+                       cs++;
+                       c = '2';
+                       break;
+               case '8':
+               case 'k':
+                       if (cs > 0) cs--;
+                       break;
+               case '2':
+               case 'j':
+                       if (cs < 6) cs++;
+                       break;
+               case '4':
+               case 'h':
+                       if (cs != 6)
+                       {
+                               if (cval[cs] == 3)
+                               {
+                                       cval[cs] = 17;
+                                       os = 7;
+                               }
+                               else if (cval[cs] > 3)
+                               {
+                                       cval[cs]--;
+                                       os = 7;
+                               }
+                               else return FALSE;
+                       }
+                       break;
+               case '6':
+               case 'l':
+                       if (cs != 6)
+                       {
+                               if (cval[cs] == 17)
+                               {
+                                       cval[cs] = 3;
+                                       os = 7;
+                               }
+                               else if (cval[cs] < 17)
+                               {
+                                       cval[cs]++;
+                                       os = 7;
+                               }
+                               else return FALSE;
+                       }
+                       break;
+               case 'm':
+                       if(cs != 6)
+                       {
+                               cval[cs] = 17;
+                               os = 7;
+                       }
+                       break;
+               case 'n':
+                       if(cs != 6)
+                       {
+                               cval[cs] = 3;
+                               os = 7;
+                       }
+                       break;
+               case '?':
                {
+#ifdef JP                 
+                       show_help("jbirth.txt#AutoRoller");
+#else
+                       show_help("birth.txt#AutoRoller");
+#endif
+               }
+                       break;
+               case '=':
+                       screen_save();
+#ifdef JP
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+#else
+                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+#endif
+
+                       screen_load();
+                       break;
+               default:
+                       bell();
+                       break;
+               }
+               if(c == ESCAPE || ((c == ' ' || c == '\r' || c == '\n') && cs == 6))break;
+       }
+       
+       for (i = 0; i < 6; i++)
+       {
+               /* Save the minimum stat */
+               stat_limit[i] = cval[i];
+       }
+
+       return TRUE;
+}
+#endif
+
+#ifdef ALLOW_AUTOROLLER
+static bool get_chara_limits(void)
+{
+       int i, j, m, cs, os;
+       int mval[6], cval[6];
+       int max_percent, min_percent;
+       char c;
+       char buf[80], cur[80];
+       char param[3][80] = {
+#ifdef JP
+               "¿ÈĹ(¥¤¥ó¥Á)",
+               "ÂνÅ(¥Ý¥ó¥É)",
+               "¼Ò²ñŪÃÏ°Ì"
+#else
+               "height",
+               "weight",
+               "social class"
+#endif
+       };
+
+       /* Clean up */
+       clear_from(10);
+       
+       /* Prompt for the minimum stats */
+#ifdef JP
+       put_str("2/4/6/8¤Ç¹àÌÜÁªÂò¡¢+/-¤ÇÃͤÎÁý¸º¡¢Enter¤Ç¼¡¤Ø", 11, 10);
+       put_str("Ãí°Õ¡§¿ÈŤÈÂνŤκÇÂçÃÍ/ºÇ¾®Ãͤ®¤ê¤®¤ê¤ÎÃͤÏÈó¾ï¤Ë½Ð¸½³ÎΨ¤¬Ä㤯¤Ê¤ê¤Þ¤¹¡£", 23, 2);
+#else
+       put_str("2/4/6/8 for Select, +/- for Change value, Enter for Goto next", 11, 10);
+       put_str("Caution: Values near minimum or maximum is extremery rare.", 23, 5);
+#endif
+       
+       if (p_ptr->psex == SEX_MALE)
+       {
+               max_percent = (int)(rp_ptr->m_b_ht+rp_ptr->m_m_ht*4-1) * 100 / (int)(rp_ptr->m_b_ht);
+               min_percent = (int)(rp_ptr->m_b_ht-rp_ptr->m_m_ht*4+1) * 100 / (int)(rp_ptr->m_b_ht);
+       }
+       else
+       {
+               max_percent = (int)(rp_ptr->f_b_ht+rp_ptr->f_m_ht*4-1) * 100 / (int)(rp_ptr->f_b_ht);
+               min_percent = (int)(rp_ptr->f_b_ht-rp_ptr->f_m_ht*4+1) * 100 / (int)(rp_ptr->f_b_ht);
+       }
+       
+#ifdef JP
+       put_str("ÂγÊ/Ãϰ̤κǾ®ÃÍ/ºÇÂçÃͤòÀßÄꤷ¤Æ²¼¤µ¤¤¡£", 10, 10);
+       put_str("  ¹à    ÌÜ                 ºÇ¾®ÃÍ  ºÇÂçÃÍ", 13,20);
+#else
+       put_str(" Parameter                    Min     Max", 13,20);
+       put_str("Set minimum/maximum attribute.", 10, 10);
+#endif
+
+       /* Output the maximum stats */
+       for (i = 0; i < 6; i++)
+       {
+               /* Obtain the "maximal" stat */
+               switch (i)
+               {
+               case 0: /* 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 */
+                       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 */
+                       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 */
+                       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 */
+                       m = 1;
+                       break;
+               case 5: /* Maximum social class */
+                       m = 100;
+                       break;
+               default:
+                       m = 1;
+                       break;
+               }
+               
+               /* Save the maximum or minimum */
+               mval[i] = m;
+               cval[i] = m;
+       }
+
+       for (i = 0; i < 3; i++)
+       {
+               /* Prepare a prompt */
+               sprintf(buf, "%-12s (%3d - %3d)", param[i], mval[i*2], mval[i*2+1]);
+
+               /* Dump the prompt */
+               put_str(buf, 14 + i, 20);
+
+               for (j = 0; j < 2; j++)
+               {
+                       sprintf(buf, "     %3d", cval[i*2+j]);
+                       put_str(buf, 14 + i, 45 + 8 * j);
+               }
+       }
+       
+       /* Get a minimum stat */
+       cs = 0;
+       os = 6;
+       while (TRUE)
+       {
+               /* Move Cursol */
+               if (cs != os)
+               {
+                       if(os == 6)
+                       {
+#ifdef JP
+                               c_put_str(TERM_WHITE, "·èÄꤹ¤ë", 18, 35);
+#else
+                               c_put_str(TERM_WHITE, "Accept", 18, 35);
+#endif
+                       }
+                       else if(os < 6)
+                               c_put_str(TERM_WHITE, cur, 14 + os/2, 45 + 8 * (os%2));
+                       
+                       if(cs == 6)
+                       {
+#ifdef JP
+                               c_put_str(TERM_YELLOW, "·èÄꤹ¤ë", 18, 35);
+#else
+                               c_put_str(TERM_YELLOW, "Accept", 18, 35);
+#endif
+                       }
+                       else
+                       {
+                               /* Prepare a prompt */
+                               sprintf(cur, "     %3d", cval[cs]);
+                               c_put_str(TERM_YELLOW, cur, 14 + cs/2, 45 + 8 * (cs%2));
+                       }
+                       os = cs;
+               }
+               
+               /* Prompt for the minimum stats */
+               c = inkey();
+               switch (c){
+               case 'Q':
                        birth_quit();
+               case 'S':
+                       return (FALSE);
+               case ESCAPE:
+                       break; /*¸å¤Ç¤â¤¦°ì²óbreak¤»¤ó¤È*/
+               case ' ':
+               case '\r':
+               case '\n':
+                       if(cs == 6) break;
+                       cs++;
+                       c = '6';
+                       break;
+               case '8':
+               case 'k':
+                       if (cs-2 >= 0) cs -= 2;
+                       break;
+               case '2':
+               case 'j':
+                       if (cs < 6) cs += 2;
+                       if (cs > 6) cs = 6;
+                       break;
+               case '4':
+               case 'h':
+                       if (cs > 0) cs--;
+                       break;
+               case '6':
+               case 'l':
+                       if (cs < 6) cs++;
+                       break;
+               case '-':
+               case '<':
+                       if (cs != 6)
+                       {
+                               if(cs%2)
+                               {
+                                       if(cval[cs] > cval[cs-1])
+                                       {
+                                               cval[cs]--;
+                                               os = 127;
+                                       }
+                               }
+                               else
+                               {
+                                       if(cval[cs] > mval[cs])
+                                       {
+                                               cval[cs]--;
+                                               os = 127;
+                                       }
+                               }
+                       }
+                       break;
+               case '+':
+               case '>':
+                       if (cs != 6)
+                       {
+                               if(cs%2)
+                               {
+                                       if(cval[cs] < mval[cs])
+                                       {
+                                               cval[cs]++;
+                                               os = 127;
+                                       }
+                               }
+                               else
+                               {
+                                       if(cval[cs] < cval[cs+1])
+                                       {
+                                               cval[cs]++;
+                                               os = 127;
+                                       }
+                               }
+                       }
+                       break;
+               case 'm':
+                       if(cs != 6)
+                       {
+                               if(cs%2)
+                               {
+                                       if(cval[cs] < mval[cs])
+                                       {
+                                               cval[cs] = mval[cs];
+                                               os = 127;
+                                       }
+                               }
+                               else
+                               {
+                                       if(cval[cs] < cval[cs+1])
+                                       {
+                                               cval[cs] = cval[cs+1];
+                                               os = 127;
+                                       }
+                               }
+                       }
+                       break;
+               case 'n':
+                       if(cs != 6)
+                       {
+                               if(cs%2)
+                               {
+                                       if(cval[cs] > cval[cs-1])
+                                       {
+                                               cval[cs] = cval[cs-1];
+                                               os = 255;
+                                       }
+                               }
+                               else
+                               {
+                                       if(cval[cs] > mval[cs])
+                                       {
+                                               cval[cs] = mval[cs];
+                                               os = 255;
+                                       }
+                               }
+                       }
+                       break;
+               case '?':
+#ifdef JP                 
+                       show_help("jbirth.txt#AutoRoller");
+#else
+                       show_help("birth.txt#AutoRoller");
+#endif
+                       break;
+               case '=':
+                       screen_save();
+#ifdef JP
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+#else
+                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+#endif
+
+                       screen_load();
+                       break;
+               default:
+                       bell();
+                       break;
                }
-               if (c == 'S') return (FALSE);
-               if (c == '*')
+               if(c == ESCAPE || ((c == ' ' || c == '\r' || c == '\n') && cs == 6))break;
+       }
+
+       /* Input the minimum stats */
+       for (i = 0; i < 6; i++)
+       {
+               /* Save the minimum stat */
+               chara_limit[i] = (cval[i] > 0) ? cval[i] : 0;
+       }
+       return TRUE;
+}
+#endif
+
+static char histpref_buf[240];
+
+void add_history_from_pref_line(cptr t)
+{
+       int  limit = (sizeof histpref_buf) - 1;
+       int  i;
+
+       for (i = strlen(histpref_buf); *t && (i < limit); t++)
+       {
+#ifdef JP
+               if (iskanji(*t) || isprint(*t))
+#else
+               if (isprint(*t))
+#endif
                {
-                       k = rand_int(MAX_SEXES);
+#ifdef JP
+                       if (iskanji(*t))
+                       {
+                               if (i + 1 >= limit) break;
+                               histpref_buf[i++] = *(t++);
+                       }
+#endif
+                       histpref_buf[i++] = *t;
+               }
+       }
+
+       /* Terminate */
+       histpref_buf[(i < limit) ? i : limit] = '\0';
+}
+
+
+static bool do_cmd_histpref(void)
+{
+       char buf[80];
+       errr err;
+       int i, j, n;
+       char *s, *t;
+       char temp[64 * 4];
+
+#ifdef JP
+       if (!get_check("À¸¤¤Î©¤ÁÀßÄê¥Õ¥¡¥¤¥ë¤ò¥í¡¼¥É¤·¤Þ¤¹¤«? ")) return FALSE;
+#else
+       if (!get_check("Load background history preference file? ")) return FALSE;
+#endif
+
+       /* Init buffer */
+       histpref_buf[0] = '\0';
+
+#ifdef JP
+       sprintf(buf, "histedit-%s.prf", player_name);
+#else
+       sprintf(buf, "histpref-%s.prf", player_name);
+#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);
+
+               /* Terminate buffer */
+               histpref_buf[0] = '\0';
+               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;
+               }
+       }
+
+       /* 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';
+       }
+
+       /* Terminate buffer */
+       histpref_buf[0] = '\0';
+
+       return TRUE;
+}
+
+/*
+ *  Character background edit-mode
+ */
+static void edit_history(void)
+{
+       char old_history[4][60];
+       char c;
+       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);
+       put_str("[ 2/4/6/8¤Ç°ÜÆ°¡¢Enter¤Ç½ªÎ»¡¢Ctrl-F¤Ç¥Õ¥¡¥¤¥ëÆɤ߹þ¤ß ]", 17, 10);
+#else
+       c_put_str(TERM_L_GREEN, "(Character Background - Edit Mode)", 11, 20);
+       put_str("[ 2/4/6/8 for Move, Enter for End, Ctrl-F for Read pref ]", 17, 10);
+#endif
+
+       while (TRUE)
+       {
+               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);
+
+               /* Place cursor just after cost of current stat */
+               Term_gotoxy(x + 10, y + 12);
+
+               c = inkey();
+
+               if (c == '8')
+               {
+                       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;
+#ifdef JP
+                       if ((x > 0) && (iskanji2(p_ptr->history[y], x-1))) x--;
+#endif
+               }
+               else if (c == '6')
+               {
+#ifdef JP
+                       if (iskanji2(p_ptr->history[y], x)) x++;
+#endif
+                       x++;
+                       if (x > 58)
+                       {
+                               x = 0;
+                               if (y < 3) y++;
+                       }
+               }
+               else if (c == '4')
+               {
+                       x--;
+                       if (x < 0)
+                       {
+                               if (y)
+                               {
+                                       y--;
+                                       x = 58;
+                               }
+                               else x = 0;
+                       }
+
+#ifdef JP
+                       if ((x > 0) && (iskanji2(p_ptr->history[y], x-1))) x--;
+#endif
+               }
+               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;
                }
-               k = (islower(c) ? A2I(c) : -1);
-               if ((k >= 0) && (k < n)) break;
-               if (c == '?') do_cmd_help();
-               else if (c == '=')
+               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('F'))
                {
-                       screen_save();
+                       if (do_cmd_histpref())
+                       {
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
-#else
-                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+                               if ((x > 0) && (iskanji2(p_ptr->history[y], x - 1))) x--;
 #endif
-
-                       screen_load();
+                       }
                }
-               else bell();
-       }
-
-       /* 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);
-
-       /* Clean up */
-       clear_from(15);
-
-       while(1)
-       {
-               char temp[80*9];
-               cptr t;
-
-               /* Choose the players race */
-               if (!get_player_race()) return FALSE;
-
-               clear_from(14);
-
-               roff_to_buf(race_jouhou[p_ptr->prace], 78, temp);
-               t = temp;
-
-               for (i = 0; i< 9; i++)
+               else if (c == '\010')
                {
-                       if(t[0] == 0)
-                               break; 
-                       else
+                       x--;
+                       if (x < 0)
                        {
-                               prt(t, 15+i, 1);
-                               t += strlen(t) + 1;
+                               if (y)
+                               {
+                                       y--;
+                                       x = 58;
+                               }
+                               else x = 0;
+                       }
+
+                       p_ptr->history[y][x] = ' ';
+#ifdef JP
+                       if ((x > 0) && (iskanji2(p_ptr->history[y], x - 1)))
+                       {
+                               x--;
+                               p_ptr->history[y][x] = ' ';
                        }
+#endif
                }
 #ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+               else if (iskanji(c) || isprint(c))
 #else
-               if (get_check("Are you sure? ")) break;
+               else if (isprint(c)) /* BUGFIX */
 #endif
-               clear_from(15);
-               c_put_str(TERM_WHITE, "              ", 4, 15);
-       }
-
-       /* Clean up */
-       clear_from(15);
+               {
+#ifdef JP
+                       if (iskanji2(p_ptr->history[y], x))
+                       {
+                               p_ptr->history[y][x+1] = ' ';
+                       }
 
-       /* Choose the players class */
-       while(1)
-       {
-               char temp[80*9];
-               cptr t;
+                       if (iskanji(c))
+                       {
+                               if (x > 57)
+                               {
+                                       x = 0;
+                                       y++;
+                                       if (y > 3) y = 0;
+                               }
 
-               /* Choose the players race */
-               if (!get_player_class()) return FALSE;
+                               if (iskanji2(p_ptr->history[y], x+1))
+                               {
+                                       p_ptr->history[y][x+2] = ' ';
+                               }
 
-               clear_from(14);
-               roff_to_buf(class_jouhou[p_ptr->pclass], 78, temp);
-               t = temp;
+                               p_ptr->history[y][x++] = c;
 
-               for (i = 0; i< 9; i++)
-               {
-                       if(t[0] == 0)
-                               break; 
-                       else
+                               c = inkey();
+                       }
+#endif
+                       p_ptr->history[y][x++] = c;
+                       if (x > 58)
                        {
-                               prt(t, 15+i, 1);
-                               t += strlen(t) + 1;
+                               x = 0;
+                               y++;
+                               if (y > 3) y = 0;
                        }
                }
+       } /* while (TRUE) */
 
-#ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
-#else
-               if (get_check("Are you sure? ")) break;
+}
+
+
+/*
+ * Helper function for 'player_birth()'
+ *
+ * The delay may be reduced, but is recommended to keep players
+ * from continuously rolling up characters, which can be VERY
+ * expensive CPU wise.  And it cuts down on player stupidity.
+ */
+static bool player_birth_aux(void)
+{
+       int i, k, n, cs, os;
+       int number_of_quests;
+
+       int mode = 0;
+
+       bool flag = FALSE;
+       bool prev = FALSE;
+
+       cptr str;
+
+       char c;
+
+#if 0
+       char p1 = '(';
 #endif
-               c_put_str(TERM_WHITE, "              ", 5, 15);
-       }
 
-       /* Choose the magic realms */
-       if (!get_player_realms()) return FALSE;
+       char p2 = ')';
+       char b1 = '[';
+       char b2 = ']';
 
-       /* Choose the players seikaku */
-       while(1)
-       {
-               char temp[80*8];
-               cptr t;
+       char buf[80], cur[80];
+       char inp[80];
 
-               /* Choose the players race */
-               if (!get_player_seikaku()) return FALSE;
 
-               clear_from(15);
-               roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 78, temp);
-               t = temp;
+       /*** Intro ***/
 
-               for (i = 0; i< 6; i++)
-               {
-                       if(t[0] == 0)
-                               break; 
-                       else
-                       {
-                               prt(t, 16+i, 1);
-                               t += strlen(t) + 1;
-                       }
-               }
+       /* Clear screen */
+       Term_clear();
+
+       /* Title everything */
 #ifdef JP
-               if (get_check("¤è¤í¤·¤¤¤Ç¤¹¤«¡©")) break;
+       put_str("̾Á°  :", 1,26);
 #else
-               if (get_check("Are you sure? ")) break;
+       put_str("Name  :", 1,26);
 #endif
-               c_put_str(TERM_L_BLUE, player_name, 1, 34);
-               prt("", 1, 34+strlen(player_name));
-       }
 
-       /* Clean up */
-       clear_from(15);
-
-       screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+       put_str("À­ÊÌ        :", 3, 1);
 #else
-       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+       put_str("Sex         :", 3, 1);
 #endif
 
-       screen_load();
+#ifdef JP
+       put_str("¼ï²        :", 4, 1);
+#else
+       put_str("Race        :", 4, 1);
+#endif
 
-#ifdef ALLOW_AUTOROLLER
+#ifdef JP
+       put_str("¿¦¶È        :", 5, 1);
+#else
+       put_str("Class       :", 5, 1);
+#endif
 
-       /*** Autoroll ***/
 
-       if (autoroller || autochara)
-       {
-               /* Clear fields */
-               auto_round = 0L;
-       }
+       /* Dump the default name */
+       c_put_str(TERM_L_BLUE, player_name, 1, 34);
 
-       /* Initialize */
-       if (autoroller)
-       {
-               int mval[6];
 
-               /* Clean up */
-               clear_from(12);
+       /*** Instructions ***/
 
-               /* Prompt for the minimum stats */
+       /* Display some helpful information */
 #ifdef JP
-               put_str("ǽÎÏÃͤκǾ®ÃͤòÆþÎϤ·¤Æ²¼¤µ¤¤: ", 14, 2);
+       put_str("¥­¥ã¥é¥¯¥¿¡¼¤òºîÀ®¤·¤Þ¤¹¡£('S'¤ä¤êľ¤¹, 'Q'½ªÎ», '?'¥Ø¥ë¥×)", 8, 10);
 #else
-               put_str("Enter minimum attribute for: ", 14, 2);
+       put_str("Make your charactor. ('S' Restart, 'Q' Quit, '?' Help)", 8, 10);
 #endif
 
 
-               /* Output the maximum stats */
-               for (i = 0; i < 6; i++)
-               {
-                       /* Reset the "success" counter */
-                       stat_match[i] = 0;
+       /*** Player sex ***/
 
-                       /* Race/Class bonus */
-                       j = rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i];
+       /* Extra info */
+#ifdef JP
+       put_str("Ãí°Õ¡§¡ÔÀ­Ê̡դΰ㤤¤Ï¥²¡¼¥à¾å¤Û¤È¤ó¤É±Æ¶Á¤òµÚ¤Ü¤·¤Þ¤»¤ó¡£", 23, 5);
+#else
+       put_str("Note: Your 'sex' does not have any significant gameplay effects.", 23, 5);
+#endif
 
-                       /* Obtain the "maximal" stat */
-                       m = adjust_stat(17, j, TRUE);
 
-                       /* Save the maximum */
-                       mval[i] = m;
+       /* Prompt for "Sex" */
+       for (n = 0; n < MAX_SEXES; n++)
+       {
+               /* Analyze */
+               sp_ptr = &sex_info[n];
+               str = sp_ptr->title;
 
-                       /* Extract a textual format */
-                       /* cnv_stat(m, inp); */
 
-                       /* Above 18 */
-                       if (m > 18)
-                       {
+               /* Display */
 #ifdef JP
-                               sprintf(inp, "(ºÇÂçÃÍ 18/%02d):", (m - 18));
+               sprintf(buf, "%c%c%s", I2A(n), p2, str);
 #else
-                               sprintf(inp, "(Max of 18/%02d):", (m - 18));
+               sprintf(buf, "%c%c %s", I2A(n), p2, str);
 #endif
+               put_str(buf, 12 + (n/5), 2 + 15 * (n%5));
+       }
 
-                       }
+#ifdef JP
+       sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+       sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
 
-                       /* From 3 to 18 */
+       /* Choose */
+       k = -1;
+       cs = 0;
+       os = MAX_SEXES;
+       while (1)
+       {
+               if (cs != os)
+               {
+                       put_str(cur, 12 + (os/5), 2 + 15 * (os%5));
+                       if(cs == MAX_SEXES)
+#ifdef JP
+                               sprintf(cur, "%c%c%s", '*', p2, "¥é¥ó¥À¥à");
+#else
+                               sprintf(cur, "%c%c %s", '*', p2, "Random");
+#endif
                        else
                        {
+                               sp_ptr = &sex_info[cs];
+                               str = sp_ptr->title;
 #ifdef JP
-                               sprintf(inp, "(ºÇÂçÃÍ %2d):", m);
+                               sprintf(cur, "%c%c%s", I2A(cs), p2, str);
 #else
-                               sprintf(inp, "(Max of %2d):", m);
+                               sprintf(cur, "%c%c %s", I2A(cs), p2, str);
 #endif
-
                        }
+                       c_put_str(TERM_YELLOW, cur, 12 + (cs/5), 2 + 15 * (cs%5));
+                       os = cs;
+               }
 
-                       /* Prepare a prompt */
-                       sprintf(buf, "%-5s%-20s", stat_names[i], inp);
+               if (k >= 0) break;
 
-                       /* Dump the prompt */
-                       put_str(buf, 16 + i, 5);
-               }
+#ifdef JP
+               sprintf(buf, "À­Ê̤òÁª¤ó¤Ç²¼¤µ¤¤ (%c-%c) ('='½é´ü¥ª¥×¥·¥ç¥óÀßÄê): ", I2A(0), I2A(n-1));
+#else
+               sprintf(buf, "Choose a sex (%c-%c) ('=' for options): ", I2A(0), I2A(n-1));
+#endif
 
-               /* Input the minimum stats */
-               for (i = 0; i < 6; i++)
+               put_str(buf, 10, 10);
+               c = inkey();
+               if (c == 'Q') birth_quit();
+               if (c == 'S') return (FALSE);
+               if (c == ' ' || c == '\r' || c == '\n')
                {
-                       /* Get a minimum stat */
-                       while (TRUE)
-                       {
-                               char *s;
+                       if(cs == MAX_SEXES)
+                               k = randint0(MAX_SEXES);
+                       else
+                               k = cs;
+                       break;
+               }
+               if (c == '*')
+               {
+                       k = randint0(MAX_SEXES);
+                       break;
+               }
+               if (c == '4')
+               {
+                       if (cs > 0) cs--;
+               }
+               if (c == '6')
+               {
+                       if (cs < MAX_SEXES) cs++;
+               }
+               k = (islower(c) ? A2I(c) : -1);
+               if ((k >= 0) && (k < MAX_SEXES))
+               {
+                       cs = k;
+                       continue;
+               }
+               else k = -1;
+               if (c == '?') do_cmd_help();
+               else if (c == '=')
+               {
+                       screen_save();
+#ifdef JP
+                       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+#else
+                       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
+#endif
+
+                       screen_load();
+               }
+               else if(c != '4' && c != '6')bell();
+       }
+
+       /* 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);
+
+       /* Clean up */
+       clear_from(10);
+
+       /* Choose the players race */
+       p_ptr->prace = 0;
+       while(1)
+       {
+               char temp[80*10];
+               cptr t;
+
+               if (!get_player_race()) return FALSE;
 
-                               /* Move the cursor */
-                               put_str("", 16 + i, 30);
+               clear_from(10);
 
-                               /* Default */
-                               strcpy(inp, "");
+               roff_to_buf(race_jouhou[p_ptr->prace], 74, temp, sizeof(temp));
+               t = temp;
 
-                               /* Get a response (or escape) */
-                               if (!askfor_aux(inp, 8)) inp[0] = '\0';
+               for (i = 0; i< 10; i++)
+               {
+                       if(t[0] == 0)
+                               break; 
+                       else
+                       {
+                               prt(t, 12+i, 3);
+                               t += strlen(t) + 1;
+                       }
+               }
+#ifdef JP
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
+#else
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
+#endif
+               clear_from(10);
+               c_put_str(TERM_WHITE, "              ", 4, 15);
+       }
 
-                               /* Hack -- add a fake slash */
-                               strcat(inp, "/");
+       /* Clean up */
+       clear_from(10);
 
-                               /* Hack -- look for the "slash" */
-                               s = strchr(inp, '/');
+       /* Choose the players class */
+       p_ptr->pclass = 0;
+       while(1)
+       {
+               char temp[80*9];
+               cptr t;
 
-                               /* Hack -- Nuke the slash */
-                               *s++ = '\0';
+               if (!get_player_class()) return FALSE;
 
-                               /* Hack -- Extract an input */
-                               v = atoi(inp) + atoi(s);
+               clear_from(10);
+               roff_to_buf(class_jouhou[p_ptr->pclass], 74, temp, sizeof(temp));
+               t = temp;
 
-                               /* Break on valid input */
-                               if (v <= mval[i]) break;
+               for (i = 0; i< 9; i++)
+               {
+                       if(t[0] == 0)
+                               break; 
+                       else
+                       {
+                               prt(t, 12+i, 3);
+                               t += strlen(t) + 1;
                        }
-
-                       /* Save the minimum stat */
-                       stat_limit[i] = (v > 0) ? v : 0;
                }
-       }
-
-       if (autochara)
-       {
-               int mval[6];
-               int max_percent, min_percent;
-
-               /* Clean up */
-               clear_from(10);
 
-               /* Prompt for the minimum stats */
-#ifdef JP
-               put_str("ÂγÊ/Ãϰ̤κǾ®ÃÍ/ºÇÂçÃͤòÆþÎϤ·¤Æ²¼¤µ¤¤: ", 13, 2);
-#else
-               put_str("Enter minimum attribute for: ", 13, 2);
-#endif
 #ifdef JP
-               put_str("(Ãí°Õ : ¿ÈŤÈÂνŤκÇÂçÃÍ/ºÇ¾®Ãͤ®¤ê¤®¤ê¤ÎÃͤÏÈó¾ï¤Ë½Ð¸½³ÎΨ¤¬Ä㤯¤Ê¤ê¤Þ¤¹¡£)", 14, 2);
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-               put_str("Caution: Values near minimum or maximum is extremery rare.", 14, 2);
+               if (get_check_strict("Are you sure? ", CHECK_DEFAULT_Y)) break;
 #endif
+               c_put_str(TERM_WHITE, "              ", 5, 15);
+       }
 
-               if (p_ptr->psex == SEX_MALE)
-               {
-                       max_percent = (int)(rp_ptr->m_b_ht+rp_ptr->m_m_ht*4-1) * 100 / (int)(rp_ptr->m_b_ht);
-                       min_percent = (int)(rp_ptr->m_b_ht-rp_ptr->m_m_ht*4+1) * 100 / (int)(rp_ptr->m_b_ht);
-               }
-               else
-               {
-                       max_percent = (int)(rp_ptr->f_b_ht+rp_ptr->f_m_ht*4-1) * 100 / (int)(rp_ptr->f_b_ht);
-                       min_percent = (int)(rp_ptr->f_b_ht-rp_ptr->f_m_ht*4+1) * 100 / (int)(rp_ptr->f_b_ht);
-               }
-
-               /* Output the maximum stats */
-               for (i = 0; i < 6; i++)
-               {
-                       /* Obtain the "maximal" stat */
-                       switch (i)
-                       {
-                               case 0: 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: 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: 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: 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: m = 1;break;
-                               case 5: m = 100;break;
-                               default: m = 1;break;
-                       }
+       /* Choose the magic realms */
+       if (!get_player_realms()) return FALSE;
 
-                       /* Save the maximum */
-                       mval[i] = m;
+       /* Choose the players seikaku */
+       p_ptr->pseikaku = 0;
+       while(1)
+       {
+               char temp[80*8];
+               cptr t;
 
-                       /* Extract a textual format */
-                       /* cnv_stat(m, inp); */
+               if (!get_player_seikaku()) return FALSE;
 
-                       if (i % 2)
-                       {
-#ifdef JP
-                               sprintf(inp, "ºÇÂçÃÍ (%3d °Ê²¼):", m);
-#else
-                               sprintf(inp, "(Max of %3d):", m);
-#endif
-                       }
+               clear_from(10);
+               roff_to_buf(seikaku_jouhou[p_ptr->pseikaku], 74, temp, sizeof(temp));
+               t = temp;
 
+               for (i = 0; i< 6; i++)
+               {
+                       if(t[0] == 0)
+                               break; 
                        else
                        {
+                               prt(t, 12+i, 3);
+                               t += strlen(t) + 1;
+                       }
+               }
 #ifdef JP
-                               sprintf(inp, "ºÇ¾®ÃÍ (%3d °Ê¾å):", m);
+               if (get_check_strict("¤è¤í¤·¤¤¤Ç¤¹¤«¡©", CHECK_DEFAULT_Y)) break;
 #else
-                               sprintf(inp, "(Min of %3d):", m);
+               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));
+       }
 
-                       }
+       /* Clean up */
+       clear_from(10);
+       put_str("                                   ", 3, 40);
+       put_str("                                   ", 4, 40);
+       put_str("                                   ", 5, 40);
 
-                       /* Prepare a prompt */
+       screen_save();
 #ifdef JP
-                       sprintf(buf, "%-13s%-20s", (i < 2 ? "¿ÈĹ(¥¤¥ó¥Á)" : i < 4 ? "ÂνÅ(¥Ý¥ó¥É)" : "ÃÏ°Ì"), inp);
+       do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
-                       sprintf(buf, "%-13s%-20s", (i < 2 ? "height" : i < 4 ? "wight" : "social class"), inp);
+       do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
 
-                       /* Dump the prompt */
-                       put_str(buf, 16 + i, 5);
-               }
-
-               /* Input the minimum stats */
-               for (i = 0; i < 6; i++)
-               {
-                       /* Get a minimum stat */
-                       while (TRUE)
-                       {
-                               /* Move the cursor */
-                               put_str("", 16 + i, 37);
+       screen_load();
 
-                               /* Default */
-                               strcpy(inp, "");
+#ifdef ALLOW_AUTOROLLER
 
-                               /* Get a response (or escape) */
-                               if (!askfor_aux(inp, 4)) strcpy(inp, format("%d",mval[i]));
-                               if (inp[0] == '\0') strcpy(inp, format("%d",mval[i]));
+       /*** Autoroll ***/
 
-                               /* Hack -- Extract an input */
-                               v = atoi(inp);
+       if (autoroller || autochara)
+       {
+               /* Clear fields */
+               auto_round = 0L;
+       }
 
-                               /* Break on valid input */
-                               if (i % 2)
-                               {
-                                       if ((v <= mval[i]) && (v >= mval[i-1])) break;
-                               }
-                               else
-                               {
-                                       if ((v >= mval[i]) && (v <= mval[i+1])) break;
-                               }
-                       }
+       /* Initialize */
+       if (autoroller)
+       {
+               if (!get_stat_limits()) return FALSE;
+       }
 
-                       /* Save the minimum stat */
-                       chara_limit[i] = (v > 0) ? v : 0;
-               }
+       if (autochara)
+       {
+               if (!get_chara_limits()) return FALSE;
        }
 
 #endif /* ALLOW_AUTOROLLER */
@@ -4682,23 +5888,15 @@ do_cmd_options_aux(6, "
 
        /* Extra info */
 #ifdef JP
-       Term_putstr(5, 14, -1, TERM_WHITE,
-"ɬ¿Ü¤Î¥¯¥¨¥¹¥È(¥ª¥Ù¥í¥óµÚ¤Óº®Æ٤Υµ¡¼¥Ú¥ó¥È)¤Ë²Ã¤¨¤Æ¡¢ÄɲäΥ¯¥¨¥¹¥È¤Î");
-       Term_putstr(5, 15, -1, TERM_WHITE,
-"¿ô¤òÀßÄꤹ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£");
-       Term_putstr(5, 17, -1, TERM_WHITE,
-"Äɲ寥¨¥¹¥È¤ò¹Ô¤Ê¤¤¤¿¤¯¤Ê¤¤¾ì¹ç¤Ï '0'¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£");
-       Term_putstr(5, 18, -1, TERM_WHITE,
-"¥é¥ó¥À¥à¤Ë·èÄꤹ¤ë¤Ë¤Ï'*'¤òÆþÎϤ·¤Æ²¼¤µ¤¤¡£");
-#else
-       Term_putstr(5, 14, -1, TERM_WHITE,
-                   "You can enter the number of quests you'd like to perform in addition");
-       Term_putstr(5, 15, -1, TERM_WHITE,
-                   "to the two obligatory ones ( Oberon and the Serpent of Chaos )");
-       Term_putstr(5, 17, -1, TERM_WHITE,
-                   "In case you do not want any additional quests, just enter 0");
-       Term_putstr(5, 18, -1, TERM_WHITE,
-                   "If you want a random number of random quests, just enter *");
+       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 */
@@ -4706,9 +5904,9 @@ do_cmd_options_aux(6, "
        {
 
 #ifdef JP
-put_str(format("Äɲ寥¨¥¹¥È¤Î¿ô (%u°Ê²¼) ", MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1), 20, 2);
+               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), 20, 2);
+               put_str(format("Number of additional quests? (<%u) ", MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 2), 15, 5);
 #endif
 
 
@@ -4716,123 +5914,51 @@ put_str(format("
                while (TRUE)
                {
                        /* Move the cursor */
-                       put_str("", 20, 37);
+                       put_str("", 15, 40);
 
                        /* Default */
                        strcpy(inp, "10");
 
                        /* Get a response (or escape) */
-                       if (!askfor_aux(inp, 2)) inp[0] = '\0';
+                       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 49 random quests */
-                               v = rand_int(11);
+                               /* 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
                        {
-                               v = atoi(inp);
+                               number_of_quests = atoi(inp);
                        }
 
                        /* Break on valid input */
-                       if ((v <= MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1) && (v >= 0)) break;
+                       if ((number_of_quests <= MAX_RANDOM_QUEST - MIN_RANDOM_QUEST + 1) && (number_of_quests >= 0)) break;
                }
                break;
        }
 
        /* Clear */
-       clear_from(15);
-
-       /* Init the random quests */
-       init_flags = INIT_ASSIGN;
-       p_ptr->inside_quest = MIN_RANDOM_QUEST;
-
-       process_dungeon_file("q_info_j.txt", 0, 0, 0, 0);
-
-       p_ptr->inside_quest = 0;
-
-       /* Prepare allocation table */
-       get_mon_num_prep(monster_quest, NULL);
-
-       /* Generate quests */
-       for (i = MIN_RANDOM_QUEST + v - 1; i >= MIN_RANDOM_QUEST; i--)
-       {
-               quest_type      *q_ptr = &quest[i];
-               monster_race    *r_ptr;
-               monster_race    *quest_r_ptr;
-               int             r_idx;
-
-               q_ptr->status = QUEST_STATUS_TAKEN;
-
-               while (1)
-               {
-                       /*
-                        * Random monster 5 - 10 levels out of depth
-                        * (depending on level)
-                        */
-                       r_idx = get_mon_num(q_ptr->level + 5 + randint(q_ptr->level / 10));
-                       r_ptr = &r_info[r_idx];
-
-                       if(!(r_ptr->flags1 & RF1_UNIQUE)) continue;
-
-                       if(r_ptr->flags6 & RF6_SPECIAL) continue;
-
-                       if(r_ptr->flags7 & RF7_FRIENDLY) continue;
-
-                       if(r_ptr->flags7 & RF7_AQUATIC) continue;
-
-                       if(!(r_ptr->flags8 & RF8_DUNGEON)) 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;
-               }
-
-               q_ptr->r_idx = r_idx;
-               quest_r_ptr = &r_info[q_ptr->r_idx];
-
-               /* Mark uniques */
-               quest_r_ptr->flags1 |= RF1_QUESTOR;
-
-               q_ptr->max_num = 1;
-       }
-
-       /* Init the two main quests (Oberon + Serpent) */
-       init_flags = INIT_ASSIGN;
-       p_ptr->inside_quest = QUEST_OBERON;
-
-       process_dungeon_file("q_info_j.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);
-
-       quest[QUEST_SERPENT].status = QUEST_STATUS_TAKEN;
-       p_ptr->inside_quest = 0;
-
-       /* Clear */
-       clear_from(14);
+       clear_from(10);
 
        /* Reset turn; before auto-roll and after choosing race */
-       if ((p_ptr->prace == RACE_VAMPIRE) ||
-           (p_ptr->prace == RACE_SKELETON) ||
-           (p_ptr->prace == RACE_ZOMBIE) ||
-           (p_ptr->prace == RACE_SPECTRE))
-       {
-               /* Undead start just after midnight */
-               turn = (60L * TOWN_DAWN) / 4 + 1;
-       }
-       else
-       {
-               turn = 1;
-       }
-       dungeon_turn = 1;
-
+       init_turn();
 
        /*** Generate ***/
 
@@ -4906,11 +6032,19 @@ put_str(format("
                        /* Put the minimal stats */
                        for (i = 0; i < 6; i++)
                        {
+                               int j, m;
+
                                /* Label stats */
                                put_str(stat_names[i], 3+i, col);
 
+                               /* Race/Class bonus */
+                               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);
+
                                /* Put the stat */
-                               cnv_stat(stat_limit[i], buf);
+                               cnv_stat(m, buf);
                                c_put_str(TERM_L_BLUE, buf, 3+i, col+5);
                        }
                }
@@ -4927,7 +6061,7 @@ put_str(format("
                        auto_round++;
 
                        /* Hack -- Prevent overflow */
-                       if (auto_round >= 1000000L)
+                       if (auto_round >= 1000000000L)
                        {
                                auto_round = 1;
 
@@ -4946,7 +6080,7 @@ put_str(format("
                                for (i = 0; i < 6; i++)
                                {
                                        /* This stat is okay */
-                                       if (stat_use[i] >= stat_limit[i])
+                                       if (p_ptr->stat_max[i] >= stat_limit[i])
                                        {
                                                stat_match[i]++;
                                        }
@@ -4991,7 +6125,7 @@ put_str(format("
 
 #ifdef AUTOROLLER_DELAY
                                /* Delay 1/10 second */
-                               if (flag) Term_xtra(TERM_XTRA_DELAY, 100);
+                               if (flag) Term_xtra(TERM_XTRA_DELAY, 10);
 #endif
 
                                /* Make sure they see everything */
@@ -5006,7 +6140,7 @@ put_str(format("
                                        /* Roll for age/height/weight */
                                        get_ahw();
 
-                                       /* Roll for social class */
+                                       /* Roll for social class */
                                        get_history();
 
                                        break;
@@ -5026,17 +6160,13 @@ put_str(format("
                mode = 0;
 
                /* Roll for base hitpoints */
-               get_extra();
+               get_extra(TRUE);
 
                /* Roll for gold */
                get_money();
 
                /* Hack -- get a chaos patron even if you are not a chaos warrior */
-               p_ptr->chaos_patron = (s16b)rand_int(MAX_PATRON);
-
-               p_ptr->muta1 = 0;
-               p_ptr->muta2 = 0;
-               p_ptr->muta3 = 0;
+               p_ptr->chaos_patron = (s16b)randint0(MAX_PATRON);
 
                /* Input loop */
                while (TRUE)
@@ -5060,33 +6190,33 @@ put_str(format("
                        Term_gotoxy(2, 23);
                        Term_addch(TERM_WHITE, b1);
 #ifdef JP
-Term_addstr(-1, TERM_WHITE, "'r'¤Ç¼¡¤Î¿ôÃÍ");
+                       Term_addstr(-1, TERM_WHITE, "'r' ¼¡¤Î¿ôÃÍ");
 #else
-                       Term_addstr(-1, TERM_WHITE, "'r' to reroll");
+                       Term_addstr(-1, TERM_WHITE, "'r'eroll");
 #endif
 
 #ifdef JP
-if (prev) Term_addstr(-1, TERM_WHITE, ", 'p'¤ÇÁ°¤Î¿ôÃÍ");
+                       if (prev) Term_addstr(-1, TERM_WHITE, ", 'p' Á°¤Î¿ôÃÍ");
 #else
-                       if (prev) Term_addstr(-1, TERM_WHITE, ", 'p' for prev");
+                       if (prev) Term_addstr(-1, TERM_WHITE, ", 'p'previous");
 #endif
 
 #ifdef JP
-if (mode) Term_addstr(-1, TERM_WHITE, ", 'h' ¤Ç¤½¤Î¾¤Î¾ðÊó");
+                       if (mode) Term_addstr(-1, TERM_WHITE, ", 'h' ¤½¤Î¾¤Î¾ðÊó");
 #else
-                       if (mode) Term_addstr(-1, TERM_WHITE, ", 'h' for Misc.");
+                       if (mode) Term_addstr(-1, TERM_WHITE, ", 'h' Misc.");
 #endif
 
 #ifdef JP
-else Term_addstr(-1, TERM_WHITE, ", 'h' ¤ÇÀ¸¤¤Î©¤Á¤òɽ¼¨");
+                       else Term_addstr(-1, TERM_WHITE, ", 'h' À¸¤¤Î©¤Á¤òɽ¼¨");
 #else
-                       else Term_addstr(-1, TERM_WHITE, ", 'h' for History");
+                       else Term_addstr(-1, TERM_WHITE, ", 'h'istory");
 #endif
 
 #ifdef JP
-Term_addstr(-1, TERM_WHITE, ", ESC¤Ç¤³¤Î¿ôÃͤ˷èÄê");
+                       Term_addstr(-1, TERM_WHITE, ", Enter ¤³¤Î¿ôÃͤ˷èÄê");
 #else
-                       Term_addstr(-1, TERM_WHITE, ", or ESC to accept");
+                       Term_addstr(-1, TERM_WHITE, ", or Enter to accept");
 #endif
 
                        Term_addch(TERM_WHITE, b2);
@@ -5095,16 +6225,13 @@ Term_addstr(-1, TERM_WHITE, ", ESC
                        c = inkey();
 
                        /* Quit */
-                       if (c == 'Q')
-                       {
-                               birth_quit();
-                       }
+                       if (c == 'Q') birth_quit();
 
                        /* Start over */
                        if (c == 'S') return (FALSE);
 
                        /* Escape accepts the roll */
-                       if (c == ESCAPE) break;
+                       if (c == '\r' || c == '\n' || c == ESCAPE) break;
 
                        /* Reroll this character */
                        if ((c == ' ') || (c == 'r')) break;
@@ -5112,7 +6239,7 @@ Term_addstr(-1, TERM_WHITE, ", ESC
                        /* Previous character */
                        if (prev && (c == 'p'))
                        {
-                               load_prev_data();
+                               load_prev_data(TRUE);
                                continue;
                        }
 
@@ -5126,14 +6253,18 @@ Term_addstr(-1, TERM_WHITE, ", ESC
                        /* Help */
                        if (c == '?')
                        {
-                               do_cmd_help();
+#ifdef JP                 
+                               show_help("jbirth.txt#AutoRoller");
+#else
+                               show_help("birth.txt#AutoRoller");
+#endif
                                continue;
                        }
                        else if (c == '=')
                        {
                                screen_save();
 #ifdef JP
-do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
+                               do_cmd_options_aux(6, "½é´ü¥ª¥×¥·¥ç¥ó((*)¤Ï¥¹¥³¥¢¤Ë±Æ¶Á)");
 #else
                                do_cmd_options_aux(6, "Startup Opts((*)s effect score)");
 #endif
@@ -5152,10 +6283,11 @@ do_cmd_options_aux(6, "
                }
 
                /* Are we done? */
-               if (c == ESCAPE) break;
+               if (c == '\r' || c == '\n' || c == ESCAPE) break;
 
                /* Save this for the "previous" character */
-               save_prev_data();
+               save_prev_data(&previous_char);
+               previous_char.quick_ok = FALSE;
 
                /* Note that a previous roll exists */
                prev = TRUE;
@@ -5164,33 +6296,24 @@ do_cmd_options_aux(6, "
        /* Clear prompt */
        clear_from(23);
 
-       get_max_stats();
+       /*** Edit character background ***/
+       edit_history();
 
        /*** Finish up ***/
 
+       get_max_stats();
+
        /* Get a name, recolor it, prepare savefile */
 
        get_name();
 
        get_virtues();
 
-        /* Set the recall dungeon accordingly */
-        if (vanilla_town)
-        {
-               dungeon_type = 0;
-               p_ptr->recall_dungeon = DUNGEON_ANGBAND;
-        }
-        else
-        {
-                dungeon_type = 0;
-               p_ptr->recall_dungeon = DUNGEON_GALGALS;
-        }
-
        /* Prompt for it */
 #ifdef JP
-       prt("[ 'Q' ¤ÇÃæÃÇ, 'S' ¤Ç½é¤á¤«¤é, ESC ¤Ç¥²¡¼¥à³«»Ï ]", 23, 14);
+       prt("[ 'Q' ÃæÃÇ, 'S' ½é¤á¤«¤é, Enter ¥²¡¼¥à³«»Ï ]", 23, 14);
 #else
-       prt("['Q' to suicide, 'S' to start over, or ESC to continue]", 23, 10);
+       prt("['Q'uit, 'S'tart over, or Enter to continue]", 23, 10);
 #endif
 
 
@@ -5198,20 +6321,112 @@ do_cmd_options_aux(6, "
        c = inkey();
 
        /* Quit */
-       if (c == 'Q')
-       {
-               birth_quit();
-       }
+       if (c == 'Q') birth_quit();
 
        /* Start over */
        if (c == 'S') return (FALSE);
 
+       init_dungeon_quests(number_of_quests);
+
+       /* Save character data for quick start */
+       save_prev_data(&previous_char);
+       previous_char.quests = number_of_quests;
+       previous_char.quick_ok = TRUE;
+
+       /* Process the player name */
+       process_player_name(FALSE);
+
        /* Accept */
        return (TRUE);
 }
 
 
 /*
+ * 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(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;
+}
+
+
+/*
  * Create a new character.
  *
  * Note that we may be called with "junk" leftover in the various
@@ -5222,16 +6437,37 @@ void player_birth(void)
        int i, j;
        char buf[80];
 
-        playtime = 0;
+       playtime = 0;
+
+       /*
+        * Paranoia - wipe the pets
+        * For accuracy of precalc_cur_num_of_pet() called from wipe_m_list()
+        */
+       C_WIPE(party_mon, MAX_PARTY_MON, monster_type);
+
+       /* 
+        * Wipe monsters in old dungeon
+        * This wipe destroys value of m_list[].cur_num .
+        */
+       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 */
@@ -5299,6 +6535,10 @@ void player_birth(void)
        /* Generate the random seeds for the wilderness */
        seed_wilderness();
 
+       /* Give beastman a mutation at character birth */
+       if (p_ptr->prace == RACE_BEASTMAN) hack_mutation = TRUE;
+       else hack_mutation = FALSE;
+
        /* Set the message window flag as default */
        if (!window_flag[1])
                window_flag[1] |= PW_MESSAGE;
@@ -5311,13 +6551,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);
@@ -5325,14 +6565,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);
@@ -5340,14 +6580,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);
@@ -5365,7 +6605,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
@@ -5383,7 +6623,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