summaryrefslogtreecommitdiff
path: root/src/map/map.c
diff options
context:
space:
mode:
authorgepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-17 18:06:34 +0000
committergepard1984 <gepard1984@54d463be-8e91-2dee-dedb-b68131a5f0ec>2012-01-17 18:06:34 +0000
commit95548cb1caad95933e2b36df9a13af070b733b04 (patch)
treeb9ce67cc8b45c6956528e5bb2935900b6d8ad441 /src/map/map.c
parenta09cc2371ac0a2534f514a35a5637614c11f6a37 (diff)
downloadhercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.gz
hercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.bz2
hercules-95548cb1caad95933e2b36df9a13af070b733b04.tar.xz
hercules-95548cb1caad95933e2b36df9a13af070b733b04.zip
Enabled Mersenne Twister MT19937 as random number generator instead of standard `rand()` function (follow-up to r14865, r14870).
- It fixes issues caused by RAND_MAX being only 32k in Windows system (bugreport:1927, bugreport:86). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15483 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/map.c')
-rw-r--r--src/map/map.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/map/map.c b/src/map/map.c
index c433857ec..fee813241 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -10,6 +10,7 @@
#include "../common/showmsg.h"
#include "../common/version.h"
#include "../common/nullpo.h"
+#include "../common/random.h"
#include "../common/strlib.h"
#include "../common/utils.h"
@@ -1270,7 +1271,7 @@ int map_searchrandfreecell(int m,int *x,int *y,int stack)
}
if(free_cell==0)
return 0;
- free_cell = rand()%free_cell;
+ free_cell = rnd()%free_cell;
*x = free_cells[free_cell][0];
*y = free_cells[free_cell][1];
return 1;
@@ -1331,8 +1332,8 @@ int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx
}
while(tries--) {
- *x = (rx >= 0)?(rand()%rx2-rx+bx):(rand()%(map[m].xs-2)+1);
- *y = (ry >= 0)?(rand()%ry2-ry+by):(rand()%(map[m].ys-2)+1);
+ *x = (rx >= 0)?(rnd()%rx2-rx+bx):(rnd()%(map[m].xs-2)+1);
+ *y = (ry >= 0)?(rnd()%ry2-ry+by):(rnd()%(map[m].ys-2)+1);
if (*x == bx && *y == by)
continue; //Avoid picking the same target tile.
@@ -1373,7 +1374,7 @@ int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int fir
if(!map_searchrandfreecell(m,&x,&y,flags&2?1:0))
return 0;
- r=rand();
+ r=rnd();
CREATE(fitem, struct flooritem_data, 1);
fitem->bl.type=BL_ITEM;
@@ -2310,8 +2311,8 @@ int map_random_dir(struct block_list *bl, short *x, short *y)
if (dist < 1) dist =1;
do {
- j = 1 + 2*(rand()%4); //Pick a random diagonal direction
- segment = 1+(rand()%dist); //Pick a random interval from the whole vector in that direction
+ j = 1 + 2*(rnd()%4); //Pick a random diagonal direction
+ segment = 1+(rnd()%dist); //Pick a random interval from the whole vector in that direction
xi = bl->x + segment*dirx[j];
segment = (short)sqrt((float)(dist2 - segment*segment)); //The complement of the previously picked segment
yi = bl->y + segment*diry[j];
@@ -3628,7 +3629,7 @@ int do_init(int argc, char *argv[])
MSG_CONF_NAME = "conf/msg_athena.conf";
GRF_PATH_FILENAME = "conf/grf-files.txt";
- srand(gettick());
+ rnd_init();
for( i = 1; i < argc ; i++ )
{