You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(1) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(28) |
Dec
(17) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(20) |
Feb
(111) |
Mar
(46) |
Apr
(3) |
May
(19) |
Jun
(25) |
Jul
(16) |
Aug
(5) |
Sep
(2) |
Oct
(10) |
Nov
(1) |
Dec
(2) |
2005 |
Jan
(14) |
Feb
|
Mar
(12) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
(1) |
Nov
(32) |
Dec
(95) |
2006 |
Jan
(53) |
Feb
(172) |
Mar
(125) |
Apr
(2) |
May
(15) |
Jun
(29) |
Jul
(10) |
Aug
(4) |
Sep
(4) |
Oct
(39) |
Nov
(32) |
Dec
(57) |
2007 |
Jan
(37) |
Feb
(36) |
Mar
(38) |
Apr
(26) |
May
(21) |
Jun
(60) |
Jul
(170) |
Aug
(76) |
Sep
(22) |
Oct
(6) |
Nov
(19) |
Dec
(48) |
2008 |
Jan
(50) |
Feb
(140) |
Mar
(143) |
Apr
(162) |
May
(70) |
Jun
(105) |
Jul
(76) |
Aug
(44) |
Sep
(1) |
Oct
(6) |
Nov
(23) |
Dec
(47) |
2009 |
Jan
(167) |
Feb
(133) |
Mar
(98) |
Apr
(152) |
May
(187) |
Jun
(68) |
Jul
(31) |
Aug
(27) |
Sep
(56) |
Oct
(79) |
Nov
(50) |
Dec
(86) |
2010 |
Jan
(66) |
Feb
(31) |
Mar
(78) |
Apr
(226) |
May
(71) |
Jun
(34) |
Jul
(116) |
Aug
(103) |
Sep
(28) |
Oct
(37) |
Nov
(37) |
Dec
(119) |
2011 |
Jan
(20) |
Feb
(39) |
Mar
(5) |
Apr
(6) |
May
(3) |
Jun
(437) |
Jul
(81) |
Aug
(127) |
Sep
(100) |
Oct
(198) |
Nov
(58) |
Dec
(64) |
2012 |
Jan
(93) |
Feb
(43) |
Mar
(131) |
Apr
(88) |
May
(44) |
Jun
(58) |
Jul
(140) |
Aug
(106) |
Sep
(136) |
Oct
(115) |
Nov
(128) |
Dec
(108) |
2013 |
Jan
(110) |
Feb
(124) |
Mar
(108) |
Apr
(67) |
May
(98) |
Jun
(121) |
Jul
(66) |
Aug
(107) |
Sep
(32) |
Oct
(65) |
Nov
(58) |
Dec
(39) |
2014 |
Jan
(185) |
Feb
(146) |
Mar
(69) |
Apr
(101) |
May
(21) |
Jun
(73) |
Jul
(122) |
Aug
(346) |
Sep
(40) |
Oct
(19) |
Nov
(24) |
Dec
(27) |
2015 |
Jan
(80) |
Feb
(85) |
Mar
(58) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ve...@us...> - 2015-03-25 17:42:25
|
Revision: 8051 http://sourceforge.net/p/freeorion/code/8051 Author: vezzra Date: 2015-03-25 17:42:16 +0000 (Wed, 25 Mar 2015) Log Message: ----------- Merged changlog updates from 0.4.4 release branch Modified Paths: -------------- trunk/FreeOrion/changelog.txt Modified: trunk/FreeOrion/changelog.txt =================================================================== --- trunk/FreeOrion/changelog.txt 2015-03-22 01:44:54 UTC (rev 8050) +++ trunk/FreeOrion/changelog.txt 2015-03-25 17:42:16 UTC (rev 8051) @@ -1,155 +1,191 @@ -v0.4.3 + SVN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +v0.4.4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Key Changes: +~ Interface and turn processing time improvements +~ Extensive AI updates +~ Combat mechanics reworked +~ Balance changes including supply mechanics, damage control, ship hulls +~ New "core" slot type +~ Configurable Hotkeys +~ New save / load file dialog +~ Queued fleet move orders +~ Python scripted universe generation -... - - New Features / Improvements: -~ Numerous tweaks and improvements to the backend code that should reduce lag and improve performance -~ Default game setting is now 150 systems, 6 AIs on Maniacal setting -~ Species can now be given a preferred focus setting, so new colonies will automatically default to that setting, this is indicated in their pedia entry. -~ Introduced a new Happiness meter. This currently does nothing but all planets smile at you until it does. -~ The selected game setup/galaxy creation options are now a pedia entry allowing in game checking. -~ Major overhaul to backend of universe generation, now all done using Python scripts. This includes some improvements to universe generation: -~ ~ Naming of star systems: a part of the systems on a map gets assigned to "star groups", each star in a group gets the same primary name and varying suffixes. On larger maps a greater percentage of stars is assigned to groups, so we don't run out of names even on very large maps. -~ ~ Reworked starting home system selection, home systems should be more evenly distributed now -~ ~ Additional irregular galaxy shape -~ ~ If errors occur during universe generation, the game will still try to start if possible at all, but the players will get a respective error message / warning -~ Substantial improvements to the AI in various respects -~ Combat mechanics have been reworked to be more predictable, there are now three rounds per combat, at the start of each round all ships are put into a random order, then each fire their weapons simultaneously in turn at a random enemy target, this is then repeated including reshuffling for the second and third round. Further improvements are planned. -~ Fleet management has several improvements -~ ~ New automatically created fleets are set to aggressive or passive depending on whether the fleet contains any armed ships, meaning scouts and colony ships default to passive, warships to aggressive. -~ ~ The toggle for aggressive/passive when splitting fleets manually now has an extra option to default as above depending on whether they're armed or not. -~ ~ A new right click menu in the fleets window allows for all fleets in the system to be merged into the clicked fleet, or for the fleet to be separated by design. Right clicking on an individual ship within a fleet gives the option of separating that ship into a new fleet or all ships of that design into a new fleet. -~ Fleets can now be given waypoints by holding shift when right clicking systems, allowing them to be moved around obstacles or to force a specific route. -~ Supply mechanics substantially reworked, Tiny and Small planets receive a bonus to supply, Large and Huge planets a malus, Good and Bad Supply are also included as species traits. Space Elevator now replaces the planetary stat with a flat +3 bonus, making it more useful on larger planets. +~ Implemented Python scripted universe generation +~ ~ Can be easily modified by editing script files +~ ~ Accessible through "Irregular 2" galaxy shape in galaxy setup +~ New "core" ship design slot type, added to some hulls and required for some powerful ship parts +~ Made all empires' sitreps visible to moderators and observers +~ System and ship names moved into stringtable, so they can be translated with the rest of the in-game text +~ Added a bombardment mechanic, allowing ships to target and affect planets outside of battle +~ Added a UI for configurable hotkey command key bindings +~ Galaxy setup data is stored and can be accessed from the pedia during a game +~ Graphs display added that allows plotting game history of various statistics about empires +~ Made it possible to refresh the stringtable or change stringtables without restarting the program (although not all of the GUI will immediately refresh text when doing this) +~ Gifting mechanic allows giving ships to other empires with a presence in the same system +~ Improved support for FreeBSD +~ Modified system naming to group adjacent systems and give them similar names, distinguished by Greek suffixes, to prevent running out of system names in large galaxies +~ Reordered turn processing to improve consistency between server results and client-side estimates of effects processing +~ Added tracking and pedia display of various statistics about empires, such as numbers of things destroyed, lost, invaded... +~ Combat mechanics reworked: +~ ~ 3 rounds, during which objects all fire simultaneously at random targets +~ ~ Initially undetected ships that fire become targetable on later combat rounds +~ Made low-aggression AIs even less dangerous to help new players +~ Added shift-right-clicking to queue fleet move orders +~ Set default multiplayer autosave option to true - Content: -~ Extra starnames added -~ The Experimentors receive multiple tweaks to the way they work -~ ~ Starlanes removed at the beginning of the game will no longer be placed back if the system they are in already contains a monster such as a sentry until after turn 200 -~ ~ Sitreps are issued to all players whenever the Experimentors launch a fleet of monsters, these Sitreps link to Pedia entries for said monsters, Pedia entries are expanded with some extra hints. -~ ~ The stealth levels of Black Kraken and Bloated Juggernauts are reduced -~ ~ A Victory Sitrep is generated if the Experimentor Outpost building is captured. -~ Shipname list expanded, unowned monsters now receive names -~ Several planet specials have been removed or merged, some new ones added. -~ New Krill Spawner part introduced as a possible Ancient Ruin unlock -~ New Ramscoop part unlocked with Deuterium tanks -~ All meters reset to 0 if a planet is conquered, including Supply -~ Supply is now a meter that grows 1 per turn towards target max. -~ Premade ship designs are updated with greater variety -~ Derelict specials now have a stealth of 40 to prevent locating them via Pedia and similar at game start -~ Space monsters: -~ ~ Spawn rates have been reduced -~ ~ If AI max agression is set to beginner, probability for guard monsters is reduced -~ ~ If monsters frequency is set to "None", no guard monsters for specials are spawned +~ Various tech tree adjustments, including removing prerequisite techs and merging of similar techs +~ Translation updates +~ Added / updated / corrected descriptions of various parts, techs, hulls, buildings... +~ Added more star names and ship names, and gave unowned monsters names +~ Added sitreps for unlocking buildings, hulls, ship parts, monster growth, +~ Reformatted / standardized sitrep text, added information to sitreps +~ Replaced the "Weapons" species bonus with piloting skills, which modifies ship damage +~ Organic hulls "grow", increasing structure over time +~ Core slot type introduced, appearing on some hulls, and with some parts only mountable in core slots +~ Changed default galaxy options to 150 stars and 6 AIs +~ Added more predefined ship designs ~ Ancient Ruins special: ~ ~ Modest decrease in spawn rate ~ ~ Preventing them from doubling up in a system -~ ~ Much rarer now if Monsters Frequency is set to "None" +~ ~ Much rarer now if Monsters Frequency is set to "None" (in part due to lack of guard monsters in this case) ~ ~ Explored Ancient Ruins are now marked as excavated -~ ~ Made less sparse on Low Planet Density setting -~ Added Transpatial Drive -~ Added LastTurnActiveInBattle property to ships for content scripting -~ Added enqueue location condition +~ ~ Made less sparse on Low Planet Density setting +~ Added preferred focus to species, to which new colonies will default +~ Made all (including non-monster) unowned ship hulls move around on their own +~ Head on a Spike specials track the locations of captured empire capitals +~ Natives sometimes given advanced tech bonuses, making them more dangerous to attack +~ Reworking the Experimentors +~ ~ Starlanes removed at the beginning of the game will not be replaced until after turn 200 +~ ~ Sitreps announce monster release events +~ ~ The stealth levels of Black Kraken and Bloated Juggernauts are reduced +~ ~ A Victory Sitrep is generated if the Experimentor Outpost building is captured +~ ~ Ensuring after capture / destruction, fleets are not trapped in a no-lane system +~ Removed some old and uninteresting specials and renamed some existing specials +~ Added Robotic Interface Shields, which get bonuses from being located near other ships with the same part +~ Added Krill Spawner part as a possible Ancient Ruin unlock +~ Added Ramscoop part +~ Added Transpatial Drive part +~ Removed Interstellar Lighthouse because it was incompatible with current visibility mechanics +~ Reworked Psychic Domination to require a focus setting to enable, and to require telepathic species +~ Added some restrictions to when buildings can be added to the production queue +~ ~ Can't build a second palace +~ ~ Prevent quirks where a second something could be added to the queue, but would then become unproducible due to there being too many of it enqueued +~ AIs announce their aggression at the start of a game Graphics / GUI: -~ Added sitreps when a researched tech unlocks a specific building, hull or part -~ New graphics and icons for various parts, buildings and techs -~ ~ Blackshield, Plasma Shield, Armor and Xentronium armour -~ ~ Diamond & Crystal armour, Rock armour and Distortion Modulator -~ ~ Replaced Organic Hull art and icon -~ ~ Replaced Sentinel art and icon to differentiate it from Sentry -~ ~ Objects list planet icons substantially improved -~ ~ Icons for Nova Bomb, Distributed Thought Computing, Stargate and Transformer -~ Empires player list allows right clicking to look up empire in pedia -~ More Sitreps for monsters maturing -~ Stealth and visibility improvements for the planet sidepanel -~ ~ Planets that can't be colonized for stealth or visibility reasons no longer display the colonize button -~ ~ Tooltips and other info text added giving players more info about why they can't see a specific planet -~ Detection circles now default to on and can be turned off in the options menu -~ Production list now highlights items for the currently selected system with different colour text. -~ Right-click menu for production queue and research queue items allowing them to be deleted, moved to the top or the bottom of the list -~ Right-click menu commands to enqueue techs and producible items -~ In multiplayer, moderators and observers now see sitreps for all empires and can apply filters -~ Introduced graphs tracking progress of all empires in various metrics -~ Limited copy/paste functionality with keyboard shortcuts in chat window -~ Clicking a sitrep or performing a lookup that results in a Pedia entry in the Map window will now give a box within that window instead of taking you to the production or research window. -~ Rumour sitreps inform all players what discovery is made at an ancient ruins, but not where the discovery was made. -~ Game graphics have been recompressed to reduce memory usage and improve performance. -~ Tooltips added to tech queue. -~ Sitrep list now has an all/none toggle -~ Turn autocycling toggle introduced in moderator games allowing the game to go on to next turn if all empires have submitted orders without human intervention -~ Option to limit the number of processing threads used for effects evaluation -~ Sitreps for fleet arrivals substantially improved -~ ~ A single ship arriving will have its name and type displayed -~ ~ A fleet arriving will also state how many ships in the fleet -~ ~ Lone monsters arriving will have their type displayed -~ Save and Load dialogues have been substantially reworked displaying info on the game, the player & empire name, etc. NB the autosave folder is still there, you need to double click the [.] option to take you back to the load dialogue screen. -~ The Objects list and filter dialogues have been reworked with sortable columns and all/none selection -~ The "X" close button on Pedia windows is now hidden in contexts where the Pedia window can't be closed -~ Ship Design Screen: -~ ~ Layout has been rearranged -~ ~ Made clicking the background of the main design panel (the hull) show the hull in the Pedia -~ ~ Ship designs list has a right-click option to rename a design -~ ~ Added dragging hulls and complete designs from the ship designs list to the main design panel -~ ~ Added "redundant" toggle on parts palette, to turn on or off filtering superfluous parts -~ Set multiplayer autosave option setting default to true -~ Removed setting of map Pedia article when opening the research or production screens -~ If an error occurs in the AI Python scripts, it is displayed in the chat window (not just silently logged) -~ Multi-coloured system names for systems containing planets owned by different empires -~ Fleet icons are now more complicated and informative -~ Added options to control keypress and mouse button repeat delays and intervals +~ New and updated icons for various ship parts, buildings, techs +~ Added right-click popup on players list to look up empires +~ Fleet management improvements +~ ~ New automatically created fleets are set to aggressive if they contain warships, or passive otherwise +~ ~ The new fleet aggression toggle can be set to automatically decide aggression for new fleets, as above +~ ~ Right-clicking fleets or ships gives management commands: merging, splitting, and splitting by design +~ Added changing expression planet happiness icon +~ Production queue made to highlight items in the currently selected system +~ Added production queue right-click menu commands +~ Improved rendering of visibility circles +~ Limited copy-cut-paste functionality in some GUI text controls +~ Indicated mountable slot types in part descriptions +~ Made some multiline text areas scroll multiple lines per single mousewheel tick +~ Fixed longstanding missing item drop sound issue on options screen +~ Made looking up techs, buildings, ship parts or hulls from the map screen just show the pedia entry, and not open the design, production, or tech screens +~ Increased thresholds for displaying wasted PP or RP notifications, to avoid them appearing due to rounding errors +~ Sorted system droplist by system name (except for Deep Space, which are scatted through the list) +~ Numerous pedia text and GUI control placement layout adjustments +~ Tweaked cloud spawning effects +~ Design screen disables the confirm button to prevent creating duplicate designs +~ ~ Added tooltips for design confirm button to explain why it is sometimes disabled +~ Restored system name colouring by owners, including multiple colours when shared between empires +~ Added right-click command to rename ship designs +~ Fixed / implemented mouseover highlighting in popup menus +~ Made clicking on a non-command in a popup menu not cancel the popup +~ Fixed a few places where changing text or list contents would annoyingly reset list scroll positions +~ Hid fleet/ship names when panels are small to avoid overlapping with destination text +~ Added Linux install targets and icons +~ Added toggle buttons for info windows: graph, messages, empires +~ Modified rendering of GUI windows to show a pointed bottom-right corner when resizable, and a cut off corner when not +~ Added buttons to adjust objects list window visibility filters more quickly +~ Added tooltips to tech tree tech panels, production queue +~ Made production / research queue widths adjustable in options +~ Reworked fleet icons to be more complicated and informative +~ Added All / None sitrep filter toggles +~ Enabled sitrep filters for observers +~ Added turn auto-cycle button, which automatically ends turns for players (immediately) or moderators (when all players have finished their turn) +~ Made clicking empire PP and RP total indicators open the production or research screens +~ Improved disabling of order-giving GUI controls when a player's order giving is disabled between turns +~ Redesign of save/load file dialog, now showing information about each game, and sorting by file modification date +~ Added automatic generation of repeat keypresses while holding down a key +~ ~ Rates and delays for keyboard and mouse repeat have options in the options screen +~ Made objects list columns configurable by right-click popup menu +~ Enabled (glitchy) sorting of objects by any column by left-clicking the column heading +~ Incomplete ship design name changes are now immediately reflected in the pedia description +~ Added Available, Unavailable, and Redundant parts filtering on the design screen +~ Added right-click popup to enqueue production items and techs on their respective screens +~ Hulls and designs can be dragged from the list to the main design panel to load them (and can also be double-clicked, as before) +~ Made clicking the design background image show the hull in the pedia instead of the incomplete design +~ Added toggle to pin GUI windows in place +~ Removed X from top-right of windows that can't be closed +~ Changed the default design screen layout Balancing: -~ Replaced the "Weapons" species bonus with piloting skills -~ ~ Ship weapons do more or less damage based on how good the piloting species are, most species are average but some can do up to 50% more damage, or 25% less. -~ Organic Growth introduced for organic line hulls meaning their initial structure is low but it grows over time -~ Core slot introduced for some hull types, some parts made core slot only -~ Planets now lose 2 of any meter above target value on the first turn after any focus change. -~ Bombard order introduced, some parts now only bombard a planet if ordered to do so. -~ Interstellar Logistics focus now adds a flat +3 to supply range -~ Tech tree tweaks removing some prerequisite techs and merging some bonuses. -~ Base troop level on native planets is increased to 12. -~ Some native species get basic shields and defenses to balance their relative in-game power once captured -~ Various tweaks made to the Robotic line of hulls -~ ~ Tweaked research costs of Robotic line techs -~ ~ Introduced Robotic Interface Shields for robotic hull ships with robotic crews -~ ~ Spatial Flux hull made substantially cheaper and buildable from just a drydock -~ ~ Robotic Hull, Titanic Hull, Self Gravitating Hull and Logistics Facilitator have their costs reduced substantially to bring them in line with most other hull types. -~ ~ Self Gravitating and Titanic Hull techs are split into a separate line from Nanorobotic Hull and Transpatial Hull allowing players to choose to research either or both -~ The basic Large hull has its base cost reduced to 30 and starlane speed increased to 60 -~ The basic Medium hull has its base cost reduced to 20 -~ The Psychogenic Domination tech has been reworked to require a focus setting to activate and to only affect ships present in the system. -~ Basic Damage Control, Advanced Damage Control and Fleet Field Repair techs have been reworked/rebalanced -~ Improved engine parts speed boosts -~ Some general rebalancing of ship and hull parts +~ Extensive ship hull rebalancing +~ Made colonization require at least partial visibility of the target planet +~ Made stargate construction require at least 1 population, so the required focus can be set +~ Added penalties to planet resource meters when changing focus, to discourage doing so frequently +~ Tweaked various effects, to ensure intended-bonuses never actually amplify penalties, and penalties never actually give bonuses +~ Various supply mechanics changes +~ ~ Made supply meter grow 1 per turn up to max supply +~ ~ Changed Interstellar Logistics to give a fixed +3 to supply range +~ ~ Planet size affects supply: smaller gives more supply than large +~ ~ Space Elevator gives any planet equivalent supply to tiny planets +~ ~ Species can have good or bad supply traits +~ Increased native planet troop levels, making invasions more costly +~ Adjusted universe generation special distributions +~ Made meters reset to 0 if a planet is conquered, and disabled meter growth on the turn after capture +~ Changed Ion Storms to give fixed 40 point penalty to stealth and vision +~ Made derelict specials stealthy (40 stealth) +~ Adjusted monster spawning rate dependence on galaxy setup setting +~ Damage control techs rebalanced +~ Made Concentration Camps require a population of 3 to be built Bugs: -~ Collective Thought Network research bonus range checking corrected -~ Bug causing display errors in the production queue, including "never" for items that should complete that turn, fixed. -~ Bug in xenophobic self script that could cause it to trigger from outposts with negative population fixed. -~ A homeworld set to the growth focus won't override the homeworld bonus for the same species elsewhere if it has more than one homeworld. -~ Closed a memory leak in the filter condition objects list -~ Increased the threshold for triggering the wasted production warnings to prevent tiny fractions creating spurious warnings. +~ Fixed production costs at start of queue processing, so that processing the queue doesn't affect the costs of other queue items during the same turn. +~ Hopefully fixed issue causing dangling server processes from failed load game attempts, which would prevent starting a new game. +~ Fixed issue with having multiple different production block sizes on the queue leading to incorrect production costs +~ Fixed Collective Thought Network bonus range +~ Fixed bug causing display errors in the production queue, including "never" for items that should complete in one turn +~ Fixed xenophobic self script triggering from outposts with negative population, or from use of exobots +~ Fixed homeworld growth focus overriding homeworld bonus for the same species elsewhere if it has more than one homeworld +~ Fixed crash and memory leaks when filtering the objects list ~ Gaia special will no longer trigger for Exobots on an Adequate planet -~ Terraformers can no longer be built on Adequate Exobot planets -~ Two or more Resonant Moon specials in the same system no longer stack -~ Ships captured by Psionic Snowflakes should now move, scavenge fuel, etc. -~ Option to rename other empires fleets is removed. -~ A ship moving from a system with the derelict special to another system with the derelict special now receives the bonus from the second derelict after the first is removed -~ Scrapping multiple ships at the same time should no longer crash the game or leave some ships unscrapped. -~ Ion Storms changed to give fixed 40 pt penalty to stealth and vision when in storm. -~ Fixed multiplayer galaxy setup so that the galaxy seed is used correctly -~ Experimentor planets should now start on research focus instead of no focus at all. -~ Cosmic Dragons should no longer add the nova bomb activator special to random planets if they're in transit at the end of a turn. -~ The Observatory building and tech have been removed as it was incompatible with current visibility mechanics. -~ Fixed bug that caused colonization of an empire-owned planet to cancel in-progress scrap orders -~ Adjustment to population reduction formula for the Concentration Camps and Evacuation buildings, to correct odd results when target population is substantially below current population -~ Fixes/adjustments to xenophobic races -~ Some fixes to avoid quirky dragging when clicking outside and back into the FreeOrion UI window +~ Fixed issue on OSX where selecting observer or moderator mode in multiplayer lobby could cause a crash +~ Fixed memory leak in tech tree display code +~ Fixed memory leaks in AI ship design code +~ Removed rename command from other empires' fleets' popup menus +~ Fixed issue where failed colonization attempts could leave ships in an inconsistent state +~ Fixed issue where hotkeys would be enabled while entering text, preventing certain letters from being typed +~ Fixed issue where auto-exploring fleets wouldn't update the GUI to show that they had been told to stop exploring +~ Hopefully fixed issue where the system instead of bundled Python framework was being used on OSX +~ Fixed issue with a ship moving from a system with the derelict special to another system with the derelict special not receiving both bonuses +~ Fixed issue with scrapping multiple ships causing a crash +~ Disabled game saving in GUI when doing so could cause problems +~ Stopped Asteroid Snails from moving +~ Fixed (broken) use of galaxy setup seed in multiplayer games +~ Fixed crash with observers enabling multiplayer autosave +~ Fixed glitchy window dragging +~ Fixed random seeding functions to properly seed more random number generation +~ Fixed some crashes when a model dialog was open (such as a droplist) when turn updates arrived and caused a GUI refresh +~ Fixed Cosmic Dragon adding Nova Bomb Activator specials to any / all planets when it was not in a system +~ Attempted to fix some quirky GUI state issues when alt-tabbing or clicking in/out of the game window +~ Stopped setting of galaxy map pedia article when opening the research or production screens +~ Adjusted population reduction formula for the Concentration Camps and Evacuation buildings, to correct odd results when target population is substantially below current population +~ Adjusted colonization process so colonizing an outpost doesn't cancel scrap orders on buildings on the planet +~ Fixed issue with multiplayer chat history display +~ Fixed issue with ships with self-repairing hulls starting with 0 structure when produced +~ Fixed rare situation where if a floater is the only monster outside a system, it could spawn forests at almost every system +~ Removed design window options for moderators in multiplayer to prevent crashes v0.4.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
From: <dil...@us...> - 2015-03-22 01:45:02
|
Revision: 8050 http://sourceforge.net/p/freeorion/code/8050 Author: dilvish-fo Date: 2015-03-22 01:44:54 +0000 (Sun, 22 Mar 2015) Log Message: ----------- increased cost of tech victory; now scales to galaxy size Modified Paths: -------------- trunk/FreeOrion/default/techs.txt Modified: trunk/FreeOrion/default/techs.txt =================================================================== --- trunk/FreeOrion/default/techs.txt 2015-03-21 19:20:54 UTC (rev 8049) +++ trunk/FreeOrion/default/techs.txt 2015-03-22 01:44:54 UTC (rev 8050) @@ -907,7 +907,7 @@ short_description = "VICTORY_SHORT_DESC" techtype = Application category = "LEARNING_CATEGORY" - researchcost = 25000 * [[TECH_COST_MULTIPLIER]] + researchcost = 500 * GalaxySize * [[TECH_COST_MULTIPLIER]] researchturns = 20 prerequisites = [ "CON_TRANS_ARCH" |
From: <ma...@us...> - 2015-03-21 03:39:38
|
Revision: 8048 http://sourceforge.net/p/freeorion/code/8048 Author: matgb Date: 2015-03-21 03:39:35 +0000 (Sat, 21 Mar 2015) Log Message: ----------- Updated Artificial Planet for the new colonisation mechanics, tweaked their costs and introduced two new types. Modified Paths: -------------- trunk/FreeOrion/default/buildings.txt trunk/FreeOrion/default/stringtables/en.txt trunk/FreeOrion/default/techs.txt Modified: trunk/FreeOrion/default/buildings.txt =================================================================== --- trunk/FreeOrion/default/buildings.txt 2015-03-19 22:02:21 UTC (rev 8047) +++ trunk/FreeOrion/default/buildings.txt 2015-03-21 03:39:35 UTC (rev 8048) @@ -805,11 +805,11 @@ ] activation = Star type = Red effects = [ - SetStarType type = BlackHole + SetStarType type = BlackHole GenerateSitRepMessage message = "EFFECT_BLACKHOLE" icon = "icons/building/blackhole.png" - parameters = tag = "planet" data = Source.SystemID + parameters = tag = "system" data = Source.SystemID empire = Source.Owner ] @@ -1238,13 +1238,16 @@ BuildingType name = "BLD_ART_PLANET" description = "BLD_ART_PLANET_DESC" - buildcost = 2000 - buildtime = 15 + buildcost = 800 + buildtime = 8 location = And [ Planet Not Contains Building name = "BLD_ART_PLANET" + Not Contains Building name = "BLD_ART_FACTORY_PLANET" + Not Contains Building name = "BLD_ART_PARADISE_PLANET" OwnedBy empire = Source.Owner Planet type = [Asteroids GasGiant] + Population high = 0 ] effectsgroups = [ EffectsGroup @@ -1253,16 +1256,102 @@ Planet ] activation = Source - effects = SetPlanetType type = Barren + effects = [ + SetPlanetType type = Barren + GenerateSitRepMessage + message = "EFFECT_ART_PLANET" + icon = "icons/specials_large/tidal_lock.png" + parameters = tag = "planet" data = Target.ID + empire = Source.Owner + ] EffectsGroup scope = Source activation = Source effects = Destroy ] - icon = "" + icon = "icons/specials_huge/tidal_lock.png" BuildingType + name = "BLD_ART_FACTORY_PLANET" + description = "BLD_ART_FACTORY_PLANET_DESC" + buildcost = 800 + ( 70 * [[COLONY_UPKEEP_MULTIPLICATOR]] ) + buildtime = 12 + location = And [ + Planet + Not Contains Building name = "BLD_ART_PLANET" + Not Contains Building name = "BLD_ART_FACTORY_PLANET" + Not Contains Building name = "BLD_ART_PARADISE_PLANET" + OwnedBy empire = Source.Owner + Planet type = [Asteroids GasGiant] + OwnerHasTech name = "PRO_EXOBOTS" + Population high = 0 + ] + effectsgroups = [ + EffectsGroup + scope = And [ + Object id = Source.PlanetID + Planet + ] + activation = Source + effects = [ + SetPlanetType type = Barren + SetSpecies name = "SP_EXOBOT" + SetPopulation value = 1 + GenerateSitRepMessage + message = "EFFECT_ART_PLANET" + icon = "icons/species/robotic-01.png" + parameters = tag = "planet" data = Target.ID + empire = Source.Owner + ] + + EffectsGroup + scope = Source + activation = Source + effects = Destroy + ] + icon = "icons/species/robotic-01.png" + +BuildingType + name = "BLD_ART_PARADISE_PLANET" + description = "BLD_ART_PARADISE_PLANET_DESC" + buildcost = 1000 + buildtime = 10 + location = And [ + Planet + Not Contains Building name = "BLD_ART_PLANET" + Not Contains Building name = "BLD_ART_FACTORY_PLANET" + Not Contains Building name = "BLD_ART_PARADISE_PLANET" + OwnedBy empire = Source.Owner + Planet type = [Asteroids GasGiant] + OwnerHasTech name = "GRO_GAIA_TRANS" + Population high = 0 + ] + effectsgroups = [ + EffectsGroup + scope = And [ + Object id = Source.PlanetID + Planet + ] + activation = Source + effects = [ + SetPlanetType type = Barren + AddSpecial name = "GAIA_SPECIAL" + GenerateSitRepMessage + message = "EFFECT_ART_PLANET" + icon = "icons/specials_large/gaia.png" + parameters = tag = "planet" data = Target.ID + empire = Source.Owner + ] + + EffectsGroup + scope = Source + activation = Source + effects = Destroy + ] + icon = "icons/specials_huge/gaia.png" + +BuildingType name = "BLD_ART_MOON" description = "BLD_ART_MOON_DESC" buildcost = 250 Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-03-19 22:02:21 UTC (rev 8047) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-03-21 03:39:35 UTC (rev 8048) @@ -4185,6 +4185,7 @@ EFFECT_GAIAN_TERRAFORM EFFECT_TERRAFORM EFFECT_BLACKHOLE +EFFECT_ART_PLANET EFFECT_TAME_MONSTER_HATCHED EFFECT_TAME_MONSTER_MATURED SITREP_BUILDING_BUILT @@ -4493,10 +4494,15 @@ Terraform EFFECT_BLACKHOLE -%planet% has been collapsed to create a Black Hole. -EFFECT_TERRAFORM_LABEL +%system% has been collapsed to create a black hole. +EFFECT_BLACKHOLE_LABEL Black Hole +EFFECT_ART_PLANET +%planet% has been turned into an artificial planet. +EFFECT_ART_PLANET_LABEL +Black Hole + EFFECT_STARVATION Famine struck %planet%. EFFECT_STARVATION_LABEL @@ -7877,8 +7883,10 @@ Artificial Planet CON_ART_PLANET_DESC -Gas giants and asteroid belts offer unique opportunities and resources, not only as sites for acquiring valuable - and on occasion extremely rare - resources, but as raw materials in and of themselves for the production of artificial planets. Such planets would offer new centers for production in previously empty or entirely occupied systems. In addition, various key features of the planet can be modified or added during the construction process, potentially allowing the planets size and environment to be specified, or certain planet specials to be added. +'''Gas giants and asteroid belts offer unique opportunities and resources, not only as sites for acquiring valuable - and on occasion extremely rare - resources, but as raw materials in and of themselves for the production of artificial planets. Such planets would offer new centers for production in previously empty or entirely occupied systems. In addition, various key features of the planet can be modified or added during the construction process, potentially allowing the planets size and environment to be specified, or certain planet specials to be added. +On its own, the tech allows for construction of the basic [[buildingtype BLD_ART_PLANET]]. If the empire also has [[tech GRO_GAIA_TRANS]], then [[buildingtype BLD_ART_PARADISE_PLANET]] may be built. If the empire has [[tech PRO_EXOBOTS]] then [[buildingtype BLD_ART_FACTORY_PLANET]] can be built.''' + CON_PALACE_EXCLUDE Palace Excluder @@ -8972,6 +8980,18 @@ BLD_ART_PLANET_DESC Forms an artificial planet from an asteroid belt or a gas giant. Asteroids become tiny barren planets and gas giants become huge barren planets. This process must be enacted at an outpost on either a gas giant or an asteroid belt. +BLD_ART_FACTORY_PLANET +Artificial Factory World + +BLD_ART_FACTORY_PLANET_DESC +Forms an artificial planet from an asteroid belt or a gas giant, and then populates it with Exobots. Asteroids become tiny barren planets and gas giants become huge barren planets. This process must be enacted at an outpost on either a gas giant or an asteroid belt. + +BLD_ART_PARADISE_PLANET +Artificial Paradise World + +BLD_ART_PARADISE_PLANET_DESC +Forms an artificial paradise planet from an asteroid belt or a gas giant. Asteroids become tiny barren planets and gas giants become huge barren planets—the planet will have the Gaia special which will terraform it to suit its inhabitants. This process must be enacted at an outpost on either a gas giant or an asteroid belt. + BLD_ART_MOON Artificial Moon Modified: trunk/FreeOrion/default/techs.txt =================================================================== --- trunk/FreeOrion/default/techs.txt 2015-03-19 22:02:21 UTC (rev 8047) +++ trunk/FreeOrion/default/techs.txt 2015-03-21 03:39:35 UTC (rev 8048) @@ -1795,13 +1795,17 @@ short_description = "BUILDING_UNLOCK_SHORT_DESC" techtype = Application category = "CONSTRUCTION_CATEGORY" - researchcost = 500 * [[TECH_COST_MULTIPLIER]] + researchcost = 300 * [[TECH_COST_MULTIPLIER]] researchturns = 8 prerequisites = [ "CON_ART_HEAVENLY" "CON_GAL_INFRA" ] - unlock = Item type = Building name = "BLD_ART_PLANET" + unlock = [ + Item type = Building name = "BLD_ART_PLANET" + Item type = Building name = "BLD_ART_FACTORY_PLANET" + Item type = Building name = "BLD_ART_PARADISE_PLANET" + ] //######################################################## |
From: <dil...@us...> - 2015-03-19 22:02:29
|
Revision: 8047 http://sourceforge.net/p/freeorion/code/8047 Author: dilvish-fo Date: 2015-03-19 22:02:21 +0000 (Thu, 19 Mar 2015) Log Message: ----------- patch by Chriss removing now-unneeded references to the bullet library Modified Paths: -------------- trunk/FreeOrion/client/human/CMakeLists.txt Modified: trunk/FreeOrion/client/human/CMakeLists.txt =================================================================== --- trunk/FreeOrion/client/human/CMakeLists.txt 2015-03-19 21:58:39 UTC (rev 8046) +++ trunk/FreeOrion/client/human/CMakeLists.txt 2015-03-19 22:02:21 UTC (rev 8047) @@ -19,7 +19,6 @@ PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2) find_package(Ogg REQUIRED) find_package(Vorbis REQUIRED) -find_package(Bullet REQUIRED) if(WIN32) find_package(GLEW REQUIRED) @@ -32,7 +31,6 @@ ${SDL2_INCLUDE_DIR} ${OGG_INCLUDE_DIR} ${VORBIS_INCLUDE_DIR} - ${BULLET_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/PagedGeometry/include ) @@ -43,7 +41,6 @@ add_definitions(-DFREEORION_BUILD_HUMAN) -link_directories(${BULLET_LIB_DIR}) if (CMAKE_COMPILER_IS_GNUCXX) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") @@ -173,7 +170,6 @@ ${SDL2_LIBRARIES} ${OGG_LIBRARY} ${VORBIS_LIBRARIES} - ${BULLET_LIBRARIES} ${ZLIB_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ) |
From: <ma...@us...> - 2015-03-19 21:58:47
|
Revision: 8046 http://sourceforge.net/p/freeorion/code/8046 Author: matgb Date: 2015-03-19 21:58:39 +0000 (Thu, 19 Mar 2015) Log Message: ----------- Adding Sitrep for Artificial Black Hole creation and fixing previous error Modified Paths: -------------- trunk/FreeOrion/default/buildings.txt trunk/FreeOrion/default/stringtables/en.txt Removed Paths: ------------- trunk/FreeOrion/blackholegen.patch Deleted: trunk/FreeOrion/blackholegen.patch =================================================================== --- trunk/FreeOrion/blackholegen.patch 2015-03-18 22:38:06 UTC (rev 8045) +++ trunk/FreeOrion/blackholegen.patch 2015-03-19 21:58:39 UTC (rev 8046) @@ -1,50 +0,0 @@ -Index: default/buildings.txt -=================================================================== ---- default/buildings.txt (revision 8044) -+++ default/buildings.txt (working copy) -@@ -804,7 +805,14 @@ - System - ] - activation = Star type = Red -- effects = SetStarType type = BlackHole -+ effects = [ -+ SetStarType type = BlackHole -+ GenerateSitRepMessage -+ message = "EFFECT_BLACKHOLE" -+ icon = "icons/building/blackhole.png" -+ parameters = tag = "planet" data = Source.SystemID -+ empire = Source.Owner -+ ] - - EffectsGroup - scope = Source -Index: default/stringtables/en.txt -=================================================================== ---- default/stringtables/en.txt (revision 8044) -+++ default/stringtables/en.txt (working copy) -@@ -4178,11 +4178,13 @@ - SITREP_PLANET_CAPTURED - SITREP_PLANET_COLONIZED - SITREP_NEW_COLONY_ESTABLISHED -+SITREP_POP_THRESHOLD - SITREP_PLANET_BOMBARDED_AT_SYSTEM - SITREP_UNOWNED_PLANET_BOMBARDED_AT_SYSTEM - EFFECT_CONC_CAMP_COMLETE - EFFECT_GAIAN_TERRAFORM - EFFECT_TERRAFORM -+EFFECT_BLACKHOLE - EFFECT_TAME_MONSTER_HATCHED - EFFECT_TAME_MONSTER_MATURED - SITREP_BUILDING_BUILT -@@ -4490,6 +4492,11 @@ - EFFECT_TERRAFORM_LABEL - Terraform - -+EFFECT_BLACKHOLE -+%planet% has been collapsed to create a Black Hole. -+EFFECT_TERRAFORM_LABEL -+Black Hole -+ - EFFECT_STARVATION - Famine struck %planet%. - EFFECT_STARVATION_LABEL Modified: trunk/FreeOrion/default/buildings.txt =================================================================== --- trunk/FreeOrion/default/buildings.txt 2015-03-18 22:38:06 UTC (rev 8045) +++ trunk/FreeOrion/default/buildings.txt 2015-03-19 21:58:39 UTC (rev 8046) @@ -804,7 +804,14 @@ System ] activation = Star type = Red - effects = SetStarType type = BlackHole + effects = [ + SetStarType type = BlackHole + GenerateSitRepMessage + message = "EFFECT_BLACKHOLE" + icon = "icons/building/blackhole.png" + parameters = tag = "planet" data = Source.SystemID + empire = Source.Owner + ] EffectsGroup scope = Source Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-03-18 22:38:06 UTC (rev 8045) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-03-19 21:58:39 UTC (rev 8046) @@ -4178,11 +4178,13 @@ SITREP_PLANET_CAPTURED SITREP_PLANET_COLONIZED SITREP_NEW_COLONY_ESTABLISHED +SITREP_POP_THRESHOLD SITREP_PLANET_BOMBARDED_AT_SYSTEM SITREP_UNOWNED_PLANET_BOMBARDED_AT_SYSTEM EFFECT_CONC_CAMP_COMLETE EFFECT_GAIAN_TERRAFORM EFFECT_TERRAFORM +EFFECT_BLACKHOLE EFFECT_TAME_MONSTER_HATCHED EFFECT_TAME_MONSTER_MATURED SITREP_BUILDING_BUILT @@ -4490,6 +4492,11 @@ EFFECT_TERRAFORM_LABEL Terraform +EFFECT_BLACKHOLE +%planet% has been collapsed to create a Black Hole. +EFFECT_TERRAFORM_LABEL +Black Hole + EFFECT_STARVATION Famine struck %planet%. EFFECT_STARVATION_LABEL |
From: <ma...@us...> - 2015-03-18 22:38:07
|
Revision: 8045 http://sourceforge.net/p/freeorion/code/8045 Author: matgb Date: 2015-03-18 22:38:06 +0000 (Wed, 18 Mar 2015) Log Message: ----------- Added sitrep for artificial black hole Added Paths: ----------- trunk/FreeOrion/blackholegen.patch Added: trunk/FreeOrion/blackholegen.patch =================================================================== --- trunk/FreeOrion/blackholegen.patch (rev 0) +++ trunk/FreeOrion/blackholegen.patch 2015-03-18 22:38:06 UTC (rev 8045) @@ -0,0 +1,50 @@ +Index: default/buildings.txt +=================================================================== +--- default/buildings.txt (revision 8044) ++++ default/buildings.txt (working copy) +@@ -804,7 +805,14 @@ + System + ] + activation = Star type = Red +- effects = SetStarType type = BlackHole ++ effects = [ ++ SetStarType type = BlackHole ++ GenerateSitRepMessage ++ message = "EFFECT_BLACKHOLE" ++ icon = "icons/building/blackhole.png" ++ parameters = tag = "planet" data = Source.SystemID ++ empire = Source.Owner ++ ] + + EffectsGroup + scope = Source +Index: default/stringtables/en.txt +=================================================================== +--- default/stringtables/en.txt (revision 8044) ++++ default/stringtables/en.txt (working copy) +@@ -4178,11 +4178,13 @@ + SITREP_PLANET_CAPTURED + SITREP_PLANET_COLONIZED + SITREP_NEW_COLONY_ESTABLISHED ++SITREP_POP_THRESHOLD + SITREP_PLANET_BOMBARDED_AT_SYSTEM + SITREP_UNOWNED_PLANET_BOMBARDED_AT_SYSTEM + EFFECT_CONC_CAMP_COMLETE + EFFECT_GAIAN_TERRAFORM + EFFECT_TERRAFORM ++EFFECT_BLACKHOLE + EFFECT_TAME_MONSTER_HATCHED + EFFECT_TAME_MONSTER_MATURED + SITREP_BUILDING_BUILT +@@ -4490,6 +4492,11 @@ + EFFECT_TERRAFORM_LABEL + Terraform + ++EFFECT_BLACKHOLE ++%planet% has been collapsed to create a Black Hole. ++EFFECT_TERRAFORM_LABEL ++Black Hole ++ + EFFECT_STARVATION + Famine struck %planet%. + EFFECT_STARVATION_LABEL |
From: <ve...@us...> - 2015-03-18 19:58:15
|
Revision: 8044 http://sourceforge.net/p/freeorion/code/8044 Author: vezzra Date: 2015-03-18 19:58:12 +0000 (Wed, 18 Mar 2015) Log Message: ----------- Fixed ctrl-click-for-right-click on OSX Modified Paths: -------------- trunk/FreeOrion/client/human/HumanClientApp.cpp Modified: trunk/FreeOrion/client/human/HumanClientApp.cpp =================================================================== --- trunk/FreeOrion/client/human/HumanClientApp.cpp 2015-03-17 19:51:18 UTC (rev 8043) +++ trunk/FreeOrion/client/human/HumanClientApp.cpp 2015-03-18 19:58:12 UTC (rev 8044) @@ -175,6 +175,9 @@ #ifdef ENABLE_CRASH_BACKTRACE signal(SIGSEGV, SigHandler); #endif +#ifdef FREEORION_MACOSX + SDL_SetHint(SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK, "1"); +#endif m_fsm = new HumanClientFSM(*this); const std::string HUMAN_CLIENT_LOG_FILENAME((GetUserDir() / "freeorion.log").string()); |
From: <geo...@us...> - 2015-03-17 19:51:25
|
Revision: 8043 http://sourceforge.net/p/freeorion/code/8043 Author: geoffthemedio Date: 2015-03-17 19:51:18 +0000 (Tue, 17 Mar 2015) Log Message: ----------- Trivial warning fix. Modified Paths: -------------- trunk/FreeOrion/UI/CombatReport/GraphicalSummary.cpp Modified: trunk/FreeOrion/UI/CombatReport/GraphicalSummary.cpp =================================================================== --- trunk/FreeOrion/UI/CombatReport/GraphicalSummary.cpp 2015-03-17 08:16:00 UTC (rev 8042) +++ trunk/FreeOrion/UI/CombatReport/GraphicalSummary.cpp 2015-03-17 19:51:18 UTC (rev 8043) @@ -47,7 +47,7 @@ int MIN_SIDE_BAR_WIDTH = 100; int MIN_SIDE_BAR_HEIGHT = 40; - const float EPSILON = 0.00001; + const float EPSILON = 0.00001f; const std::string OPTIONS_ROOT = "UI.combat.summary.graph."; |
From: <ve...@us...> - 2015-03-17 08:16:07
|
Revision: 8042 http://sourceforge.net/p/freeorion/code/8042 Author: vezzra Date: 2015-03-17 08:16:00 +0000 (Tue, 17 Mar 2015) Log Message: ----------- Patch by MatGB increasing research costs for Heavy Asteroid Hull tech and making it prerequisite for the Scattered Asteroid Hull tech. Modified Paths: -------------- trunk/FreeOrion/default/techs.txt Modified: trunk/FreeOrion/default/techs.txt =================================================================== --- trunk/FreeOrion/default/techs.txt 2015-03-16 15:25:19 UTC (rev 8041) +++ trunk/FreeOrion/default/techs.txt 2015-03-17 08:16:00 UTC (rev 8042) @@ -2074,7 +2074,7 @@ short_description = "SHIP_HULL_UNLOCK_SHORT_DESC" techtype = Application category = "SHIPS_CATEGORY" - researchcost = 20 * [[TECH_COST_MULTIPLIER]] + researchcost = 80 * [[TECH_COST_MULTIPLIER]] researchturns = 8 prerequisites = "SHP_ASTEROID_REFORM" unlock = [ @@ -2152,7 +2152,10 @@ category = "SHIPS_CATEGORY" researchcost = 145 * [[TECH_COST_MULTIPLIER]] researchturns = 5 - prerequisites = "SHP_MINIAST_SWARM" + prerequisites = [ + "SHP_MINIAST_SWARM" + "SHP_HEAVY_AST_HULL" + ] unlock = [ Item type = ShipHull name = "SH_SCATTERED_ASTEROID" Item type = Building name = "BLD_SHIPYARD_AST_REF" |
From: <dil...@us...> - 2015-03-16 15:25:27
|
Revision: 8041 http://sourceforge.net/p/freeorion/code/8041 Author: dilvish-fo Date: 2015-03-16 15:25:19 +0000 (Mon, 16 Mar 2015) Log Message: ----------- minor clarification of starname clustering convergence loop Modified Paths: -------------- trunk/FreeOrion/default/python/universe_generation/starnames.py Modified: trunk/FreeOrion/default/python/universe_generation/starnames.py =================================================================== --- trunk/FreeOrion/default/python/universe_generation/starnames.py 2015-03-15 13:18:37 UTC (rev 8040) +++ trunk/FreeOrion/default/python/universe_generation/starnames.py 2015-03-16 15:25:19 UTC (rev 8041) @@ -61,17 +61,16 @@ clusters = [[], []] clusters[0] = assign_clusters(all_coords, centers) # assign clusters based on init centers old_c = 0 - for loop in range(1): # main loop to try getting some convergence of center assignments + num_convergence_loops = 1 # if full convergence is deemed important then use a higher humber here + for loop in range(num_convergence_loops): # main loop to try getting some convergence of center assignments recalc_centers(centers, all_coords, clusters[old_c]) # get new centers clusters[1-old_c] = assign_clusters(all_coords, centers) # assign clusters based on new centers if clusters[0] == clusters[1]: break # stop iterating if no change in cluster assignments old_c = 1-old_c else: - # TODO: this check will never work loop will be always 0. - # if loop > 0: #if here at loop 0, then didn't try for convergence - # print "falling through system clustering iteration loop without convergence" - pass + if loop > 0: #if here at loop 0, then didn't try for convergence + print "falling through system clustering iteration loop without convergence" return clusters[1 - old_c] |
From: <ve...@us...> - 2015-03-15 13:18:45
|
Revision: 8040 http://sourceforge.net/p/freeorion/code/8040 Author: vezzra Date: 2015-03-15 13:18:37 +0000 (Sun, 15 Mar 2015) Log Message: ----------- Patch by vincele adding missing super tester colony building, slightly edited by me. Modified Paths: -------------- trunk/FreeOrion/default/buildings.txt trunk/FreeOrion/default/col_bld_gen.py trunk/FreeOrion/default/col_buildings.txt trunk/FreeOrion/default/preunlocked_items.txt trunk/FreeOrion/default/stringtables/en.txt Modified: trunk/FreeOrion/default/buildings.txt =================================================================== --- trunk/FreeOrion/default/buildings.txt 2015-03-15 01:42:16 UTC (rev 8039) +++ trunk/FreeOrion/default/buildings.txt 2015-03-15 13:18:37 UTC (rev 8040) @@ -1789,8 +1789,8 @@ BuildingType - name = "BLD_SUPER_TESTERS" - description = "BLD_SUPER_TESTERS_DESC" + name = "BLD_SUPER_TEST" + description = "BLD_SUPER_TEST_DESC" buildcost = 1 buildtime = 1 location = Planet Modified: trunk/FreeOrion/default/col_bld_gen.py =================================================================== --- trunk/FreeOrion/default/col_bld_gen.py 2015-03-15 01:42:16 UTC (rev 8039) +++ trunk/FreeOrion/default/col_bld_gen.py 2015-03-15 13:18:37 UTC (rev 8040) @@ -4,6 +4,7 @@ species_list = [ + ("SP_SUPER_TEST", "Super Tester", "icons/species/other-04.png"), ("SP_ABADDONI", "Abaddoni", "icons/species/abaddonnian.png"), ("SP_CHATO", "Chato", "icons/species/chato-matou-gormoshk.png"), ("SP_CRAY", "Cray", "icons/species/cray.png"), @@ -127,7 +128,7 @@ with open(os.path.join(outpath, "col_buildings.txt"), "w") as f: for species in species_list: sp_id = species[0] - sp_name = sp_id.split("_")[1] + sp_name = sp_id.split("_", 1)[1] sp_desc_name = species[1] sp_graphic = species[2] if sp_id == "SP_EXOBOT": Modified: trunk/FreeOrion/default/col_buildings.txt =================================================================== --- trunk/FreeOrion/default/col_buildings.txt 2015-03-15 01:42:16 UTC (rev 8039) +++ trunk/FreeOrion/default/col_buildings.txt 2015-03-15 13:18:37 UTC (rev 8040) @@ -1,4 +1,98 @@ BuildingType + name = "BLD_COL_SUPER_TEST" + description = "BLD_COL_SUPER_TEST_DESC" + buildcost = 50 * [[COLONY_UPKEEP_MULTIPLICATOR]] + buildtime = max(5, 1 + + min value = JumpsBetween object = Target.SystemID object = LocalCandidate.SystemID + condition = And [ + Planet + OwnedBy empire = Source.Owner + Species name = "SP_SUPER_TEST" + Population low = [[MIN_RECOLONIZING_SIZE]] + Happiness low = 5 + ResourceSupplyConnected empire = Source.Owner condition = Target + ] + ) + location = And [ + Planet + OwnedBy empire = Source.Owner + Population high = 0 + Not Planet environment = Uninhabitable species = "SP_SUPER_TEST" + Not Contains Building name = "BLD_COL_SUPER_TEST" + ResourceSupplyConnected empire = Source.Owner condition = And [ + Planet + OwnedBy empire = Source.Owner + Species name = "SP_SUPER_TEST" + Population low = [[MIN_RECOLONIZING_SIZE]] + Happiness low = 5 + ] + ] + EnqueueLocation = And [ + Planet + OwnedBy empire = Source.Owner + Population high = 0 + Not Planet environment = Uninhabitable species = "SP_SUPER_TEST" + Not Contains Building name = "BLD_COL_SUPER_TEST" + Not Enqueued type = Building name = "BLD_COL_SUPER_TEST" + ResourceSupplyConnected empire = Source.Owner condition = And [ + Planet + OwnedBy empire = Source.Owner + Species name = "SP_SUPER_TEST" + Population low = [[MIN_RECOLONIZING_SIZE]] + Happiness low = 5 + ] + ] + effectsgroups = [ + EffectsGroup + scope = And [ + Object id = Source.PlanetID + Planet + ] + activation = And [ + Not OwnerHasTech name = "GRO_LIFECYCLE_MAN" + Turn low = Source.CreationTurn + 1 high = Source.CreationTurn + 1 + ] + effects = [ + SetSpecies name = "SP_SUPER_TEST" + SetPopulation value = 1 + ] + EffectsGroup + scope = And [ + Object id = Source.PlanetID + Planet + ] + activation = And [ + OwnerHasTech name = "GRO_LIFECYCLE_MAN" + Turn low = Source.CreationTurn + 1 high = Source.CreationTurn + 1 + ] + effects = [ + SetSpecies name = "SP_SUPER_TEST" + SetPopulation value = [[MIN_RECOLONIZING_SIZE]] + ] + EffectsGroup + scope = And [ + Object id = Source.PlanetID + Planet + ] + activation = Turn low = Source.CreationTurn + 1 high = Source.CreationTurn + 1 + effects = [ + GenerateSitRepMessage + message = "SITREP_NEW_COLONY_ESTABLISHED" + icon = "icons/species/other-04.png" + parameters = [ + tag = "species" data = "SP_SUPER_TEST" + tag = "planet" data = Target.ID + ] + empire = Source.Owner + ] + EffectsGroup + scope = Source + activation = Turn low = Source.CreationTurn + 2 + effects = Destroy + ] + icon = "icons/building/generic_building.png" + +BuildingType name = "BLD_COL_ABADDONI" description = "BLD_COL_ABADDONI_DESC" buildcost = 50 * [[COLONY_UPKEEP_MULTIPLICATOR]] Modified: trunk/FreeOrion/default/preunlocked_items.txt =================================================================== --- trunk/FreeOrion/default/preunlocked_items.txt 2015-03-15 01:42:16 UTC (rev 8039) +++ trunk/FreeOrion/default/preunlocked_items.txt 2015-03-15 13:18:37 UTC (rev 8040) @@ -10,6 +10,7 @@ Item type = Building name = "BLD_SHIPYARD_BASE" Item type = Building name = "BLD_SHIPYARD_ORBITAL_DRYDOCK" Item type = Building name = "BLD_EVACUATION" +Item type = Building name = "BLD_COL_SUPER_TEST" Item type = Building name = "BLD_COL_ABADDONI" Item type = Building name = "BLD_COL_CHATO" Item type = Building name = "BLD_COL_CRAY" @@ -30,7 +31,7 @@ Item type = Building name = "BLD_COL_TAEGHIRUS" Item type = Building name = "BLD_COL_TRITH" Item type = Building name = "BLD_COL_UGMORS" -Item type = Building name = "BLD_SUPER_TESTERS" +Item type = Building name = "BLD_SUPER_TEST" Item type = Tech name = "SPY_DETECT_1" Item type = Tech name = "SPY_PLANET_STEALTH_MOD" Item type = Tech name = "DEF_ROOT_DEFENSE" Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-03-15 01:42:16 UTC (rev 8039) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-03-15 13:18:37 UTC (rev 8040) @@ -8644,9 +8644,9 @@ Represents imperial power and prestige and functions as a center of control for the empire's holdings.''' -BLD_SUPER_TESTERS +BLD_SUPER_TEST Super-Tester Takeover -BLD_SUPER_TESTERS_DESC +BLD_SUPER_TEST_DESC '''Switches the species of the planet to Super-Testers. For Official Testing Purposes, or for cheating.''' BLD_SHIPYARD_BASE @@ -9161,7 +9161,13 @@ BLD_COL_EXOBOT_DESC This building will construct an Exobot colony at an outpost. Contrary to the colony buildings of other species, an Exobot colony does not need an already existing Exobot colony within supply range, as the Exobots are constructed as part of the colony directly planetside. However, because of that they are more expensive to build, and they still need an empire owned planet within supply range. +BLD_COL_SUPER_TEST +Super Tester Colony +BLD_COL_SUPER_TEST_DESC +This building can only build at an outpost, and will upgrade that outpost to a new Super Tester colony. Minimum build time depends on the jump distance to the nearest Super Tester colony, and will increase the farther away it is. + + ############################################################# #### Hull/Part Description Templates #### ############################################################# |
From: <dil...@us...> - 2015-03-15 01:42:18
|
Revision: 8039 http://sourceforge.net/p/freeorion/code/8039 Author: dilvish-fo Date: 2015-03-15 01:42:16 +0000 (Sun, 15 Mar 2015) Log Message: ----------- adjusted ObjectListWnd code to use UserString to get text for "Any" Modified Paths: -------------- trunk/FreeOrion/UI/ObjectListWnd.cpp trunk/FreeOrion/default/stringtables/en.txt Modified: trunk/FreeOrion/UI/ObjectListWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-15 01:34:23 UTC (rev 8038) +++ trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-15 01:42:16 UTC (rev 8039) @@ -386,7 +386,7 @@ std::vector< const Condition::ConditionBase*> operands1; operands1.push_back( new Condition::Type( new ValueRef::Constant<UniverseObjectType> (OBJ_PLANET)) ); const std::string& text = GetString(); - if (text == "Any") { + if (text == UserString("CONDITION_ANY")) { std::vector<const ValueRef::ValueRefBase<PlanetType>*> copytype; copytype.push_back( new ValueRef::Constant<PlanetType>(PT_ASTEROIDS)); operands1.push_back( new Condition::Not(new Condition::PlanetType(copytype))); @@ -405,7 +405,7 @@ } else if (condition_key == GGWITHPTYPE_CONDITION) { // And [Planet PlanetType PT_GASGIANT ContainedBy And [System Contains PlanetType X]] std::vector< const Condition::ConditionBase*> operands1; const std::string& text = GetString(); - if (text == "Any") { + if (text == UserString("CONDITION_ANY")) { std::vector<const ValueRef::ValueRefBase<PlanetType>*> copytype; copytype.push_back( new ValueRef::Constant<PlanetType>(PT_GASGIANT)); operands1.push_back( new Condition::Not(new Condition::PlanetType(copytype))); @@ -782,7 +782,7 @@ GG::ListBox::iterator row_it = m_string_drop->end(); if (condition_key == GGWITHPTYPE_CONDITION || condition_key == ASTWITHPTYPE_CONDITION ) - row_it = m_string_drop->Insert(new StringRow("Any", GG::Y(ClientUI::Pts()), false)); + row_it = m_string_drop->Insert(new StringRow(UserString("CONDITION_ANY"), GG::Y(ClientUI::Pts()), false)); for (std::vector<std::string>::iterator string_it = type_strings.begin(); string_it != type_strings.end(); ++string_it) { Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-03-15 01:34:23 UTC (rev 8038) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-03-15 01:42:16 UTC (rev 8039) @@ -4127,6 +4127,9 @@ CONDITION_PTYPE_W_AST Asteroids with Planet of type +CONDITION_ANY +Any + ############################################################# #### S I T R E P #### ############################################################# |
From: <dil...@us...> - 2015-03-15 01:34:31
|
Revision: 8038 http://sourceforge.net/p/freeorion/code/8038 Author: dilvish-fo Date: 2015-03-15 01:34:23 +0000 (Sun, 15 Mar 2015) Log Message: ----------- added three condition choices to the ObjectListWnd, specifically directed to helping players locate desirable planets. Modified Paths: -------------- trunk/FreeOrion/UI/ObjectListWnd.cpp trunk/FreeOrion/default/stringtables/en.txt Modified: trunk/FreeOrion/UI/ObjectListWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-14 22:58:02 UTC (rev 8037) +++ trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-15 01:34:23 UTC (rev 8038) @@ -39,6 +39,8 @@ default_columns_widths.push_back(std::make_pair("OBJECT_TYPE", 5*12)); default_columns_widths.push_back(std::make_pair("OWNER", 10*12)); default_columns_widths.push_back(std::make_pair("SPECIES", 8*12)); + default_columns_widths.push_back(std::make_pair("PLANET_TYPE", 8*12)); + default_columns_widths.push_back(std::make_pair("SIZE_AS_DOUBLE", 8*12)); for (unsigned int i = default_columns_widths.size(); i < NUM_COLUMNS; ++i) default_columns_widths.push_back(std::make_pair("", 8*12)); // arbitrary default width @@ -209,6 +211,9 @@ const std::string FOCUSTYPE_CONDITION(UserStringNop("CONDITION_FOCUSTYPE")); const std::string STARTYPE_CONDITION(UserStringNop("CONDITION_STARTYPE")); const std::string METERVALUE_CONDITION(UserStringNop("CONDITION_METERVALUE")); + const std::string HASGROWTHSPECIAL_CONDITION(UserStringNop("CONDITION_HAS_GROWTH_SPECIAL")); + const std::string GGWITHPTYPE_CONDITION(UserStringNop("CONDITION_PTYPE_W_GG")); + const std::string ASTWITHPTYPE_CONDITION(UserStringNop("CONDITION_PTYPE_W_AST")); template <class enumT> ValueRef::ValueRefBase<enumT>* CopyEnumValueRef(const ValueRef::ValueRefBase<enumT>* const value_ref) { @@ -218,20 +223,8 @@ return new ValueRef::Constant<enumT>(enumT(-1)); } - Condition::ConditionBase* CopyCondition(const Condition::ConditionBase* const condition) { - if (dynamic_cast<const Condition::Source* const>(condition)) { - return new Condition::Source(); + std::map<std::string, std::string> object_list_cond_description_map; - } else if (dynamic_cast<const Condition::Homeworld* const>(condition)) { - return new Condition::Homeworld(); - - } else if (dynamic_cast<const Condition::Building* const>(condition)) { - - } - - return new Condition::All(); - } - const std::string& ConditionClassName(const Condition::ConditionBase* const condition) { if (dynamic_cast<const Condition::All* const>(condition)) return ALL_CONDITION; @@ -281,7 +274,12 @@ return STARTYPE_CONDITION; else if (dynamic_cast<const Condition::MeterValue* const>(condition)) return METERVALUE_CONDITION; - else return EMPTY_STRING; + + std::map< std::string, std::string >::iterator desc_it = object_list_cond_description_map.find(condition->Description()); + if (desc_it != object_list_cond_description_map.end()) + return desc_it->second; + + return EMPTY_STRING; } template <typename enumT> @@ -296,23 +294,24 @@ //////////////////////////////////////////////// // ConditionWidget //////////////////////////////////////////////// +const GG::X CONDITION_WIDGET_WIDTH(380); + class ConditionWidget : public GG::Control { public: ConditionWidget(GG::X x, GG::Y y, const Condition::ConditionBase* initial_condition = 0) : - GG::Control(x, y, GG::X(380), GG::Y1, GG::INTERACTIVE), + GG::Control(x, y, CONDITION_WIDGET_WIDTH, GG::Y1, GG::INTERACTIVE), m_class_drop(0), m_string_drop(0), m_param_spin1(0), m_param_spin2(0) { - Condition::ConditionBase* init_condition = 0; if (!initial_condition) { - init_condition = new Condition::All(); + Condition::ConditionBase* init_condition = new Condition::All(); + Init(init_condition); + delete init_condition; } else { - init_condition = CopyCondition(initial_condition); + Init(initial_condition); } - Init(init_condition); - delete init_condition; } ~ConditionWidget() { @@ -370,6 +369,58 @@ } else if (condition_key == HASSPECIAL_CONDITION) { return new Condition::HasSpecial(GetString()); + } else if (condition_key == HASGROWTHSPECIAL_CONDITION) { + std::vector< const Condition::ConditionBase*> operands; + // determine sitrep order + std::istringstream template_stream(UserString("GROWTH_SPECIALS_LIST")); + for (std::istream_iterator<std::string> stream_it = std::istream_iterator<std::string>(template_stream); + stream_it != std::istream_iterator<std::string>(); stream_it++) + { + operands.push_back(new Condition::HasSpecial(*stream_it)); + } + Condition::Or* this_cond = new Condition::Or(operands); + object_list_cond_description_map[this_cond->Description()] = HASGROWTHSPECIAL_CONDITION; + return this_cond; + + } else if (condition_key == ASTWITHPTYPE_CONDITION) { // And [Planet PlanetType PT_ASTEROIDS ContainedBy And [System Contains PlanetType X]] + std::vector< const Condition::ConditionBase*> operands1; + operands1.push_back( new Condition::Type( new ValueRef::Constant<UniverseObjectType> (OBJ_PLANET)) ); + const std::string& text = GetString(); + if (text == "Any") { + std::vector<const ValueRef::ValueRefBase<PlanetType>*> copytype; + copytype.push_back( new ValueRef::Constant<PlanetType>(PT_ASTEROIDS)); + operands1.push_back( new Condition::Not(new Condition::PlanetType(copytype))); + } else + operands1.push_back( new Condition::PlanetType(GetEnumValueRefVec< ::PlanetType>())); + std::vector< const Condition::ConditionBase*> operands2; + operands2.push_back( new Condition::Type( new ValueRef::Constant<UniverseObjectType> (OBJ_SYSTEM))); + std::vector<const ValueRef::ValueRefBase<PlanetType>*> maintype; + maintype.push_back( new ValueRef::Constant<PlanetType>(PT_ASTEROIDS)); + operands2.push_back( new Condition::Contains( new Condition::PlanetType(maintype))); + operands1.push_back(new Condition::ContainedBy(new Condition::And(operands2))); + Condition::And* this_cond = new Condition::And(operands1); + object_list_cond_description_map[this_cond->Description()] = ASTWITHPTYPE_CONDITION; + return this_cond; + + } else if (condition_key == GGWITHPTYPE_CONDITION) { // And [Planet PlanetType PT_GASGIANT ContainedBy And [System Contains PlanetType X]] + std::vector< const Condition::ConditionBase*> operands1; + const std::string& text = GetString(); + if (text == "Any") { + std::vector<const ValueRef::ValueRefBase<PlanetType>*> copytype; + copytype.push_back( new ValueRef::Constant<PlanetType>(PT_GASGIANT)); + operands1.push_back( new Condition::Not(new Condition::PlanetType(copytype))); + } else + operands1.push_back( new Condition::PlanetType(GetEnumValueRefVec< ::PlanetType>())); + std::vector< const Condition::ConditionBase*> operands2; + operands2.push_back( new Condition::Type( new ValueRef::Constant<UniverseObjectType> (OBJ_SYSTEM))); + std::vector<const ValueRef::ValueRefBase<PlanetType>*> maintype; + maintype.push_back( new ValueRef::Constant<PlanetType>(PT_GASGIANT)); + operands2.push_back( new Condition::Contains( new Condition::PlanetType(maintype))); + operands1.push_back(new Condition::ContainedBy(new Condition::And(operands2))); + Condition::And* this_cond = new Condition::And(operands1); + object_list_cond_description_map[this_cond->Description()] = GGWITHPTYPE_CONDITION; + return this_cond; + } else if (condition_key == HASTAG_CONDITION) { return new Condition::HasTag(GetString()); @@ -526,13 +577,19 @@ } GG::X DropListWidth() const + { return GG::X(ClientUI::Pts()*18); } + + GG::X ParamsDropListWidth() const + { return CONDITION_WIDGET_WIDTH - DropListWidth(); } + + GG::X SpinDropListWidth() const { return GG::X(ClientUI::Pts()*16); } GG::Y DropListHeight() const { return GG::Y(ClientUI::Pts() + 4); } int DropListDropHeight() const - { return 10; } + { return 12; } void Init(const Condition::ConditionBase* init_condition) { // fill droplist with basic types of conditions and select appropriate row @@ -542,15 +599,16 @@ AttachChild(m_class_drop); std::vector<std::string> row_keys; - row_keys.push_back(ALL_CONDITION); row_keys.push_back(EMPIREAFFILIATION_CONDITION); - row_keys.push_back(PLANETSIZE_CONDITION); row_keys.push_back(PLANETTYPE_CONDITION); - row_keys.push_back(HOMEWORLD_CONDITION); row_keys.push_back(CAPITAL_CONDITION); + row_keys.push_back(ALL_CONDITION); row_keys.push_back(PLANETTYPE_CONDITION); + row_keys.push_back(PLANETSIZE_CONDITION); row_keys.push_back(HASGROWTHSPECIAL_CONDITION); + row_keys.push_back(GGWITHPTYPE_CONDITION); row_keys.push_back(ASTWITHPTYPE_CONDITION); + row_keys.push_back(FOCUSTYPE_CONDITION); row_keys.push_back(STARTYPE_CONDITION); + row_keys.push_back(HASTAG_CONDITION); row_keys.push_back(SPECIES_CONDITION); + row_keys.push_back(HASSPECIAL_CONDITION); row_keys.push_back(EMPIREAFFILIATION_CONDITION); row_keys.push_back(MONSTER_CONDITION); row_keys.push_back(ARMED_CONDITION); row_keys.push_back(STATIONARY_CONDITION); row_keys.push_back(CANPRODUCESHIPS_CONDITION); - row_keys.push_back(CANCOLONIZE_CONDITION); row_keys.push_back(HASSPECIAL_CONDITION); - row_keys.push_back(HASTAG_CONDITION); row_keys.push_back(SPECIES_CONDITION); - row_keys.push_back(FOCUSTYPE_CONDITION); row_keys.push_back(STARTYPE_CONDITION); - row_keys.push_back(METERVALUE_CONDITION); + row_keys.push_back(CANCOLONIZE_CONDITION); row_keys.push_back(HOMEWORLD_CONDITION); + row_keys.push_back(METERVALUE_CONDITION); row_keys.push_back(CAPITAL_CONDITION); SetMinSize(m_class_drop->Size()); GG::ListBox::iterator select_row_it = m_class_drop->end(); @@ -609,7 +667,8 @@ condition_key == STATIONARY_CONDITION || condition_key == CANPRODUCESHIPS_CONDITION || condition_key == CANCOLONIZE_CONDITION || - condition_key == MONSTER_CONDITION) + condition_key == MONSTER_CONDITION || + condition_key == HASGROWTHSPECIAL_CONDITION) { // no params param_widget_top += m_class_drop->Height(); @@ -620,7 +679,7 @@ // droplist of valid species m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -639,7 +698,7 @@ // droplist of valid specials m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -658,7 +717,7 @@ // droplist of valid tags m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -687,7 +746,7 @@ // droplist of valid sizes m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -707,11 +766,13 @@ if (!m_string_drop->Empty()) m_string_drop->Select(0); - } else if (condition_key == PLANETTYPE_CONDITION) { + } else if (condition_key == PLANETTYPE_CONDITION || + condition_key == GGWITHPTYPE_CONDITION || + condition_key == ASTWITHPTYPE_CONDITION ) { // droplist of valid types m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); std::vector< ::PlanetType> planet_types; @@ -720,6 +781,8 @@ std::vector<std::string> type_strings = StringsFromEnums(planet_types); GG::ListBox::iterator row_it = m_string_drop->end(); + if (condition_key == GGWITHPTYPE_CONDITION || condition_key == ASTWITHPTYPE_CONDITION ) + row_it = m_string_drop->Insert(new StringRow("Any", GG::Y(ClientUI::Pts()), false)); for (std::vector<std::string>::iterator string_it = type_strings.begin(); string_it != type_strings.end(); ++string_it) { @@ -733,7 +796,7 @@ // droplist of valid types m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -757,7 +820,7 @@ // droplist of valid foci m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -785,7 +848,7 @@ // droplist of meter types m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(ParamsDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_left = GG::X0; param_widget_top = m_string_drop->Height() + GG::Y(Value(PAD)); @@ -807,13 +870,13 @@ m_param_spin1 = new CUISpin<int>(0, 1, 0, 1000, true); m_param_spin1->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_param_spin1->Resize(GG::Pt(DropListWidth(), m_param_spin1->Height())); + m_param_spin1->Resize(GG::Pt(SpinDropListWidth(), m_param_spin1->Height())); AttachChild(m_param_spin1); - param_widget_left = DropListWidth() + PAD; + param_widget_left = SpinDropListWidth() + PAD; m_param_spin2 = new CUISpin<int>(0, 1, 0, 1000, true); m_param_spin2->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_param_spin2->Resize(GG::Pt(DropListWidth(), m_param_spin2->Height())); + m_param_spin2->Resize(GG::Pt(SpinDropListWidth(), m_param_spin2->Height())); AttachChild(m_param_spin2); param_widget_top += m_param_spin1->Height(); @@ -821,7 +884,7 @@ // droplist of empires m_string_drop = new CUIDropDownList(DropListDropHeight()); m_string_drop->MoveTo(GG::Pt(param_widget_left, param_widget_top)); - m_string_drop->Resize(GG::Pt(DropListWidth(), DropListHeight())); + m_string_drop->Resize(GG::Pt(SpinDropListWidth(), DropListHeight())); AttachChild(m_string_drop); param_widget_top += m_string_drop->Height(); @@ -945,7 +1008,7 @@ // TODO: Add multiple condition widgets initialized for input condition - m_condition_widget = new ConditionWidget(GG::X(3), m_filters_layout->Height() + GG::Y(3)); + m_condition_widget = new ConditionWidget(GG::X(3), m_filters_layout->Height() + GG::Y(3), condition_filter); m_cancel_button = new CUIButton(UserString("CANCEL")); m_apply_button = new CUIButton(UserString("APPLY")); Modified: trunk/FreeOrion/default/stringtables/en.txt =================================================================== --- trunk/FreeOrion/default/stringtables/en.txt 2015-03-14 22:58:02 UTC (rev 8037) +++ trunk/FreeOrion/default/stringtables/en.txt 2015-03-15 01:34:23 UTC (rev 8038) @@ -3403,11 +3403,6 @@ Against enemy attack %21$.1f and shields %22$.1f: %23$.f (%24$.2f per PP) ''' - - - - - ENC_UNLOCKED_BY '''<u>Unlocked By Techs:</u> @@ -3822,7 +3817,7 @@ AI_ERROR_MSG AI_Error: AI script error -# Functional list; do not translate. Used for logging during universe creation +# Functional list; do not translate. Used for logging during universe creation and for an ObjectListWnd condition GROWTH_SPECIALS_LIST '''CRYSTALS_SPECIAL FRUIT_SPECIAL @@ -4123,6 +4118,15 @@ CONDITION_METERVALUE Object Property Value +CONDITION_HAS_GROWTH_SPECIAL +Has Any Growth Special + +CONDITION_PTYPE_W_GG +Gas Giant with Planet of type + +CONDITION_PTYPE_W_AST +Asteroids with Planet of type + ############################################################# #### S I T R E P #### ############################################################# |
From: <dil...@us...> - 2015-03-14 22:58:04
|
Revision: 8037 http://sourceforge.net/p/freeorion/code/8037 Author: dilvish-fo Date: 2015-03-14 22:58:02 +0000 (Sat, 14 Mar 2015) Log Message: ----------- made multiplayer galaxy setup AI starting species selection deterministic if galaxy seed is left blank, to faciliate AI testing Modified Paths: -------------- trunk/FreeOrion/server/ServerFSM.cpp trunk/FreeOrion/universe/Species.cpp trunk/FreeOrion/universe/Species.h Modified: trunk/FreeOrion/server/ServerFSM.cpp =================================================================== --- trunk/FreeOrion/server/ServerFSM.cpp 2015-03-14 22:54:23 UTC (rev 8036) +++ trunk/FreeOrion/server/ServerFSM.cpp 2015-03-14 22:58:02 UTC (rev 8037) @@ -443,7 +443,10 @@ player_setup_data.m_client_type = client_type; player_setup_data.m_empire_name = GenerateEmpireName(m_lobby_data->m_players); player_setup_data.m_empire_color = GetUnusedEmpireColour(m_lobby_data->m_players); - player_setup_data.m_starting_species_name = sm.RandomPlayableSpeciesName(); + if (m_lobby_data->m_seed!="") + player_setup_data.m_starting_species_name = sm.RandomPlayableSpeciesName(); + else + player_setup_data.m_starting_species_name = sm.SequentialPlayableSpeciesName(player_id); // after setting all details, push into lobby data m_lobby_data->m_players.push_back(std::make_pair(player_id, player_setup_data)); @@ -593,8 +596,12 @@ psd.m_player_name = UserString("AI_PLAYER") + "_" + boost::lexical_cast<std::string>(AI_count++); if (psd.m_empire_name.empty()) psd.m_empire_name = GenerateEmpireName(m_lobby_data->m_players); - if (psd.m_starting_species_name.empty()) - psd.m_starting_species_name = GetSpeciesManager().RandomPlayableSpeciesName(); + if (psd.m_starting_species_name.empty()) { + if (m_lobby_data->m_seed!="") + psd.m_starting_species_name = GetSpeciesManager().RandomPlayableSpeciesName(); + else + psd.m_starting_species_name = GetSpeciesManager().SequentialPlayableSpeciesName(AI_count); + } } else if (psd.m_client_type == Networking::CLIENT_TYPE_HUMAN_PLAYER) { if (psd.m_empire_color == GG::Clr(0, 0, 0, 0)) Modified: trunk/FreeOrion/universe/Species.cpp =================================================================== --- trunk/FreeOrion/universe/Species.cpp 2015-03-14 22:54:23 UTC (rev 8036) +++ trunk/FreeOrion/universe/Species.cpp 2015-03-14 22:58:02 UTC (rev 8037) @@ -382,6 +382,18 @@ return it->first; } +const std::string& SpeciesManager::SequentialPlayableSpeciesName(int id) const { + if (NumPlayableSpecies() <= 0) + return EMPTY_STRING; + + int species_idx = id % NumPlayableSpecies(); + DebugLogger() << "SpeciesManager::SequentialPlayableSpeciesName has " << NumPlayableSpecies() << " and is given id " << id << " yielding index " << species_idx; + playable_iterator it = playable_begin(); + std::advance(it, species_idx); + return it->first; +} + + void SpeciesManager::ClearSpeciesHomeworlds() { for (std::map<std::string, Species*>::iterator it = m_species.begin(); it != m_species.end(); ++it) it->second->SetHomeworlds(std::set<int>()); Modified: trunk/FreeOrion/universe/Species.h =================================================================== --- trunk/FreeOrion/universe/Species.h 2015-03-14 22:54:23 UTC (rev 8036) +++ trunk/FreeOrion/universe/Species.h 2015-03-14 22:58:02 UTC (rev 8037) @@ -242,6 +242,7 @@ /** returns the name of a playable species in this manager, or an empty * string if there are no playable species. */ const std::string& RandomPlayableSpeciesName() const; + const std::string& SequentialPlayableSpeciesName(int id) const; /** returns a map from species name to a set of object IDs that are the * homeworld(s) of that species in the current game. */ |
From: <dil...@us...> - 2015-03-14 22:54:25
|
Revision: 8036 http://sourceforge.net/p/freeorion/code/8036 Author: dilvish-fo Date: 2015-03-14 22:54:23 +0000 (Sat, 14 Mar 2015) Log Message: ----------- Changed process kill signal from SIGHUP to SIGKILL and added associated debug logging; also added some debug logging related to removing items from the production or queue Modified Paths: -------------- trunk/FreeOrion/util/Order.cpp trunk/FreeOrion/util/Process.cpp Modified: trunk/FreeOrion/util/Order.cpp =================================================================== --- trunk/FreeOrion/util/Order.cpp 2015-03-14 15:06:27 UTC (rev 8035) +++ trunk/FreeOrion/util/Order.cpp 2015-03-14 22:54:23 UTC (rev 8036) @@ -880,8 +880,10 @@ Empire* empire = GetEmpire(EmpireID()); if (!empire) return; - if (m_remove) + if (m_remove) { + DebugLogger() << "ResearchQueueOrder::ExecuteImpl: removing from queue tech: " << m_tech_name; empire->RemoveTechFromQueue(m_tech_name); + } else empire->PlaceTechInQueue(m_tech_name, m_position); } @@ -1013,8 +1015,10 @@ empire->SetBuildQuantity(m_index, m_new_quantity); else if (m_new_index != INVALID_INDEX) empire->MoveBuildWithinQueue(m_index, m_new_index); - else if (m_index != INVALID_INDEX) + else if (m_index != INVALID_INDEX) { + DebugLogger() << "ProductionQueueOrder removing build from index " << m_index; empire->RemoveBuildFromQueue(m_index); + } else ErrorLogger() << "Malformed ProductionQueueOrder."; } catch (const std::exception& e) { Modified: trunk/FreeOrion/util/Process.cpp =================================================================== --- trunk/FreeOrion/util/Process.cpp 2015-03-14 15:06:27 UTC (rev 8035) +++ trunk/FreeOrion/util/Process.cpp 2015-03-14 22:54:23 UTC (rev 8036) @@ -62,8 +62,14 @@ } void Process::Kill() { - if (m_impl) + DebugLogger() << "Process::Kill"; + if (m_impl) { + DebugLogger() << "Process::Kill calling m_impl->Kill()"; m_impl->Kill(); + } else { + DebugLogger() << "Process::Kill found no m_impl"; + } + DebugLogger() << "Process::Kill calling RequestTermination()"; RequestTermination(); } @@ -192,7 +198,7 @@ case 0: { // child process side of fork execv(cmd.c_str(), &args[0]); - perror("execv failed"); + perror(("execv failed: " + cmd).c_str()); break; } @@ -213,9 +219,16 @@ } void Process::Impl::Kill() { + if (m_free) { + DebugLogger() << "Process::Impl::Kill called but m_free is true so returning with no action"; + return; + } int status; - kill(m_process_id, SIGHUP); + DebugLogger() << "Process::Impl::Kill calling kill(m_process_id, SIGKILL)"; + kill(m_process_id, SIGKILL); + DebugLogger() << "Process::Impl::Kill calling waitpid(m_process_id, &status, 0)"; waitpid(m_process_id, &status, 0); + DebugLogger() << "Process::Impl::Kill done"; } #endif |
From: <dil...@us...> - 2015-03-14 15:06:34
|
Revision: 8035 http://sourceforge.net/p/freeorion/code/8035 Author: dilvish-fo Date: 2015-03-14 15:06:27 +0000 (Sat, 14 Mar 2015) Log Message: ----------- adjusted AI loading of savestate so that old savegame files hopefully remain compatible with the current AI code Modified Paths: -------------- trunk/FreeOrion/default/AI/AIstate.py Modified: trunk/FreeOrion/default/AI/AIstate.py =================================================================== --- trunk/FreeOrion/default/AI/AIstate.py 2015-03-13 20:28:23 UTC (rev 8034) +++ trunk/FreeOrion/default/AI/AIstate.py 2015-03-14 15:06:27 UTC (rev 8035) @@ -116,6 +116,8 @@ for std_attrib in ['empire_standard_fighter', 'empire_standard_enemy']: if std_attrib not in state_dict: self.__dict__[std_attrib] = (4, ((4, 1),), 0.0, 10.0) + self.colonisablePlanetIDs = odict() + self.colonisableOutpostIDs = odict() def __del__(self): # TODO: confirm if anything about boost interface really requires this """destructor""" |
From: <dil...@us...> - 2015-03-13 20:28:24
|
Revision: 8034 http://sourceforge.net/p/freeorion/code/8034 Author: dilvish-fo Date: 2015-03-13 20:28:23 +0000 (Fri, 13 Mar 2015) Log Message: ----------- added FO_COMMON_API to declaration of CreateSitRep, stemming from r8033 changes and needed for Linux Revision Links: -------------- http://sourceforge.net/p/freeorion/code/8033 Modified Paths: -------------- trunk/FreeOrion/util/SitRepEntry.h Modified: trunk/FreeOrion/util/SitRepEntry.h =================================================================== --- trunk/FreeOrion/util/SitRepEntry.h 2015-03-13 16:09:31 UTC (rev 8033) +++ trunk/FreeOrion/util/SitRepEntry.h 2015-03-13 20:28:23 UTC (rev 8034) @@ -56,7 +56,7 @@ FO_COMMON_API SitRepEntry CreateFleetArrivedAtDestinationSitRep(int system_id, int fleet_id, int recipient_empire_id); SitRepEntry CreateEmpireEliminatedSitRep(int empire_id); SitRepEntry CreateVictorySitRep(const std::string& reason_string, int empire_id); -SitRepEntry CreateSitRep(const std::string& template_string, const std::string& icon, +FO_COMMON_API SitRepEntry CreateSitRep(const std::string& template_string, const std::string& icon, const std::vector<std::pair<std::string, std::string> >& parameters); // template implementations |
From: <ve...@us...> - 2015-03-13 16:09:34
|
Revision: 8033 http://sourceforge.net/p/freeorion/code/8033 Author: vezzra Date: 2015-03-13 16:09:31 +0000 (Fri, 13 Mar 2015) Log Message: ----------- Added GenerateSitRep function to server-side Python interface Modified Paths: -------------- trunk/FreeOrion/python/server/PythonServerWrapper.cpp Modified: trunk/FreeOrion/python/server/PythonServerWrapper.cpp =================================================================== --- trunk/FreeOrion/python/server/PythonServerWrapper.cpp 2015-03-13 15:49:31 UTC (rev 8032) +++ trunk/FreeOrion/python/server/PythonServerWrapper.cpp 2015-03-13 16:09:31 UTC (rev 8033) @@ -19,6 +19,7 @@ #include "../../util/Random.h" #include "../../util/i18n.h" #include "../../util/OptionsDB.h" +#include "../../util/SitRepEntry.h" #include "../../parse/Parse.h" #include "../../Empire/Empire.h" @@ -90,6 +91,40 @@ double InvalidPosition() { return UniverseObject::INVALID_POSITION; } + // Wrappers for generating sitrep messages + void GenerateSitRep(int empire_id, + const std::string& template_string, + const dict& py_params, + const std::string& icon) { + std::vector<std::pair<std::string, std::string> > params; + + if (py_params) { + for (int i = 0; i < len(py_params); i++) { + std::string k = extract<std::string>(py_params.keys()[i]); + std::string v = extract<std::string>(py_params.values()[i]); + params.push_back(std::make_pair(k, v)); + } + } + + if (empire_id == ALL_EMPIRES) { + for (EmpireManager::const_iterator it = Empires().begin(); it != Empires().end(); ++it) { + it->second->AddSitRepEntry(CreateSitRep(template_string, icon, params)); + } + } else { + Empire* empire = GetEmpire(empire_id); + if (!empire) { + ErrorLogger() << "PythonServerWrapper::GenerateSitRep: couldn't get empire with ID " << empire_id; + return; + } + empire->AddSitRepEntry(CreateSitRep(template_string, icon, params)); + } + } + + void GenerateSitRep1(int empire_id, + const std::string& template_string, + const std::string& icon) + { GenerateSitRep(empire_id, template_string, dict(), icon); } + // Functions exposed to Python to access the universe tables int BaseStarTypeDist(StarType star_type) { return UniverseDataTables()["BaseStarTypeDist"][0][star_type]; } @@ -1119,7 +1154,9 @@ def("get_galaxy_setup_data", GetGalaxySetupData, return_value_policy<reference_existing_object>()); def("current_turn", CurrentTurn); - + def("generate_sitrep", GenerateSitRep); + def("generate_sitrep", GenerateSitRep1); + def("base_star_type_dist", BaseStarTypeDist); def("universe_age_mod_to_star_type_dist", UniverseAgeModToStarTypeDist); def("density_mod_to_planet_size_dist", DensityModToPlanetSizeDist); |
From: <dil...@us...> - 2015-03-13 15:49:34
|
Revision: 8032 http://sourceforge.net/p/freeorion/code/8032 Author: dilvish-fo Date: 2015-03-13 15:49:31 +0000 (Fri, 13 Mar 2015) Log Message: ----------- slight augmentation of the commentary added in r8031 Revision Links: -------------- http://sourceforge.net/p/freeorion/code/8031 Modified Paths: -------------- trunk/FreeOrion/default/AI/ProductionAI.py Modified: trunk/FreeOrion/default/AI/ProductionAI.py =================================================================== --- trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-13 15:42:04 UTC (rev 8031) +++ trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-13 15:49:31 UTC (rev 8032) @@ -192,7 +192,8 @@ locDetail.sort(reverse=True) # Since we haven't yet implemented a way to target military ship construction at/near particular locations - # where they are most in need, we want to distribute the construction across the Resource Group, preferentially choosing + # where they are most in need, and also because our rating system is presumably useful-but-not-perfect, we want to + # distribute the construction across the Resource Group and across similarly rated designs, preferentially choosing # the best rated design/loc combo, but if there are multiple design/loc combos with the same or similar ratings then # we want some chance of choosing those alternate designs/locations. |
From: <dil...@us...> - 2015-03-13 15:42:11
|
Revision: 8031 http://sourceforge.net/p/freeorion/code/8031 Author: dilvish-fo Date: 2015-03-13 15:42:04 +0000 (Fri, 13 Mar 2015) Log Message: ----------- Added explanatory comments regarding the getBestShipRatings() rating & selection approach Modified Paths: -------------- trunk/FreeOrion/default/AI/ProductionAI.py Modified: trunk/FreeOrion/default/AI/ProductionAI.py =================================================================== --- trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-13 13:51:43 UTC (rev 8030) +++ trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-13 15:42:04 UTC (rev 8031) @@ -190,6 +190,18 @@ if not locDetail: return [] locDetail.sort(reverse=True) + + # Since we haven't yet implemented a way to target military ship construction at/near particular locations + # where they are most in need, we want to distribute the construction across the Resource Group, preferentially choosing + # the best rated design/loc combo, but if there are multiple design/loc combos with the same or similar ratings then + # we want some chance of choosing those alternate designs/locations. + + # The approach to this taken below is to treat the ratings akin to an energy to be used in a statistic mechanics type + # partition function. 'tally' will compute the normalization constant. + # so first go through and calculate the tally as well as convert each individual contribution to + # the running total up to that point, to facilitate later sampling. Then those running totals are + # renormalized by the final tally, so that a later random number selector in the range [0,1) can be + # used to select the chosen design/loc tally = 0 idx = 0 for detail in locDetail: |
From: <ve...@us...> - 2015-03-13 13:51:44
|
Revision: 8030 http://sourceforge.net/p/freeorion/code/8030 Author: vezzra Date: 2015-03-13 13:51:43 +0000 (Fri, 13 Mar 2015) Log Message: ----------- Fixed bug in universe_generator.py causing natives being spanned in empire home systems, sometimes even on empire home worlds overriding the empire starting species Modified Paths: -------------- trunk/FreeOrion/default/python/universe_generation/universe_generator.py Modified: trunk/FreeOrion/default/python/universe_generation/universe_generator.py =================================================================== --- trunk/FreeOrion/default/python/universe_generation/universe_generator.py 2015-03-12 20:02:16 UTC (rev 8029) +++ trunk/FreeOrion/default/python/universe_generation/universe_generator.py 2015-03-13 13:51:43 UTC (rev 8030) @@ -69,8 +69,7 @@ # set up empires for each player seed_rng(seed_pool.pop()) - for empire, psd in psd_map.iteritems(): - home_system = home_systems.pop() + for empire, psd, home_system in zip(psd_map.keys(), psd_map.values(), home_systems): if not setup_empire(empire, psd.empire_name, home_system, psd.starting_species, psd.player_name): report_error("Python create_universe: couldn't set up empire for player %s" % psd.player_name) |
From: <geo...@us...> - 2015-03-12 10:45:21
|
Revision: 8028 http://sourceforge.net/p/freeorion/code/8028 Author: geoffthemedio Date: 2015-03-12 10:45:14 +0000 (Thu, 12 Mar 2015) Log Message: ----------- Patch by vincele making objects list retain selections when right-click menu ordering planet focus changes. Modified Paths: -------------- trunk/FreeOrion/UI/ObjectListWnd.cpp trunk/FreeOrion/UI/ObjectListWnd.h Modified: trunk/FreeOrion/UI/ObjectListWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-12 04:44:21 UTC (rev 8027) +++ trunk/FreeOrion/UI/ObjectListWnd.cpp 2015-03-12 10:45:14 UTC (rev 8028) @@ -2219,6 +2219,34 @@ ClientUI::GetClientUI()->ZoomToObject(object_id); } +std::set<int> ObjectListWnd::SelectedObjectIDs() const { + std::set<int> sel_ids; + const GG::ListBox::SelectionSet sel = m_list_box->Selections(); + for (GG::ListBox::SelectionSet::const_iterator it = sel.begin(); it != sel.end(); ++it) { + ObjectRow *row = dynamic_cast<ObjectRow *>(**it); + if (row) { + int selected_object_id = row->ObjectID(); + if (selected_object_id != INVALID_OBJECT_ID) + sel_ids.insert(selected_object_id); + } + } + return sel_ids; +} + +void ObjectListWnd::SetSelectedObjects(std::set<int> sel_ids) { + for (GG::ListBox::iterator it = m_list_box->begin(); it != m_list_box->end(); ++it) { + ObjectRow *row = dynamic_cast<ObjectRow *>(*it); + if (row) { + int selected_object_id = row->ObjectID(); + if (selected_object_id != INVALID_OBJECT_ID) { + if (sel_ids.find(selected_object_id) != sel_ids.end()) { + m_list_box->SelectRow(it); + } + } + } + } +} + void ObjectListWnd::ObjectRightClicked(GG::ListBox::iterator it, const GG::Pt& pt) { int object_id = ObjectInRow(it); if (object_id == INVALID_OBJECT_ID) @@ -2319,7 +2347,10 @@ } } } + std::set<int> sel_ids = SelectedObjectIDs(); Refresh(); + SetSelectedObjects(sel_ids); + ObjectSelectionChanged(m_list_box->Selections()); break; } } Modified: trunk/FreeOrion/UI/ObjectListWnd.h =================================================================== --- trunk/FreeOrion/UI/ObjectListWnd.h 2015-03-12 04:44:21 UTC (rev 8027) +++ trunk/FreeOrion/UI/ObjectListWnd.h 2015-03-12 10:45:14 UTC (rev 8028) @@ -35,6 +35,9 @@ void ObjectRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); int ObjectInRow(GG::ListBox::iterator it) const; + void SetSelectedObjects(std::set<int> sel_ids); + std::set<int> SelectedObjectIDs() const; + void FilterClicked(); void CollapseExpandClicked(); virtual void CloseClicked(); |
From: <dil...@us...> - 2015-03-12 04:44:30
|
Revision: 8027 http://sourceforge.net/p/freeorion/code/8027 Author: dilvish-fo Date: 2015-03-12 04:44:21 +0000 (Thu, 12 Mar 2015) Log Message: ----------- misc AI Adjustments, including fix for gross overproduction of drydocks Modified Paths: -------------- trunk/FreeOrion/default/AI/AIDependencies.py trunk/FreeOrion/default/AI/AIstate.py trunk/FreeOrion/default/AI/ColonisationAI.py trunk/FreeOrion/default/AI/MilitaryAI.py trunk/FreeOrion/default/AI/PriorityAI.py trunk/FreeOrion/default/AI/ProductionAI.py trunk/FreeOrion/default/AI/ResearchAI.py trunk/FreeOrion/default/AI/TechsListsAI.py trunk/FreeOrion/default/AI/freeorion_tools.py Modified: trunk/FreeOrion/default/AI/AIDependencies.py =================================================================== --- trunk/FreeOrion/default/AI/AIDependencies.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/AIDependencies.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -13,7 +13,7 @@ COLONY_POD_COST = 120 COLONY_POD_UPKEEP = 0.06 -OUTPOST_POD_COST = 80 +OUTPOST_POD_COST = 50 SHIP_UPKEEP = 0.01 OUTPOSTING_TECH = "SHP_GAL_EXPLO" Modified: trunk/FreeOrion/default/AI/AIstate.py =================================================================== --- trunk/FreeOrion/default/AI/AIstate.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/AIstate.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -1,4 +1,5 @@ import copy +from collections import OrderedDict as odict import freeOrionAIInterface as fo # pylint: disable=import-error @@ -19,9 +20,7 @@ # global variables # foodStockpileSize = 1 # food stored per population minimalColoniseValue = 3 # minimal value for a planet to be colonised -# colonisablePlanetIDs = [] # moved into AIstate colonyTargetedSystemIDs = [] -# colonisableOutpostIDs = [] # moved into AIstate outpostTargetedSystemIDs = [] opponentPlanetIDs = [] opponentSystemIDs = [] @@ -56,8 +55,8 @@ # 'global' (?) variables #self.foodStockpileSize = 1 # food stored per population self.minimalColoniseValue = 3 # minimal value for a planet to be colonised - self.colonisablePlanetIDs = [] - self.colonisableOutpostIDs = [] # + self.colonisablePlanetIDs = odict() + self.colonisableOutpostIDs = odict() # self.__aiMissionsByFleetID = {} self.__shipRoleByDesignID = {} self.__fleetRoleByID = {} Modified: trunk/FreeOrion/default/AI/ColonisationAI.py =================================================================== --- trunk/FreeOrion/default/AI/ColonisationAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/ColonisationAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -275,10 +275,19 @@ continue empire_has_colony_in_sys = False empire_has_pop_ctr_in_sys = False + local_ast = False + local_gg = False + empire_has_qualifying_planet = False for pid in sys.planetIDs: planet = universe.getPlanet(pid) if not planet: continue + if pid in foAI.foAIstate.colonisablePlanetIDs: + empire_has_qualifying_planet = True + if planet.size == fo.planetSize.asteroids: + local_ast = True + elif planet.size == fo.planetSize.gasGiant: + local_gg = True spec_name = planet.speciesName this_spec = fo.getSpecies(spec_name) owner_id = planet.owner @@ -296,6 +305,7 @@ empire_ast_outpost_ids.add(pid) else: empire_pop_ctrs.add(pid) + empire_has_qualifying_planet = True AIstate.popCtrIDs.append(pid) empire_species_systems.setdefault(sys_id, {}).setdefault('pids', []).append(pid) empire_has_pop_ctr_in_sys = True @@ -315,10 +325,6 @@ yard_here = [pid] if this_spec.canColonize: empire_colonizers.setdefault(spec_name, []).extend(yard_here) - if planet.size == fo.planetSize.asteroids: - got_ast = True - elif planet.size == fo.planetSize.gasGiant: - got_gg = True if planet.focus == EnumsAI.AIFocusType.FOCUS_INDUSTRY: empire_status['industrialists'] += planet_population elif planet.focus == EnumsAI.AIFocusType.FOCUS_RESEARCH: @@ -341,6 +347,12 @@ if partial_vis_turn >= current_turn - 1: # only interested in immediately recent data foAI.foAIstate.misc.setdefault('enemies_sighted', {}).setdefault(current_turn, []).append(pid) + if empire_has_qualifying_planet: + if local_ast: + got_ast = True + elif local_gg: + got_gg = True + if empire_has_colony_in_sys: if empire_has_pop_ctr_in_sys: AIstate.popCtrSystemIDs.append(sys_id) @@ -542,14 +554,15 @@ print print "Settleable Colony Planets (score,species) | ID | Name | Specials:" - for planet_id, score in sorted_planets: + for planet_id, (score, spec) in sorted_planets: if score > 0.5: - print " %15s | %5s | %s | %s " % (score, planet_id, universe.getPlanet(planet_id).name, list(universe.getPlanet(planet_id).specials)) + print " %15s | %5s | %s | %s " % ((score, spec), planet_id, universe.getPlanet(planet_id).name, list(universe.getPlanet(planet_id).specials)) print sorted_planets = [(planet_id, score) for planet_id, score in sorted_planets if score[0] > 0] # export planets for other AI modules - foAI.foAIstate.colonisablePlanetIDs = sorted_planets + foAI.foAIstate.colonisablePlanetIDs.clear() + foAI.foAIstate.colonisablePlanetIDs.update(sorted_planets) # get outpost fleets all_outpost_fleet_ids = FleetUtilsAI.get_empire_fleet_ids_by_role(AIFleetMissionType.FLEET_MISSION_OUTPOST) @@ -569,7 +582,8 @@ sorted_outposts = [(planet_id, score) for planet_id, score in sorted_outposts if score[0] > 0] # export outposts for other AI modules - foAI.foAIstate.colonisableOutpostIDs = sorted_outposts + foAI.foAIstate.colonisableOutpostIDs.clear() + foAI.foAIstate.colonisableOutpostIDs.update(sorted_outposts) colonization_timer.end() @@ -1207,10 +1221,10 @@ ai_fleet_mission.add_target(AIFleetMissionType.FLEET_MISSION_ORBITAL_OUTPOST, ai_target) # assign fleet targets to colonisable planets - send_colony_ships(AIstate.colonyFleetIDs, foAI.foAIstate.colonisablePlanetIDs, AIFleetMissionType.FLEET_MISSION_COLONISATION) + send_colony_ships(AIstate.colonyFleetIDs, foAI.foAIstate.colonisablePlanetIDs.items(), AIFleetMissionType.FLEET_MISSION_COLONISATION) # assign fleet targets to colonisable outposts - send_colony_ships(AIstate.outpostFleetIDs, foAI.foAIstate.colonisableOutpostIDs, AIFleetMissionType.FLEET_MISSION_OUTPOST) + send_colony_ships(AIstate.outpostFleetIDs, foAI.foAIstate.colonisableOutpostIDs.items(), AIFleetMissionType.FLEET_MISSION_OUTPOST) def send_colony_ships(colony_fleet_ids, evaluated_planets, mission_type): Modified: trunk/FreeOrion/default/AI/MilitaryAI.py =================================================================== --- trunk/FreeOrion/default/AI/MilitaryAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/MilitaryAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -194,7 +194,7 @@ safety_factor = get_safety_factor() - top_target_planets = [pid for pid, pscore, trp in AIstate.invasionTargets[:PriorityAI.allottedInvasionTargets] if pscore > 20] + [pid for pid, pscore in foAI.foAIstate.colonisablePlanetIDs[:10] if pscore > 20] + top_target_planets = [pid for pid, pscore, trp in AIstate.invasionTargets[:PriorityAI.allottedInvasionTargets] if pscore > 20] + [pid for pid, (pscore, spec) in foAI.foAIstate.colonisablePlanetIDs.items()[:10] if pscore > 20] top_target_planets.extend(foAI.foAIstate.qualifyingTroopBaseTargets.keys()) top_target_systems = [] for sys_id in AIstate.invasionTargetedSystemIDs + PlanetUtilsAI.get_systems(top_target_planets): Modified: trunk/FreeOrion/default/AI/PriorityAI.py =================================================================== --- trunk/FreeOrion/default/AI/PriorityAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/PriorityAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -161,9 +161,9 @@ researchPriority *= 0.7 # closing in on end of research if industrySurge: if galaxy_is_sparse and not any(enemies_sighted): - researchPriority *= 0.3 + researchPriority *= 0.5 else: - researchPriority *= 0.7 + researchPriority *= 0.8 if ((tech_is_complete("SHP_WEAPON_2_4") or tech_is_complete("SHP_WEAPON_4_1")) and @@ -181,7 +181,7 @@ if len(enemies_sighted) < (2 + current_turn/20.0): #TODO: adjust for colonisation priority researchPriority *= 1.2 if (current_turn > 20) and (len(recent_enemies) > 3): - researchPriority *= 0.6 + researchPriority *= 0.8 return researchPriority @@ -225,7 +225,7 @@ colonyGrowthBarrier = 2 + ((0.5+foAI.foAIstate.aggression)**2)*fo.currentTurn()/50.0 #significant for low aggression, negligible for high aggression if num_colonies > colonyGrowthBarrier: return 0.0 - colonyCost=120*(1+ 0.06*num_colonies) + colonyCost = AIDependencies.COLONY_POD_COST * (1 + AIDependencies.COLONY_POD_UPKEEP * num_colonies) turnsToBuild=8#TODO: check for susp anim pods, build time 10 mil_prio = foAI.foAIstate.get_priority(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_MILITARY) allottedPortion = [[[0.6, 0.8],[0.3, 0.4]],[[0.8, 0.9],[0.3, 0.4]]][galaxy_is_sparse][any(enemies_sighted)][fo.empireID() % 2] # @@ -241,7 +241,7 @@ #allottedColonyTargets = 1+ int(fo.currentTurn()/50) allottedColonyTargets = 1 + int( totalPP*turnsToBuild*allottedPortion/colonyCost) - numColonisablePlanetIDs = len( [ pid for (pid, (score, specName) ) in foAI.foAIstate.colonisablePlanetIDs if score > 60 ][:allottedColonyTargets+2] ) + numColonisablePlanetIDs = len( [ pid for (pid, (score, specName) ) in foAI.foAIstate.colonisablePlanetIDs.items() if score > 60 ][:allottedColonyTargets+2] ) if numColonisablePlanetIDs == 0: return 1 colonyshipIDs = FleetUtilsAI.get_empire_fleet_ids_by_role(EnumsAI.AIFleetMissionType.FLEET_MISSION_COLONISATION) @@ -259,10 +259,10 @@ def calculateOutpostPriority(): """calculates the demand for outpost ships by colonisable planets""" - baseOutpostCost=80 + baseOutpostCost = AIDependencies.OUTPOST_POD_COST numOutpostPlanetIDs = len(foAI.foAIstate.colonisableOutpostIDs) - numOutpostPlanetIDs = len( [ pid for (pid, (score, specName) ) in foAI.foAIstate.colonisableOutpostIDs if score > 1.0*baseOutpostCost/3.0 ][:allottedColonyTargets] ) + numOutpostPlanetIDs = len( [ pid for (pid, (score, specName) ) in foAI.foAIstate.colonisableOutpostIDs.items() if score > 1.0*baseOutpostCost/3.0 ][:allottedColonyTargets] ) completedTechs = ResearchAI.get_completed_techs() if numOutpostPlanetIDs == 0 or not AIDependencies.OUTPOSTING_TECH in completedTechs: return 0 @@ -297,7 +297,7 @@ return 0.0 if len(foAI.foAIstate.colonisablePlanetIDs) > 0: - bestColonyScore = max( 2, foAI.foAIstate.colonisablePlanetIDs[0][1][0] ) + bestColonyScore = max( 2, foAI.foAIstate.colonisablePlanetIDs.items()[0][1][0] ) else: bestColonyScore = 2 @@ -379,7 +379,7 @@ enemies_sighted = foAI.foAIstate.misc.get('enemies_sighted',{}) allottedInvasionTargets = 1+ int(fo.currentTurn()/25) - targetPlanetIDs = [pid for pid, pscore, trp in AIstate.invasionTargets[:allottedInvasionTargets] ] + [pid for pid, pscore in foAI.foAIstate.colonisablePlanetIDs[:allottedColonyTargets] ] + [pid for pid, pscore in foAI.foAIstate.colonisableOutpostIDs[:allottedColonyTargets] ] + targetPlanetIDs = [pid for pid, pscore, trp in AIstate.invasionTargets[:allottedInvasionTargets] ] + [pid for pid, pscore in foAI.foAIstate.colonisablePlanetIDs.items()[:allottedColonyTargets] ] + [pid for pid, pscore in foAI.foAIstate.colonisableOutpostIDs.items()[:allottedColonyTargets] ] mySystems = set( AIstate.popCtrSystemIDs ).union( AIstate.outpostSystemIDs ) targetSystems = set( PlanetUtilsAI.get_systems(targetPlanetIDs) ) Modified: trunk/FreeOrion/default/AI/ProductionAI.py =================================================================== --- trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/ProductionAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -749,10 +749,13 @@ print print "Buildings already in Production Queue:" capitolQueuedBldgs=[] + queued_exobot_locs = [] for element in [e for e in productionQueue if (e.buildType == EnumsAI.AIEmpireProductionTypes.BT_BUILDING)]: bldgExpense += element.allocation if element.locationID==homeworld.id: capitolQueuedBldgs.append ( element ) + if element.name == "BLD_COL_EXOBOT": + queued_exobot_locs.append(element.locationID) for bldg in capitolQueuedBldgs: print " " + bldg.name + " turns:" + str(bldg.turnsLeft) + " PP:" + str(bldg.allocation) if not capitolQueuedBldgs: print "None" @@ -801,20 +804,21 @@ print "Error: exception triggered and caught: ", traceback.format_exc() numExobotShips=0 #TODO: do real calc here - if empire.techResearched(EXOBOT_TECH_NAME) and ("BLD_COL_EXOBOT" not in queuedBldgNames): - if len( ColonisationAI.empire_colonizers.get("SP_EXOBOT", []))==0 or numExobotShips==0: #don't have an exobot shipyard yet - try: - for candidate_id in ColonisationAI.empire_ast_outpost_ids: - candidate = universe.getPlanet(candidate_id) - if candidate.systemID in empire.supplyUnobstructedSystems: - res=fo.issueEnqueueBuildingProductionOrder("BLD_COL_EXOBOT", candidate_id) - print "Enqueueing BLD_COL_EXOBOT, with result %d"%res - if res: - res=fo.issueRequeueProductionOrder(productionQueue.size -1, 0) # move to front - print "Requeueing %s to front of build queue, with result %d"%("BLD_COL_EXOBOT", res) - break - except: - print "Error: exception triggered and caught: ", traceback.format_exc() + num_queued_exobots = len(queued_exobot_locs) + if empire.techResearched(EXOBOT_TECH_NAME) and num_queued_exobots < 2: + potential_locs = [] + for pid, (score, this_spec) in foAI.foAIstate.colonisablePlanetIDs.items(): + if this_spec == "SP_EXOBOT" and pid not in queued_exobot_locs: + candidate = universe.getPlanet(pid) + if candidate.systemID in empire.supplyUnobstructedSystems: + potential_locs.append( (score, pid) ) + if potential_locs: + candidate_id = sorted(potential_locs)[-1][-1] + res=fo.issueEnqueueBuildingProductionOrder("BLD_COL_EXOBOT", candidate_id) + print "Enqueueing BLD_COL_EXOBOT, with result %d"%res + #if res: + # res=fo.issueRequeueProductionOrder(productionQueue.size -1, 0) # move to front + # print "Requeueing %s to front of build queue, with result %d"%("BLD_COL_EXOBOT", res) if ("BLD_IMPERIAL_PALACE" in possibleBuildingTypes) and ("BLD_IMPERIAL_PALACE" not in (capitalBldgs+queuedBldgNames)): res=fo.issueEnqueueBuildingProductionOrder("BLD_IMPERIAL_PALACE", homeworld.id) @@ -1523,7 +1527,7 @@ if pid not in ColonisationAI.empire_shipyards: #print "Planet %s not in empireShipyards"%(ppstring(PlanetUtilsAI.planet_name_ids([pid]))) continue - if pid in local_drydocks: + if pid in local_drydocks or pid in queued_locs: break planet = universe.getPlanet(pid) res=fo.issueEnqueueBuildingProductionOrder(bldName, pid) @@ -1723,12 +1727,11 @@ bestDesignID, bestDesign, buildChoices = getBestShipInfo(EnumsAI.AIPriorityType.PRIORITY_PRODUCTION_COLONISATION, list(pSet)) speciesMap = {} for loc in (buildChoices or []): - thisSpec = universe.getPlanet(loc).speciesName - speciesMap.setdefault(thisSpec, []).append( loc) + this_spec = universe.getPlanet(loc).speciesName + speciesMap.setdefault(this_spec, []).append( loc) colonyBuildChoices=[] - for pid, score_Spec_tuple in foAI.foAIstate.colonisablePlanetIDs: - score, thisSpec = score_Spec_tuple - colonyBuildChoices.extend( int(math.ceil(score))*[pid2 for pid2 in speciesMap.get(thisSpec, []) if pid2 in pSet] ) + for pid, (score, this_spec) in foAI.foAIstate.colonisablePlanetIDs.items(): + colonyBuildChoices.extend( int(math.ceil(score))*[pid2 for pid2 in speciesMap.get(this_spec, []) if pid2 in pSet] ) localPriorities = {} localPriorities.update( filteredPriorities ) Modified: trunk/FreeOrion/default/AI/ResearchAI.py =================================================================== --- trunk/FreeOrion/default/AI/ResearchAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/ResearchAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -5,7 +5,7 @@ import AIstate import traceback import ColonisationAI -from freeorion_tools import tech_is_complete +from freeorion_tools import tech_is_complete, chat_human inProgressTechs={} @@ -26,6 +26,7 @@ def generate_research_orders(): """generate research orders""" + report_adjustments = False universe=fo.getUniverse() empire = fo.getEmpire() empire_id = empire.empireID @@ -122,7 +123,11 @@ for cc_tech in [ "CON_ARCH_PSYCH", "CON_CONC_CAMP"]: if cc_tech not in research_queue_list[:insert_idx + 1] and not tech_is_complete(cc_tech): res=fo.issueEnqueueTechOrder(cc_tech, insert_idx) - print "Empire is very aggressive, so attempted to fast-track %s, got result %d"%(cc_tech, res) + msg = "Empire is very aggressive, so attempted to fast-track %s, got result %d"%(cc_tech, res) + if report_adjustments: + chat_human(msg) + else: + print msg print"" @@ -161,11 +166,11 @@ if len(foAI.foAIstate.colonisablePlanetIDs)==0: bestColonySiteScore = 0 else: - bestColonySiteScore= foAI.foAIstate.colonisablePlanetIDs[0][1] + bestColonySiteScore= foAI.foAIstate.colonisablePlanetIDs.items()[0][1] if len(foAI.foAIstate.colonisableOutpostIDs)==0: bestOutpostSiteScore = 0 else: - bestOutpostSiteScore= foAI.foAIstate.colonisableOutpostIDs[0][1] + bestOutpostSiteScore= foAI.foAIstate.colonisableOutpostIDs.items()[0][1] needImprovedScouting = ( bestColonySiteScore <150 or bestOutpostSiteScore < 200 ) if needImprovedScouting: @@ -174,20 +179,32 @@ if ( "CON_ORBITAL_CON" not in research_queue_list[:1 + num_techs_accelerated] ) and ( tech_is_complete("PRO_FUSION_GEN") or ("PRO_FUSION_GEN" in research_queue_list[:1 + num_techs_accelerated])): res=fo.issueEnqueueTechOrder("CON_ORBITAL_CON", num_techs_accelerated) - print "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_ORBITAL_CON", res) + msg = "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_ORBITAL_CON", res) + if report_adjustments: + chat_human(msg) + else: + print msg elif not tech_is_complete("CON_CONTGRAV_ARCH"): num_techs_accelerated += 1 if ( "CON_CONTGRAV_ARCH" not in research_queue_list[:1+num_techs_accelerated] ) and ( tech_is_complete("CON_METRO_INFRA")): for supply_tech in [_s_tech for _s_tech in ["CON_ARCH_MONOFILS", "CON_CONTGRAV_ARCH"] if not tech_is_complete.getTechStatus(_s_tech)]: res=fo.issueEnqueueTechOrder(supply_tech, num_techs_accelerated) - print "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%(supply_tech, res) + msg = "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%(supply_tech, res) + if report_adjustments: + chat_human(msg) + else: + print msg elif not tech_is_complete("CON_GAL_INFRA"): num_techs_accelerated += 1 if ( "CON_GAL_INFRA" not in research_queue_list[:1+num_techs_accelerated] ) and ( tech_is_complete("PRO_SINGULAR_GEN")): res=fo.issueEnqueueTechOrder("CON_GAL_INFRA", num_techs_accelerated) - print "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_GAL_INFRA", res) + msg = "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_GAL_INFRA", res) + if report_adjustments: + chat_human(msg) + else: + print msg else: pass research_queue_list = get_research_queue_techs() @@ -201,7 +218,11 @@ else: CO_idx = research_queue_list.index( "CON_ORBITAL_CON") res=fo.issueEnqueueTechOrder("SPY_DETECT_2", CO_idx+1) - print "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_ORBITAL_CON", res) + msg = "Empire has poor colony/outpost prospects, so attempted to fast-track %s, got result %d"%("CON_ORBITAL_CON", res) + if report_adjustments: + chat_human(msg) + else: + print msg research_queue_list = get_research_queue_techs() # @@ -220,7 +241,11 @@ if not tech_is_complete(xenoTech) and xenoTech not in research_queue_list[:(insert_idx + 4)]: res=fo.issueEnqueueTechOrder(xenoTech,insert_idx) num_techs_accelerated += 1 - print "ANCIENT_RUINS: have an ancient ruins, so attempted to fast-track %s to enable LRN_XENOARCH, got result %d"%(xenoTech, res) + msg = "ANCIENT_RUINS: have an ancient ruins, so attempted to fast-track %s to enable LRN_XENOARCH, got result %d"%(xenoTech, res) + if report_adjustments: + chat_human(msg) + else: + print msg research_queue_list = get_research_queue_techs() if False and not enemies_sighted: # curently disabled @@ -249,33 +274,51 @@ num_techs_accelerated += 1 if move_tech not in research_queue_list[:1 + target_index]: res = fo.issueEnqueueTechOrder(move_tech, target_index) - print "Research: To prioritize %s, have advanced %s to slot %d"%(tech, move_tech, target_index) + msg = "Research: To prioritize %s, have advanced %s to slot %d"%(tech, move_tech, target_index) + if report_adjustments: + chat_human(msg) + else: + print msg target_index += 1 # # check to accelerate asteroid or GG tech if True: #just to help with cold-folding / organization - if ColonisationAI.got_ast and not tech_is_complete("SHP_ASTEROID_HULLS") and ( - ("SHP_ASTEROID_HULLS" not in research_queue_list[num_techs_accelerated])): #if needed but not top item, will block acceleration of pro_orb_gen - if "SHP_ASTEROID_HULLS" not in research_queue_list[:2+num_techs_accelerated]: - if "GRO_SYMBIOTIC_BIO" in research_queue_list: - insert_idx = 1+ research_queue_list.index("GRO_SYMBIOTIC_BIO") + if ColonisationAI.got_ast: + insert_idx = num_techs_accelerated if "GRO_SYMBIOTIC_BIO" not in research_queue_list else research_queue_list.index("GRO_SYMBIOTIC_BIO") + ast_tech = "PRO_MICROGRAV_MAN" + if not (tech_is_complete(ast_tech) or ast_tech in research_queue_list[:(1 + insert_idx)]): + res=fo.issueEnqueueTechOrder(ast_tech,insert_idx) + num_techs_accelerated += 1 + msg = "Asteroids: plan to colonize an asteroid belt, so attempted to fast-track %s , got result %d"%(ast_tech, res) + if report_adjustments: + chat_human(msg) else: - insert_idx = num_techs_accelerated - for ast_tech in ["SHP_ASTEROID_HULLS", "PRO_MICROGRAV_MAN", "SHP_IMPROVED_ENGINE_COUPLINGS"]: - if not tech_is_complete(ast_tech) and ast_tech not in research_queue_list[:insert_idx + 2]: + print msg + research_queue_list = get_research_queue_techs() + elif tech_is_complete("SHP_ZORTRIUM_PLATE"): + insert_idx = (1 + insert_idx) if "LRN_FORCE_FIELD" not in research_queue_list else max(1 + insert_idx, research_queue_list.index("LRN_FORCE_FIELD") - 1) + for ast_tech in ["SHP_ASTEROID_HULLS", "SHP_IMPROVED_ENGINE_COUPLINGS"]: + if not tech_is_complete(ast_tech) and ast_tech not in research_queue_list[:insert_idx + 1]: res=fo.issueEnqueueTechOrder(ast_tech,insert_idx) num_techs_accelerated += 1 - print "Asteroids: have colonized an asteroid belt, so attempted to fast-track %s , got result %d"%(ast_tech, res) + insert_idx += 1 + msg = "Asteroids: plan to colonize an asteroid belt, so attempted to fast-track %s , got result %d"%(ast_tech, res) + print msg + if report_adjustments: + chat_human(msg) research_queue_list = get_research_queue_techs() - elif ColonisationAI.got_gg and not tech_is_complete("PRO_ORBITAL_GEN") and ( - "PRO_ORBITAL_GEN" not in research_queue_list[:3+num_techs_accelerated]): + if ColonisationAI.got_gg and not tech_is_complete("PRO_ORBITAL_GEN"): fusion_idx = 0 if "PRO_FUSION_GEN" not in research_queue_list else (1 + research_queue_list.index("PRO_FUSION_GEN")) forcefields_idx = 0 if "LRN_FORCE_FIELD" not in research_queue_list else (1 + research_queue_list.index("LRN_FORCE_FIELD")) insert_idx = max(fusion_idx, forcefields_idx) if enemies_sighted else fusion_idx - res=fo.issueEnqueueTechOrder("PRO_ORBITAL_GEN",insert_idx) - num_techs_accelerated += 1 - print "GasGiant: have colonized a gas giant, so attempted to fast-track %s, got result %d"%("PRO_ORBITAL_GEN", res) - research_queue_list = get_research_queue_techs() + if "PRO_ORBITAL_GEN" not in research_queue_list[:insert_idx+1]: + res=fo.issueEnqueueTechOrder("PRO_ORBITAL_GEN",insert_idx) + num_techs_accelerated += 1 + msg = "GasGiant: plan to colonize a gas giant, so attempted to fast-track %s, got result %d"%("PRO_ORBITAL_GEN", res) + print msg + if report_adjustments: + chat_human(msg) + research_queue_list = get_research_queue_techs() # # assess if our empire has any non-lousy colonizers, & boost gro_xeno_gen if we don't if True: #just to help with cold-folding / organization @@ -296,7 +339,10 @@ if xgTech not in research_queue_list[:1+num_techs_accelerated] and not tech_is_complete(xgTech): res=fo.issueEnqueueTechOrder(xgTech, insert_idx) num_techs_accelerated += 1 - print "Empire has poor colonizers, so attempted to fast-track %s, got result %d"%(xgTech, res) + msg = "Empire has poor colonizers, so attempted to fast-track %s, got result %d"%(xgTech, res) + print msg + if report_adjustments: + chat_human(msg) research_queue_list = get_research_queue_techs() # # check to accelerate distrib thought @@ -310,13 +356,17 @@ break if (foAI.foAIstate.aggression > fo.aggression.cautious) and (empire.population() > ([300, 100][got_telepathy])): insert_idx = num_techs_accelerated - for dt_ech in [ "LRN_DISTRIB_THOUGHT", "LRN_PSIONICS", "LRN_TRANSLING_THT", "LRN_PHYS_BRAIN" ]: - if dt_ech not in research_queue_list[:4 + num_techs_accelerated] and not tech_is_complete(dt_ech): + for dt_ech in [ "LRN_PHYS_BRAIN", "LRN_TRANSLING_THT", "LRN_PSIONICS", "LRN_DISTRIB_THOUGHT"]: + if dt_ech not in research_queue_list[:insert_idx + 2] and not tech_is_complete(dt_ech): res=fo.issueEnqueueTechOrder(dt_ech, insert_idx) num_techs_accelerated += 1 + insert_idx += 1 fmt_str = "Empire has a telepathic race, so attempted to fast-track %s (got result %d)" fmt_str += " with current target_RP %.1f and current pop %.1f, on turn %d" - print fmt_str%( dt_ech, res, resource_production, empire.population(), fo.currentTurn()) + msg = fmt_str%( dt_ech, res, resource_production, empire.population(), fo.currentTurn()) + print msg + if report_adjustments: + chat_human(msg) research_queue_list = get_research_queue_techs() # # check to accelerate quant net @@ -325,10 +375,14 @@ if not tech_is_complete("LRN_QUANT_NET"): insert_idx = num_techs_accelerated # TODO determine min target slot if reenabling for qnTech in [ "LRN_NDIM_SUBSPACE", "LRN_QUANT_NET" ]: - if qnTech not in research_queue_list[:2+num_techs_accelerated] and not tech_is_complete(qnTech): + if qnTech not in research_queue_list[:insert_idx + 2] and not tech_is_complete(qnTech): res=fo.issueEnqueueTechOrder(qnTech, insert_idx) num_techs_accelerated += 1 - print "Empire has many researchers, so attempted to fast-track %s (got result %d) on turn %d"%(qnTech, res, fo.currentTurn()) + insert_idx += 1 + msg = "Empire has many researchers, so attempted to fast-track %s (got result %d) on turn %d"%(qnTech, res, fo.currentTurn()) + print msg + if report_adjustments: + chat_human(msg) research_queue_list = get_research_queue_techs() # @@ -345,7 +399,10 @@ if singTech not in research_queue_list[:num_techs_accelerated+1 ]: res=fo.issueEnqueueTechOrder(singTech,num_techs_accelerated) num_techs_accelerated += 1 - print "have a black hole star outpost/colony, so attempted to fast-track %s, got result %d"%(singTech, res) + msg = "have a black hole star outpost/colony, so attempted to fast-track %s, got result %d"%(singTech, res) + print msg + if report_adjustments: + chat_human(msg) research_queue_list = get_research_queue_techs() # Modified: trunk/FreeOrion/default/AI/TechsListsAI.py =================================================================== --- trunk/FreeOrion/default/AI/TechsListsAI.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/TechsListsAI.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -54,7 +54,7 @@ return result -def tech_group_1b(): # early _lrn_artif_minds +def tech_group_1b(): # early _lrn_artif_minds and SHP_MIL_ROBO_CONT result = [ "LRN_ALGO_ELEGANCE", "LRN_ARTIF_MINDS", @@ -92,12 +92,13 @@ "GRO_SUBTER_HAB", "LRN_ARTIF_MINDS", "SHP_WEAPON_1_2", + "CON_ORBITAL_CON", "PRO_ROBOTIC_PROD", "PRO_FUSION_GEN", - "CON_ORBITAL_CON", "PRO_ORBITAL_GEN", + "GRO_SYMBIOTIC_BIO", + "SHP_WEAPON_1_3", "SHP_MIL_ROBO_CONT", - "SHP_WEAPON_1_3", "SHP_WEAPON_1_4", "SHP_ZORTRIUM_PLATE", "SHP_SPACE_FLUX_DRIVE", @@ -108,13 +109,13 @@ def tech_group_2a(): # prioritizes growth & spy over weapons result = [ "SHP_ZORTRIUM_PLATE", - "LRN_FORCE_FIELD", "DEF_DEFENSE_NET_1", "DEF_GARRISON_1", "PRO_ROBOTIC_PROD", "SHP_SPACE_FLUX_DRIVE", "PRO_FUSION_GEN", "GRO_SYMBIOTIC_BIO", + "LRN_FORCE_FIELD", "SPY_DETECT_2", "SHP_WEAPON_2_1", "SHP_WEAPON_2_2", @@ -130,10 +131,10 @@ "SHP_ZORTRIUM_PLATE", "PRO_ROBOTIC_PROD", "SHP_SPACE_FLUX_DRIVE", + "PRO_FUSION_GEN", "LRN_FORCE_FIELD", "DEF_DEFENSE_NET_1", "DEF_GARRISON_1", - "PRO_FUSION_GEN", "SHP_WEAPON_2_1", "SHP_WEAPON_2_2", "SHP_WEAPON_2_3", @@ -147,23 +148,23 @@ def tech_group_2_sparse(): # prioritizes growth & defense over weapons result = [ + "CON_ORBITAL_CON", "PRO_FUSION_GEN", - "CON_ORBITAL_CON", "SHP_ZORTRIUM_PLATE", + "GRO_SYMBIOTIC_BIO", "LRN_FORCE_FIELD", + "PRO_INDUSTRY_CENTER_I", "DEF_DEFENSE_NET_1", "DEF_GARRISON_1", "PRO_ORBITAL_GEN", "PRO_MICROGRAV_MAN", "SHP_ASTEROID_HULLS", "SPY_DETECT_2", - "GRO_SYMBIOTIC_BIO", "SHP_WEAPON_2_1", "SHP_WEAPON_2_2", "SHP_WEAPON_2_3", "SHP_WEAPON_2_4", "SHP_DOMESTIC_MONSTER", - "PRO_INDUSTRY_CENTER_I", ] return result @@ -171,21 +172,20 @@ result = [ "DEF_DEFENSE_NET_1", "DEF_GARRISON_1", + "PRO_INDUSTRY_CENTER_I", "SHP_WEAPON_2_1", "LRN_FORCE_FIELD", "SHP_WEAPON_2_2", "SHP_WEAPON_2_3", "SHP_WEAPON_2_4", "SPY_DETECT_2", - "GRO_SYMBIOTIC_BIO", "PRO_MICROGRAV_MAN", "SHP_ASTEROID_HULLS", "SHP_DOMESTIC_MONSTER", - "PRO_INDUSTRY_CENTER_I", ] return result -def tech_group_3a(): # without SHP_ASTEROID_REFORM +def tech_group_3a(): # no plasma weaps yet result = [ "SHP_DOMESTIC_MONSTER", "SHP_ORG_HULL", @@ -200,7 +200,6 @@ "LRN_PHYS_BRAIN", "LRN_TRANSLING_THT", "SHP_BASIC_DAM_CONT", - "GRO_XENO_HYBRIDS", "PRO_INDUSTRY_CENTER_II", "SHP_INTSTEL_LOG", "SHP_FLEET_REPAIR", @@ -214,6 +213,7 @@ "SHP_HEAVY_AST_HULL", "SHP_DEFLECTOR_SHIELD", "LRN_QUANT_NET", + "GRO_XENO_HYBRIDS", "SHP_DEUTERIUM_TANK", "SPY_DETECT_3", "SHP_REINFORCED_HULL", @@ -238,14 +238,69 @@ return result -def tech_group_3b(): # with SHP_ASTEROID_REFORM +def tech_group_3b(): # with plasma weaps result = tech_group_3a() - #result += [ "SHP_ASTEROID_REFORM", "SHP_HEAVY_AST_HULL" ] + insert_idx = min(30, len(result)//2) if "GRO_XENO_HYBRIDS" not in result else 1 + result.index("GRO_XENO_HYBRIDS") + result.insert(insert_idx, "SHP_WEAPON_3_4") return result +def tech_group_3_sparse(): # no plasma weaps yet + result = [ + "SHP_DOMESTIC_MONSTER", + "SHP_ORG_HULL", + "GRO_GENETIC_ENG", + "GRO_GENETIC_MED", + "DEF_DEFENSE_NET_2", + "DEF_DEFENSE_NET_REGEN_1", + "PRO_SENTIENT_AUTOMATION", + "DEF_PLAN_BARRIER_SHLD_1", + "PRO_EXOBOTS", + "GRO_XENO_GENETICS", + "LRN_PHYS_BRAIN", + "LRN_TRANSLING_THT", + "SHP_BASIC_DAM_CONT", + "PRO_INDUSTRY_CENTER_II", + "SHP_INTSTEL_LOG", + "SHP_FLEET_REPAIR", + "PRO_ORBITAL_GEN", + "PRO_SOL_ORB_GEN", + "DEF_GARRISON_2", + "PRO_MICROGRAV_MAN", + "SHP_ASTEROID_HULLS", + "SHP_IMPROVED_ENGINE_COUPLINGS", + "SHP_ASTEROID_REFORM", + "SHP_HEAVY_AST_HULL", + "SHP_DEFLECTOR_SHIELD", + "SHP_WEAPON_3_1", + "SHP_WEAPON_3_2", + "SHP_WEAPON_3_3", + "SHP_WEAPON_3_4", + "LRN_QUANT_NET", + "GRO_XENO_HYBRIDS", + "SHP_DEUTERIUM_TANK", + "SPY_DETECT_3", + "SHP_REINFORCED_HULL", + "SHP_DIAMOND_PLATE", + "DEF_DEFENSE_NET_REGEN_2", + "DEF_PLAN_BARRIER_SHLD_2", + "DEF_DEFENSE_NET_3", + "CON_CONTGRAV_ARCH", + "CON_ORBITAL_HAB", + "CON_FRC_ENRG_STRC", + "DEF_SYST_DEF_MINE_1", + "DEF_GARRISON_3", + "DEF_PLAN_BARRIER_SHLD_3", + "CON_NDIM_STRC", + "SHP_N_DIMENSIONAL_ENGINE_MATRIX", + "GRO_LIFECYCLE_MAN", + "SHP_MULTICELL_CAST", + "SHP_ENDOCRINE_SYSTEMS", + "SHP_CONT_BIOADAPT", + "SPY_STEALTH_1", + ] + return result -def tech_group_4a(): # later plasma weaps [ no longer: & w/o SHP_ENRG_BOUND_MAN ] - # "CON_NDIM_STRC", +def tech_group_4a(): # later plasma weaps result = [ "SHP_WEAPON_3_1", "SHP_WEAPON_3_2", @@ -257,16 +312,9 @@ return result -def tech_group_4b(): # faster plasma weaps & with SHP_ENRG_BOUND_MAN +def tech_group_4b(): result = [ - "SHP_WEAPON_3_1", - "SHP_WEAPON_3_2", - "SHP_WEAPON_3_3", "SHP_WEAPON_3_4", - "SHP_DIAMOND_PLATE", - ] - # "CON_NDIM_STRC", - result += [ "SHP_FRC_ENRG_COMP", "SHP_ENRG_BOUND_MAN", ] @@ -326,31 +374,31 @@ result = tech_group_1a() # early org_hull result += tech_group_2a() # prioritizes growth & defense over weapons result += tech_group_3a() - result += tech_group_4a() # later plasma weaps & w/o SHP_ENRG_BOUND_MAN + result += tech_group_4a() result += tech_group_5() # elif index == 1: result = tech_group_1a() # early _lrn_artif_minds result += tech_group_2a() # prioritizes growth & defense over weapons result += tech_group_3a() - result += tech_group_4a() # later plasma weaps & w/o SHP_ENRG_BOUND_MAN + result += tech_group_4a() result += tech_group_5() # elif index == 2: result = tech_group_1_sparse() # early _lrn_artif_minds result += tech_group_2_sparse() # prioritizes growth & defense over weapons result += tech_group_3a() - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_4a() result += tech_group_5() # elif index == 3: - result = tech_group_1_sparse() # early org_hull - result += tech_group_2_sparse() + result = tech_group_1_sparse_b() # early org_hull + result += tech_group_2_sparse_b() result += tech_group_3a() - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_4a() result += tech_group_5() # elif index == 4: result = tech_group_1_sparse_b() # early _lrn_artif_minds result += tech_group_2_sparse_b() - result += tech_group_3a() - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_3b() # faster plasma weaps + result += tech_group_4b() result += tech_group_5() # return result @@ -366,32 +414,32 @@ if index == 0: result = tech_group_1a() # early org_hull result += tech_group_2a() # prioritizes growth & defense over weapons - result += tech_group_3b() # without SHP_ASTEROID_REFORM - result += tech_group_4a() # later plasma weaps & w/o SHP_ENRG_BOUND_MAN + result += tech_group_3a() + result += tech_group_4a() result += tech_group_5() # elif index == 1: result = tech_group_1a() # early _lrn_artif_minds result += tech_group_2a() # prioritizes growth & defense over weapons - result += tech_group_3b() # without SHP_ASTEROID_REFORM - result += tech_group_4a() # later plasma weaps & w/o SHP_ENRG_BOUND_MAN + result += tech_group_3a() + result += tech_group_4a() result += tech_group_5() # elif index == 2: result = tech_group_1a() # early _lrn_artif_minds result += tech_group_2a() # prioritizes growth & defense over weapons - result += tech_group_3b() # without SHP_ASTEROID_REFORM - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_3a() + result += tech_group_4a() result += tech_group_5() # elif index == 3: result = tech_group_1b() # result += tech_group_2b() # prioritizes weapons over growth & defense - result += tech_group_3b() # without SHP_ASTEROID_REFORM - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_3b() # 3a plus early plasma weaps + result += tech_group_4b() result += tech_group_5() # elif index == 4: result = tech_group_1a() # early _lrn_artif_minds result += tech_group_2a() # prioritizes growth & defense over weapons - result += tech_group_3b() # 3a plus SHP_ASTEROID_REFORM - result += tech_group_4b() # faster plasma weaps & with SHP_ENRG_BOUND_MAN + result += tech_group_3b() # 3a plus early plasma weaps + result += tech_group_4b() result += tech_group_5() # return result Modified: trunk/FreeOrion/default/AI/freeorion_tools.py =================================================================== --- trunk/FreeOrion/default/AI/freeorion_tools.py 2015-03-12 04:37:55 UTC (rev 8026) +++ trunk/FreeOrion/default/AI/freeorion_tools.py 2015-03-12 04:44:21 UTC (rev 8027) @@ -96,4 +96,4 @@ """ human_id = [x for x in fo.allPlayerIDs() if fo.playerIsHost(x)][0] fo.sendChatMessage(human_id, message) - print "\n%s\n" % remove_tags(message) + print "\nChat Message to human: %s\n" % remove_tags(message) |
From: <dil...@us...> - 2015-03-12 04:38:03
|
Revision: 8026 http://sourceforge.net/p/freeorion/code/8026 Author: dilvish-fo Date: 2015-03-12 04:37:55 +0000 (Thu, 12 Mar 2015) Log Message: ----------- patch by Cjkjvfnby moving map-to-dict conversion of visibility data so it is handled in the interface layer Modified Paths: -------------- trunk/FreeOrion/default/AI/AIFleetMission.py trunk/FreeOrion/default/AI/AIFleetOrder.py trunk/FreeOrion/default/AI/AIstate.py trunk/FreeOrion/default/AI/ColonisationAI.py trunk/FreeOrion/default/AI/ExplorationAI.py trunk/FreeOrion/default/AI/InvasionAI.py trunk/FreeOrion/default/AI/freeorion_debug/extend_free_orion_AI_interface.py Modified: trunk/FreeOrion/default/AI/AIFleetMission.py =================================================================== --- trunk/FreeOrion/default/AI/AIFleetMission.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/AIFleetMission.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -428,8 +428,8 @@ if last_order and last_order.order_type == AIFleetOrderType.ORDER_COLONISE: planet = universe.getPlanet(last_order.target.target_id) - sys_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.systemID, fo.empireID())).get(fo.visibility.partial, -9999) - planet_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.id, fo.empireID())).get(fo.visibility.partial, -9999) + sys_partial_vis_turn = universe.getVisibilityTurnsMap(planet.systemID, fo.empireID()).get(fo.visibility.partial, -9999) + planet_partial_vis_turn = universe.getVisibilityTurnsMap(planet.id, fo.empireID()).get(fo.visibility.partial, -9999) if planet_partial_vis_turn == sys_partial_vis_turn and not planet.currentMeterValue(fo.meterType.population): print "Potential Error: Fleet %d has tentatively completed its colonize mission but will wait to confirm population." % self.target_id print " Order details are %s" % last_order Modified: trunk/FreeOrion/default/AI/AIFleetOrder.py =================================================================== --- trunk/FreeOrion/default/AI/AIFleetOrder.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/AIFleetOrder.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -41,8 +41,8 @@ # colonise planet if TargetType.TARGET_PLANET == target_type: planet = universe.getPlanet(self.target.target_id) - sys_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.systemID, fo.empireID())).get(fo.visibility.partial, -9999) - planet_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.id, fo.empireID())).get(fo.visibility.partial, -9999) + sys_partial_vis_turn = universe.getVisibilityTurnsMap(planet.systemID, fo.empireID()).get(fo.visibility.partial, -9999) + planet_partial_vis_turn = universe.getVisibilityTurnsMap(planet.id, fo.empireID()).get(fo.visibility.partial, -9999) if not (planet_partial_vis_turn == sys_partial_vis_turn and planet.unowned): self.executed = True self.execution_completed = True @@ -58,8 +58,8 @@ # colonise planet if TargetType.TARGET_PLANET == target_type: planet = universe.getPlanet(self.target.target_id) - sys_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.systemID, fo.empireID())).get(fo.visibility.partial, -9999) - planet_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.id, fo.empireID())).get(fo.visibility.partial, -9999) + sys_partial_vis_turn = universe.getVisibilityTurnsMap(planet.systemID, fo.empireID()).get(fo.visibility.partial, -9999) + planet_partial_vis_turn = universe.getVisibilityTurnsMap(planet.id, fo.empireID()).get(fo.visibility.partial, -9999) if not (planet_partial_vis_turn == sys_partial_vis_turn and planet.unowned or (planet.ownedBy(fo.empireID()) and not planet.currentMeterValue(fo.meterType.population))): self.executed = True self.execution_completed = True Modified: trunk/FreeOrion/default/AI/AIstate.py =================================================================== --- trunk/FreeOrion/default/AI/AIstate.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/AIstate.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -308,7 +308,7 @@ for count, sum_stats in e_rating['summary']: if sum_stats[0] > 0: e_f_dict.setdefault(sum_stats, [0])[0] += count - partialVisTurn = dict_from_map(universe.getVisibilityTurnsMap(fleetID, empireID)).get(fo.visibility.partial, -9999) + partialVisTurn = universe.getVisibilityTurnsMap(fleetID, empireID).get(fo.visibility.partial, -9999) if partialVisTurn >= current_turn - 1: # only interested in immediately recent data if not dead_fleet: sawEnemiesAtSystem[fleet.systemID] = True @@ -344,7 +344,7 @@ continue #update threats - sysVisDict = dict_from_map(universe.getVisibilityTurnsMap(sysID, fo.empireID())) + sysVisDict = universe.getVisibilityTurnsMap(sysID, fo.empireID()) partialVisTurn = sysVisDict.get(fo.visibility.partial, -9999) enemyRatings = [] enemyRating = 0 Modified: trunk/FreeOrion/default/AI/ColonisationAI.py =================================================================== --- trunk/FreeOrion/default/AI/ColonisationAI.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/ColonisationAI.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -337,7 +337,7 @@ if spec_name == "": unowned_empty_planet_ids.add(pid) else: - partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(pid, empire_id)).get(fo.visibility.partial, -9999) + partial_vis_turn = universe.getVisibilityTurnsMap(pid, empire_id).get(fo.visibility.partial, -9999) if partial_vis_turn >= current_turn - 1: # only interested in immediately recent data foAI.foAIstate.misc.setdefault('enemies_sighted', {}).setdefault(current_turn, []).append(pid) @@ -720,7 +720,7 @@ empire_research_list = [element.tech for element in empire.researchQueue] if planet is None: - vis_map = dict_from_map(universe.getVisibilityTurnsMap(planet_id, empire.empireID)) + vis_map = universe.getVisibilityTurnsMap(planet_id, empire.empireID) print "Planet %d object not available; visMap: %s" % (planet_id, vis_map) return 0 detail.append("%s : " % planet.name) @@ -759,8 +759,8 @@ elif fleet_threat_ratio + neighbor_threat_ratio + monster_threat_ratio > 0.2 * ship_limit: thrt_factor = 0.8 - sys_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(this_sysid, empire.empireID)).get(fo.visibility.partial, -9999) - planet_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet_id, empire.empireID)).get(fo.visibility.partial, -9999) + sys_partial_vis_turn = universe.getVisibilityTurnsMap(this_sysid, empire.empireID).get(fo.visibility.partial, -9999) + planet_partial_vis_turn = universe.getVisibilityTurnsMap(planet_id, empire.empireID).get(fo.visibility.partial, -9999) if planet_partial_vis_turn < sys_partial_vis_turn: print "Colonization AI couldn't get current info on planet id %d (was stealthed at last sighting)" % planet_id Modified: trunk/FreeOrion/default/AI/ExplorationAI.py =================================================================== --- trunk/FreeOrion/default/AI/ExplorationAI.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/ExplorationAI.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -135,12 +135,12 @@ else: pre_vis = "an unknown system" if fo.currentTurn() < 50: - visibility_turn_list = sorted(dict_from_map(universe.getVisibilityTurnsMap(cur_system_id, empire_id)).items(), + visibility_turn_list = sorted(universe.getVisibilityTurnsMap(cur_system_id, empire_id).items(), key=lambda x: x[0].numerator) visibility_info = ['%s: %s' % (vis.name, turn) for vis, turn in visibility_turn_list] print "*** system ID %d ( %s ) ; previously %s, new visibility turns info: %s " % (cur_system_id, sys_name, pre_vis, visibility_info) status_str = "*** system ID %d ( %s ) ; " % (cur_system_id, sys_name) - has_been_visible = dict_from_map(universe.getVisibilityTurnsMap(cur_system_id, empire_id)).get(fo.visibility.partial, 0) > 0 + has_been_visible = universe.getVisibilityTurnsMap(cur_system_id, empire_id).get(fo.visibility.partial, 0) > 0 is_connected = universe.systemsConnected(cur_system_id, home_system_id, -1) # self.empire_id) status_str += " -- is %s partially visible " % (["not", ""][has_been_visible]) status_str += " -- is %s visibly connected to homesystem " % (["not", ""][is_connected]) Modified: trunk/FreeOrion/default/AI/InvasionAI.py =================================================================== --- trunk/FreeOrion/default/AI/InvasionAI.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/InvasionAI.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -104,8 +104,8 @@ if not planet: continue sys_id = planet.systemID - sys_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(planet.systemID, empire_id)).get(fo.visibility.partial, -9999) - planet_partial_vis_turn = dict_from_map(universe.getVisibilityTurnsMap(pid, empire_id)).get(fo.visibility.partial, -9999) + sys_partial_vis_turn = universe.getVisibilityTurnsMap(planet.systemID, empire_id).get(fo.visibility.partial, -9999) + planet_partial_vis_turn = universe.getVisibilityTurnsMap(pid, empire_id).get(fo.visibility.partial, -9999) if planet_partial_vis_turn < sys_partial_vis_turn: #print "rejecting %s due to stealth"%planet.name continue @@ -288,8 +288,8 @@ print "invasion AI couldn't access any info for planet id %d"%planetID return [0, 0] - sysPartialVisTurn = dict_from_map(universe.getVisibilityTurnsMap(planet.systemID, empireID)).get(fo.visibility.partial, -9999) - planetPartialVisTurn = dict_from_map(universe.getVisibilityTurnsMap(planetID, empireID)).get(fo.visibility.partial, -9999) + sysPartialVisTurn = universe.getVisibilityTurnsMap(planet.systemID, empireID).get(fo.visibility.partial, -9999) + planetPartialVisTurn = universe.getVisibilityTurnsMap(planetID, empireID).get(fo.visibility.partial, -9999) if planetPartialVisTurn < sysPartialVisTurn: print "invasion AI couldn't get current info on planet id %d (was stealthed at last sighting)"%planetID Modified: trunk/FreeOrion/default/AI/freeorion_debug/extend_free_orion_AI_interface.py =================================================================== --- trunk/FreeOrion/default/AI/freeorion_debug/extend_free_orion_AI_interface.py 2015-03-12 04:23:26 UTC (rev 8025) +++ trunk/FreeOrion/default/AI/freeorion_debug/extend_free_orion_AI_interface.py 2015-03-12 04:37:55 UTC (rev 8026) @@ -57,6 +57,14 @@ SHIP_DESIGN = 'D' +def to_map(method): + def wrapper(*args): + return dict_from_map(method(*args)) + return wrapper + +fo.universe.getVisibilityTurnsMap = to_map(fo.universe.getVisibilityTurnsMap) + + def to_str(prefix, id, name): return '{}{}<{}>'.format(prefix, id, name) |
From: <dil...@us...> - 2015-03-12 03:41:30
|
Revision: 8024 http://sourceforge.net/p/freeorion/code/8024 Author: dilvish-fo Date: 2015-03-12 03:41:23 +0000 (Thu, 12 Mar 2015) Log Message: ----------- python interface minor adjustment re wormholes and planet axial tilt Modified Paths: -------------- trunk/FreeOrion/python/PythonUniverseWrapper.cpp Modified: trunk/FreeOrion/python/PythonUniverseWrapper.cpp =================================================================== --- trunk/FreeOrion/python/PythonUniverseWrapper.cpp 2015-03-12 02:59:24 UTC (rev 8023) +++ trunk/FreeOrion/python/PythonUniverseWrapper.cpp 2015-03-12 03:41:23 UTC (rev 8024) @@ -556,7 +556,7 @@ .add_property("InitialOrbitalPosition", &Planet::InitialOrbitalPosition) .def("OrbitalPositionOnTurn", &Planet::OrbitalPositionOnTurn) .add_property("RotationalPeriod", &Planet::RotationalPeriod) - .add_property("AxialTilt", &Planet::AxialTilt) + //.add_property("AxialTilt", &Planet::AxialTilt) .add_property("buildingIDs", make_function(&Planet::BuildingIDs, return_internal_reference<>())) ; @@ -566,10 +566,10 @@ class_<System, bases<UniverseObject>, noncopyable>("system", no_init) .add_property("starType", &System::GetStarType) .add_property("numStarlanes", &System::NumStarlanes) - .add_property("numWormholes", &System::NumWormholes) + .add_property("numWormholes", &System::NumWormholes, "Currently unused.") .def("HasStarlaneToSystemID", &System::HasStarlaneTo) - .def("HasWormholeToSystemID", &System::HasWormholeTo) - .add_property("starlanesWormholes", make_function(&System::StarlanesWormholes, return_value_policy<return_by_value>())) + .def("HasWormholeToSystemID", &System::HasWormholeTo, "Currently unused.") + .add_property("starlanesWormholes", make_function(&System::StarlanesWormholes, return_value_policy<return_by_value>()), "Currently unused.") .add_property("planetIDs", make_function(&System::PlanetIDs, return_value_policy<return_by_value>())) .add_property("buildingIDs", make_function(&System::BuildingIDs, return_value_policy<return_by_value>())) .add_property("fleetIDs", make_function(&System::FleetIDs, return_value_policy<return_by_value>())) |