Skip to content

Commit

Permalink
Merge pull request #661 from spixi/name_and_map_generator
Browse files Browse the repository at this point in the history
Improvements in the name and map generators
  • Loading branch information
CelticMinstrel committed Jul 18, 2016
2 parents 36eeed4 + ab504f4 commit 7286ea8
Show file tree
Hide file tree
Showing 18 changed files with 467 additions and 317 deletions.
5 changes: 4 additions & 1 deletion changelog
Expand Up @@ -196,7 +196,7 @@ Version 1.13.4+dev:
and [deprecated_message] tags now use this.
* New wesnoth.name_generator function builds a name generator and returns
it as a callable userdata. Both the original Markov chain generator
and the new context free gramamr generator are supported
and the new context free grammar generator are supported
* Fix wesnoth.erase_unit failing if the unit was on a recall list.
* WML tables defined in Lua now accept string keys with array values
(where "array" is a table whose keys are all integers). This joins
Expand Down Expand Up @@ -331,6 +331,9 @@ Version 1.13.4+dev:
passing to tomap() - this also means key-value pairs are now
serializable (relevant in FormulaAI)
* sgn(), trunc() and frac() functions for decimal numbers
* Map generator engine:
* makes now use of the new context free grammar name generator
* ported name generation from english.cfg to [naming]
* Bugfixes:
* Dice operator is now synced (where possible)
* Modulus (%) operator now works on decimal numbers
Expand Down
4 changes: 2 additions & 2 deletions data/core/macros/names.cfg
Expand Up @@ -248,8 +248,8 @@ suffix=men|drum|tor|num|lad|de|ak|lol|dum|tam|nur|dium|deum|bil|rook|relm|dium|n
#enddef

#define VILLAGE_NAMES
male_names= _ "Bal,Cam,Corn,Del,Earl,El,Fox,Fren,Gel,Hel,Hex,Hol,Hox,Il,Kin,Nam,Nes,New,Ol,Old,Olf,Oul,Ox,Rock,Rook,Sal,Sam,Sed,Sel,Sen,Sil,Tal,Water,Wet,York"
name_generator= _ <<
base_names= _ "Bal,Cam,Corn,Del,Earl,El,Fox,Fren,Gel,Hel,Hex,Hol,Hox,Il,Kin,Nam,Nes,New,Ol,Old,Olf,Oul,Ox,Rock,Rook,Sal,Sam,Sed,Sel,Sen,Sil,Tal,Water,Wet,York"
base_name_generator= _ <<
main={prefix}{middle}{suffix}
prefix=B|C|D|E|F|Fr|Wat|G|H|K|N|O|R|S|T|W|Y|Ro
middle=a|e|o|u|i
Expand Down
45 changes: 25 additions & 20 deletions data/english.cfg
Expand Up @@ -19,26 +19,6 @@ Night: +25% Damage"
Day: −25% Damage
Night: −25% Damage"

#naming of terrain features
bridge_name= _ "$name|’s Bridge,$name|’s Crossing"
road_name= _ "$name|’s Highway,$name|’s Pass,Path of $name"
river_name= _ "$name River,River $name"
forest_name= _ "$name Forest,$name|’s Forest"
lake_name= _ "$name Lake"
mountain_name= _ "$name|’s Peak,Mount $name"
swamp_name= _ "$name|’s Swamp,$name|marsh,$name|fen"
village_name= _ "$name|bury,$name|ham,$name|ton,$name|bury"
village_name_lake= _ "$name|harbor,$name|port,$lake|port,$lake|harbor"
village_name_river= _ "$name|ham,$name|ford,$name|cross,$river|ford,$river|cross,$name on river"
village_name_river_bridge= _ "$river|bridge,$river|bridge,$river|bridge,$name|ham,$name|bridge,$bridge|ham,$bridge|ton"
village_name_grassland= _ "$name|ham,$name|ton,$name|field"
village_name_forest= _ "$name|ham,$name|ton,$name|wood,$name Forest,$forest|wood,$forest|ham,$forest|ton"
village_name_hill= _ "$name|ham,$name|bury,$name|ton,$name|hill,$name|crest"
village_name_mountain= _ "$mountain|mont,$mountain|cliff,$mountain|bury,$mountain|ham"
village_name_mountain_anonymous= _ "$name|ham,$name|bury,$name|ton,$name|mont,$name|mont,$name|cliff,$name|cliff"
village_name_road= _ "$road|’s Rest,$road|’s Waypoint,$road|bury,$road|ham,$name|bury,$name|ham"
village_name_swamp= _ "$name|bury,$name|ham,$name|ton,$swamp|bury,$swamp|ham,$swamp|ton,"

