forked from github/server
race naming functions do more work than before.
This commit is contained in:
parent
514565d66b
commit
e3b0dfedc9
|
@ -323,12 +323,9 @@ void register_race_name_function(race_name_func func, const char *name) {
|
|||
register_function((pf_generic)func, name);
|
||||
}
|
||||
|
||||
char * race_namegen(const struct race *rc, const struct unit *u) {
|
||||
char * race_namegen(const struct race *rc, struct unit *u) {
|
||||
if (rc->generate_name) {
|
||||
const char * str = rc->generate_name(u);
|
||||
if (str) {
|
||||
return _strdup(str);
|
||||
}
|
||||
rc->generate_name(u);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ extern "C" {
|
|||
|
||||
extern int num_races;
|
||||
|
||||
typedef const char *(*race_name_func)(const struct unit *);
|
||||
typedef void (*race_name_func)(struct unit *);
|
||||
|
||||
typedef struct race {
|
||||
char *_name;
|
||||
|
@ -262,7 +262,7 @@ extern "C" {
|
|||
struct unit *u);
|
||||
const char *dbrace(const struct race *rc);
|
||||
void register_race_name_function(race_name_func, const char *);
|
||||
char * race_namegen(const struct race *rc, const struct unit *u);
|
||||
char * race_namegen(const struct race *rc, struct unit *u);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
50
src/names.c
50
src/names.c
|
@ -86,15 +86,14 @@ static const char *make_names(const char *monster, int *num_postfix,
|
|||
if (*num_name > 0) {
|
||||
static char name[NAMESIZE + 1]; // FIXME: static return value
|
||||
char zText[32];
|
||||
int uv, uu, un;
|
||||
int uv = 0, uu = 0, un = 0;
|
||||
const char *str;
|
||||
|
||||
/* nur 50% aller Namen haben "Vor-Teil" */
|
||||
uv = rng_int() % (*num_prefix * pprefix);
|
||||
|
||||
if (*num_prefix > 0) {
|
||||
uv = rng_int() % (*num_prefix * pprefix);
|
||||
}
|
||||
uu = rng_int() % *num_name;
|
||||
|
||||
/* nur 50% aller Namen haben "Nach-Teil", wenn kein Vor-Teil */
|
||||
if (*num_postfix > 0 && uv >= *num_prefix) {
|
||||
un = rng_int() % *num_postfix;
|
||||
}
|
||||
|
@ -130,28 +129,32 @@ static const char *make_names(const char *monster, int *num_postfix,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static const char *undead_name(const unit * u)
|
||||
static void undead_name(unit * u)
|
||||
{
|
||||
static int num_postfix, num_name, num_prefix;
|
||||
return make_names("undead", &num_postfix, 2, &num_name, &num_prefix, 2);
|
||||
const char *str = make_names("undead", &num_postfix, 2, &num_name, &num_prefix, 2);
|
||||
unit_setname(u, str);
|
||||
}
|
||||
|
||||
static const char *skeleton_name(const unit * u)
|
||||
static void skeleton_name(unit * u)
|
||||
{
|
||||
static int num_postfix, num_name, num_prefix;
|
||||
return make_names("skeleton", &num_postfix, 5, &num_name, &num_prefix, 2);
|
||||
const char *str = make_names("skeleton", &num_postfix, 5, &num_name, &num_prefix, 2);
|
||||
unit_setname(u, str);
|
||||
}
|
||||
|
||||
static const char *zombie_name(const unit * u)
|
||||
static void zombie_name(unit * u)
|
||||
{
|
||||
static int num_postfix, num_name, num_prefix;
|
||||
return make_names("zombie", &num_postfix, 5, &num_name, &num_prefix, 2);
|
||||
const char *str = make_names("zombie", &num_postfix, 5, &num_name, &num_prefix, 2);
|
||||
unit_setname(u, str);
|
||||
}
|
||||
|
||||
static const char *ghoul_name(const unit * u)
|
||||
static void ghoul_name(unit * u)
|
||||
{
|
||||
static int num_postfix, num_name, num_prefix;
|
||||
return make_names("ghoul", &num_postfix, 5, &num_name, &num_prefix, 4);
|
||||
const char *str = make_names("ghoul", &num_postfix, 5, &num_name, &num_prefix, 4);
|
||||
unit_setname(u, str);
|
||||
}
|
||||
|
||||
/* Drachen */
|
||||
|
@ -219,15 +222,18 @@ const char *silbe3[SIL3] = {
|
|||
"bus",
|
||||
};
|
||||
|
||||
static const char *generic_name(const unit * u)
|
||||
static void generic_name(unit * u)
|
||||
{
|
||||
const char * name = rc_name_s(u_race(u), (u->number == 1) ? NAME_SINGULAR : NAME_PLURAL);
|
||||
return LOC(u->faction->locale, name);
|
||||
name = LOC(u->faction->locale, name);
|
||||
if (name) {
|
||||
unit_setname(u, name);
|
||||
}
|
||||
}
|
||||
|
||||
static const char *dragon_name(const unit * u)
|
||||
static void dragon_name(unit * u)
|
||||
{
|
||||
static char name[NAMESIZE + 1]; // FIXME: static return value
|
||||
char name[NAMESIZE + 1];
|
||||
int rnd, ter = 0;
|
||||
int anzahl = 1;
|
||||
static int num_postfix;
|
||||
|
@ -268,7 +274,7 @@ static const char *dragon_name(const unit * u)
|
|||
}
|
||||
|
||||
if (num_postfix <=0) {
|
||||
return NULL;
|
||||
return;
|
||||
}
|
||||
else if (num_postfix < 6) {
|
||||
rnd = rng_int() % num_postfix;
|
||||
|
@ -311,7 +317,7 @@ static const char *dragon_name(const unit * u)
|
|||
}
|
||||
}
|
||||
|
||||
return name;
|
||||
unit_setname(u, name);
|
||||
}
|
||||
|
||||
/* Dracoide */
|
||||
|
@ -363,7 +369,7 @@ static const char *drac_suf[DRAC_SUF] = {
|
|||
"k"
|
||||
};
|
||||
|
||||
static const char *dracoid_name(const unit * u)
|
||||
static void dracoid_name(unit * u)
|
||||
{
|
||||
static char name[NAMESIZE + 1]; // FIXME: static return value
|
||||
int mid_syllabels;
|
||||
|
@ -383,7 +389,7 @@ static const char *dracoid_name(const unit * u)
|
|||
sz += strlcat(name, drac_mid[rng_int() % DRAC_MID], sizeof(name));
|
||||
}
|
||||
sz += strlcat(name, drac_suf[rng_int() % DRAC_SUF], sizeof(name));
|
||||
return name;
|
||||
unit_setname(u, name);
|
||||
}
|
||||
|
||||
/** returns an abbreviation of a string.
|
||||
|
@ -487,7 +493,7 @@ void register_names(void)
|
|||
register_race_name_function(skeleton_name, "nameskeleton");
|
||||
register_race_name_function(zombie_name, "namezombie");
|
||||
register_race_name_function(ghoul_name, "nameghoul");
|
||||
register_race_name_function(dragon_name, "namedragon");
|
||||
register_race_name_function(dracoid_name, "namedracoid");
|
||||
register_race_name_function(dragon_name, "namedragon");
|
||||
register_race_name_function(generic_name, "namegeneric");
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "names.h"
|
||||
|
||||
#include <kernel/race.h>
|
||||
#include <kernel/unit.h>
|
||||
#include <util/language.h>
|
||||
#include <util/functions.h>
|
||||
|
||||
|
@ -12,14 +13,19 @@
|
|||
static void test_names(CuTest * tc)
|
||||
{
|
||||
race_name_func foo;
|
||||
unit *u;
|
||||
race *rc;
|
||||
test_cleanup();
|
||||
register_names();
|
||||
default_locale = test_create_locale();
|
||||
locale_setstring(default_locale, "undead_prefix_0", "Kleine");
|
||||
u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0));
|
||||
rc = test_create_race("undead");
|
||||
locale_setstring(default_locale, "undead_name_0", "Graue");
|
||||
locale_setstring(default_locale, "undead_postfix_0", "Kobolde");
|
||||
CuAssertPtrNotNull(tc, foo = (race_name_func)get_function("nameundead"));
|
||||
CuAssertStrEquals(tc, "Kleine Graue Kobolde", foo(NULL));
|
||||
rc->generate_name = foo;
|
||||
race_namegen(rc, u);
|
||||
CuAssertStrEquals(tc, "Graue Kobolde", u->_name);
|
||||
CuAssertPtrNotNull(tc, get_function("nameskeleton"));
|
||||
CuAssertPtrNotNull(tc, get_function("namezombie"));
|
||||
CuAssertPtrNotNull(tc, get_function("nameghoul"));
|
||||
|
|
Loading…
Reference in New Issue