diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2013-02-12 20:18:58 -0800 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2013-02-12 21:09:59 -0800 |
commit | b17b9021ecf9b16c265d0a6b60faa761b34eae35 (patch) | |
tree | e8192de5b2458864f0f5ce5edd0e1ccf5605c644 /src/map/magic-expr.cpp | |
parent | 80e36aa669274637bcd5956fbf4020dba1d4739c (diff) | |
download | tmwa-b17b9021ecf9b16c265d0a6b60faa761b34eae35.tar.gz tmwa-b17b9021ecf9b16c265d0a6b60faa761b34eae35.tar.bz2 tmwa-b17b9021ecf9b16c265d0a6b60faa761b34eae35.tar.xz tmwa-b17b9021ecf9b16c265d0a6b60faa761b34eae35.zip |
Replace mt_rand with <random>
Also add some utility methods and classes.
Diffstat (limited to 'src/map/magic-expr.cpp')
-rw-r--r-- | src/map/magic-expr.cpp | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/src/map/magic-expr.cpp b/src/map/magic-expr.cpp index 65dafe4..ea853a1 100644 --- a/src/map/magic-expr.cpp +++ b/src/map/magic-expr.cpp @@ -5,7 +5,7 @@ #include <cmath> #include "../common/cxxstdio.hpp" -#include "../common/mt_rand.hpp" +#include "../common/random.hpp" #include "battle.hpp" #include "npc.hpp" @@ -709,7 +709,7 @@ int fun_random(env_t *, int, val_t *result, val_t *args) RESULTINT = 0; return 0; } - RESULTINT = MRAND(delta); + RESULTINT = random_::to(delta); if (ARGINT(0) < 0) RESULTINT = -RESULTINT; @@ -720,9 +720,9 @@ static int fun_random_dir(env_t *, int, val_t *result, val_t *args) { if (ARGINT(0)) - RESULTDIR = DIR(MRAND(8)); + RESULTDIR = random_::choice({DIR::S, DIR::SW, DIR::W, DIR::NW, DIR::N, DIR::NE, DIR::E, DIR::SE}); else - RESULTDIR = DIR(MRAND(4) * 2); + RESULTDIR = random_::choice({DIR::S, DIR::W, DIR::N, DIR::E}); return 0; } @@ -945,8 +945,7 @@ void magic_random_location(location_t *dest, area_t *area) { case AREA::UNION: { - int rv = MRAND(area->size); - if (rv < area->a.a_union[0]->size) + if (random_::chance({area->a.a_union[0]->size, area->size})) magic_random_location(dest, area->a.a_union[0]); else magic_random_location(dest, area->a.a_union[1]); @@ -966,39 +965,13 @@ void magic_random_location(location_t *dest, area_t *area) if (h <= 1) h = 1; - x += MRAND(w); - y += MRAND(h); - - if (!map_is_solid(m, x, y)) - { - int start_x = x; - int start_y = y; - int i; - DIR initial_dir = DIR(MRAND(8)); - DIR dir = initial_dir; - - /* try all directions, up to a distance to 10, for a free slot */ - do - { - x = start_x; - y = start_y; - - for (i = 0; i < 10 && map_is_solid(m, x, y); i++) - { - x += dirx[dir]; - y += diry[dir]; - } - - dir = DIR((uint8_t(dir) + 1) % 8); - } - while (map_is_solid(m, x, y) && dir != initial_dir); - - } - /* We've tried our best. If the map is still solid, the engine will automatically randomise the target location if we try to warp. */ + // This is not exactly the same as the old logic, + // but it's better. + auto pair = map_randfreecell(m, x, y, w, h); dest->m = m; - dest->x = x; - dest->y = y; + dest->x = pair.first; + dest->y = pair.second; break; } |