Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Tales of MajEyal
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Otowa Kotori
Tales of MajEyal
Commits
d044ee3e
Commit
d044ee3e
authored
15 years ago
by
dg
Browse files
Options
Downloads
Patches
Plain Diff
zones
git-svn-id:
http://svn.net-core.org/repos/t-engine4@14
51575b47-30f0-44d4-a5cc-537603b46e54
parent
5eb93829
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
game/modules/tome/load.lua
+3
-1
3 additions, 1 deletion
game/modules/tome/load.lua
src/SFMT.c
+40
-18
40 additions, 18 deletions
src/SFMT.c
src/SFMT.h
+13
-12
13 additions, 12 deletions
src/SFMT.h
src/core_lua.c
+61
-0
61 additions, 0 deletions
src/core_lua.c
src/main.c
+6
-1
6 additions, 1 deletion
src/main.c
with
123 additions
and
32 deletions
game/modules/tome/load.lua
+
3
−
1
View file @
d044ee3e
local
Game
=
require
"
tome
.class.Game"
local
Game
=
require
"
mod
.class.Game"
-- Global
local
game
=
Game
.
new
()
game
:
setCurrent
()
return
game
This diff is collapsed.
Click to expand it.
src/SFMT.c
+
40
−
18
View file @
d044ee3e
/**
/**
* @file SFMT.c
* @brief SIMD oriented Fast Mersenne Twister(SFMT)
*
...
...
@@ -35,7 +35,7 @@ typedef struct W128_T w128_t;
/*--------------------------------------
FILE GLOBAL VARIABLES
internal state, index counter and flag
internal state, index counter and flag
--------------------------------------*/
/** the 128-bit internal state array */
static
w128_t
sfmt
[
N
];
...
...
@@ -75,7 +75,7 @@ inline static void swap(w128_t array[], int size);
#endif
/**
* This function simulate a 64-bit index of LITTLE ENDIAN
* This function simulate a 64-bit index of LITTLE ENDIAN
* in BIG ENDIAN machine.
*/
#ifdef ONLY64
...
...
@@ -182,13 +182,13 @@ inline static void do_recursion(w128_t *r, w128_t *a, w128_t *b, w128_t *c,
lshift128
(
&
x
,
a
,
SL2
);
rshift128
(
&
y
,
c
,
SR2
);
r
->
u
[
0
]
=
a
->
u
[
0
]
^
x
.
u
[
0
]
^
((
b
->
u
[
0
]
>>
SR1
)
&
MSK2
)
^
y
.
u
[
0
]
r
->
u
[
0
]
=
a
->
u
[
0
]
^
x
.
u
[
0
]
^
((
b
->
u
[
0
]
>>
SR1
)
&
MSK2
)
^
y
.
u
[
0
]
^
(
d
->
u
[
0
]
<<
SL1
);
r
->
u
[
1
]
=
a
->
u
[
1
]
^
x
.
u
[
1
]
^
((
b
->
u
[
1
]
>>
SR1
)
&
MSK1
)
^
y
.
u
[
1
]
r
->
u
[
1
]
=
a
->
u
[
1
]
^
x
.
u
[
1
]
^
((
b
->
u
[
1
]
>>
SR1
)
&
MSK1
)
^
y
.
u
[
1
]
^
(
d
->
u
[
1
]
<<
SL1
);
r
->
u
[
2
]
=
a
->
u
[
2
]
^
x
.
u
[
2
]
^
((
b
->
u
[
2
]
>>
SR1
)
&
MSK4
)
^
y
.
u
[
2
]
r
->
u
[
2
]
=
a
->
u
[
2
]
^
x
.
u
[
2
]
^
((
b
->
u
[
2
]
>>
SR1
)
&
MSK4
)
^
y
.
u
[
2
]
^
(
d
->
u
[
2
]
<<
SL1
);
r
->
u
[
3
]
=
a
->
u
[
3
]
^
x
.
u
[
3
]
^
((
b
->
u
[
3
]
>>
SR1
)
&
MSK3
)
^
y
.
u
[
3
]
r
->
u
[
3
]
=
a
->
u
[
3
]
^
x
.
u
[
3
]
^
((
b
->
u
[
3
]
>>
SR1
)
&
MSK3
)
^
y
.
u
[
3
]
^
(
d
->
u
[
3
]
<<
SL1
);
}
#else
...
...
@@ -199,13 +199,13 @@ inline static void do_recursion(w128_t *r, w128_t *a, w128_t *b, w128_t *c,
lshift128
(
&
x
,
a
,
SL2
);
rshift128
(
&
y
,
c
,
SR2
);
r
->
u
[
0
]
=
a
->
u
[
0
]
^
x
.
u
[
0
]
^
((
b
->
u
[
0
]
>>
SR1
)
&
MSK1
)
^
y
.
u
[
0
]
r
->
u
[
0
]
=
a
->
u
[
0
]
^
x
.
u
[
0
]
^
((
b
->
u
[
0
]
>>
SR1
)
&
MSK1
)
^
y
.
u
[
0
]
^
(
d
->
u
[
0
]
<<
SL1
);
r
->
u
[
1
]
=
a
->
u
[
1
]
^
x
.
u
[
1
]
^
((
b
->
u
[
1
]
>>
SR1
)
&
MSK2
)
^
y
.
u
[
1
]
r
->
u
[
1
]
=
a
->
u
[
1
]
^
x
.
u
[
1
]
^
((
b
->
u
[
1
]
>>
SR1
)
&
MSK2
)
^
y
.
u
[
1
]
^
(
d
->
u
[
1
]
<<
SL1
);
r
->
u
[
2
]
=
a
->
u
[
2
]
^
x
.
u
[
2
]
^
((
b
->
u
[
2
]
>>
SR1
)
&
MSK3
)
^
y
.
u
[
2
]
r
->
u
[
2
]
=
a
->
u
[
2
]
^
x
.
u
[
2
]
^
((
b
->
u
[
2
]
>>
SR1
)
&
MSK3
)
^
y
.
u
[
2
]
^
(
d
->
u
[
2
]
<<
SL1
);
r
->
u
[
3
]
=
a
->
u
[
3
]
^
x
.
u
[
3
]
^
((
b
->
u
[
3
]
>>
SR1
)
&
MSK4
)
^
y
.
u
[
3
]
r
->
u
[
3
]
=
a
->
u
[
3
]
^
x
.
u
[
3
]
^
((
b
->
u
[
3
]
>>
SR1
)
&
MSK4
)
^
y
.
u
[
3
]
^
(
d
->
u
[
3
]
<<
SL1
);
}
#endif
...
...
@@ -237,7 +237,7 @@ inline static void gen_rand_all(void) {
* This function fills the user-specified array with pseudorandom
* integers.
*
* @param array an 128-bit array to be filled by pseudorandom numbers.
* @param array an 128-bit array to be filled by pseudorandom numbers.
* @param size number of 128-bit pseudorandom numbers to be generated.
*/
inline
static
void
gen_rand_array
(
w128_t
array
[],
int
size
)
{
...
...
@@ -392,7 +392,7 @@ inline uint32_t gen_rand32(void) {
* This function generates and returns 64-bit pseudorandom number.
* init_gen_rand or init_by_array must be called before this function.
* The function gen_rand64 should not be called after gen_rand32,
* unless an initialization is again executed.
* unless an initialization is again executed.
* @return 64-bit pseudorandom number
*/
inline
uint64_t
gen_rand64
(
void
)
{
...
...
@@ -508,7 +508,7 @@ void init_gen_rand(uint32_t seed) {
psfmt32
[
idxof
(
0
)]
=
seed
;
for
(
i
=
1
;
i
<
N32
;
i
++
)
{
psfmt32
[
idxof
(
i
)]
=
1812433253UL
*
(
psfmt32
[
idxof
(
i
-
1
)]
psfmt32
[
idxof
(
i
)]
=
1812433253UL
*
(
psfmt32
[
idxof
(
i
-
1
)]
^
(
psfmt32
[
idxof
(
i
-
1
)]
>>
30
))
+
i
;
}
...
...
@@ -547,7 +547,7 @@ void init_by_array(uint32_t init_key[], int key_length) {
}
else
{
count
=
N32
;
}
r
=
func1
(
psfmt32
[
idxof
(
0
)]
^
psfmt32
[
idxof
(
mid
)]
r
=
func1
(
psfmt32
[
idxof
(
0
)]
^
psfmt32
[
idxof
(
mid
)]
^
psfmt32
[
idxof
(
N32
-
1
)]);
psfmt32
[
idxof
(
mid
)]
+=
r
;
r
+=
key_length
;
...
...
@@ -556,7 +556,7 @@ void init_by_array(uint32_t init_key[], int key_length) {
i
=
1
;
count
--
;
for
(
i
=
1
,
j
=
0
;
(
j
<
count
)
&&
(
j
<
key_length
);
j
++
)
{
r
=
func1
(
psfmt32
[
idxof
(
i
)]
^
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
r
=
func1
(
psfmt32
[
idxof
(
i
)]
^
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
^
psfmt32
[
idxof
((
i
+
N32
-
1
)
%
N32
)]);
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
+=
r
;
r
+=
init_key
[
j
]
+
i
;
...
...
@@ -565,7 +565,7 @@ void init_by_array(uint32_t init_key[], int key_length) {
i
=
(
i
+
1
)
%
N32
;
}
for
(;
j
<
count
;
j
++
)
{
r
=
func1
(
psfmt32
[
idxof
(
i
)]
^
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
r
=
func1
(
psfmt32
[
idxof
(
i
)]
^
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
^
psfmt32
[
idxof
((
i
+
N32
-
1
)
%
N32
)]);
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
+=
r
;
r
+=
i
;
...
...
@@ -574,7 +574,7 @@ void init_by_array(uint32_t init_key[], int key_length) {
i
=
(
i
+
1
)
%
N32
;
}
for
(
j
=
0
;
j
<
N32
;
j
++
)
{
r
=
func2
(
psfmt32
[
idxof
(
i
)]
+
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
r
=
func2
(
psfmt32
[
idxof
(
i
)]
+
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
+
psfmt32
[
idxof
((
i
+
N32
-
1
)
%
N32
)]);
psfmt32
[
idxof
((
i
+
mid
)
%
N32
)]
^=
r
;
r
-=
i
;
...
...
@@ -587,3 +587,25 @@ void init_by_array(uint32_t init_key[], int key_length) {
period_certification
();
initialized
=
1
;
}
uint32_t
rand_div
(
uint32_t
m
)
{
uint32_t
r
,
n
;
/* Hack -- simple case */
if
(
m
<=
1
)
return
(
0
);
uint32_t
used
=
m
;
used
|=
used
>>
1
;
used
|=
used
>>
2
;
used
|=
used
>>
4
;
used
|=
used
>>
8
;
used
|=
used
>>
16
;
// Draw numbers until one is found in [0,n]
do
r
=
gen_rand32
()
&
used
;
// toss unused bits to shorten search
while
(
r
>=
m
);
/* Use the value */
return
(
r
);
}
This diff is collapsed.
Click to expand it.
src/SFMT.h
+
13
−
12
View file @
d044ee3e
/**
* @file SFMT.h
/**
* @file SFMT.h
*
* @brief SIMD oriented Fast Mersenne Twister(SFMT) pseudorandom
* number generator
...
...
@@ -18,7 +18,7 @@
* and you have to define PRIu64 and PRIx64 in this file as follows:
* @verbatim
typedef unsigned int uint32_t
typedef unsigned long long uint64_t
typedef unsigned long long uint64_t
#define PRIu64 "llu"
#define PRIx64 "llx"
@endverbatim
...
...
@@ -65,13 +65,14 @@ void init_by_array(uint32_t init_key[], int key_length);
char
*
get_idstring
(
void
);
int
get_min_array_size32
(
void
);
int
get_min_array_size64
(
void
);
uint32_t
rand_div
(
uint32_t
m
);
/* These real versions are due to Isaku Wada */
/** generates a random number on [0,1]-real-interval */
inline
static
double
to_real1
(
uint32_t
v
)
{
return
v
*
(
1
.
0
/
4294967295
.
0
);
/* divided by 2^32-1 */
return
v
*
(
1
.
0
/
4294967295
.
0
);
/* divided by 2^32-1 */
}
/** generates a random number on [0,1]-real-interval */
...
...
@@ -83,7 +84,7 @@ inline static double genrand_real1(void)
/** generates a random number on [0,1)-real-interval */
inline
static
double
to_real2
(
uint32_t
v
)
{
return
v
*
(
1
.
0
/
4294967296
.
0
);
return
v
*
(
1
.
0
/
4294967296
.
0
);
/* divided by 2^32 */
}
...
...
@@ -96,7 +97,7 @@ inline static double genrand_real2(void)
/** generates a random number on (0,1)-real-interval */
inline
static
double
to_real3
(
uint32_t
v
)
{
return
(((
double
)
v
)
+
0
.
5
)
*
(
1
.
0
/
4294967296
.
0
);
return
(((
double
)
v
)
+
0
.
5
)
*
(
1
.
0
/
4294967296
.
0
);
/* divided by 2^32 */
}
...
...
@@ -108,14 +109,14 @@ inline static double genrand_real3(void)
/** These real versions are due to Isaku Wada */
/** generates a random number on [0,1) with 53-bit resolution*/
inline
static
double
to_res53
(
uint64_t
v
)
{
inline
static
double
to_res53
(
uint64_t
v
)
{
return
v
*
(
1
.
0
/
18446744073709551616
.
0L
);
}
/** generates a random number on [0,1) with 53-bit resolution*/
inline
static
double
genrand_res53
(
void
)
{
inline
static
double
genrand_res53
(
void
)
{
return
to_res53
(
gen_rand64
());
}
}
#endif
This diff is collapsed.
Click to expand it.
src/core_lua.c
+
61
−
0
View file @
d044ee3e
...
...
@@ -6,6 +6,7 @@
#include
"types.h"
#include
"script.h"
#include
"display.h"
#include
"SFMT.h"
#include
"sge.h"
#include
<SDL_ttf.h>
...
...
@@ -393,6 +394,65 @@ static const struct luaL_reg sdl_font_reg[] =
{
NULL
,
NULL
},
};
/******************************************************************
******************************************************************
* RNG *
******************************************************************
******************************************************************/
static
int
rng_dice
(
lua_State
*
L
)
{
int
x
=
luaL_checknumber
(
L
,
1
);
int
y
=
luaL_checknumber
(
L
,
2
);
int
i
,
res
=
0
;
for
(
i
=
0
;
i
<
x
;
i
++
)
res
+=
1
+
rand_div
(
y
);
lua_pushnumber
(
L
,
res
);
return
1
;
}
static
int
rng_range
(
lua_State
*
L
)
{
int
x
=
luaL_checknumber
(
L
,
1
);
int
y
=
luaL_checknumber
(
L
,
2
);
lua_pushnumber
(
L
,
x
+
rand_div
(
1
+
y
-
x
));
return
1
;
}
static
int
rng_call
(
lua_State
*
L
)
{
int
x
=
luaL_checknumber
(
L
,
1
);
lua_pushnumber
(
L
,
rand_div
(
x
));
return
1
;
}
static
int
rng_seed
(
lua_State
*
L
)
{
int
seed
=
luaL_checknumber
(
L
,
1
);
if
(
seed
>=
0
)
init_gen_rand
(
seed
);
else
init_gen_rand
(
time
(
NULL
));
return
0
;
}
static
int
rng_chance
(
lua_State
*
L
)
{
int
x
=
luaL_checknumber
(
L
,
1
);
lua_pushboolean
(
L
,
rand_div
(
x
)
==
0
);
return
1
;
}
static
const
struct
luaL_reg
rnglib
[]
=
{
{
"__call"
,
rng_call
},
{
"range"
,
rng_range
},
{
"dice"
,
rng_dice
},
{
"seed"
,
rng_seed
},
{
"chance"
,
rng_chance
},
{
NULL
,
NULL
},
};
int
luaopen_core
(
lua_State
*
L
)
{
auxiliar_newclass
(
L
,
"fov{core}"
,
fov_reg
);
...
...
@@ -403,5 +463,6 @@ int luaopen_core(lua_State *L)
luaL_openlib
(
L
,
"core.mouse"
,
mouselib
,
0
);
luaL_openlib
(
L
,
"core.key"
,
keylib
,
0
);
luaL_openlib
(
L
,
"core.game"
,
gamelib
,
0
);
luaL_openlib
(
L
,
"rng"
,
rnglib
,
0
);
return
1
;
}
This diff is collapsed.
Click to expand it.
src/main.c
+
6
−
1
View file @
d044ee3e
...
...
@@ -7,6 +7,7 @@
#include
"lauxlib.h"
#include
"lualib.h"
#include
"fov/fov.h"
#include
"SFMT.h"
#include
"sge.h"
#include
"types.h"
...
...
@@ -121,10 +122,14 @@ static int docall (lua_State *L, int narg, int clear) {
*/
int
run
(
int
argc
,
char
*
argv
[])
{
// RNG init
init_gen_rand
(
time
(
NULL
));
/***************** Physfs Init *****************/
PHYSFS_init
(
argv
[
0
]);
PHYSFS_mount
(
"game/"
,
"/"
,
1
);
PHYSFS_mount
(
"game/modules/tome"
,
"/tome"
,
1
);
PHYSFS_mount
(
"game/modules/tome"
,
"/mod"
,
1
);
PHYSFS_mount
(
"game/modules/tome/data"
,
"/data"
,
1
);
/***************** Lua Init *****************/
L
=
lua_open
();
/* create state */
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
Next
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment