OSDN Git Service

add mt.patch
authorSHIRAKATA Kentaro <argrath@ub32.org>
Wed, 11 Aug 2004 07:18:23 +0000 (07:18 +0000)
committerSHIRAKATA Kentaro <argrath@ub32.org>
Wed, 11 Aug 2004 07:18:23 +0000 (07:18 +0000)
patch/index.html
patch/mt.patch [new file with mode: 0644]

index 92c6fc8..37cf39b 100755 (executable)
@@ -13,9 +13,9 @@
 
 <h1>¥Ñ¥Ã¥Á</h1>
 <p>
-°Ê²¼¤Î¥Ñ¥Ã¥Á¤ÏÀΤÎJNetHack¤Î³ÈÄ¥µ¡Ç½¤È¤·¤Æ¼è¤êÆþ¤ì¤é¤ì¤Æ¤¤¤¿¤â¤Î¤Ç¤¹¡£
-´ðËÜŪ¤ËJNetHack1.2¥Ù¡¼¥¹¤Ç¤¹¤Î¤Ç¡¢3.4.0¥Ù¡¼¥¹¤ÇÆ°ºî¤¹¤ë¤«¤Ï¤ï¤«¤ê¤Þ¤»¤ó¡£
-»²¹ÍÄøÅ٤ˤɤ¦¤¾¡£
+°Ê²¼¤Î¥Ñ¥Ã¥Á¤ÏÀΤÎJNetHack¤Î³ÈÄ¥µ¡Ç½¤È¤·¤Æ¼è¤êÆþ¤ì¤é¤ì¤Æ¤¤¤¿¤â¤Î¤ʤɤǤ¹¡£
+ÌÀµ­¤µ¤ì¤Æ¤¤¤Ê¤¤¤â¤Î¤ÏJNetHack1.2¥Ù¡¼¥¹¤Ç¤¹¤Î¤Ç¡¢
+3.4.0¥Ù¡¼¥¹¤ÇÆ°ºî¤¹¤ë¤«¤Ï¤ï¤«¤ê¤Þ¤»¤ó¡£»²¹ÍÄøÅ٤ˤɤ¦¤¾¡£
 </p>
 <ul>
 <li><a href="fighter.patch">¿¦¶ÈFighter¤òÄɲ乤ë¥Ñ¥Ã¥Á</a>
@@ -23,6 +23,7 @@
 <li><a href="newbie.patch">¥²¡¼¥àÃæ¤Ç¤Î½é¿´¼ÔÍÑÀâÌÀ¤òÄɲ乤ë¥Ñ¥Ã¥Á</a>
 <li><a href="centerpopups.patch">X11¤Ç¥À¥¤¥¢¥í¥°¤ò¥¦¥£¥ó¥É¥¦Ãæ¿´¤Ëɽ¼¨¤¹¤ë¥Ñ¥Ã¥Á</a>
 <li><a href="report.patch">¥¹¥³¥¢Á÷¿®µ¡Ç½¤òÄɲ乤ë¥Ñ¥Ã¥Á</a>
+<li><a href="mt.patch">Íð¿ôȯÀ¸´ï¤ËMersenne Twister¤ò»ÈÍѤ¹¤ë¥Ñ¥Ã¥Á(3.4.3-0.4ÍÑ)</a>
 </ul>
 <hr>
 Powered by <a href="http://sourceforge.jp"><img src="http://sourceforge.jp/sflogo.php?group_id=95" width="96" height="31" border="0" alt="SourceForge.jp"></a>