#ranges
range_melee= _ "melee"
range_ranged= _ "ranged"
Expand All @@ -51,3 +31,28 @@ Night: −25% Damage"
type_cold= _ "cold"
type_arcane= _ "arcane"
[/language]

#default naming of terrain features
[naming]
bridge_name_generator= _ << main=$base{!}’s Bridge|$base{!}’s Crossing >>
road_name_generator= _ << main=$base{!}’s Highway|$base{!}’s Pass|Path of $base >>
river_name_generator= _ << main=$base River|River $base >>
forest_name_generator= _ << main=$base Forest|$base{!}’s Forest >>
lake_name_generator= _ << main=$base{!} Lake >>
mountain_name_generator= _ << main=$base{!}’s Peak|Mount $base >>
swamp_name_generator= _ << main=$base{!}’s Swamp|base{!}marsh|$base{!}fen >>
[/naming]

[village_naming]
name_generator= _ << main = $base{!}bury|$base{!}ham|$base{!}ton|$base{!}bury >>
lake_name_generator= _ << main=$base{!}harbor|$base{!}port|$lake{!}port|$lake{!}harbor >>
river_name_generator= _ << main=$base{!}ham|$base{!}ford|$base{!}cross|$river{!}ford|$river{!}cross|$base on $river >>
bridge_name_generator= _ << main=$river{!}bridge|$river{!}bridge|$river{!}bridge|$base{!}ham|$base{!}bridge|$bridge{!}ham|$bridge{!}ton >>
grassland_name_generator= _ << main=$base{!}ham|$base{!}ton|$base{!}field >>
forest_name_generator= _ << main=$base{!}ham|$base{!}ton|$base{!}wood|$base Forest|$forest{!}wood|$forest{!}ham|$forest{!}ton >>
hill_name_generator= _ << main=$base{!}ham|$base{!}bury|$base{!}ton|$base{!}hill|$base{!}crest >>
mountain_name_generator= _ << main=$mountain{!}mont|$mountain{!}cliff|$mountain{!}bury|$mountain{!}ham >>
mountain_anon_name_generator= _ << "main=$base{!}ham|$base{!}bury|$base{!}ton|$base{!}mont|$base{!}mont|$base{!}cliff|$base{!}cliff >>
road_name_generator= _ << main=$road{!}’s Rest|$road{!}’s Waypoint|$road{!}bury|$road{!}ham|$base{!}bury|$base{!}ham >>
swamp_name_generator= _ << main=$base{!}bury|$base{!}ham|$base}ton|$swamp{!}bury|$swamp{!}ham|$swamp{!}ton >>
[/village_naming]
6 changes: 6 additions & 0 deletions projectfiles/Xcode/Wesnoth.xcodeproj/project.pbxproj
Expand Up @@ -109,6 +109,7 @@
9164077D1D3C37D30057C4DE /* location_palette.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 914F2F841D35253900A42440 /* location_palette.cpp */; };
9164077E1D3C37F60057C4DE /* chat_events.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 918C8A181D05F9AA009744A0 /* chat_events.cpp */; };
9164077F1D3C381B0057C4DE /* chat_command_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 918C8A161D05F9AA009744A0 /* chat_command_handler.cpp */; };
913D26771D3C9697002FF3AB /* name_generator_factory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 913D26751D3C9697002FF3AB /* name_generator_factory.cpp */; };
916718E61CADA3BF00B055A9 /* connect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5A9BCB00ECA805A002BE442 /* connect.cpp */; };
916718E71CADA3BF00B055A9 /* description.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4944F4161354FBB20027E614 /* description.cpp */; };
916718E81CADA3BF00B055A9 /* filter_options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 620091C11575C784009AA2C9 /* filter_options.cpp */; };
Expand Down Expand Up @@ -1554,6 +1555,8 @@
9130A45F1C73BB6100852782 /* select_orb_colors.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = select_orb_colors.hpp; sourceTree = "<group>"; };
914F2F841D35253900A42440 /* location_palette.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = location_palette.cpp; sourceTree = "<group>"; };
914F2F851D35253900A42440 /* location_palette.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = location_palette.hpp; sourceTree = "<group>"; };
913D26751D3C9697002FF3AB /* name_generator_factory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = name_generator_factory.cpp; sourceTree = "<group>"; };
913D26761D3C9697002FF3AB /* name_generator_factory.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = name_generator_factory.hpp; sourceTree = "<group>"; };
918056BE1CB1E4C0001A7F35 /* functional.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = functional.hpp; sourceTree = "<group>"; };
918C8A161D05F9AA009744A0 /* chat_command_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_command_handler.cpp; sourceTree = "<group>"; };
918C8A171D05F9AA009744A0 /* chat_command_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chat_command_handler.hpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3580,6 +3583,8 @@
91FBBAD91CB6D1B700470BFE /* markov_generator.cpp */,
91FBBADA1CB6D1B700470BFE /* markov_generator.hpp */,
91C55DA11CC078780040012E /* name_generator.hpp */,
913D26751D3C9697002FF3AB /* name_generator_factory.cpp */,
913D26761D3C9697002FF3AB /* name_generator_factory.hpp */,
91EF6C001C9E22E400E2A733 /* reference_counter.hpp */,
91EF6C011C9E22E400E2A733 /* sha1.cpp */,
91EF6C021C9E22E400E2A733 /* sha1.hpp */,
Expand Down Expand Up @@ -5204,6 +5209,7 @@
918C8A201D05F9AA009744A0 /* wesnothd_connection.cpp in Sources */,
918C8A231D05FDAA009744A0 /* logging.cpp in Sources */,
914F2F861D35253900A42440 /* location_palette.cpp in Sources */,
913D26771D3C9697002FF3AB /* name_generator_factory.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Expand Up @@ -959,6 +959,7 @@ set(wesnoth-main_SRC
utils/sha1.cpp
utils/context_free_grammar_generator.cpp
utils/markov_generator.cpp
utils/name_generator_factory.cpp
variable.cpp
variable_info.cpp
wesnothd_connection.cpp
Expand Down
1 change: 1 addition & 0 deletions src/SConscript
Expand Up @@ -562,6 +562,7 @@ wesnoth_sources = Split("""
utils/sha1.cpp
utils/context_free_grammar_generator.cpp
utils/markov_generator.cpp
utils/name_generator_factory.cpp
variable_info.cpp
variable.cpp
wesnothd_connection.cpp
Expand Down
15 changes: 11 additions & 4 deletions src/formula/string_utils.cpp
Expand Up @@ -27,21 +27,22 @@ static bool two_dots(char a, char b) { return a == '.' && b == '.'; }

namespace utils {

template <typename T>
class string_map_variable_set : public variable_set
{
public:
string_map_variable_set(const string_map& map) : map_(map) {}
string_map_variable_set(const std::map<std::string,T>& map) : map_(map) {}

virtual config::attribute_value get_variable_const(const std::string &key) const
{
config::attribute_value val;
const string_map::const_iterator itor = map_.find(key);
const auto itor = map_.find(key);
if (itor != map_.end())
val = itor->second;
return val;
}
private:
const string_map& map_;
const std::map<std::string,T>& map_;

};
}
Expand Down Expand Up @@ -213,7 +214,13 @@ namespace utils {

std::string interpolate_variables_into_string(const std::string &str, const string_map * const symbols)
{
string_map_variable_set set(*symbols);
auto set = string_map_variable_set<t_string>(*symbols);
return do_interpolation(str, set);
}

std::string interpolate_variables_into_string(const std::string &str, const std::map<std::string,std::string> * const symbols)
{
auto set = string_map_variable_set<std::string>(*symbols);
return do_interpolation(str, set);
}

Expand Down
1 change: 1 addition & 0 deletions src/formula/string_utils.hpp
Expand Up @@ -42,6 +42,7 @@ inline bool might_contain_variables(const std::string &str)
* is nullptr, then game event variables will be used instead.
*/
std::string interpolate_variables_into_string(const std::string &str, const string_map * const symbols);
std::string interpolate_variables_into_string(const std::string &str, const std::map<std::string,std::string> * const symbols);
std::string interpolate_variables_into_string(const std::string &str, const variable_set& variables);

/**
Expand Down

0 comments on commit 7286ea8

Please sign in to comment.