diff --git a/Profiles.cfg b/Profiles.cfg
new file mode 100644
index 0000000..106b456
--- /dev/null
+++ b/Profiles.cfg
@@ -0,0 +1,1279 @@
+
+; EXTENDED PLAYER'S SETTINGS
+; --------------------------------------------------
+;
+;
+¦==== Parameter : PROFILES ACTIONS
+; Options : [Load, Surprise, Change, Savegui, Savegame, Saveinitial,
+; " " : Savedefault, Getgui, Getgame, Getinitial, Getdefault]
+;
+; Load = If the key "L" is pressed, this profile will change the GUI
+; Surprise = If the key "R" is pressed, this profile will change the GUI...
+; I use it to Randomize, but could be alternate load!
+; Change = If the key "X" is pressed in Load Menu, the loaded Game will be
+; changed
+; Savegui = When a Game is started or if the key "U" is pressed, this
+; profile will save the GUI settings
+; Savegame = When a Game is started, this profile will save the Game
+; settings
+; Saveinitial = When a Game is started or if the key "U" is pressed, this
+; profile will save the initial settings
+; Savedefault = When a Game is started or if the key "U" is pressed, this
+; profile will save the default settings
+; Getgui = When a Game is started or if the key "U" is pressed, non empty
+; parameters of this profile will save the GUI settings
+; Getgame = When a Game is started, non empty parameters of this profile
+; will save the Game settings
+; Getinitial = When a Game is started or if the key "U" is pressed, non empty
+; parameters of this profile will save the initial settings
+; Getdefault = When a Game is started or if the key "U" is pressed, non empty
+; parameters of this profile will save the default settings
+;
+
+Continuation : SaveGui Load ; To retrieve the last session configuration. ..
+ ; Press "L" to load this profile
+MyConfig : Load ; Adjust this manually, with your preferences
+ChangeGame : Change ; This profile change Game When Loaded by ..
+ ; pressing "X", add SaveGui to be able to update ..
+ ; this profile from the GUI
+FullRandom : Surprise ; All parameter preset to random! Load by ..
+ ; pressing "R", add or replace by Load to also ..
+ ; allow it to be loaded with "L"
+MyRandom : Surprise ; For your customized random! Load by pressing ..
+ ; "R", add or replace by Load to also allow it to ..
+ ; be loaded with "L"
+Vanilla : SaveDefault ; remove the settings you don't want vanilla, ..
+ ; replace SaveDefault by GetDefault and Load to ..
+ ; keep some vanilla configuration
+LastWord· : Load Surprise ; For the parameters you never want to be ..
+ ; changed. Keep at the end of the list. The "·" ..
+ ; prevent it to be mistakenly changed
+; (---- The last loaded Win)
+
+;
+; --------- Races Game Options ---------
+;
+
+¦==== Parameter : PLAYER RACE
+; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,
+; " " : Darlok, Sakkra, Bulrathi]
+¦ History : Current: Human ¦ Last: Human ¦ Initial: Human
+¦ History : Default: Human ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Human
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random ; Full random
+Vanilla : Human
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : PLAYER COLOR
+; Options : [Red, Green, Yellow, Blue, Orange, Purple, Aqua, Fuchsia,
+; " " : Brown, White, Lime, Grey, Plum, Light Blue, Mint, Olive]
+¦ History : Current: Blue ¦ Last: Blue ¦ Initial: Blue ¦ Default: Red
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Blue
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random Green, Lime ; 2 values = a range from option list
+Vanilla : Red
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : PLAYER HOMEWORLD
+;
+; The best would be to let the game choose this value!
+;
+¦ History : Current: Gaia ¦ Last: ¦ Initial: Gaia ¦ Default: Gaia
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Gaia
+MyConfig :
+ChangeGame :
+FullRandom : Random
+MyRandom :
+Vanilla : Gaia
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : PLAYER NAME
+;
+; The best would be to let the game choose this value!
+;
+¦ History : Current: Horace ¦ Last: ¦ Initial: Horace ¦ Default: Horace
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Horace
+MyConfig :
+ChangeGame :
+FullRandom : Random
+MyRandom :
+Vanilla : Horace
+LastWord :
+; ---- Available for changes in game saves
+
+;
+; ------------- Galaxy Options -------------
+;
+
+¦==== Parameter : GALAXY SHAPE
+; Options : [Rectangle, Ellipse, Spiral, Text, Cluster, Swirlclusters,
+; " " : Grid, Spiralarms, Maze, Shuriken, Bullseye, Lorenz, Fractal]
+¦ History : Current: Rectangle ¦ Last: Rectangle ¦ Initial: Rectangle
+¦ History : Default: Rectangle ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Rectangle
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random Rectangle, Ellipse, Spiral, Spiralarms ; a limited ..
+ ; choice
+Vanilla : Rectangle
+LastWord :
+
+
+¦==== Parameter : GALAXY SIZE
+; Options : [Tiny, Small, Small2, Average, Average2, Large, Large2, Huge,
+; " " : Huge2, Massive, Massive2, Massive3, Massive4, Massive5,
+; " " : Insane, Ludicrous, Maximum]
+¦ History : Current: Small ¦ Last: Small ¦ Initial: Small
+¦ History : Default: Small ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Small
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : ; Nothing changed by this profile
+Vanilla : Small
+LastWord :
+
+
+¦==== Parameter : SHAPE RECTANGLE OPTION 1
+; Options : [Rectangle_0, Rectangle_1]
+¦ History : Current: Rectangle_0 ¦ Last: Rectangle_0
+¦ History : Initial: Rectangle_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Rectangle_0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE RECTANGLE OPTION 2
+; Options : [Void_0, Void_1, Void_2, Void_5]
+¦ History : Current: Void_0 ¦ Last: Void_0 ¦ Initial: Void_0 ¦ Default:
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Void_0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE ELLIPTICAL OPTION 1
+; Options : [Ellipse_0, Ellipse_1, Ellipse_2, Ellipse_3, Ellipse_4]
+¦ History : Current: ¦ Last: ¦ Initial: Ellipse_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE ELLIPTICAL OPTION 2
+; Options : [Void_0, Void_1, Void_2, Void_3, Void_4]
+¦ History : Current: ¦ Last: ¦ Initial: Void_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE SPIRAL OPTION 1
+; Options : [2_Arms, 3_Arms, 4_Arms, 5_Arms, 6_Arms, 7_Arms, 8_Arms]
+¦ History : Current: ¦ Last: ¦ Initial: 2_Arms ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE SPIRAL OPTION 2
+; Options : [Rotation_0, Rotation_1, Rotation_2, Rotation_3, Rotation_4,
+; " " : Rotation_5, Rotation_6]
+¦ History : Current: ¦ Last: ¦ Initial: Rotation_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE TEXT OPTION 1
+; Options : [Text_0, Text_1, Text_2]
+¦ History : Current: ¦ Last: ¦ Initial: Text_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE TEXT OPTION 2
+; Options : [1_Line, 2_Line, 3_Line]
+¦ History : Current: ¦ Last: ¦ Initial: 1_Line ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE LORENZ OPTION 1
+; Options : [Lorenz_0, Lorenz_1]
+¦ History : Current: ¦ Last: ¦ Initial: Lorenz_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE LORENZ OPTION 2
+; Options : [View_0, View_1, View_2]
+¦ History : Current: ¦ Last: ¦ Initial: View_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE FRACTAL OPTION 1
+; Options : [Fractal_0, Fractal_1]
+¦ History : Current: ¦ Last: ¦ Initial: Fractal_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE FRACTAL OPTION 2
+; Options : [Option_A, Option_B, Option_C]
+¦ History : Current: ¦ Last: ¦ Initial: Option_A ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE MAZE OPTION 1
+; Options : [Maze_0, Maze_1, Maze_2]
+¦ History : Current: ¦ Last: ¦ Initial: Maze_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE SHURIKEN OPTION 1
+; Options : [Shuriken_0, Shuriken_1, Shuriken_2]
+¦ History : Current: ¦ Last: ¦ Initial: Shuriken_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE BULLSEYE OPTION 1
+; Options : [Bullseye_0, Bullseye_1, Bullseye_2]
+¦ History : Current: ¦ Last: ¦ Initial: Bullseye_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE GRID OPTION 1
+; Options : [Grid_0, Grid_1, Grid_2]
+¦ History : Current: ¦ Last: ¦ Initial: Grid_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE CLUSTER OPTION 1
+; Options : [Cluster_0, Cluster_1, Cluster_2]
+¦ History : Current: ¦ Last: ¦ Initial: Cluster_0 ¦ Default: ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE SWIRLCLUSTERS OPTION 1
+; Options : [Swirlclusters_0, Swirlclusters_1, Swirlclusters_2]
+¦ History : Current: ¦ Last: ¦ Initial: Swirlclusters_0 ¦ Default:
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : SHAPE SPIRALARMS OPTION 1
+; Options : [Spiralarms_0, Spiralarms_1, Spiralarms_2]
+¦ History : Current: ¦ Last: ¦ Initial: Spiralarms_0 ¦ Default:
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla :
+LastWord :
+
+
+¦==== Parameter : DIFFICULTY
+; Options : [Easiest, Easier, Easy, Normal, Hard, Harder, Hardest,
+; " " : Custom]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Easy ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random 1, 4 ; a range from option list
+Vanilla : Easy
+LastWord :
+
+
+¦==== Parameter : OPPONENT AI
+; Options : [Base, Xilmi, Select]
+¦ History : Current: Base ¦ Last: Base ¦ Initial: Base ¦ Default: Base
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Base
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random Base, Xilmi, Xilmi ; 2 chances to have Xilmi vs Base
+Vanilla : Base
+LastWord :
+
+
+¦==== Parameter : NB OPPONENTS
+; Options : [Min=0, Max=15, Rnd Low=1, Rnd Up=15]
+¦ History : Current: 4 ¦ Last: ¦ Initial: 4 ¦ Default: 3 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 4
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random 3, 6 ; a custom range
+Vanilla : 3
+LastWord :
+
+
+¦==== Parameter : GUI RACE FILTER
+;
+; If you don’t like to have some races as opponent, or if your planetary
+; distribution affect a race too much, you are able to remove them form the
+; pool of selectable opponents.
+; Only the opponents on the list will be shown when you click on the selection
+; rectangle.
+; The race list must be written using "/" as separator.
+; !!! Don’t break the lines !!! even if they become very long... There is no
+; multi-line analysis.
+;
+; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,
+; " " : Darlok, Sakkra, Bulrathi]
+¦ History : Current: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Last:
+¦ History : Initial: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Default: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+LastWord :
+
+
+¦==== Parameter : GAME RACE FILTER
+;
+; If you don’t like to have some races as opponent, or if your planetary
+; distribution affect a race too much, you are able to remove them form the
+; pool of selectable opponents.
+; Only the opponents on the list will be used by the random generator when
+; starting a new game.
+; The race list must be written using "/" as separator.
+; !!! Don’t break the lines !!! even if they become very long... There is no
+; multi-line analysis.
+;
+; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,
+; " " : Darlok, Sakkra, Bulrathi]
+¦ History : Current: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Last:
+¦ History : Initial: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Default: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+LastWord :
+
+
+¦==== Parameter : GUI PRESET OPPONENT
+;
+; To fill the opponent list or suggest random opponents from a list.
+; If option is empty, the opponent is not changed.
+; If the option is "null" the result is an empty rectangle.
+; If the option is "random" the opponent will be selected from the full race
+; list.
+; If the option is "GUI" the opponent will be selected from the GUI RACE FILTER
+; list.
+; If the option is "GAME" the opponent will be selected from the GAME RACE
+; FILTER list.
+; If the option is "random race_1, race_2, race_N" the opponent will be
+; selected from the given list.
+; If the list is shorter than the number of opponents and the last option is
+; random: this last option will be applied to the remaining opponents.
+; Otherwise the remaining opponents aren’t changed.
+; The race list must be written using "/" as separator.
+; !!! Don’t break the lines !!! even if they become very long... There is no
+; multi-line analysis.
+;
+; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,
+; " " : Darlok, Sakkra, Bulrathi, Null, Gui, Game]
+¦ History : Current: Base/Base/Base/Base ¦ Last:
+¦ History : Initial: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Default: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+LastWord :
+
+
+¦==== Parameter : START PRESET OPPONENT
+;
+; To replace the random opponent generation when starting a new game.
+; If option is empty or null, the opponent will be randomly selected.
+; If the option is "random" the opponent will be selected from the full race
+; list.
+; If the option is "GUI" the opponent will be selected from the GUI RACE FILTER
+; list.
+; If the option is "GAME" the opponent will be selected from the GAME RACE
+; FILTER list.
+; If the option is "random race_1, race_2, race_N" the opponent will be
+; selected from the given list.
+; If the list is shorter than the number of opponents, this last option will be
+; applied to the remaining opponents.When the maximum number of a type of
+; opponent (5) is reached, it’ll be removed from the list of allowed opponents.
+; When this list is empty, sorry, a forbidden race will be chosen.
+; The race list must be written using "/" as separator.
+; !!! Don’t break the lines !!! even if they become very long... There is no
+; multi-line analysis.
+;
+; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,
+; " " : Darlok, Sakkra, Bulrathi, Null, Gui, Game]
+¦ History : Current: Base/Base/Base/Base ¦ Last:
+¦ History : Initial: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Default: Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation :
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : ..
+ ; Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi
+LastWord :
+
+;
+; ----------- Advanced Game Options -----------
+;
+
+¦==== Parameter : GALAXY AGE
+; Options : [Young, Normal, Old]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random Young, Young, Old, Old ; Only 2 choices... Not a range
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : STAR DENSITY
+; Options : [Lowest, Lower, Low, Normal, High, Higher, Highest]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : NEBULAE
+; Options : [None, Rare, Uncommon, Normal, Common, Frequent]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random 1, 4 ; Range = Rare .. Common (first option = 0)
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : PLANET QUALITY
+; Options : [Normal, Larger, Richer]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : TERRAFORMING
+; Options : [Normal, Reduced, None]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : RANDOM EVENTS
+; Options : [On, Monsters, Off]
+¦ History : Current: Monsters ¦ Last: Monsters ¦ Initial: Monsters
+¦ History : Default: On ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Monsters
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : On
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : AI HOSTILITY
+; Options : [Lowest, Lower, Low, Normal, High, Higher, Highest]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : random 0, 3
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : COUNCIL
+; Options : [Immediate, Rebels, None]
+¦ History : Current: Rebels ¦ Last: Rebels ¦ Initial: Rebels
+¦ History : Default: Rebels ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Rebels
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Rebels
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : RANDOMIZE AI
+; Options : [None, Personality, Ability, Both]
+¦ History : Current: None ¦ Last: None ¦ Initial: None ¦ Default: None
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : None
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : None
+LastWord :
+
+
+¦==== Parameter : AUTOPLAY
+; Options : [Off, Base, Xilmi]
+¦ History : Current: Off ¦ Last: Off ¦ Initial: Off ¦ Default: Off
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Off
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Off
+LastWord : Off ; Only activated thru GUI
+
+
+¦==== Parameter : RESEARCH
+; Options : [Normal, Slow, Slower, Slowest, Fast]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : WARP SPEED
+; Options : [Normal, Fast]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : FUEL RANGE
+; Options : [Normal]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+
+
+¦==== Parameter : TECH TRADING
+; Options : [Yes, Allies, No]
+¦ History : Current: Yes ¦ Last: Yes ¦ Initial: Yes ¦ Default: Yes
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Yes
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Yes
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : COLONIZING
+; Options : [Normal, Restricted]
+¦ History : Current: Normal ¦ Last: Normal ¦ Initial: Normal
+¦ History : Default: Normal ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : Normal
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : Normal
+LastWord :
+; ---- Available for changes in game saves
+
+;
+; ------------- Modnar's Options -------------
+;
+
+¦==== Parameter : ALWAYS STAR GATES
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom : YES ; Not Random!
+Vanilla : NO
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : ALWAYS THORIUM
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+; ---- Available for changes in game saves
+
+
+¦==== Parameter : CHALLENGE MODE
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+
+
+¦==== Parameter : BATTLE SCOUT
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+
+
+¦==== Parameter : COMPANION WORLDS
+; Options : [Min=0, Max=4, Rnd Low=0, Rnd Up=4]
+¦ History : Current: 0 ¦ Last: ¦ Initial: 0 ¦ Default: 0 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 0
+LastWord :
+
+
+¦==== Parameter : RANDOM TECH START
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+
+
+¦==== Parameter : CUSTOM DIFFICULTY
+; Options : [Min=20, Max=500, Rnd Low=20, Rnd Up=500]
+¦ History : Current: 100 ¦ Last: ¦ Initial: 100 ¦ Default: 100 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 100
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 100
+LastWord :
+; ---- Follow the GUI, not stored in game
+
+
+¦==== Parameter : DYNAMIC DIFFICULTY
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+; ---- Follow the GUI, not stored in game
+
+
+¦==== Parameter : MISSILE SIZE MODIFIER
+; Options : [Min=0.1, Max=1.0, Rnd Low=0.1, Rnd Up=1.0]
+¦ History : Current: 0.6666667 ¦ Last: ¦ Initial: 0.6666667
+¦ History : Default: 0.66 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 0.6666667
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 0.66
+LastWord :
+; ---- Follow the GUI, not stored in game
+
+;
+; ------------- Governor Options -------------
+;
+;
+
+¦==== Parameter : GOVERNOR ON BY DEFAULT
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: YES ¦ Last: ¦ Initial: YES ¦ Default: YES ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : YES
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : YES
+LastWord :
+
+
+¦==== Parameter : AUTOSPEND ON BY DEFAULT
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+
+
+¦==== Parameter : DEFAULT MAX BASES
+; Options : [Min=0, Max=0, Rnd Low=0, Rnd Up=0]
+¦ History : Current: 0 ¦ Last: ¦ Initial: 0 ¦ Default: 0 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 0
+LastWord :
+
+
+¦==== Parameter : DIVERT EXCESS TO RESEARCH
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: YES ¦ Last: ¦ Initial: YES ¦ Default: YES ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : YES
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : YES
+LastWord :
+
+;
+; ------------- Broken Registry Options -------------
+;
+
+¦==== Parameter : FLAG COLOR ORDER
+;
+; This setting will change scrolling order of the star flags in the galaxy map
+; List lenght may be shortened. by removing some colors
+; If you remove the "None" one, it will still be available on reset
+;
+; Options : [None, White, Red, Blue, Green, Yellow, Aqua, Orange, Light
+; " " : Blue, Purple, Pink]
+¦ History : Current: NONE/WHITE/RED/BLUE/GREEN/YELLOW/AQUA/ORANGE/LIGHT BLUE/PURPLE/PINK
+¦ History : Last:
+¦ History : Initial: NONE/WHITE/RED/BLUE/GREEN/YELLOW/AQUA/ORANGE/LIGHT BLUE/PURPLE/PINK
+¦ History : Default: NONE/WHITE/RED/BLUE/GREEN/YELLOW/AQUA/ORANGE/LIGHT BLUE/PURPLE/PINK
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NONE/WHITE/RED/BLUE/GREEN/YELLOW/AQUA/ORANGE/LIGHT ..
+ ; BLUE/PURPLE/PINK
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NONE/WHITE/RED/BLUE/GREEN/YELLOW/AQUA/ORANGE/LIGHT ..
+ ; BLUE/PURPLE/PINK
+LastWord :
+; ---- Follow the GUI, not stored in game
+
+
+¦==== Parameter : MAXIMIZE EMPIRES SPACING
+;
+; I don’t like being squeezed in a corned in big map with few opponents...
+; With this option activated, the space between every empire will be maximized.
+;
+; Options : [YES, NO, TRUE, FALSE]
+¦ History : Current: NO ¦ Last: ¦ Initial: NO ¦ Default: NO ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : NO
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : NO
+LastWord :
+
+
+¦==== Parameter : PREF STARS PER EMPIRE
+;
+; Preferred number of stars around every empires. This parameter will affect
+; the default selected number of opponents, also depend on the size of the
+; galaxy.
+; This parameter will be disabled as soon as a number of opponents is chosen.
+;
+; Options : [Min=0, Max=1000000, Rnd Low=16, Rnd Up=24]
+¦ History : Current: 16 ¦ Last: ¦ Initial: 16 ¦ Default: 16 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 16
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 16
+LastWord :
+
+
+¦==== Parameter : MIN STARS PER EMPIRE
+;
+; Minimum number of stars around every empires.
+; This parameter will affect the maximum number of allowed opponents, also
+; depend on the size of the galaxy.
+;
+; Options : [Min=0, Max=1000000, Rnd Low=4, Rnd Up=16]
+¦ History : Current: 8 ¦ Last: ¦ Initial: 8 ¦ Default: 8 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 8
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 8
+LastWord :
+
+
+¦==== Parameter : STAR TYPE PROBABILITY
+; Options : [Red, Orange, Yellow, Blue, White, Purple]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0 ¦ Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0 ¦ Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY GLOBAL
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY RED
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY ORANGE
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY YELLOW
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY BLUE
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY WHITE
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
+
+¦==== Parameter : PLANET TYPE PROBABILITY PURPLE
+; Options : [None, Radiated, Toxic, Inferno, Dead, Tundra, Barren,
+; " " : Minimal, Desert, Steppe, Arid, Ocean, Jungle, Terran]
+¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Last:
+¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+¦ History : Game:
+¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]
+
+Continuation : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+MyConfig :
+ChangeGame :
+FullRandom : random
+MyRandom :
+Vanilla : 1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0/1.0
+LastWord :
+
diff --git a/README.md b/README.md
index 16f4333..6ba097c 100644
--- a/README.md
+++ b/README.md
@@ -19,8 +19,12 @@ Download build: https://rayfowler.itch.io/remnants-of-the-precursors
## What'New
+2026.07.05
+ - Added secondary options for Galaxy shapes.
+ - Added possibility to hide parameters in Profiles.cfg
+
2026.07.01
- - Junit test integration
+ - Junit test integration to github
- Pom file normalization
- Minor bugs solved
diff --git a/pom.xml b/pom.xml
index 2c98fa7..e96dfe8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.rayfowler
rotp
- 2022.07.01
+ 2022.07.05
jar
diff --git a/src/br/profileManager/src/main/java/AbstractGroup.java b/src/br/profileManager/src/main/java/AbstractGroup.java
index 39d21c8..5457aca 100644
--- a/src/br/profileManager/src/main/java/AbstractGroup.java
+++ b/src/br/profileManager/src/main/java/AbstractGroup.java
@@ -30,13 +30,19 @@ public abstract class AbstractGroup extends WriteUtil {
LinkedHashMap>
parameterNameMap = new LinkedHashMap>();
-
+ private String headerComment= "";
// ========================================================================
// Constructor
//
protected AbstractGroup(C clientObject) {
initSettingList(clientObject);
}
+ protected AbstractGroup(C clientObject, String comment) {
+ initSettingList(clientObject);
+ if (comment != null) {
+ headerComment = comment;
+ }
+ }
// ========================================================================
// Abstract Methods
//
@@ -102,7 +108,7 @@ public List profileList() {
* @return parameters group as String, ready to be printed
*/
public String toString(List profileList, boolean cleanProfiles) {
- String out = "";
+ String out = toComment(headerComment) + NL + emptyCommentLines(1);
for (AbstractParameter, ?, C>
parameter : parameterNameMap.values() ) {
if (cleanProfiles) {
diff --git a/src/br/profileManager/src/main/java/AbstractParameter.java b/src/br/profileManager/src/main/java/AbstractParameter.java
index 90ced32..e4137fb 100644
--- a/src/br/profileManager/src/main/java/AbstractParameter.java
+++ b/src/br/profileManager/src/main/java/AbstractParameter.java
@@ -36,6 +36,8 @@ public abstract class AbstractParameter<
private static String historyHead = lineFormat("¦ History", "");
private static String historyKey = "¦ History";
private static String parameterKey = "¦==== Parameter";
+ private static String hiddenKey = "HIDE";
+ private static String hideSeparator = "-";
private static String historyElementsSeparator = " ¦ ";
private static String historyNameValueSeparator = ": ";
private static String availableForChange = "---- Available for changes in game saves";
@@ -70,11 +72,13 @@ void resetUserProfiles() {
}
public static void newConfig(PMconfig PM) {
- optionsHead = lineFormat(toComment(PM.getConfig("optionsKey")), "");
- optionsSubHead = lineFormat(toComment(PM.getConfig("optionsSubKey")), "");
- historyHead = lineFormat(PM.getConfig("historyKey"), "");
- historyKey = PM.getConfig("historyKey");
- parameterKey = PM.getConfig("parameterKey");
+ optionsHead = lineFormat(toComment(PM.getConfig("optionsKey")), "");
+ optionsSubHead = lineFormat(toComment(PM.getConfig("optionsSubKey")), "");
+ historyHead = lineFormat(PM.getConfig("historyKey"), "");
+ historyKey = PM.getConfig("historyKey");
+ parameterKey = PM.getConfig("parameterKey");
+ hiddenKey = PM.getConfig("hiddenKey");
+ hideSeparator = PM.getConfig("hideSeparator");
historyElementsSeparator = PM.getConfig("historyElementsSeparator");
historyNameValueSeparator = PM.getConfig("historyNameValueSeparator");
availableForChange = PM.getConfig("availableForChange");
@@ -133,6 +137,18 @@ private AbstractT getWinningCodeView (List profileNames) {
return value;
}
+ boolean isHidden() {
+ return localEnable.isHidden();
+ }
+ void setHidden() {
+ localEnable.setHidden();
+ }
+ void unHide() {
+ localEnable.unHide();
+ }
+ void setLocalEnable(String value) {
+ localEnable.setValue(value);
+ }
/**
* Search for the winning code View and
* Override the Game File parameter with it
@@ -463,6 +479,13 @@ void forceCreationMissingProfile(List profileList) {
public String toString(List groupCodeViews) {
String out = NL;
+ if(isHidden()) {
+ // SETTING NAME
+ out += lineFormat(parameterKey
+ , parameterName + " " + hideSeparator + hiddenKey)
+ .toString() + NL;
+ return out;
+ }
// HEAD COMMENTS
out += multiLines(headComments
, " ", commentPrt(), commentPrt(), "", true);
@@ -476,8 +499,10 @@ public String toString(List groupCodeViews) {
, " ", commentPrt(), commentPrt(), "", true);
// OPTIONS LIST
- out += multiLines(validation.getOptionsRange()
- , " " ,optionsHead, optionsSubHead, "", true);
+ if (validation.getCriteria().showOptions()) {
+ out += multiLines(validation.getOptionsRange()
+ , " " ,optionsHead, optionsSubHead, "", true);
+ }
// OPTIONS DESCRIPTION
out += toCommentLine(validation.getOptionsDescription(), 1, 1);
diff --git a/src/br/profileManager/src/main/java/AbstractProfiles.java b/src/br/profileManager/src/main/java/AbstractProfiles.java
index 91cbc1b..9ab3190 100644
--- a/src/br/profileManager/src/main/java/AbstractProfiles.java
+++ b/src/br/profileManager/src/main/java/AbstractProfiles.java
@@ -42,8 +42,10 @@ public abstract class AbstractProfiles extends WriteUtil {
//
protected static final PMconfig PM = new PMconfig();
// Keep the initializations for Junit test
- private static String continueOnNewLine = "..";
- private static String commentKey = ";";
+ private static String breakLine = "..";
+ private static String commentKey = ";";
+ private static String hiddenKey = "HIDE";
+ private static String hideSeparator = "-";
private List defaultUserSettingKeys = new ArrayList(List.of("User", "LastWord"));
private boolean firstInit = true;
@@ -55,7 +57,8 @@ public abstract class AbstractProfiles extends WriteUtil {
private boolean cleanUserKeys = true;
private AbstractParameter, ?, C> currentParameter;
- private String currentParameterName;
+ private String currentParameterName;
+ private boolean currentParameterIsHidden = false;
private AbstractGroup currentGroup;
// ==================================================
@@ -73,8 +76,10 @@ public AbstractProfiles(String jarPath, String configFileName) {
* To be notified the config has been updated
*/
static void newConfig(PMconfig PM) {
- continueOnNewLine = PM.getConfig("continueOnNewLine");
- commentKey = PM.getConfig("commentKey");
+ breakLine = PM.getConfig("breakLine");
+ commentKey = PM.getConfig("commentKey");
+ hiddenKey = PM.getConfig("hiddenKey").toUpperCase();
+ hideSeparator = PM.getConfig("hideSeparator");
}
// ========================================================================
// Abstract Methods
@@ -351,7 +356,7 @@ private void loadProfilesCfg() {
String line;
while ((line = in.readLine()) != null) {
line = line.trim();
- while (line.endsWith(continueOnNewLine)) {
+ while (line.endsWith(breakLine)) {
line = mergeLines(line, in.readLine());
}
processLine(line.trim());
@@ -405,11 +410,22 @@ private void processLine(String line) {
}
// Test for New Setting Section
if (AbstractParameter.isHeadOfParameter(key) ) {
- currentParameterName = Lines.getValueAsString(line).toUpperCase();
+ String local = Valid_LocalEnable.DEFAULT_VALUE;
+ currentParameterIsHidden = false;
+ String[] elements = Lines.getValueAsString(line)
+ .toUpperCase().split(hideSeparator, 2);
+ currentParameterName = elements[0].strip();
+ if (elements.length == 2) {
+ local = elements[1].strip();
+ if (local.equalsIgnoreCase(hiddenKey)) {
+ currentParameterIsHidden = true;
+ }
+ }
// Test if initial profile list declaration
if (parameterProfileAction.getParameterName()
.equalsIgnoreCase(currentParameterName)) {
currentParameter = parameterProfileAction;
+ currentParameterIsHidden = false; // big problem if hidden!
currentGroup = null;
return;
}
@@ -417,12 +433,14 @@ private void processLine(String line) {
currentParameter = null;
if (currentGroup != null) {
currentParameter = currentGroup.getParameter(currentParameterName);
+ currentParameter.setLocalEnable(local);
return;
}
return;
}
// it's a setting Line
- if (currentParameter != null) {
+ if (currentParameter != null
+ && !currentParameterIsHidden) {
currentParameter.addLine(line);
}
}
diff --git a/src/br/profileManager/src/main/java/Lines.java b/src/br/profileManager/src/main/java/Lines.java
index fdb262e..6bf2124 100644
--- a/src/br/profileManager/src/main/java/Lines.java
+++ b/src/br/profileManager/src/main/java/Lines.java
@@ -105,7 +105,7 @@ private Lines() {} // Forbidden constructor
static void newConfig(PMconfig PM) {
keyValueSeparator = PM.getConfig("keyValueSeparator");
keyValueSeparatorPrt = keyValueSeparator + PM.getConfig("valueSpacer");
- profilesBreakLines = " " + PM.getConfig("continueOnNewLine");
+ profilesBreakLines = " " + PM.getConfig("breakLine");
baseKeyFormat = "%-" + PM.getConfig("lineSplitPosition") + "s";
keyFormat = baseKeyFormat + keyValueSeparatorPrt;
keyValueFormat = "%-" + PM.getConfig("commentEndPosition") + "s";
diff --git a/src/br/profileManager/src/main/java/PMconfig.java b/src/br/profileManager/src/main/java/PMconfig.java
index 0eb3c5b..e2174ae 100644
--- a/src/br/profileManager/src/main/java/PMconfig.java
+++ b/src/br/profileManager/src/main/java/PMconfig.java
@@ -48,7 +48,7 @@ interface NewConfig {
PMconfig() {
config.put("commentKey", ";");
config.put("commentSpacer", " ");
- config.put("continueOnNewLine", "..");
+ config.put("breakLine", "..");
config.put("keyValueSeparator", ":");
config.put("valueSpacer", " ");
config.put("separatorSymbol", "=");
@@ -62,6 +62,8 @@ interface NewConfig {
config.put("clogId", "·");
config.put("randomId", "RANDOM");
config.put("parameterKey", "¦==== Parameter");
+ config.put("hiddenKey", "Hide");
+ config.put("hideSeparator", "-");
config.put("historyKey", "¦ History");
config.put("optionsKey", "Options");
config.put("--------------------", "----------");
diff --git a/src/br/profileManager/src/main/java/PMutil.java b/src/br/profileManager/src/main/java/PMutil.java
index 1da9068..13dcf42 100644
--- a/src/br/profileManager/src/main/java/PMutil.java
+++ b/src/br/profileManager/src/main/java/PMutil.java
@@ -265,7 +265,6 @@ static String addLinebreaks(String input, String splitter,
}
return String.join(System.lineSeparator(), lines);
}
-
/**
* Remove first Space if one.
* Originally done to restore original comment
@@ -286,7 +285,6 @@ static String removeFirstSpace (String string) {
}
return string;
}
-
/**
* Remove last Space if one. Never null.
* @param string the {@code String} to process
@@ -301,7 +299,6 @@ static String removeLastSpace (String string) {
}
return string;
}
-
/**
* Get the last char of the {@code String}
* @param string the {@code String} to process
@@ -313,7 +310,6 @@ static String getLastChar(String string) {
}
return string.substring(string.length() - 1);
}
-
/**
* Convert {@code objects} to {@code String}
* null {@code objects} are replaced by Empty {@code String}
@@ -326,7 +322,6 @@ static String neverNull(Object obj) {
}
return obj.toString();
}
-
/**
* Convert {@code objects} to {@code String} and strip them.
* null {@code objects} are replaced by Empty {@code String}
@@ -339,7 +334,6 @@ public static String clean(Object obj) {
}
return obj.toString().strip();
}
-
/**
* Strip and convert to upper case
* @param source the {@code String} to process
@@ -348,7 +342,6 @@ public static String clean(Object obj) {
static String toKey(String source) {
return clean(source).toUpperCase();
}
-
/**
* Strip and return in lower case with first char to upper case, never null
* @param source the {@code String} to process
@@ -366,7 +359,6 @@ static String toSentence(String source) {
}
return result.strip();
}
-
/**
* Strip and return every word capitalized, never null
* @param source the {@code String} to process
@@ -384,7 +376,6 @@ public static String capitalize(String source) {
}
return result;
}
-
/**
* Strip and return every word capitalized, never null
* or only first word
@@ -400,13 +391,21 @@ static String capitalize(String source, boolean onlyFirstWord) {
return capitalize(source);
}
}
-
+ /**
+ * @param str Containing String
+ * @param target String to find
+ * @return The number of Occurrence
+ */
+ public static int countStringOccurrence(String str, String target) {
+ return (str.length() - str.replace(target, "").length()) / target.length();
+ }
/**
* Convert a {@code String} with several "_" to a more user friendly one
* @param option the {@code String} Option
+ * @param minLength the minimal length of the two las elements String
* @return the capitalized last element of the {@code String} (after "_")
*/
- static String suggestedUserViewFromCodeView (Object value) {
+ static String suggestedUserViewFromCodeView (Object value, int minLength) {
if (value == null) {
return "null";
}
@@ -414,22 +413,46 @@ static String suggestedUserViewFromCodeView (Object value) {
if (codeView == null) {
return "null";
}
- return toSentence(codeView.substring(codeView.lastIndexOf("_") + 1));
+ String[] elements = codeView.split("_", 0);
+ int last = elements.length-1;
+ if (last > 1 &&
+ (elements[last-1].length() <= minLength
+ || elements[last].length() <= minLength)) {
+ return capitalize(elements[last-1]) + "_" + capitalize(elements[last]);
+ }
+ return capitalize(elements[last]);
+ }
+ /**
+ * Convert a {@code String} with several "_" to a more user friendly one
+ * @param option the {@code String} Option
+ * @return the capitalized last element of the {@code String} (after "_")
+ */
+ static String suggestedUserViewFromCodeView (Object value) {
+ return suggestedUserViewFromCodeView (value, 1);
}
/**
* Convert a {@code String} with several "_" to a more user friendly one
* @param list the {@code List} Option
+ * @param minLength the minimal length of the two las elements String
* @return the capitalized last element of the {@code String} (after "_")
*/
- public static List suggestedUserViewFromCodeView (List> list) {
+ public static List suggestedUserViewFromCodeView (List> list, int minLength) {
List result = new ArrayList();
if (list != null) {
for (Object value : list) {
- result.add(suggestedUserViewFromCodeView(value));
+ result.add(suggestedUserViewFromCodeView(value, minLength));
}
}
return result;
}
+ /**
+ * Convert a {@code String} with several "_" to a more user friendly one
+ * @param list the {@code List} Option
+ * @return the capitalized last element of the {@code String} (after "_")
+ */
+ public static List suggestedUserViewFromCodeView (List> list) {
+ return suggestedUserViewFromCodeView (list, 1);
+ }
// ==================================================
// Math Methods
diff --git a/src/br/profileManager/src/main/java/PMutilTest.java b/src/br/profileManager/src/main/java/PMutilTest.java
index 8de6a2d..6b49ac7 100644
--- a/src/br/profileManager/src/main/java/PMutilTest.java
+++ b/src/br/profileManager/src/main/java/PMutilTest.java
@@ -288,12 +288,6 @@ void suggestedOptionToLabel_String() {
, "should have been «Source»");
assertEquals("Source", suggestedUserViewFromCodeView("VERY_OPTION_SOURCE")
, "should have been «Source»");
- assertEquals("Source", suggestedUserViewFromCodeView("OPTION__SOURCE")
- , "should have been «Source»");
- assertEquals("Source", suggestedUserViewFromCodeView("_SOURCE")
- , "should have been «Source»");
- assertEquals("Source", suggestedUserViewFromCodeView("__SOURCE")
- , "should have been «Source»");
}
// ==================================================
diff --git a/src/br/profileManager/src/main/java/Valid_LocalEnable.java b/src/br/profileManager/src/main/java/Valid_LocalEnable.java
index c584d3f..157b942 100644
--- a/src/br/profileManager/src/main/java/Valid_LocalEnable.java
+++ b/src/br/profileManager/src/main/java/Valid_LocalEnable.java
@@ -24,12 +24,14 @@
public class Valid_LocalEnable extends Validation {
// Keep the initializations for Junit test
- private static String clogId = "·";
+ private static String clogId = "·";
+ private static String hiddenKey = "HIDE";
// From Valid_ConfigAction
static final String LOAD_ENABLED = "ENABLE_LOAD_LIST";
static final String WRITE_ENABLED = "ENABLE_WRITE_LIST";
static final String GAME_ENABLED = "ENABLE_GAME_LIST";
static final String GUI_ENABLED = "ENABLE_GUI_LIST";
+ static final String HIDDEN_ENABLED = "HIDDEN_LIST";
// static final String SPECIAL_ENABLED = "SPECIAL_LIST";
// static final String LOCAL_ENABLED = "LOCAL_LIST";
@@ -37,7 +39,7 @@ public class Valid_LocalEnable extends Validation {
* Local Enable Key
*/
public static final String PARAMETER_NAME = "¦ LOCAL ENABLE";
- private static final String DEFAULT_VALUE = "ALL";
+ static final String DEFAULT_VALUE = "ALL";
Valid_LocalEnable() {
super(new T_String(DEFAULT_VALUE));
@@ -69,6 +71,9 @@ public class Valid_LocalEnable extends Validation {
addOption("LOAD",
"Allows actions that change GUI and GAMES" ,
LOAD_ENABLED + " " + GUI_ENABLED + " " + GAME_ENABLED);
+ addOption(hiddenKey,
+ "No actions are allowed in this Setting, and this Parameter won't be shown" ,
+ HIDDEN_ENABLED);
addOption(clogId,
"No actions are allowed in this Setting" ,
"");
@@ -78,7 +83,8 @@ public class Valid_LocalEnable extends Validation {
* To be notified that config has been updated
*/
static void newConfig(PMconfig PM) {
- clogId = PM.getConfig("clogId");
+ clogId = PM.getConfig("clogId");
+ hiddenKey = PM.getConfig("hiddenKey").toUpperCase();
}
// ==========================================================
// Nested Classes
@@ -130,6 +136,17 @@ boolean isWriteEnabled() {
return isValueFromCategory(WRITE_ENABLED);
}
+ boolean isHidden() {
+ return isValueFromCategory(HIDDEN_ENABLED);
+ }
+
+ void setHidden() {
+ setValue("HIDE");
+ }
+ void unHide() {
+ setValue(clogId);
+ }
+
// boolean isLocal() {
// return isValueFromCategory(LOCAL_ENABLED);
// }
diff --git a/src/br/profileManager/src/main/java/Valid_LocalEnableTest.java b/src/br/profileManager/src/main/java/Valid_LocalEnableTest.java
index f57bfb0..cc85efb 100644
--- a/src/br/profileManager/src/main/java/Valid_LocalEnableTest.java
+++ b/src/br/profileManager/src/main/java/Valid_LocalEnableTest.java
@@ -69,7 +69,7 @@ void isBlankValue_None() {
@Test
void toString_None() {
- assertEquals("¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]",
+ assertEquals("¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]",
new Line_LocalEnable().toString()
, "should have been \"¦ LOCAL ENABLE : All ; [No, All, Save, Load]\"");
}
diff --git a/src/br/profileManager/src/main/java/ValidationCriteria.java b/src/br/profileManager/src/main/java/ValidationCriteria.java
index f85e0ae..b778dd4 100644
--- a/src/br/profileManager/src/main/java/ValidationCriteria.java
+++ b/src/br/profileManager/src/main/java/ValidationCriteria.java
@@ -29,6 +29,7 @@ public class ValidationCriteria {
private boolean userViewEquals = true ;
private boolean codeViewEquals = true ;
private boolean categoryEquals = false;
+ private boolean showOptions = true;
private boolean userViewIsCaseSensitive = false;
private boolean codeViewIsCaseSensitive = false;
private boolean categoryIsCaseSensitive = false;
@@ -71,6 +72,12 @@ boolean categoryEquals() {
return categoryEquals;
}
+ /**
+ * @return true: options should be shown
+ */
+ boolean showOptions() {
+ return showOptions;
+ }
boolean userViewIsCaseSensitive() {
return userViewIsCaseSensitive;
}
@@ -147,6 +154,15 @@ public ValidationCriteria categoryEquals(boolean equals) {
return this;
}
+ /**
+ * set showOptions
+ * @param show the new value
+ * @return this for chaining purpose
+ */
+ public ValidationCriteria showOptions(boolean show) {
+ showOptions = show;
+ return this;
+ }
/**
* @param caseSensitive the new value
* @return this for chaining purpose
diff --git a/src/mod/br/AddOns/RaceFilter.java b/src/mod/br/AddOns/RaceFilter.java
index c98e4a2..f4addbc 100644
--- a/src/mod/br/AddOns/RaceFilter.java
+++ b/src/mod/br/AddOns/RaceFilter.java
@@ -30,6 +30,13 @@ public class RaceFilter {
private static List selectedGuiRaceFilter;
private static String[] startOpponentRace;
+ private static List defaultGameAIList; // = all Random
+ private static List defaultGuiAIList;
+ private static List randomAIList;
+ private static List allRandomAIList;
+ private static List selectedGameAIFilter;
+ private static List selectedGuiAIFilter;
+ private static String[] startOpponentAI;
// ========== Setters ==========
//
/**
@@ -56,6 +63,38 @@ public static void selectedGuiRaceFilter(List newRaceList) {
public static void startOpponentRace(String[] newRaceList) {
startOpponentRace = newRaceList;
}
+ /**
+ * @param newAIList the new default Game AIList to set
+ */
+ public static void defaultGameAIList(List newAIList) {
+ defaultGameAIList = newAIList;
+ allRandomAIList = newAIList.subList(0, newAIList.size()-2);
+ randomAIList = newAIList.subList(0, newAIList.size()-3);
+ }
+ /**
+ * @param newAIList the new default Gui AIList to set
+ */
+ public static void defaultGuiAIList(List newAIList) {
+ defaultGuiAIList = newAIList;
+ }
+ /**
+ * @param newAIList the AI List to set
+ */
+ public static void selectedGameAIFilter(List newAIList) {
+ selectedGameAIFilter = newAIList;
+ }
+ /**
+ * @param newAIList the AI Filter to set
+ */
+ public static void selectedGuiAIFilter(List newAIList) {
+ selectedGuiAIFilter = newAIList;
+ }
+ /**
+ * @param newAIList the Preset Opponents to set
+ */
+ public static void startOpponentAI(String[] newAIList) {
+ startOpponentAI = newAIList;
+ }
// ========== Getters ==========
//
/**
@@ -90,6 +129,56 @@ public static List selectedGuiRaceFilter() {
public static String[] startOpponentRace() {
return startOpponentRace;
}
+ /**
+ * @return the Default Game AI List
+ */
+ public static List defaultGameAIList() {
+ return defaultGameAIList;
+ }
+ /**
+ * @return the Default Gui AI List
+ */
+ public static List defaultGuiAIList() {
+ return defaultGuiAIList;
+ }
+ /**
+ * @return the random AI List
+ */
+ public static List randomAIList() {
+ return randomAIList;
+ }
+ /**
+ * @return the all random AI List
+ */
+ public static List allRandomAIList() {
+ return allRandomAIList;
+ }
+ /**
+ * @return the race List
+ */
+ public static List selectedGameAIFilter() {
+ if (selectedGameAIFilter == null
+ || selectedGameAIFilter.toString().isBlank()) {
+ return defaultGameAIList;
+ }
+ return selectedGameAIFilter;
+ }
+ /**
+ * @return the AI Filter
+ */
+ public static List selectedGuiAIFilter() {
+ if (selectedGuiAIFilter == null
+ || selectedGuiAIFilter.toString().isBlank()) {
+ return defaultGuiAIList;
+ }
+ return selectedGuiAIFilter;
+ }
+ /**
+ * @return the Preset Opponents AI
+ */
+ public static String[] startOpponentAI() {
+ return startOpponentAI;
+ }
// ========== Other Methods ==========
//
}
diff --git a/src/mod/br/profileManager/Group_Advanced.java b/src/mod/br/profileManager/Group_Advanced.java
index 2778438..08364dd 100644
--- a/src/mod/br/profileManager/Group_Advanced.java
+++ b/src/mod/br/profileManager/Group_Advanced.java
@@ -32,7 +32,13 @@
public class Group_Advanced extends AbstractGroup {
Group_Advanced(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
+ }
+
+ private static String getHeadComments() {
+ return " " + NL
+ + "----------- Advanced Game Options -----------" + NL
+ + "";
}
@Override
protected void initSettingList(ClientClasses go) {
@@ -85,12 +91,7 @@ static class GalaxyAge extends
go.options().selectedGalaxyAge(value.getCodeView());
}
- @Override public void initComments() {
- setHeadComments(
- " " + NL +
- "----------- Advanced Game Options -----------" + NL +
- " ");
- }
+ @Override public void initComments() {}
}
// ==============================================================
// STAR DENSITY
diff --git a/src/mod/br/profileManager/Group_AdvancedTest.java b/src/mod/br/profileManager/Group_AdvancedTest.java
index 90b3fbb..6ad03c7 100644
--- a/src/mod/br/profileManager/Group_AdvancedTest.java
+++ b/src/mod/br/profileManager/Group_AdvancedTest.java
@@ -16,14 +16,11 @@ class Group_AdvancedTest {
private String galaxyAgePrt =
"\r\n"
- + "; \r\n"
- + "; ----------- Advanced Game Options -----------\r\n"
- + "; \r\n"
+ "¦==== Parameter : GALAXY AGE\r\n"
+ "; Options : [Young, Normal, Old]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -36,7 +33,7 @@ class Group_AdvancedTest {
+ "; Options : [Lowest, Lower, Low, Normal, High, Higher, Highest]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -49,7 +46,7 @@ class Group_AdvancedTest {
+ "; Options : [None, Rare, Uncommon, Normal, Common, Frequent]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -62,7 +59,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal, Larger, Richer]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -75,7 +72,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal, Reduced, None]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -88,7 +85,7 @@ class Group_AdvancedTest {
+ "; Options : [On, Monsters, Off]\r\n"
+ "¦ History : Current: Monsters ¦ Last: ¦ Initial: Monsters ¦ Default: On\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -102,7 +99,7 @@ class Group_AdvancedTest {
+ "; Options : [Lowest, Lower, Low, Normal, High, Higher, Highest]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -115,7 +112,7 @@ class Group_AdvancedTest {
+ "; Options : [Immediate, Rebels, None]\r\n"
+ "¦ History : Current: Rebels ¦ Last: ¦ Initial: Rebels ¦ Default: Rebels\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -129,7 +126,7 @@ class Group_AdvancedTest {
+ "; Options : [None, Personality, Ability, Both]\r\n"
+ "¦ History : Current: None ¦ Last: ¦ Initial: None ¦ Default: None\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -141,7 +138,7 @@ class Group_AdvancedTest {
+ "¦==== Parameter : AUTOPLAY\r\n"
+ "; Options : [Off, Base, Xilmi]\r\n"
+ "¦ History : Current: Off ¦ Last: ¦ Initial: Off ¦ Default: Off ¦ Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -154,7 +151,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal, Slow, Slower, Slowest, Fast]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -167,7 +164,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal, Fast]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -180,7 +177,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -192,7 +189,7 @@ class Group_AdvancedTest {
+ "¦==== Parameter : TECH TRADING\r\n"
+ "; Options : [Yes, Allies, No]\r\n"
+ "¦ History : Current: Yes ¦ Last: ¦ Initial: Yes ¦ Default: Yes ¦ Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -206,7 +203,7 @@ class Group_AdvancedTest {
+ "; Options : [Normal, Restricted]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Normal\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -334,20 +331,6 @@ class Group_AdvancedTest {
assertEquals(shouldBe, out, "should have been equals");
}
-// @Test void Group_Advanced_ClientClasses() {
-// Group_Advanced group;
-// group = new Group_Advanced(cct);
-// String out = group.toString(List.of("Profile 1", "Random"));
-// String shouldBe = galaxyAgePrt + starDensityPrt + nebulaePrt
-// + planetQualityPrt + terraformingPrt + randomEventsPrt
-// + AIHostilityPrt + councilPrt + randomizeAIPrt
-// + autoPlayPrt + researchPrt + warpSpeedPrt
-// + fuelRangePrt + techTradingPrt + colonizingPrt
-// ;
-// assertEquals(shouldBe, out, "should have been equals");
-// // System.out.println(out);
-// }
-
@Test void profileList_None() {
Group_Advanced group;
group = new Group_Advanced(cct);
diff --git a/src/mod/br/profileManager/Group_BrokenRegistry.java b/src/mod/br/profileManager/Group_BrokenRegistry.java
index a5797aa..38fa5ba 100644
--- a/src/mod/br/profileManager/Group_BrokenRegistry.java
+++ b/src/mod/br/profileManager/Group_BrokenRegistry.java
@@ -51,7 +51,13 @@ public class Group_BrokenRegistry extends AbstractGroup {
// PMutil.suggestedUserViewFromCodeView(PLANET_TYPES);
Group_BrokenRegistry(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
+ }
+
+ private static String getHeadComments() {
+ return " " + NL
+ + "------------- Broken Registry Options -------------" + NL
+ + "";
}
@Override protected void initSettingList(ClientClasses go) {
@@ -131,9 +137,6 @@ static class FlagColorOrder extends
@Override public void initComments() {
setBottomComments(dynamicParameter());
- setHeadComments(" " + NL
- + "------------- Broken Registry Options -------------" + NL
- + " ");
setSettingComments(" " + NL
+ "This setting will change scrolling order of the star flags in the galaxy map" + NL
+ "List lenght may be shortened. by removing some colors" + NL
diff --git a/src/mod/br/profileManager/Group_BrokenRegistryTest.java b/src/mod/br/profileManager/Group_BrokenRegistryTest.java
index 292125a..6a1ded2 100644
--- a/src/mod/br/profileManager/Group_BrokenRegistryTest.java
+++ b/src/mod/br/profileManager/Group_BrokenRegistryTest.java
@@ -20,7 +20,7 @@ class Group_BrokenRegistryTest {
+ "¦ History : Current: 1.0/1.0/1.0/1.0/1.0/1.0 ¦ Last: \r\n"
+ "¦ History : Initial: 1.0/1.0/1.0/1.0/1.0/1.0\r\n"
+ "¦ History : Default: 1.0/1.0/1.0/1.0/1.0/1.0 ¦ Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
diff --git a/src/mod/br/profileManager/Group_Galaxy.java b/src/mod/br/profileManager/Group_Galaxy.java
index 2dbf1b0..7827cfd 100644
--- a/src/mod/br/profileManager/Group_Galaxy.java
+++ b/src/mod/br/profileManager/Group_Galaxy.java
@@ -19,6 +19,19 @@
import static br.profileManager.src.main.java.Validation.History.Default;
import static br.profileManager.src.main.java.Validation.History.Initial;
+import static rotp.model.game.IGameOptions.SHAPE_BULLSEYE;
+import static rotp.model.game.IGameOptions.SHAPE_CLUSTER;
+import static rotp.model.game.IGameOptions.SHAPE_ELLIPTICAL;
+import static rotp.model.game.IGameOptions.SHAPE_FRACTAL;
+import static rotp.model.game.IGameOptions.SHAPE_GRID;
+import static rotp.model.game.IGameOptions.SHAPE_LORENZ;
+import static rotp.model.game.IGameOptions.SHAPE_MAZE;
+import static rotp.model.game.IGameOptions.SHAPE_RECTANGLE;
+import static rotp.model.game.IGameOptions.SHAPE_SHURIKEN;
+import static rotp.model.game.IGameOptions.SHAPE_SPIRAL;
+import static rotp.model.game.IGameOptions.SHAPE_SPIRALARMS;
+import static rotp.model.game.IGameOptions.SHAPE_SWIRLCLUSTERS;
+import static rotp.model.game.IGameOptions.SHAPE_TEXT;
import java.util.ArrayList;
import java.util.List;
@@ -31,6 +44,19 @@
import br.profileManager.src.main.java.Validation;
import mod.br.AddOns.RaceFilter;
import rotp.model.empires.Empire;
+import rotp.model.galaxy.GalaxyBullseyeShape;
+import rotp.model.galaxy.GalaxyClusterShape;
+import rotp.model.galaxy.GalaxyEllipticalShape;
+import rotp.model.galaxy.GalaxyFractalShape;
+import rotp.model.galaxy.GalaxyGridShape;
+import rotp.model.galaxy.GalaxyLorenzShape;
+import rotp.model.galaxy.GalaxyMazeShape;
+import rotp.model.galaxy.GalaxyRectangularShape;
+import rotp.model.galaxy.GalaxyShurikenShape;
+import rotp.model.galaxy.GalaxySpiralArmsShape;
+import rotp.model.galaxy.GalaxySpiralShape;
+import rotp.model.galaxy.GalaxySwirlClustersShape;
+import rotp.model.galaxy.GalaxyTextShape;
import rotp.model.game.IGameOptions;
/**
@@ -40,12 +66,69 @@
public class Group_Galaxy extends AbstractGroup {
Group_Galaxy(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
}
- @Override
- protected void initSettingList(ClientClasses go) {
+ private static String getHeadComments() {
+ return " " + NL
+ + "------------- Galaxy Options -------------" + NL
+ + "";
+ }
+
+ @Override protected void initSettingList(ClientClasses go) {
addParameter(new GalaxyShape(go));
addParameter(new GalaxySize(go));
+ addParameter(new ShapeOption(go, "SHAPE RECTANGLE OPTION 1"
+ , SHAPE_RECTANGLE, 1, GalaxyRectangularShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE RECTANGLE OPTION 2"
+ , SHAPE_RECTANGLE, 2, GalaxyRectangularShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE ELLIPTICAL OPTION 1"
+ , SHAPE_ELLIPTICAL, 1, GalaxyEllipticalShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE ELLIPTICAL OPTION 2"
+ , SHAPE_ELLIPTICAL, 2, GalaxyEllipticalShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE SPIRAL OPTION 1"
+ , SHAPE_SPIRAL, 1, GalaxySpiralShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE SPIRAL OPTION 2"
+ , SHAPE_SPIRAL, 2, GalaxySpiralShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE TEXT OPTION 1"
+ , SHAPE_TEXT, 1, GalaxyTextShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE TEXT OPTION 2"
+ , SHAPE_TEXT, 2, GalaxyTextShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE LORENZ OPTION 1"
+ , SHAPE_LORENZ, 1, GalaxyLorenzShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE LORENZ OPTION 2"
+ , SHAPE_LORENZ, 2, GalaxyLorenzShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE FRACTAL OPTION 1"
+ , SHAPE_FRACTAL, 1, GalaxyFractalShape.options1));
+ addParameter(new ShapeOption(go, "SHAPE FRACTAL OPTION 2"
+ , SHAPE_FRACTAL, 2, GalaxyFractalShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE MAZE OPTION 1"
+ , SHAPE_MAZE, 1, GalaxyMazeShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE MAZE OPTION 2"
+// , SHAPE_MAZE, 2, GalaxyMazeShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE SHURIKEN OPTION 1"
+ , SHAPE_SHURIKEN, 1, GalaxyShurikenShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE SHURIKEN OPTION 2"
+// , SHAPE_SHURIKEN, 2, GalaxyShurikenShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE BULLSEYE OPTION 1"
+ , SHAPE_BULLSEYE, 1, GalaxyBullseyeShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE BULLSEYE OPTION 2"
+// , SHAPE_BULLSEYE, 2, GalaxyBullseyeShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE GRID OPTION 1"
+ , SHAPE_GRID, 1, GalaxyGridShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE GRID OPTION 2"
+// , SHAPE_GRID, 2, GalaxyGridShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE CLUSTER OPTION 1"
+ , SHAPE_CLUSTER, 1, GalaxyClusterShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE CLUSTER OPTION 2"
+// , SHAPE_CLUSTER, 2, GalaxyClusterShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE SWIRLCLUSTERS OPTION 1"
+ , SHAPE_SWIRLCLUSTERS, 1, GalaxySwirlClustersShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE SWIRLCLUSTERS OPTION 2"
+// , SHAPE_SWIRLCLUSTERS, 2, GalaxySwirlClustersShape.options2));
+ addParameter(new ShapeOption(go, "SHAPE SPIRALARMS OPTION 1"
+ , SHAPE_SPIRALARMS, 1, GalaxySpiralArmsShape.options1));
+// addParameter(new ShapeOption(go, "SHAPE SPIRALARMS OPTION 2"
+// , SHAPE_SPIRALARMS, 2, GalaxySpiralArmsShape.options2));
addParameter(new Difficulty(go));
addParameter(new OpponentAI(go));
addParameter(new NbOpponent(go));
@@ -57,7 +140,7 @@ protected void initSettingList(ClientClasses go) {
// ========== Common Methods ==========
//
- private static List getOptionList(ClientClasses go) {
+ private static List getRaceOptionList(ClientClasses go) {
List list = go.newOptions().startingRaceOptions();
list.add("null");
list.add("gui");
@@ -65,20 +148,96 @@ private static List getOptionList(ClientClasses go) {
return list;
}
- private static List getFromGUI(IGameOptions options) {
+ private static List getAIOptionList(ClientClasses go) {
+ List list = go.newOptions().specificOpponentAIOptions();
+ list.add("gui");
+ list.add("game");
+ return list;
+ }
+
+ private static String getInitialAI(ClientClasses go) {
+ List list = go.newOptions().specificOpponentAIOptions();
+ return list.get(list.size()-2);
+ }
+
+ private static List getRaceFromGUI(IGameOptions options) {
List list = new ArrayList() ;
String race;
int lim = options.selectedNumberOpponents();
for (int i=0; i getAIFromGUI(IGameOptions options) {
+ List list = new ArrayList() ;
+ String ai;
+ int lim = options.selectedNumberOpponents();
+ for (int i=0; i, ClientClasses> {
+
+ private final String shapeCodeView;
+ private final int optionLevel;
+ // ========== Constructors and initializer ==========
+ //
+ ShapeOption(ClientClasses go, String name, String codeView
+ , int level, List options) {
+ super(name, new Validation(new T_String(options.get(0)), options));
+ shapeCodeView = codeView;
+ optionLevel = level;
+ setHistory(Default, options.get(0));
+ }
+ // ========== Overriders ==========
+ //
+ @Override public AbstractT getFromGame (ClientClasses go) {
+ return new T_String(""); // No way to know
+ }
+ @Override public void putToGame(ClientClasses go, AbstractT value) {}
+ @Override public AbstractT getFromUI (ClientClasses go) {
+ if (go.newOptions().selectedGalaxyShape() == shapeCodeView) {
+ switch (optionLevel) {
+ case 1:
+ return new T_String(go.newOptions().selectedGalaxyShapeOption1());
+ case 2:
+ return new T_String(go.newOptions().selectedGalaxyShapeOption2());
+ }
+ }
+ return new T_String("");
+ }
+ @Override public void putToGUI(ClientClasses go, AbstractT value) {
+ if (go.newOptions().selectedGalaxyShape() == shapeCodeView) {
+ switch (optionLevel) {
+ case 1:
+ go.newOptions().selectedGalaxyShapeOption1(value.getCodeView());
+ go.options().selectedGalaxyShapeOption1(value.getCodeView());
+ return;
+ case 2:
+ go.newOptions().selectedGalaxyShapeOption2(value.getCodeView());
+ go.options().selectedGalaxyShapeOption2(value.getCodeView());
+ return;
+ }
+ }
+ }
+ @Override public void initComments() {}
+ }
// ==============================================================
// GALAXY SHAPE
//
@@ -115,12 +274,7 @@ static class GalaxyShape extends
go.options().selectedGalaxyShape(value.getCodeView());
}
- @Override public void initComments() {
- setHeadComments(
- " " + NL +
- "------------- Galaxy Options -------------" + NL +
- " ");
- }
+ @Override public void initComments() {}
}
// ==============================================================
// GALAXY SIZE
@@ -328,7 +482,7 @@ static class GuiRaceFilter extends
+ " or if your planetary distribution affect a race too much,"
+ " you are able to remove them form the pool of selectable opponents." + NL
+ "Only the opponents on the list will be shown when you click on the selection rectangle." + NL
- + "The race list must be written using “/” as separator." + NL
+ + "The race list must be written using \"/\" as separator." + NL
+ "!!! Don’t break the lines !!! even if they become very long..."
+ " There is no multi-line analysis."
+ NL);
@@ -378,7 +532,7 @@ static class GameRaceFilter extends
+ " or if your planetary distribution affect a race too much,"
+ " you are able to remove them form the pool of selectable opponents." + NL
+ "Only the opponents on the list will be used by the random generator when starting a new game." + NL
- + "The race list must be written using “/” as separator." + NL
+ + "The race list must be written using \"/\" as separator." + NL
+ "!!! Don’t break the lines !!! even if they become very long..."
+ " There is no multi-line analysis."
+ NL);
@@ -399,7 +553,7 @@ static class GuiPresetOpponent extends
super("GUI PRESET OPPONENT",
new Valid_RaceList(
new T_String(go.newOptions().selectedPlayerRace())
- , getOptionList(go)
+ , getRaceOptionList(go)
)
);
@@ -427,7 +581,7 @@ static class GuiPresetOpponent extends
@Override public void putToGame(ClientClasses go, AbstractT value) {}
@Override public AbstractT getFromUI (ClientClasses go) {
- return new T_String().setFromCodeView(getFromGUI(go.newOptions()));
+ return new T_String().setFromCodeView(getRaceFromGUI(go.newOptions()));
}
@Override public void putToGUI(ClientClasses go, AbstractT value) {
@@ -447,15 +601,15 @@ static class GuiPresetOpponent extends
setSettingComments(" " + NL
+ "To fill the opponent list or suggest random opponents from a list." + NL
+ "If option is empty, the opponent is not changed." + NL
- + "If the option is “null” the result is an empty rectangle." + NL
- + "If the option is “random” the opponent will be selected from the full race list." + NL
- + "If the option is “GUI” the opponent will be selected from the GUI RACE FILTER list." + NL
- + "If the option is “GAME” the opponent will be selected from the GAME RACE FILTER list." + NL
- + "If the option is “random race_1, race_2, race_N” the opponent will be selected from the given list." + NL
+ + "If the option is \"null\" the result is an empty rectangle." + NL
+ + "If the option is \"random\" the opponent will be selected from the full race list." + NL
+ + "If the option is \"GUI\" the opponent will be selected from the GUI RACE FILTER list." + NL
+ + "If the option is \"GAME\" the opponent will be selected from the GAME RACE FILTER list." + NL
+ + "If the option is \"random race_1, race_2, race_N\" the opponent will be selected from the given list." + NL
+ "If the list is shorter than the number of opponents and the last option is random:"
+ " this last option will be applied to the remaining opponents."
+ " Otherwise the remaining opponents aren’t changed." + NL
- + "The race list must be written using “/” as separator." + NL
+ + "The race list must be written using \"/\" as separator." + NL
+ "!!! Don’t break the lines !!! even if they become very long..."
+ " There is no multi-line analysis."
+ NL);
@@ -479,7 +633,7 @@ public static class StartPresetOpponent extends
super("START PRESET OPPONENT",
new Valid_RaceList(
new T_String(go.newOptions().selectedPlayerRace())
- , getOptionList(go)
+ , getRaceOptionList(go)
)
);
@@ -507,7 +661,7 @@ public static class StartPresetOpponent extends
@Override public void putToGame(ClientClasses go, AbstractT value) {}
@Override public AbstractT getFromUI (ClientClasses go) {
- return new T_String().setFromCodeView(getFromGUI(go.newOptions()));
+ return new T_String().setFromCodeView(getRaceFromGUI(go.newOptions()));
}
@Override public void putToGUI(ClientClasses go, AbstractT value) {
@@ -522,18 +676,17 @@ public static class StartPresetOpponent extends
setSettingComments(" " + NL
+ "To replace the random opponent generation when starting a new game." + NL
+ "If option is empty or null, the opponent will be randomly selected." + NL
- + "If the option is “random” the opponent will be selected from the full race list." + NL
- + "If the option is “GUI” the opponent will be selected from the GUI RACE FILTER list." + NL
- + "If the option is “GAME” the opponent will be selected from the GAME RACE FILTER list." + NL
- + "If the option is “random race_1, race_2, race_N”"
+ + "If the option is \"random\" the opponent will be selected from the full race list." + NL
+ + "If the option is \"GUI\" the opponent will be selected from the GUI RACE FILTER list." + NL
+ + "If the option is \"GAME\" the opponent will be selected from the GAME RACE FILTER list." + NL
+ + "If the option is \"random race_1, race_2, race_N\""
+ " the opponent will be selected from the given list." + NL
+ "If the list is shorter than the number of opponents,"
+ " this last option will be applied to the remaining opponents."
- + " Otherwise the remaining opponents aren’t changed." + NL
+ "When the maximum number of a type of opponent (5) is reached,"
+ " it’ll be removed from the list of allowed opponents."
+ " When this list is empty, sorry, a forbidden race will be chosen." + NL
- + "The race list must be written using “/” as separator." + NL
+ + "The race list must be written using \"/\" as separator." + NL
+ "!!! Don’t break the lines !!! even if they become very long..."
+ " There is no multi-line analysis."
+ NL);
@@ -555,4 +708,5 @@ public void loadOpponents(ClientClasses go) {
}
}
}
+
}
diff --git a/src/mod/br/profileManager/Group_GalaxyTest.java b/src/mod/br/profileManager/Group_GalaxyTest.java
index a6d2e8e..0b2249c 100644
--- a/src/mod/br/profileManager/Group_GalaxyTest.java
+++ b/src/mod/br/profileManager/Group_GalaxyTest.java
@@ -19,15 +19,12 @@ class Group_GalaxyTest {
private String galaxyShapePrt =
"\r\n"
- + "; \r\n"
- + "; ------------- Galaxy Options -------------\r\n"
- + "; \r\n"
+ "¦==== Parameter : GALAXY SHAPE\r\n"
+ "; Options : [Rectangle, Ellipse, Spiral, Text, Cluster, Swirlclusters,\r\n"
+ "; \" \" : Grid, Spiralarms, Maze, Shuriken, Bullseye, Lorenz, Fractal]\r\n"
+ "¦ History : Current: Rectangle ¦ Last: ¦ Initial: Rectangle\r\n"
+ "¦ History : Default: Rectangle ¦ Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -42,7 +39,7 @@ class Group_GalaxyTest {
+ "; \" \" : Insane, Ludicrous, Maximum]\r\n"
+ "¦ History : Current: Small ¦ Last: ¦ Initial: Small ¦ Default: Small\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -56,7 +53,7 @@ class Group_GalaxyTest {
+ "; \" \" : Custom]\r\n"
+ "¦ History : Current: Normal ¦ Last: ¦ Initial: Normal ¦ Default: Easy\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -69,7 +66,7 @@ class Group_GalaxyTest {
+ "; Options : [Base, Xilmi, Select]\r\n"
+ "¦ History : Current: Base ¦ Last: ¦ Initial: Base ¦ Default: Base\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -81,7 +78,7 @@ class Group_GalaxyTest {
+ "¦==== Parameter : NB OPPONENTS\r\n"
+ "; Options : [Min=0, Max=15, Rnd Low=1, Rnd Up=15]\r\n"
+ "¦ History : Current: 4 ¦ Last: ¦ Initial: 4 ¦ Default: 3 ¦ Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -98,7 +95,7 @@ class Group_GalaxyTest {
+ "¦ History : Initial : Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi\r\n"
+ "¦ History : Default : Human/Alkari/Silicoid/Mrrshan/Klackon/Meklar/Psilon/Darlok/Sakkra/Bulrathi\r\n"
+ "¦ History : Game : \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 : \r\n"
+ "Random : \r\n"
@@ -144,16 +141,6 @@ class Group_GalaxyTest {
assertEquals(shouldBe, out, "should have been equals");
}
- @Test void profileList_None() {
- Group_Galaxy group;
- group = new Group_Galaxy(cct);
- assertEquals("[GALAXY SHAPE, GALAXY SIZE, DIFFICULTY, OPPONENT AI"
- + ", NB OPPONENTS, GUI RACE FILTER, GAME RACE FILTER"
- + ", GUI PRESET OPPONENT, START PRESET OPPONENT]",
- group.profileList().toString(),
- "should have been a long list");
- }
-
@Test void getParameter_String() {
String param;
Group_Galaxy group;
diff --git a/src/mod/br/profileManager/Group_Governor.java b/src/mod/br/profileManager/Group_Governor.java
index 5565e6a..e8ec60e 100644
--- a/src/mod/br/profileManager/Group_Governor.java
+++ b/src/mod/br/profileManager/Group_Governor.java
@@ -29,10 +29,15 @@
class Group_Governor extends AbstractGroup {
Group_Governor(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
}
- @Override
- protected void initSettingList(ClientClasses go) {
+ private static String getHeadComments() {
+ return " " + NL
+ + "------------- Governor Options -------------" + NL
+ + " ";
+ }
+
+ @Override protected void initSettingList(ClientClasses go) {
addParameter(new GovernorOnByDefault(go));
addParameter(new AutospendOnByDefault(go));
addParameter(new DefaultMaxBases(go));
@@ -65,12 +70,7 @@ public static class GovernorOnByDefault extends
UserPreferences.setGovernorOn(value.getCodeView());
}
- @Override public void initComments() {
- setHeadComments(
- " " + NL +
- "------------- Governor Options -------------" + NL +
- " ");
- }
+ @Override public void initComments() {}
}
// ==============================================================
// AUTOSPEND ON BY DEFAULT
diff --git a/src/mod/br/profileManager/Group_Modnar.java b/src/mod/br/profileManager/Group_Modnar.java
index e06a407..b090ad2 100644
--- a/src/mod/br/profileManager/Group_Modnar.java
+++ b/src/mod/br/profileManager/Group_Modnar.java
@@ -42,10 +42,15 @@
class Group_Modnar extends AbstractGroup {
Group_Modnar(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
}
- @Override
- protected void initSettingList(ClientClasses go) {
+ private static String getHeadComments() {
+ return " " + NL
+ + "------------- Modnar's Options -------------" + NL
+ + "";
+ }
+
+ @Override protected void initSettingList(ClientClasses go) {
addParameter(new AlwaysStarGates(go));
addParameter(new AlwaysThorium(go));
addParameter(new ChallengeMode(go));
@@ -55,8 +60,6 @@ protected void initSettingList(ClientClasses go) {
addParameter(new CustomDifficulty(go));
addParameter(new DynamicDifficulty(go));
addParameter(new MissileSizeModifier(go));
-// addParameter(new RetreatRestrictions(go));
-// addParameter(new RetreatRestrictionTurns(go));
}
// ==============================================================
@@ -104,10 +107,6 @@ static class AlwaysStarGates extends
}
@Override public void initComments() {
- setHeadComments(
- " " + NL +
- "------------- Modnar's Options -------------" + NL +
- " ");
setBottomComments(availableForChange());
}
}
@@ -396,76 +395,4 @@ static class MissileSizeModifier extends
setBottomComments(dynamicParameter());
}
}
-// // ==============================================================
-// // RETREAT RESTRICTIONS
-// //
-// static class RetreatRestrictions extends
-// AbstractParameter {
-//
-// RetreatRestrictions(ClientClasses go) {
-// super("RETREAT RESTRICTIONS",
-// new Valid_IntegerWithList(
-// UserPreferences.retreatRestrictions()
-// , StartModOptionsUI.getRetreatRestrictionOptions()));
-// setHistoryCodeView(Initial, UserPreferences.retreatRestrictions());
-// setHistoryCodeView(Default, 0);
-// setHistory(Current, Initial);
-// }
-//
-// @Override public AbstractT getFromGame (ClientClasses go) { // BR: Validate Dynamic
-// return new T_Integer(UserPreferences.retreatRestrictions()); // Dynamic: Same as UserPreferences
-// }
-//
-// @Override public void putToGame(ClientClasses go, AbstractT value) {
-// UserPreferences.setMissileSizeModifier(value.getCodeView()); // Dynamic: Same as UserPreferences
-// }
-//
-// @Override public AbstractT getFromUI (ClientClasses go) {
-// return new T_Integer(UserPreferences.retreatRestrictions());
-// }
-//
-// @Override public void putToGUI(ClientClasses go, AbstractT value) {
-// UserPreferences.setMissileSizeModifier(value.getCodeView());
-// }
-//
-// @Override public void initComments() {
-// setBottomComments(dynamicParameter());
-// }
-// }
-// // ==============================================================
-// // RETREAT RESTRICTION TURNS
-// //
-// static class RetreatRestrictionTurns extends
-// AbstractParameter , ClientClasses> {
-//
-// RetreatRestrictionTurns(ClientClasses go) {
-// super("RETREAT RESTRICTION TURNS",
-// new Validation(
-// new T_Integer(UserPreferences.retreatRestrictionTurns())));
-//
-// setHistoryCodeView(Default, 100); // XILMI DEFAULT
-// setLimits(0 , 100);
-// setDefaultRandomLimits(0 , 100);
-// }
-//
-// @Override public AbstractT getFromGame (ClientClasses go) {
-// return new T_Integer(UserPreferences.retreatRestrictionTurns()); // Dynamic: Same as UserPreferences
-// }
-//
-// @Override public void putToGame(ClientClasses go, AbstractT value) {
-// UserPreferences.setMissileSizeModifier(value.getCodeView()); // Dynamic: Same as UserPreferences
-// }
-//
-// @Override public AbstractT getFromUI (ClientClasses go) {
-// return new T_Integer(UserPreferences.retreatRestrictionTurns());
-// }
-//
-// @Override public void putToGUI(ClientClasses go, AbstractT value) {
-// UserPreferences.setMissileSizeModifier(value.getCodeView());
-// }
-//
-// @Override public void initComments() {
-// setBottomComments(dynamicParameter());
-// }
-// }
}
diff --git a/src/mod/br/profileManager/Group_Race.java b/src/mod/br/profileManager/Group_Race.java
index 0bd4ef8..623a0ce 100644
--- a/src/mod/br/profileManager/Group_Race.java
+++ b/src/mod/br/profileManager/Group_Race.java
@@ -39,7 +39,13 @@
public class Group_Race extends AbstractGroup {
Group_Race(ClientClasses go) {
- super(go);
+ super(go, getHeadComments());
+ }
+
+ private static String getHeadComments() {
+ return " " + NL
+ + "--------- Races Game Options ---------" + NL
+ + "";
}
@Override protected void initSettingList(ClientClasses go) {
@@ -85,10 +91,6 @@ static class PlayerRace extends
}
@Override public void initComments() {
- setHeadComments(
- " " + NL +
- "--------- Races Game Options ---------" + NL +
- " ");
setBottomComments(availableForChange());
}
}
@@ -222,6 +224,7 @@ static class PlayerHomeWorld extends
new T_String(go.newOptions().selectedHomeWorldName())));
getValidation().getCriteria().isRandomAllowed(false);
+ getValidation().getCriteria().showOptions(false);
}
// ========== Overriders ==========
@@ -266,6 +269,7 @@ static class PlayerName extends
new T_String(go.newOptions().selectedLeaderName())));
getValidation().getCriteria().isRandomAllowed(false);
+ getValidation().getCriteria().showOptions(false);
}
// ========== Overriders ==========
@@ -295,4 +299,4 @@ static class PlayerName extends
setBottomComments(availableForChange());
}
}
-}
\ No newline at end of file
+}
diff --git a/src/mod/br/profileManager/Group_RaceTest.java b/src/mod/br/profileManager/Group_RaceTest.java
index 64a1405..e906e0a 100644
--- a/src/mod/br/profileManager/Group_RaceTest.java
+++ b/src/mod/br/profileManager/Group_RaceTest.java
@@ -14,15 +14,12 @@ class Group_RaceTest {
private String racePrt =
"\r\n"
- + "; \r\n"
- + "; --------- Races Game Options ---------\r\n"
- + "; \r\n"
+ "¦==== Parameter : PLAYER RACE\r\n"
+ "; Options : [Human, Alkari, Silicoid, Mrrshan, Klackon, Meklar, Psilon,\r\n"
+ "; \" \" : Darlok, Sakkra, Bulrathi]\r\n"
+ "¦ History : Current: Human ¦ Last: ¦ Initial: Human ¦ Default: Human\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
@@ -37,7 +34,7 @@ class Group_RaceTest {
+ "; \" \" : Brown, White, Lime, Grey, Plum, Light Blue, Mint, Olive]\r\n"
+ "¦ History : Current: Blue ¦ Last: ¦ Initial: Blue ¦ Default: Red\r\n"
+ "¦ History : Game: \r\n"
- + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, ·]\r\n"
+ + "¦ LOCAL ENABLE : All ; [No, All, Save, Load, Hide, ·]\r\n"
+ "\r\n"
+ "Profile 1 :\r\n"
+ "Random :\r\n"
diff --git a/src/mod/br/profileManager/UserProfilesTest.java b/src/mod/br/profileManager/UserProfilesTest.java
index da4ed52..5d33f83 100644
--- a/src/mod/br/profileManager/UserProfilesTest.java
+++ b/src/mod/br/profileManager/UserProfilesTest.java
@@ -33,14 +33,6 @@ private void init() {
, "Should not be initialized");
}
-// @Test
-// void getAllProfiles() {
-// init();
-// System.out.println("getAllProfiles()");
-// System.out.println(userProfiles.getAllProfiles().toString());
-// System.out.println();
-// }
-
@Test
void processKey_U() {
init();
@@ -48,20 +40,4 @@ void processKey_U() {
, userProfiles.processKey(KeyEvent.VK_U, false, "", clientObject)
, "This KeyEvent sould return false");
}
-
-// @Test void GuiOpponentRaceList() {
-// init();
-// userProfiles.processKey(KeyEvent.VK_U, false, "", clientObject);
-// param = userProfiles.getParameter("GUI OPPONENTS RACE FILTER");
-// String result = param.toString(userProfiles.getAllProfiles());
-// System.out.println(result);
-// Lines, ?> line = param.getProfileLine("User");
-// AbstractT> value =line.getValue();
-// System.out.println("List");
-// System.out.println(value.codeViewList().toString());
-// System.out.println(value.toString());
-// System.out.println(value.toString());
-// System.out.println(line.toString());
-// }
-
}
diff --git a/src/mod/br/profileManager/Valid_AIList.java b/src/mod/br/profileManager/Valid_AIList.java
new file mode 100644
index 0000000..8e42ad4
--- /dev/null
+++ b/src/mod/br/profileManager/Valid_AIList.java
@@ -0,0 +1,198 @@
+
+/*
+ * Licensed under the GNU General License, Version 3 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.gnu.org/licenses/gpl-3.0.html
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package mod.br.profileManager;
+
+import static rotp.model.game.IGameOptions.MAX_OPPONENTS;
+
+import java.util.Arrays;
+import java.util.List;
+
+import br.profileManager.src.main.java.AbstractT;
+import br.profileManager.src.main.java.PMutil;
+import br.profileManager.src.main.java.Validation;
+import mod.br.AddOns.RaceFilter;
+import rotp.model.game.IGameOptions;
+
+/**
+ * For the validation of the Opponent AI Lists
+ */
+class Valid_AIList extends Validation {
+
+ // ==================================================
+ // Constructors and initializers
+ //
+ Valid_AIList(AbstractT initialValue, List options) {
+ super(initialValue, options);
+ }
+
+ // ========== Getters ==========
+ //
+ String[] analyze(ClientClasses go, List userEntry, boolean gameCall) {
+ return new newAnalyze(go, userEntry, gameCall).selectedAIs();
+ }
+
+ // ==============================================================
+ // Nested Class
+ //
+ class newAnalyze {
+ private List defaultGuiList; // The longest one
+ private List defaultGameList;
+ private List randomList; // The original List
+ private List allRandomList; // The original List
+ private List randomGuiList;
+ private List randomGameList;
+ private String blankReplacement = IGameOptions.OPPONENT_AI_MODNAR;
+ private String nullReplacement = IGameOptions.OPPONENT_AI_MODNAR;
+ private String[] selectedAIs;
+ private int index;
+ private int maxArray;
+ private boolean gameCall;
+
+ newAnalyze(ClientClasses go, List userEntry, boolean gameCall) {
+ initOptions();
+
+ int iMax = selectedAIs.length;
+ int iMaxList = userEntry.size()-1;
+ int iList;
+
+ String entry = "";
+ // loop thru the list
+ for (index=0; index parameters) {
+ int id = PMutil.getRandom(0, parameters.size());
+ validEntry(parameters.get(id));
+ }
+
+ private AbstractT randomWithInListLimit(String[] parameters) {
+ int[] limits = validateLimits(parameters);
+ List subList = randomGuiList.subList(limits[0], limits[1]);
+ int id = PMutil.getRandom(0, subList.size());
+ return validEntry(subList.get(id));
+ }
+
+ private void elementAnalysis(String userEntry) {
+ userEntry = PMutil.clean(userEntry);
+ // Random Management
+ if (isRandom(userEntry)) { // random with extra parameters
+ String[] parameters = splitParameters(removeRandomId(userEntry));
+ if (parameters.length > 2) {
+ randomWithOptions(Arrays.asList(parameters));
+ return;
+ }
+ randomWithInListLimit(parameters);
+ return;
+ }
+ // Not Random
+ // Check check if part of the list
+ if (isValidUserView(userEntry)) {
+ validEntry(toValue(userEntry).getCodeView());
+ return;
+ }
+ // Bad entry, then either blank or null
+ validBlankEntry();
+ return;
+ }
+
+ // ========== Other Methods ==========
+ //
+ private AbstractT validEntry(String AI) {
+ if (isValidAI(AI)) {
+ return setAI(AI);
+ }
+ return setNull();
+ }
+
+ private AbstractT validBlankEntry() {
+ if (maxArray > index) {
+ String selectedAI = selectedAIs[index];
+ if (isValidAI(selectedAI)) {
+ return setBlank();
+ }
+ // to much of this race selected
+ return setNull();
+ }
+ // no race selected OK for blank value
+ return setBlank();
+ }
+
+ private AbstractT setAI(String ai) {
+ if (maxArray > index) {
+ selectedAIs[index] = ai;
+ }
+ return newValue(ai);
+ }
+
+ private AbstractT setBlank() {// not allowed!
+ return newValue(blankReplacement);
+ }
+
+ private AbstractT setNull() {
+ return newValue(nullReplacement);
+ }
+
+ private boolean isValidAI(String AI) {
+ if (gameCall) {
+ return defaultGameList.contains(AI);
+ }
+ return defaultGuiList.contains(AI);
+ }
+
+ private void initOptions() {
+ randomGuiList = RaceFilter.selectedGuiAIFilter();
+ randomGameList = RaceFilter.selectedGameAIFilter();
+ randomList = RaceFilter.randomAIList();
+ allRandomList = RaceFilter.allRandomAIList();
+ defaultGuiList = RaceFilter.defaultGuiAIList();
+ defaultGameList = RaceFilter.defaultGameAIList();
+ selectedAIs = new String[MAX_OPPONENTS+1];
+ maxArray = selectedAIs.length;
+ }
+ }
+}
diff --git a/src/rotp/Rotp.java b/src/rotp/Rotp.java
index ea78c60..0132d42 100644
--- a/src/rotp/Rotp.java
+++ b/src/rotp/Rotp.java
@@ -43,7 +43,7 @@
public class Rotp {
private static final int MB = 1048576;
- public static final String version = "22.07.01";
+ public static final String version = "22.07.05";
public static int IMG_W = 1229;
public static int IMG_H = 768;
public static String jarFileName = "rotp-" + version + ".jar";
diff --git a/src/rotp/mod/br/AddOns/RacesOptions.java b/src/rotp/mod/br/AddOns/RacesOptions.java
index e14c083..f2c177e 100644
--- a/src/rotp/mod/br/AddOns/RacesOptions.java
+++ b/src/rotp/mod/br/AddOns/RacesOptions.java
@@ -21,6 +21,7 @@
import mod.br.AddOns.RaceFilter;
import mod.br.profileManager.ClientClasses;
+//import mod.br.profileManager.Group_Galaxy.StartPresetAI;
import mod.br.profileManager.Group_Galaxy.StartPresetOpponent;
import rotp.mod.br.profiles.Profiles;
import rotp.model.game.IGameOptions;
@@ -42,6 +43,18 @@ public static List getGuiFilteredRaceList() {
*/
public static List getFilteredRaceList() {
return RaceFilter.selectedGameRaceFilter();
+ }
+ /**
+ * @return the Gui AI Filter
+ */
+ public static List getGuiFilteredAIList() {
+ return RaceFilter.selectedGuiAIFilter();
+ }
+ /**
+ * @return AI Filter
+ */
+ public static List getFilteredAIList() {
+ return RaceFilter.selectedGameAIFilter();
}
/**
* Set the starting opponents
@@ -53,4 +66,14 @@ public static void loadStartingOpponents(IGameOptions options) {
Profiles.userProfiles().getParameter("START PRESET OPPONENT");
startPresetOpponent.loadOpponents(new ClientClasses(options));
}
+// /**
+// * Set the starting opponents AI
+// * @param options the {@code IGameOptions} containing the parameters
+// */
+// public static void loadStartingAIs(IGameOptions options) {
+// StartPresetAI startPresetAI;
+// startPresetAI = (StartPresetAI)
+// Profiles.userProfiles().getParameter("START PRESET AI");
+// startPresetAI.loadAIs(new ClientClasses(options));
+// }
}
diff --git a/src/rotp/mod/br/profiles/Profiles.java b/src/rotp/mod/br/profiles/Profiles.java
index b26fa15..2201f3d 100644
--- a/src/rotp/mod/br/profiles/Profiles.java
+++ b/src/rotp/mod/br/profiles/Profiles.java
@@ -153,6 +153,13 @@ public static boolean isSpacingEnabled() {
public static boolean isStartOpponentRaceListEnabled() {
return userProfiles.isParameterEnabled("START PRESET OPPONENT");
}
+ /**
+ * Check if it is OK to use OpponentRaceList (for Random)
+ * @return status
+ */
+ public static boolean isStartOpponentAIListEnabled() {
+ return userProfiles.isParameterEnabled("START PRESET AI");
+ }
/**
* Check if it is OK to use GuiOpponentRaceList (for Random)
* @return status
@@ -160,6 +167,13 @@ public static boolean isStartOpponentRaceListEnabled() {
public static boolean isGuiOpponentRaceListEnabled() {
return userProfiles.isParameterEnabled("GUI RACE FILTER");
}
+ /**
+ * Check if it is OK to use GuiOpponentRaceList (for Random)
+ * @return status
+ */
+ public static boolean isGuiOpponentAIListEnabled() {
+ return userProfiles.isParameterEnabled("GUI AI FILTER");
+ }
/**
* Check if it is OK to use Star Probability Modifier (for Random)
* @return status
diff --git a/src/rotp/model/game/IGameOptions.java b/src/rotp/model/game/IGameOptions.java
index e2a6845..db665d8 100644
--- a/src/rotp/model/game/IGameOptions.java
+++ b/src/rotp/model/game/IGameOptions.java
@@ -473,8 +473,13 @@ default String nextAutoplayOption() {
}
default void nextSpecificOpponentAI(int i) {
List allAIs = specificOpponentAIOptions();
+ // BR: Add user filter
+ if (Profiles.isGuiOpponentAIListEnabled()) {
+ allAIs = RacesOptions.getGuiFilteredAIList();
+ } // \BR:
String currAI = specificOpponentAIOption(i);
+ // if currAI not on the list: index=-1 then result=0 -> OK
int nextIndex = currAI == null ? 0 : allAIs.indexOf(currAI)+1;
if (nextIndex >= allAIs.size())
nextIndex = 0;
@@ -484,8 +489,13 @@ default void nextSpecificOpponentAI(int i) {
}
default void prevSpecificOpponentAI(int i) {
List allAIs = specificOpponentAIOptions();
+ // BR: Add user filter
+ if (Profiles.isGuiOpponentAIListEnabled()) {
+ allAIs = RacesOptions.getGuiFilteredAIList();
+ } // \BR:
String currAI = specificOpponentAIOption(i);
+ // if currAI not on the list: index=-1 then result=0 -> OK
int nextIndex = currAI == null ? 0 : allAIs.indexOf(currAI)-1;
if (nextIndex < 0)
nextIndex = allAIs.size()-1;
diff --git a/src/rotp/model/game/MOO1GameOptions.java b/src/rotp/model/game/MOO1GameOptions.java
index 1ab88a2..86df329 100644
--- a/src/rotp/model/game/MOO1GameOptions.java
+++ b/src/rotp/model/game/MOO1GameOptions.java
@@ -575,6 +575,10 @@ public String randomStarType() {
case GALAXY_AGE_OLD: pcts = oldPcts; break;
default: pcts = normalPcts; break;
}
+ // BR: distribution modifier
+ if (Profiles.isStarProbabilityEnabled()) {
+ pcts = GalaxyOptions.modifyStarProbability(pcts);
+ } // \BR:
float r = random();
for (int i=0;i