diff --git a/patch/mt.patch b/patch/mt.patch
new file mode 100644 (file)
index 0000000..feee560
--- /dev/null
@@ -0,0 +1,224 @@
+diff -urN orig/include/config.h RND_MT/include/config.h\r
+--- orig/include/config.h      Sat Jan 10 19:06:48 2004\r
++++ RND_MT/include/config.h    Fri Jul 23 23:47:06 2004\r
+@@ -354,6 +354,7 @@\r
\r
+ #define EXP_ON_BOTL   /* Show experience on bottom line */\r
+ /* #define SCORE_ON_BOTL */   /* added by Gary Erickson (erickson@ucivax) */\r
++#define RAND_MT               /* use mersenne twister for random number */\r
\r
+ /*\r
+  * Section 5:  EXPERIMENTAL STUFF\r
+diff -urN orig/include/extern.h RND_MT/include/extern.h\r
+--- orig/include/extern.h      Thu Apr 29 20:14:34 2004\r
++++ RND_MT/include/extern.h    Fri Jul 23 23:48:12 2004\r
+@@ -1710,6 +1710,9 @@\r
+ E int FDECL(d, (int,int));\r
+ E int FDECL(rne, (int));\r
+ E int FDECL(rnz, (int));\r
++#ifdef RAND_MT\r
++E void FDECL(init_genrand, (unsigned long));\r
++#endif /* RAND_MT */\r
\r
+ /* ### role.c ### */\r
\r
+diff -urN orig/src/hacklib.c RND_MT/src/hacklib.c\r
+--- orig/src/hacklib.c Fri Dec  5 01:21:28 2003\r
++++ RND_MT/src/hacklib.c       Fri Jul 23 23:50:30 2004\r
+@@ -482,6 +482,16 @@\r
+       /* the types are different enough here that sweeping the different\r
+        * routine names into one via #defines is even more confusing\r
+        */\r
++#ifdef RAND_MT\r
++\r
++ #ifdef BSD\r
++      init_genrand((unsigned long) time((long *)0));\r
++ #else\r
++      init_genrand((unsigned long) time((time_t *)0));\r
++ #endif\r
++\r
++#else /* RAND_MT */\r
++\r
+ #ifdef RANDOM /* srandom() from sys/share/random.c */\r
+       srandom((unsigned int) time((time_t *)0));\r
+ #else\r
+@@ -502,6 +512,7 @@\r
+ #  endif\r
+ # endif\r
+ #endif\r
++#endif /* RAND_MT */\r
+ }\r
\r
+ static struct tm *\r
+diff -urN orig/src/rnd.c RND_MT/src/rnd.c\r
+--- orig/src/rnd.c     Sun Apr 28 00:36:36 2002\r
++++ RND_MT/src/rnd.c   Wed Aug 28 22:02:04 2002\r
+@@ -3,6 +3,8 @@\r
\r
+ #include "hack.h"\r
\r
++#ifndef RAND_MT\r
++\r
+ /* "Rand()"s definition is determined by [OS]conf.h */\r
+ #if defined(LINT) && defined(UNIX)    /* rand() is long... */\r
+ extern int NDECL(rand);\r
+@@ -16,6 +18,15 @@\r
+ # endif\r
+ #endif /* LINT */\r
\r
++#else /* RAND_MT */\r
++\r
++STATIC_DCL void NDECL(next_state);\r
++STATIC_DCL unsigned long NDECL(genrand_int32);\r
++/*#define RND(x) (int)(genrand_int32() % (unsigned long)(x))*/\r
++#define RND(x) (int)((double)(x) * (double)genrand_int32() * (1.0/4294967296.0))\r
++\r
++#endif /* RAND_MT */\r
++\r
+ #ifdef OVL0\r
\r
+ int\r
+@@ -142,4 +153,120 @@\r
\r
+ #endif /* OVLB */\r
\r
++#ifdef RAND_MT\r
++\r
++/* \r
++   A C-program for MT19937, with initialization improved 2002/2/10.\r
++   Coded by Takuji Nishimura and Makoto Matsumoto.\r
++   This is a faster version by taking Shawn Cokus's optimization,\r
++   Matthe Bellew's simplification, Isaku Wada's real version.\r
++\r
++   Before using, initialize the state by using init_genrand(seed) \r
++   or init_by_array(init_key, key_length).\r
++\r
++   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\r
++   All rights reserved.                          \r
++\r
++   Redistribution and use in source and binary forms, with or without\r
++   modification, are permitted provided that the following conditions\r
++   are met:\r
++\r
++     1. Redistributions of source code must retain the above copyright\r
++        notice, this list of conditions and the following disclaimer.\r
++\r
++     2. Redistributions in binary form must reproduce the above copyright\r
++        notice, this list of conditions and the following disclaimer in the\r
++        documentation and/or other materials provided with the distribution.\r
++\r
++     3. The names of its contributors may not be used to endorse or promote \r
++        products derived from this software without specific prior written \r
++        permission.\r
++\r
++   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
++   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
++   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
++   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
++   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
++   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
++   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r
++   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
++   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
++   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
++   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
++\r
++\r
++   Any feedback is very welcome.\r
++   http://www.math.keio.ac.jp/matumoto/emt.html\r
++   email: matumoto@math.keio.ac.jp\r
++*/\r
++\r
++/* Period parameters */  \r
++#define N_MT 624\r
++#define M_MT 397\r
++#define MATRIX_A 0x9908b0dfUL   /* constant vector a */\r
++#define UMASK 0x80000000UL /* most significant w-r bits */\r
++#define LMASK 0x7fffffffUL /* least significant r bits */\r
++#define MIXBITS(u,v) ( ((u) & UMASK) | ((v) & LMASK) )\r
++#define TWIST(u,v) ((MIXBITS(u,v) >> 1) ^ ((v)&1UL ? MATRIX_A : 0UL))\r
++\r
++static unsigned long state[N_MT]; /* the array for the state vector  */\r
++static int left = 1;\r
++/*static int initf = 0;*/\r
++static unsigned long *next;\r
++\r
++/* initializes state[N] with a seed */\r
++void init_genrand(unsigned long s)\r
++{\r
++    int j;\r
++    state[0]= s & 0xffffffffUL;\r
++    for (j=1; j<N_MT; j++) {\r
++        state[j] = (1812433253UL * (state[j-1] ^ (state[j-1] >> 30)) + j); \r
++        /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\r
++        /* In the previous versions, MSBs of the seed affect   */\r
++        /* only MSBs of the array state[].                        */\r
++        /* 2002/01/09 modified by Makoto Matsumoto             */\r
++        state[j] &= 0xffffffffUL;  /* for >32 bit machines */\r
++    }\r
++    left = 1; /*initf = 1;*/\r
++}\r
++\r
++static void next_state(void)\r
++{\r
++    unsigned long *p=state;\r
++    int j;\r
++\r
++    /* if init_genrand() has not been called, */\r
++    /* a default initial seed is used         */\r
++/*    if (initf==0) init_genrand(5489UL);*/\r
++\r
++    left = N_MT;\r
++    next = state;\r
++    \r
++    for (j=N_MT-M_MT+1; --j; p++) \r
++        *p = p[M_MT] ^ TWIST(p[0], p[1]);\r
++\r
++    for (j=M_MT; --j; p++) \r
++        *p = p[M_MT-N_MT] ^ TWIST(p[0], p[1]);\r
++\r
++    *p = p[M_MT-N_MT] ^ TWIST(p[0], state[0]);\r
++}\r
++\r
++/* generates a random number on [0,0xffffffff]-interval */\r
++unsigned long genrand_int32(void)\r
++{\r
++    unsigned long y;\r
++\r
++    if (--left == 0) next_state();\r
++    y = *next++;\r
++\r
++    /* Tempering */\r
++    y ^= (y >> 11);\r
++    y ^= (y << 7) & 0x9d2c5680UL;\r
++    y ^= (y << 15) & 0xefc60000UL;\r
++    y ^= (y >> 18);\r
++\r
++    return y;\r
++}\r
++\r
++#endif        // RAND_MT\r
+ /*rnd.c*/\r
+diff -urN orig/src/rumors.c RND_MT/src/rumors.c\r
+--- orig/src/rumors.c  Thu Apr 29 19:59:36 2004\r
++++ RND_MT/src/rumors.c        Fri Jul 23 23:52:20 2004\r
+@@ -114,11 +114,19 @@\r
+               switch (adjtruth = truth + rn2(2)) {\r
+                 case  2:      /*(might let a bogus input arg sneak thru)*/\r
+                 case  1:  beginning = true_rumor_start;\r
++#ifdef RAND_MT\r
++                          tidbit = rn2(true_rumor_size);\r
++#else\r
+                           tidbit = Rand() % true_rumor_size;\r
++#endif\r
+                       break;\r
+                 case  0:      /* once here, 0 => false rather than "either"*/\r
+                 case -1:  beginning = false_rumor_start;\r
++#ifdef RAND_MT\r
++                          tidbit = rn2(false_rumor_size);\r
++#else\r
+                           tidbit = Rand() % false_rumor_size;\r
++#endif\r
+                       break;\r
+                 default:\r
+                           impossible("strange truth value for rumor");\r