MCPcopy Create free account
hub / github.com/DFHack/dfhack / generateName

Method generateName

library/modules/Translation.cpp:281–694  ·  view source on GitHub ↗

void generatename(namest &name,int32_t language_index,short nametype,word_selectorst &major_selector,word_selectorst &minor_selector)

Source from the content-addressed store, hash-verified

279
280// void generatename(namest &name,int32_t language_index,short nametype,word_selectorst &major_selector,word_selectorst &minor_selector)
281void Translation::generateName(df::language_name *name, int language_index, df::language_name_type nametype, df::language_word_table *major_selector, df::language_word_table *minor_selector)
282{
283 CHECK_NULL_POINTER(name);
284 CHECK_NULL_POINTER(major_selector);
285 CHECK_NULL_POINTER(minor_selector);
286 if (!rng_inited)
287 {
288 rng.init();
289 rng_inited = true;
290 }
291 for (int i = 0; i < 100; i++)
292 {
293 if ((nametype != language_name_type::LegendaryFigure) && (nametype != language_name_type::FigureNoFirst))
294 {
295 *name = df::language_name();
296 if (language_index == -1)
297 language_index = rng.df_trandom(world->raws.language.translations.size());
298 name->type = nametype;
299 name->language = language_index;
300 }
301 name->has_name = 1;
302 if (name->language == -1)
303 name->language = rng.df_trandom(world->raws.language.translations.size());
304
305 int r; // persistent random number for various cases
306 switch (nametype)
307 {
308 case language_name_type::Figure:
309 case language_name_type::FigureNoFirst:
310 case language_name_type::FigureFirstOnly:
311 case language_name_type::TrueName:
312 if (nametype != language_name_type::FigureNoFirst)
313 {
314 name->first_name = "";
315 int32_t index;
316 df::part_of_speech asp;
317 chooseWord(major_selector, index, asp, language_word_table_index::FirstName);
318 // language_handlerst::addnativesyllable(index, name->first_name, name->language)
319 if (name->language >= 0 && (size_t)name->language < world->raws.language.translations.size())
320 {
321 auto trans = world->raws.language.translations[name->language];
322 if (index >= 0 && (size_t)index < trans->words.size())
323 name->first_name.append(trans->words[index]->c_str());
324 }
325 }
326 if (nametype != language_name_type::FigureFirstOnly)
327 {
328 switch (rng.df_trandom(2))
329 {
330 case 0:
331 chooseWord(major_selector, name->words[language_name_component::FrontCompound], name->parts_of_speech[language_name_component::FrontCompound], language_word_table_index::FrontCompound);
332 chooseWord(minor_selector, name->words[language_name_component::RearCompound], name->parts_of_speech[language_name_component::RearCompound], language_word_table_index::RearCompound);
333 break;
334 case 1:
335 chooseWord(minor_selector, name->words[language_name_component::FrontCompound], name->parts_of_speech[language_name_component::FrontCompound], language_word_table_index::FrontCompound);
336 chooseWord(major_selector, name->words[language_name_component::RearCompound], name->parts_of_speech[language_name_component::RearCompound], language_word_table_index::RearCompound);
337 break;
338 }

Callers

nothing calls this directly

Calls 7

chooseWordFunction · 0.85
c_strMethod · 0.80
lengthMethod · 0.80
language_nameClass · 0.50
initMethod · 0.45
df_trandomMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected