 |
|  |
 |
|
Fromafar
|
|
Mostly bug fixes
Prevented crashes with invalid units:
gs\gameobj\army.cpp
gs\gameobj\army.h
gs\gameobj\unit.cpp
gs\gameobj\unit.h
gs\world\cell.cpp
gs\world\cellunitlist.cpp
gs\world\cellunitlist.h
Prevented crashes when starting a new game from the menu:
gs\database\strdb.cpp
Restore original game file compatibility + added crash prevention on unexpected file input:
gs\newdb\citystyle.cdb
ui\interface\scenarioeditor.cpp
ui\interface\dipwizard.cpp
Relaxed some asserts to make mods less tedious to debug:
ai\mapanalysis\mapanalysis.cpp
gs\slic\SlicSymbol.cpp
Corrected delete type:
ui\netshell\ns_window.cpp
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:19
|
|
|  |
 |
|
calvitix
|
|
Strasbourg (North-Est France)
Jun 2003 time: 05:31
|
|
std::max only partially fixed with VC6 in
F:\ctp2source\ctp2_code\ui\aui_ctp2\linegraph.cpp
F:\ctp2source\ctp2_code\ui\aui_ctp2\linegraph.cpp(293) : error C2782: 'const T &__cdecl std::max(const T &,const T &)' : Vorlagenparameter 'T' ist mehrdeutig
koennte 'int' sein
oder 'long'
added cast to second patameter too.
|
|
|  |
 |
|
Fromafar
|
|
Bug fix: prevented crashes and memory leak when starting a new game.
gs\database\strdb.h
gs\database\strdb.cpp
Redesigned to make the memory handling less error prone.
No functional change:
ui\netshell\ns_customlistbox.cpp
Removed improper preprocessor directives. These were marking my cut-and-paste errors as original Activision code.
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:20
|
|
|  |
 |
|
Fromafar
|
|
Miscellaneous corrections:
ui\aui_common\aui_stringtable.cpp
Memory leaks repaired.
ui\interface\agesscreen.cpp
gfx\spritesys\unitactor.cpp
Restored backwards compatibility.
gfx\spritesys\spritegrouplist.cpp
gfx\spritesys\spritegrouplist.h
gfx\spritesys\spritelist.cpp
gfx\spritesys\spritelist.h
Sprite limit set to 255, and deactivated some unused code.
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:20
|
|
|  |
 |
|
calvitix
|
|
Strasbourg (North-Est France)
Jun 2003 time: 05:31
|
|
ctp2_code\ai\strategy\goals\CTPgoal.cpp
ctp2_code\ai\strategy\goals\CTPgoal.h
ctp2_code\ai\strategy\goals\goal.h
ctp2_code\ai\strategy\goals\goal.cpp
Added bonus to define in 'goals.txt' : for wounded units (IswoundedBonus), Goals in territory (Home, Enemy or neutral), Is Tile visible,...
Added respect of non-trespassing Treaty (Goals have in that case BAD_UTILITY)
Another minor changes (Debug log,...)
ctp2_code\ai\strategy\scheduler\plan.cpp
ctp2_code\ai\strategy\scheduler\scheduler.cpp
Rollbacked 'NO_GOAL' armytext
Add NoRollback Condition for goals that can't be reevaluated (like seige for exemple). Without that flag,
Goals affectation are reevaluated every turn.
ctp2_code\ai\ctpai.cpp
ctp2_code\ai\ctpai.h
An Explore goal every 4 tiles is a good compromise. Add an STEALTH_EXPLORE only for special units to explore deeply in enemy territory.
Added UngroupGarrison method to Ungroup Seige force after taking city (otherwhile the whole army is blocked as garrison.
ctp2_code\ai\mapanalysis\mapanalysis.cpp
ctp2_code\ai\mapanalysis\boundingrect.cpp
Corrected the determination of Empire Center
ctp2_code\ai\citymanagement\governor.cpp
Add roads around cities
ctp2_code\gs\gameobj\Army.h
ctp2_code\gs\gameobj\Army.cpp
ctp2_code\gs\gameobj\ArmyData.h
ctp2_code\gs\gameobj\ArmyData.cpp
Added a Iswounded method
ctp2_code\gs\newdb\goals.cdb
Added the bonuses defineds if 'goals.txt'
ctp2_code\robot\pathing\*aStar.cpp
Added a 'avoidList' parameter in Find_path to specify tile that can't be used for path.
Added methods to check if there is enough room for army along path, check danger along path,
Added method to build roads around 'dead' tiles
...
ctp2_data\default\aidata\goals.txt
ctp2_data\default\aidata\strategies.txt
Added new bonuses, new Goal (GOAL_STEALTH_EXPLORE)
changed ratio forces a bit
Attachment: 2004.09.10.armymovementupdate1.1.zip
This has been downloaded 8 time(s).
|
|
|  |
 |
|
Fromafar
|
|
Bug fixes:
ui\interface\agesscreen.cp
ui\netshell\allinonewindow.cpp
ui\netshell\lobbywindow.cpp
Repaired memory leaks, and improved the compatibility handling of age names.
Thanks Martin, for pointing out the unintuitive way of producing results by GetNameText.
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:21
|
|
|  |
 |
|
Fromafar
|
|
Yeah, that does not look good. Do you have the corresponding AGE_NAME_MEDIEVAL etc. strings enabled in ldl_str.txt? Checking the Apolyton pack makes me wonder if this could have worked for the original game at all. The ages.txt has 10 ages, but I can't find an updated ns_strings.ldl and ldl_str.txt with matching names. So I guess you would have been able to select only ages 1-5, using the original names (so selecting Renaissance would have given you AGE_TWO - being the Classical age in the mod) .
ui\interface\agesscreen.cpp
Design change:
1. Use the AGE_ONE etc. texts from gl_str.txt when available (Martin's change).
2. Use the ns_strings.ldl startagestrings when the AGE_ONE etc. texts are not available and the number of ages is equal to the number of startagestrings.
3. Just display "AGE_ONE", etc. in all other cases.
So, for compatibility, you have to use the ns_strings.ldl with the original 5 age names.
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:22
|
|
|  |
 |
|
Martin Gühmann
|
 |
Berlin, Germany
Mar 2001 time: 06:31
|
|
It didn't worl so well for Apolyton Pack, Med Pack 2 and Cradle, it only worked in GoodMod, because I provided a modified ns_strings.ldl, but then you had an problem with the original setup, actual for that thing ModSwapper doesn't work at all. Either the ten ages or the five ages. However the missing entries were just blank. And the end age was set to the industrial age in Apolyton Pack, well we could provide a modified ns_strings.ldl, as most mods have ten ages, and like in the case of MedPack 2 with nine ages it wouldn't matter as well, as the last string would just be skipped.
-Martin
|
|
|  |
 |
|
Fromafar
|
|
Increased great library data storage size from 4k to 8k (for the German version), and added support for target memory range checking when parsing text strings.
gs\utility\stringutils.cpp
gs\utility\stringutils.h
ui\interface\greatlibrary.cpp
ui\interface\greatlibrary.h
ui\interface\great_library_util.cpp
ui\interface\greatlibrarywindow.cpp
[Edit: file link removed. Included in the 2004.09.13 source collection.]
Last edited by Fromafar on 16-09-2004 at 02:22
|
|
|  |
 |
|
Martin Gühmann
|
 |
Berlin, Germany
Mar 2001 time: 06:31
|
|
A lot of stuff have accomulated on my harddrive, so I better post it before I lose the overview definatly. I undid the changes about the astar stuff, as I think it belongs into the ENtryCost function so that it is efficent and I also undid the exploration res change as I got the feeling that there is still a slowdown even with an optimized final release build. So I should be able to release now an all pack in the next days. So that we can build a new playtest build.
Improved AI and mayor tile improvement behaviour by Martin Gühmann:
..\ctp2_code\gs\gameobj\CityData.cpp
..\ctp2_code\gs\gameobj\CityData.h
Added NeedMoreFood to determine whether the AI should build a food tile improvement.
..\ctp2_code\ai\CityManagement\governor.cpp
..\ctp2_code\ai\CityManagement\governor.h
- Removed .NET warnings
- Added Calvitex' roads around cities code
- Removed code that prevents the AI and mayors from building undersea tunnels.
- Modified g_cityAstar.FindRoadPath to match the new signature
- Added more arguments to FindBestTileImprovement function, so that it can take
the terrain improvements from the other tiles into consideration.
- Food tile improvements are now build if food is needed and not if there is
plenty of food for the city.
..\ctp2_code\ctp2_code\robot\pathing\CityAstar.cpp
..\ctp2_code\ctp2_code\robot\pathing\CityAstar.h
- Added owner argument to FindRoadPath so that the m_owner variable can be set the
actual owner.
- Unexplored terrain is now taken into consideration
- Tiles on that no road improvement can be built, because it has non, e.g dead or
the according advance is missing, e.g. water.
- Tiles that no one owns are taken into account, but with higher costs so that
tiles are prefered that are owned, but leave the possiblity open to build a road
when the territoral connection is missing.
- Foreign tiles are ignored unless the foreigner is an ally, maybe a higher penalty
then for unowned tiles should be indroduced.
- Linking cities on different continents and building of undersea tunnels is now
also possible.
- To calculate the costs for one tile the MoveCosts are weighted with the pw costs
this results in good and cheap pathes.
..\ctp2_code\gs\newdb\StartegyRecord.cpp
..\ctp2_code\gs\newdb\StartegyRecord.h
..\ctp2_code\gs\newdb\StrategyRecord.stamp
..\ctp2_code\gs\newdb\startegy.cdb
Exposed to new constant to startegy.txt to calculate whether food is needed:
code:
// Maximum number of turns required for city growth of one pop that
// is accepted for the AI and mayors. Default value == 30.
// Bit (Int) TurnsAcceptedForOnePop = 30
Int TurnsAcceptedForOnePop = 30
// The number of pops before the current pop maximum the AI and mayors
// stop to consinder building food terrain improvements in the radius
// of the according city. Default value == 1.
// Bit (Int) StopBuildingFoodBeforePopMax = 1
Int StopBuildingFoodBeforePopMax = 1
Actual those constants should be Bits so that when two startegies are merged the value of that startegy in that the value is not defined merged into the other. But unfortunatly Bits don't allow default values, at least not yet.
..\ctp2_code\ai\ctpai.cpp
Set back the exploration resolution to five, there seem still to be a slow down in the game for no obvious gain.
..\ctp2_code\ctp2_code\robot\pathing\astar.cpp
..\ctp2_code\ctp2_code\robot\pathing\Astar.h
..\ctp2_code\ctp2_code\robot\pathing\unitastar.cpp
..\ctp2_code\ctp2_code\robot\pathing\UnitAstar.h
..\ctp2_code\ctp2_code\robot\pathing\TradeAstar.cpp
..\ctp2_code\ctp2_code\robot\pathing\RobotAstar.h
Restored the last versions of these files as the check whether a path is blocked or not has to be put into the EntryCost function or into one of the from there called other functions, that will reduce the additional code and the calculation time.
..\ctp2_code\gs\newdb\GoalRecord.cpp
..\ctp2_code\gs\newdb\GoalRecord.h
..\ctp2_code\gs\newdb\GoalRecord.stamp
..\ctp2_code\gs\newdb\goal.cdb
Restored backward compartibility by giving the new flags default values.
-Martin
Attachment: 2004.09.12.aitileimpreventbehaviour1.incr.zip
This has been downloaded 6 time(s).
|
|
|  |
 |
|
Martin Gühmann
|
 |
Berlin, Germany
Mar 2001 time: 06:31
|
|
2004.08.02
..\ctp2_code\libs\miles\mss.h
Miles Sound System include file update by Fromafar:
* Assigned debugger confirmed values to the enumeration constants.
* Added disclaimers.
* Replaced bool (not a type in C) with S32.
* Integrated stubbed and non-stubbed versions.
Note: To make it complicated, the path ..\ctp2_code\libs\miles\mss.h from the original source code project has been reinstated. This will make accessing this file from the File View tab work again. However, this forces you to delete ..\ctp2_code\sound\mss.h before rebuilding with the new file. If you don't, the wrong file will be included during compilation.
2004.08.03
..\ctp2_code\ai\diplomacy\diplomat.h
..\ctp2_code\ai\diplomacy\foreigner.cpp
..\ctp2_code\ai\mapanalysis\settlemap.h
..\ctp2_code\ai\strategy\scheduler.plan.h
..\ctp2_code\ai\strategy\scheduler.cpp
..\ctp2_code\ai\strategy\scheduler_types.h
..\ctp2_code\gs\gameobj\gaiacontroller.h
..\ctp2_code\ai\strategy\scheduler\scheduler.h
..\ctp2_code\ctp\ctp2_utils\c3debugstl.h
..\ctp2_code\ctp\ctp2_utils\AvlTree.h
..\ctp2_code\ctp\ctp2_utils\c3cmdline.cpp
MSVC.NET compatibility update part 1, by Fromafar.
Most of the following changes have already been reported by RalphTrickey in the COMPILE: Getting the source to compile on VS.NET thread.
This code has no functional changes, but has been verified to work on both MSVC 6.0 and .NET.
Replace list-fixed with list:
diplomat.h
foreigner.cpp
settlemap.h
scheduler.plan.h
scheduler.cpp
scheduler_types.h
gaiacontroller.h
Workarounds for allocator problems:
scheduler.h
c3debugstl.h
Replace or remove references to a missing iostream.h:
AvlTree.h
c3cmdline.cpp
2004.08.03
..\ctp2_code\ui\netshell\ns_lobby.h
..\ctp2_code\ui\netshell\ns_gplayer.h
..\ctp2_code\ui\netshell\ns_gamesetup.h
..\ctp2_code\ui\netshell\ns_game.h
..\ctp2_code\ui\netshell\ns_aiplayersetup.h
..\ctp2_code\ui\netshell\ns_aiplayer.h
..\ctp2_code\ui\netshell\ns_transport.h
..\ctp2_code\ui\netshell\ns_session.h
..\ctp2_code\ui\netshell\ns_server.h
..\ctp2_code\ui\netshell\ns_rplayer.h
..\ctp2_code\ui\netshell\ns_playersetup.h
..\ctp2_code\ui\netshell\ns_player.h
..\ctp2_code\ui\netshell\ns_transport.cpp
..\ctp2_code\ui\netshell\ns_session.cpp
..\ctp2_code\ui\netshell\ns_server.cpp
..\ctp2_code\ui\netshell\ns_rplayer.cpp
..\ctp2_code\ui\netshell\ns_playersetup.cpp
..\ctp2_code\ui\netshell\ns_player.cpp
..\ctp2_code\ui\netshell\ns_object.h
..\ctp2_code\ui\netshell\ns_lobby.cpp
..\ctp2_code\ui\netshell\ns_listbox.h
..\ctp2_code\ui\netshell\ns_gplayer.cpp
..\ctp2_code\ui\netshell\ns_game.cpp
..\ctp2_code\ui\netshell\ns_civlistbox.cpp
..\ctp2_code\ui\netshell\ns_aiplayer.cpp
..\ctp2_code\ui\netshell\ns_accessor.h
..\ctp2_code\ui\netshell\ns_gamesetup.cpp
..\ctp2_code\ui\netshell\ns_aiplayersetup.cpp
MSVC.NET compatibillity update part 2 by Fromafar.
Resolved ambiguous function reference:
ns_civlistbox.cpp
Other files:
Corrected strange access of non-static members from static data.
2004.08.04
..\ctp2_code\ai\diplomacy\diplomat.cpp
..\ctp2_code\ai\diplomacy\diplomattypes.h
..\ctp2_code\gs\gameobj\terrainutil.cpp
..\ctp2_code\gs\slic\sliccmd.cpp
..\ctp2_code\gs\slic\slicengine.cpp
..\ctp2_code\gs\slic\slicif.cpp
..\ctp2_code\gs\utillity\mapfile.cpp
..\ctp2_code\ui\aui_ctp2\c3_listbox.cpp
..\ctp2_code\ui\aui_ctp2\ctp2_listbox.cpp
..\ctp2_code\ui\aui_utils\vidplay.h
..\ctp2_code\ui\interface\creditsscreen.cpp
..\ctp2_code\ui\interface\trademanager.cpp
MSVC .NET compatibility update part 3 by Fromafar.
Removed some more non-standard language constructs.
2004.08.05
..\ctp2_code\ai\citymanagement\governor.cpp
..\ctp2_code\ai\strategy\agents\ctpagent.cpp
..\ctp2_code\ai\strategy\goals\ctpgoal.cpp
..\ctp2_code\gfx\tilesys\tiledraw.cpp
..\ctp2_code\gs\gameobj\armydata.cpp
..\ctp2_code\gs\slic\slicfunc.cpp
..\ctp2_code\gs\world\wldgen.cpp
..\ctp2_code\ui\aui_utils\textutils.cpp
MSVC .NET compatibility update part 4 by Fromafar.
Resolved ambiguous fabs, floor, and sqrt calls.
2004.08.06
..\ctp2_code\ai\diplomacy\agreementmatrix.cpp
..\ctp2_code\ctp\c3.h
..\ctp2_code\ctp\ctp2_utils\c3cmdline.cpp
..\ctp2_code\gfx\tilesys\maputils.cpp
..\ctp2_code\gfx\tilesys\TileHighlight.cpp
..\ctp2_code\gs\gameobj\ArmyData.cpp
..\ctp2_code\gs\gameobj\CityData.cpp
..\ctp2_code\gs\gameobj\Happy.cpp
..\ctp2_code\gs\gameobj\UnitData.cpp
..\ctp2_code\gs\world\Cell.cpp
..\ctp2_code\gs\world\wldgen.cpp
..\ctp2_code\robot\aibackdoor\dynarr.h
..\ctp2_code\robot\pathing\unitastar.cpp
..\ctp2_code\ui\aui_common\aui_control.cpp
..\ctp2_code\ui\aui_common\aui_music.cpp
..\ctp2_code\ui\aui_ctp2\radarmap.cpp
..\ctp2_code\ui\aui_ctp2\thumbnailmap.cpp
MSVC .NET compatibility update part 5 by Fromafar.
Resolved ambiguous ceil calls, and tried to standardise min and max calls.
Notes by Fromafar:
This is the final and most dangerous part of the update - and the most likely one not to work.
In ..\ctp2_code\ctp\c3.h, I have set the NOMINMAX define to suppress the macros, and have added template versions of std::min and std::max, which MSVC 6 did not have. MSVC .NET is supposed to have those, but I am unable to verify this, because I don't have a .NET compiler. If it does not work with MSVC .NET, try updating the _MSC_VER test value from 1300 to 1400.
2004.08.07
dsp update part 1 by ctplinuxfan:
* added custom build targets for (.cdb|.l|.y) files
=> e.g. Release build does not need prior debug build
* removed hardcoded directx .lib and include references
=> dxsdk switching via tools->options->directories possible, no more copy orgies
* removed hardcoded dxmedia .lib and include references
=> dxmedia sdk switching via tools->options->directories possible, no more copy orgies
* added nodefaultlib for libcmt/libcmtd.lib (probably worth for xp/2k)
Configuration note: If you haven't added the Direct Media SDK and DirectX SDK to your paths in tools->options->directories, do so now.
For libraries, make sure at top path are in that order:
DXMedia\lib
DXSDK\lib
... (any further system libs)
For headers, this order is a must, beginning from top:
DXMedia\classes\base
DXMedia\include
DXSDK\include
... (any further system headers)
Where
* DXMedia is your Direct Media SDK installation path (e.g. C:\DXMedia)
* DXSDK is your DirectX SDK installation path (e.g. C:\DX90SDK).
Though for now, you still cannot use DirectShow Base Classes of DXSDK instead of the outdated onces of DXMedia
2004.08.08
..\ctp2_code\ctp\civctp.dsp
..\ctp2_code\mapgen\plasma1.dsp
..\ctp2_code\mapgen\fault.dsp
..\ctp2_code\mapgen\Crater.dsp
..\ctp2_code\mapgen\Plasma2.dsp
..\ctp2_code\mapgen\geometric.dsp
..\ctp2_code\gs\dbgen\dbgen.dsp
..\ctp2_code\gs\world\wldgen.cpp
..\ctp2_code\os\
..\ctp2_code\os\linux\
..\ctp2_code\os\win32\
..\ctp2_code\os\autoconf\
..\ctp2_code\os\common\
..\ctp2_code\os\include\
..\ctp2_code\os\include\ctp2_config.h
..\ctp2_code\os\include\config_win32.h
dsp update part 2: DXMedia requirement removed
changes:
- added generation of lex.sc.c (forgot that for Win32 Release)
- finally dxmedia is not needed, if you use DirectX SDK >8.x like beginning of this post
- added ctp2_code/os for os specific/dependent code
- stub headers os/include/*.h (unused yet and pretty empty)
..\ctp2_code\ui\interface\NationalManagementDialog.cpp
..\ctp2_code\ui\aui_ctp2\ctp2_listbox.cpp
I merged back changes by Lui2 as described here
Thanks Fromafar for starting with CityData.cpp
Note: civctp_j.dsp is not altered yet; for the conversion a unicode capable editor with dos line conversions or a hex editor is needed.
2004.08.10
..\ctp2_code\gs\database\profiledb.cpp
..\ctp2_code\gs\database\profiledb.h
..\ctp2_code\ui\aui_common\aui_listbox.cpp
..\ctp2_code\ui\aui_common\aui_listbox.h
..\ctp2_code\ui\interface\controlpanelwindow.cpp
..\ctp2_data\\gamedata\ldl_str.txt
Activision patch reimplementation by Fromafar: Always display the newest message.
User interface option: Display the newest message at the top.
Placeholders added for the new option string to the data files.
2004.08.12
..\ctp2_code\gs\slic\stringhash.h
Bug fix by Fromafar for a reported crash with Cradle.
2004.08.13
..\ctp2_code\ai\strategy\goals\CTPGoals.cpp
..\ctp2_code\ai\strategy\goals\CTPGoals.h
'armytext' command enhancement by calvitix:
Add the target coords (X,Y) to the armytext (text with the army goal that is available on the screen when using the playtest command 'armytext').
2004.08.15
..\ctp2_code\ai\diplomacy\sstateevent.cpp
..\ctp2_data\default\aidata\personalities.txt
..\ctp2_data\default\aidata\Goals.txt
..\ctp2_data\default\aidata\strategies.txt
..\ctp2_code\gs\newdb\PersonalityRecord.cpp
..\ctp2_code\gs\newdb\PersonalityRecord.h
..\ctp2_code\gs\newdb\PersonalityRecord.stamp
..\ctp2_code\gs\newdb\personality.cdb
Changes by Martin Gühmann:
Exposed the strategies used by the players to the personalities.txt.
Fixed advice strings for some personalities.
Added new strategy, so that when the AI hit the city limit conquest and founding of cities is stopped.
Added new AI goals so that the AI can also advertise, incite uprisings, poison cities, sue, sell indulgences and faith healing. In addition the settling goals are now executed more often so that the AI fills available land with cities quickly. And land destroed due to pollution is fixed now quicklier, this fix is taken from kaan's Fixmod.
Note all the old personalities.txt's are incompatible with this version of the PersonalitiesDB, but this PersonalitiesDB is much more flexible then the old one.
2004.08.17
..\ctp2_code\gs\gameobj\civilisation.cpp
..\ctp2_code\gs\gameobj\civilisationpool.cpp
..\ctp2_code\gs\gameobj\civisationpool.h
Bug fixes by Fromafar:
1. Prevent assigning the same civilisation twice at the start of the game.
2. Recycle the civilisation (index) when a civilisation gets killed. This may prevent a game crash that would occur when a new - revolting - civilisation is created and all civilisation indices had been used in the past.
Note: The solution for problem 1 is incomplete. When the human player selects an index (color) larger than 1, the human player civilisation may be the one that gets reassigned. Modifications in gameinit.cpp to prevent this are still under test, and will follow later.
2004.08.19
..\ctp2_code\gs\utility\gameinit.cpp
Bug fix: make sure that the human player will get the selected civilisation.
Notes:Tested for most SP start possibilities. Not tested for MP. The code for an editor start has not been changed (still using player 1).
2004.08.20
.. \Scenarios\AlexanderTheGreat\scen0000\default\aida
ta\personalities.txt
.. \Scenarios\MagnificentSamurai\scen0000\default\aid
ata\personalities.txt
Changed by Martin Gühmann to make the Alexander the Great and the Magnicant Samurai scenarios compatiple with the lastest personalities.txt modifications.
2004.08.27
..\ctp2_code\ui\netshell\ns_listbox.h
..\ctp2_code\ui\netshell\ns_customlistbox.cpp
Bug fix by Fromafar: Repaired broken MP list boxes and updated the list box data handling to match the .NET compatibility changes.
2004.08.28
CityMod3 by Martin Gühmann
Graphics part:
..\ctp2_data\default\pictures\CM2_*.tga
Update the age membership of the buildings and advances in the Great Libary.
..\ctp2_data\default\pictures\Classic.tga
..\ctp2_data\default\pictures\Future.tga
..\ctp2_data\default\pictures\Industri.tga
..\ctp2_data\default\pictures\Info.tga
..\ctp2_data\default\pictures\Renaiss.tga
Blank age backgrounds.
..\ctp2_data\default\pictures\RomanStyle.tga
..\ctp2_data\default\pictures\ArabianStyle.tga
..\ctp2_data\default\pictures\AsianStyle.tga
..\ctp2_data\default\pictures\AmericanStyle.tga
..\ctp2_data\default\pictures\CastleStyle.tga
..\ctp2_data\default\pictures\EgyptainStyle.tga
..\ctp2_data\default\pictures\PalaceStyle.tga
New city style icons for the scenario editor.
..\ctp2_data\default\gamedata\sprites\gc*.spr
From sprite 000-020: New sprites to complete the set of new modern sprites of CityMod2 to a set of 8 sprites per city style.
From sprite 097-187: Sprites by Harlan Thompson (American and Castle style and Industrial Age), PinkFriend (Palace style) and Martin Gühmann (Egyptain style and new Modern style).
From sprite 188-219: Sprites from CTP1 (Genetic style, Diamond style, Underwater style and space style)
Text file part:
..\ctp2_data\default\gamedata\Advance.txt
..\ctp2_data\default\gamedata\age.txt
..\ctp2_data\default\gamedata\agecitystyle.txt
..\ctp2_data\default\gamedata\citystyle.txt
..\ctp2_data\default\gamedata\civilisation.txt
..\ctp2_data\default\gamedata\uniticon.txt
..\ctp2_data\default\gamedata\script.slc
New city styles, ages and civilisation have been added to these files. Now there are 45 civs in the game. The following civs have been added:
Arabian
Austrian
Nubian
Byzantine
Celtic
Babylonian
Carthaginian
Swedish
Aztec
The following civs have been removed:
Korean
Nigerian
Welsh
Cuban
Nicaraguan
Irish
However the according strings are still in the civ_str.txts maybe with an interface update we can readd them.
Language text file part:
..\ctp2_data\XXXXXX\gamedata\GreatLibary.txt
..\ctp2_data\XXXXXX\gamedata\gl_str.txt
..\ctp2_data\XXXXXX\gamedata\civ_str.txt
..\ctp2_data\XXXXXX\gamedata\info_str.txt
..\ctp2_data\XXXXXX\gamedata\str_loc.txt
Where XXXXXX stands for English, French, German, Italian or Spanish. However there is no str_loc.txt in the English version, therefore this file is not included in the English folder, for French and Spanish version I have only the Great_Libary.txt and the info_str.txt the other files are missing and are also needed in modified form to run the game.
New age concept descriptions were added to the Great_Libary.txt, age concept, age and city style names were added to the gl_str.txt. New age entering messages were added to info_str.txt. New localized grammar was added to the German str_loc.txt, placeholders for localized grammar were added to the Italian version of that file.
In addition all the other localized text files except sceen.txt for English, German and Italian were added for later use. However French and Spanish files are missing.
Source files
..\ctp2_code\gs\newdb\*.stamp
Updated stamps for database record files.
..\ctp2_code\gs\newdb\citystyle.cdb
..\ctp2_code\gs\newdb\AgeCityStyleRecord.h
..\ctp2_code\gs\newdb\AgeCityStyleRecord.cpp
..\ctp2_code\gs\newdb\CityStyleRecord.h
..\ctp2_code\gs\newdb\CityStyleRecord.cpp
Updated file for new flags in the AgeCityStyleDB to expose city walls and force field tile set indices to the text files.
..\ctp2_code\gs\dbgen\MemberClass.cpp
..\ctp2_code\gs\newdb\RecourceRecord.cpp
..\ctp2_code\gs\newdb\TerrainRecord.cpp
Updated dbgen to allow flags of substructures to have default values. The record files are updated due to this change.
..\ctp2_code\gfx\spritesys\SpriteGroupList.h
..\ctp2_code\gfx\spritesys\SpriteList.h
Increased the sprite limit from 200 to 500 per sprite type.
..\ctp2_code\gfx\spritesys\UnitActor.cpp
Exposed city walls and force field graphics to the AgeCityStyleDB, fixed the sea city sprite bug concerning force fields, however city walls and force field graphics aren't positioned correctly on the screen, if for each graphic an idifidual correction factor is needed then this should be exposed to AgeCityStyeleDB as well, in form of x and y coordinates.
..\ctp2_code\ui\interface\greatlibary.cpp
Doubled the maximum entry size. To remove game entry assert in German version.
..\ctp2_code\ui\interface\scenarioeditor.cpp
Added icons and tooltips to the city style buttons on the city tab of the scenario editor.
..\ctp2_code\ui\interface\agesscreen.cpp
Start and end ages names are now taken from the gl_str.txt instead of the *.ldl files. This makes the game more flexible when ages are added or removed.
..\ctp2_code\ui\netshell\gameselectwindow.cpp
When a new multiplayer game is started, default values are now taken from the profile. These values are for world size, shape, world type wet/dry, warm/cold, ocean/land, island/continent, homo/deverse and goodcout. The end age is now set to the last age in the database instead to the age with the DB index 4.
Edit: Link removed, new all pack has been posted see further down this thread.
-Martin
Last edited by Martin Gühmann on 28-12-2004 at 02:33
|
|
|  |
 |
|
Martin Gühmann
|
 |
Berlin, Germany
Mar 2001 time: 06:31
|
|
2004.08.30
AI improvements by Calvitix
..\ctp2_code\gs\gameobj\ArmyData.cpp
..\ctp2_code\gs\gameobj\ArmyData.h
Added a method to check if the army can transport troops (used for the escort transport)
..\ctp2_code\ai\ctpai.cpp
..\ctp2_code\ai\ctpai.h
Added a method to move out of the city the transports
Changed the frequence for road and tile improvement building (every turn instead of every 5 turns)
Changed the explore goal resolution (2 tiles instead of 5 tiles)
new explore goals are generated every turns (instead of when all the previous goals are accomplished)
..\ctp2_code\ai\goals\goal.cpp
Add a condition to IsSatisfied method : when army size for the goal is equal to k_max_army_size
..\ctp2_code\ai\strategy\goals\ctpgoal.cpp
..\ctp2_code\ai\strategy\goals\ctpgoal.h
Added an Ungroup condition that can be associated to goals (as it exists RallyFirst)
and Ungroup methods
Changed the task forces for goals (based on objectif's threat)
Added a Debug Log (activated with k_dbg_scheduler_all) to see the goal priority computing
(raw priority, plus value of each modifier)
Added an SUB_TASK_TYPE attribute (used for armytext display)
..\ctp2_code\gs\newdb\Goal.cdb
..\ctp2_code\gs\newdb\GoalRecord.stamp
..\ctp2_code\gs\newdb\GoalRecord.cpp
..\ctp2_code\gs\newdb\GoalRecord.h
Added Ungroup token to interpret the goal.txt file
..\ctp2_data\default\aidata\goals.txt
Added UngroupFirst token to several Goals (Explore, Defend, ...)
..\ctp2_data\default\aidata\strategies.txt
Changed ratio forces to promote group formations
Lower army garrison to avoid full cities
..\ctp2_code\ai\strategy\scheduler\plan.cpp
..\ctp2_code\ai\strategy\scheduler\plan.h
..\ctp2_code\ai\strategy\scheduler\scheduler.cpp
Changed the > and < operator (to change the Sort method see Sort_Matches)
Added a method that will determine if the plan can be reevaluated (ie the agent can be rollbacked
and eventually be used for another goal)
..\ctp2_code\ai\strategy\squads\squad_strength.cpp
Changed the > operator (used by Goal::IsSatisfied method)
the Original method only test attack or defense param.
New methode take the sum of all strength (attack, defense, ranged,...)
2004.09.02
..\ctp2_code\ctp\civapp.cpp
..\ctp2_code\ui\interface\StatusBar.cpp
..\ctp2_code\ui\interface\StatusBar.h
Memory fix of StatusBar trial two by Martin Gühmann: m_text of StatusBar is now cleaned up from civapp.cpp.
2004.09.04
..\ctp2_code\ai\diplomacy\sstateevent.cpp
Backwards compartibilty restoration by Martin Gühmann: If the new structs are missing from personalities.txt the old strategies and priorities are taken as default values. The following startegies data must be defined in block if block member is missing default values are also used for the other members as well:
DefenceNoneStrategy
DefenceVeryLowStrategy
DefenceLowStrategy
DefenceMediumStrategy
DefenceHighStrategy
DefenceVeryHighStrategy
The same is true for the following nuclear strategies:
MinimumNukesStrategy
LowNukesStrategy
AverageNukesStrategy
MaximumNukesStrategy
If the following nuclear strike strategy data are present then the according nuclear strike strategy is used if it is not present no nuclear strike strategy is used:
NuclearStrikeStrategy
If the two many cities strategy data are not present, no strategy is loaded to reduce settling and conquering activity. In that case the no revolution strategy isn't loaded, either. Even if it is present. If the no revolution strategy data are missing, then no no revolution startegy is loaded if the according civ is over the city limit and owns the wonder that makes this civ to get revolting cities.
2004.09.04
Mostly bug fixes by Fromafar
..\ctp2_code\gs\gameobj\army.cpp
..\ctp2_code\gs\gameobj\army.h
..\ctp2_code\gs\gameobj\unit.cpp
..\ctp2_code\gs\gameobj\unit.h
..\ctp2_code\gs\world\cell.cpp
..\ctp2_code\gs\world\cellunitlist.cpp
..\ctp2_code\gs\world\cellunitlist.h
Prevented crashes with invalid units.
..\ctp2_code\gs\database\strdb.cpp
Prevented crashes when starting a new game from the menu.
..\ctp2_code\gs\newdb\citystyle.cdb
..\ctp2_code\ui\interface\scenarioeditor.cpp
..\ctp2_code\ui\interface\dipwizard.cpp
Restored original game file compatibility.
Added crash prevention on unexpected file input.
..\ctp2_code\ai\mapanalysis\mapanalysis.cpp
..\ctp2_code\gs\slic\SlicSymbol.cpp
Relaxed some asserts to make mods less tedious to debug.
..\ctp2_code\ui\netshell\ns_window.cpp
Corrected delete type.
2004.09.04
..\ctp2_code\ui\aui_common\aui_control.cpp
..\ctp2_code\ui\aui_ctp2\linegraph.cpp
..\ctp2_code\ui\netshell\netfunc.cpp
..\ctp2_code\ui\netshell\ns_customlistbox.cpp
Resolved forgotten .Net compartibility issures by Martin Gühmann.
aui_control.cpp: Standardized forgotten max calls.
linegraph.cpp: Fixed ambigious calls of std::max.
netfunc.cpp and ns_customlistbox.cpp replaced typed T in specialized member template function by the type used in the template specialization.
2004.09.07
Bug fix by Frmafar: prevented crashes and memory leak when starting a new game.
..\ctp2_code\gs\database\strdb.h
..\ctp2_code\gs\database\strdb.cpp
Redesigned to make the memory handling less error prone.
..\ctp2_code\ui\netshell\ns_customlistbox.cpp
Removed improper preprocessor directives. These were marking Fromafar's cut-and-paste errors as original Activision code.
2004.09.08
..\ctp2_code\ui\aui_ctp2\linegraph.cpp
Improved .NET vs. VC6 compatibility by Martin Gühmann, replaced casts to long by long numeric literals.
..\ctp2_data\default\gamedata\Const.txt
..\ctp2_data\default\gamedata\terrain.txt
..\ctp2_data\default\gamedata\tileimp.txt
Set MAX_MATCH_LIST_CYCLES to 6 to accelerate the game.
Devieded CARAVAN_COEF so that it is now 0.004.
Used Flink's tileimp.txt and terrain.txt as base for better Freight values and multiplyed all the Freight values in both files by ten, so that the devisin by ten of the CARAVAN_COEF is canceled. In addition the Freight values for rivers are identical to those of roads, so that it is not more likely that a trade route follows a river than a road.
2004.09.09
Miscellaneous corrections by Fromfar:
..\ctp2_code\ui\aui_common\aui_stringtable.cpp
Memory leaks repaired.
..\ctp2_code\ui\interface\agesscreen.cpp
..\ctp2_code\gfx\spritesys\unitactor.cpp
Restored backwards compatibility.
..\ctp2_code\gfx\spritesys\spritegrouplist.cpp
..\ctp2_code\gfx\spritesys\spritegrouplist.h
..\ctp2_code\gfx\spritesys\spritelist.cpp
..\ctp2_code\gfx\spritesys\spritelist.h
Sprite limit set to 255, and deactivated some unused code.
2004.09.10
ArmyMovement Beta Update 1.1 by Calvitex:
..\ctp2_code\ai\strategy\goals\CTPgoal.cpp
..\ctp2_code\ai\strategy\goals\CTPgoal.h
..\ctp2_code\ai\strategy\goals\goal.h
..\ctp2_code\ai\strategy\goals\goal.cpp
Added bonus to define in 'goals.txt': For wounded units (IswoundedBonus), Goals in territory (Home, Enemy or neutral), Is Tile visible,...
Added respect of non-trespassing Treaty (Goals have in that case BAD_UTILITY)
Another minor changes (Debug log,...)
..\ctp2_code\ai\strategy\scheduler\plan.cpp
..\ctp2_code\ai\strategy\scheduler\scheduler.cpp
Rollbacked 'NO_GOAL' armytext
Add NoRollback Condition for goals that can't be reevaluated (like seige for exemple). Without that flag,
Goals affectation are reevaluated every turn.
..\ctp2_code\ai\ctpai.cpp
..\ctp2_code\ai\ctpai.h
An Explore goal every 4 tiles is a good compromise. Add an STEALTH_EXPLORE only for special units to explore deeply in enemy territory.
Added UngroupGarrison method to Ungroup Seige force after taking city (otherwhile the whole army is blocked as garrison.
..\ctp2_code\ai\mapanalysis\mapanalysis.cpp
..\ctp2_code\ai\mapanalysis\boundingrect.cpp
Corrected the determination of Empire Center
..\ctp2_code\ai\citymanagement\governor.cpp
Add roads around cities
..\ctp2_code\gs\gameobj\Army.h
..\ctp2_code\gs\gameobj\Army.cpp
..\ctp2_code\gs\gameobj\ArmyData.h
..\ctp2_code\gs\gameobj\ArmyData.cpp
Added a Iswounded method
..\ctp2_code\gs\newdb\goals.cdb
Added the bonuses defineds if 'goals.txt'
..\ctp2_code\robot\pathing\*aStar.cpp
Added a 'avoidList' parameter in Find_path to specify tile that can't be used for path.
Added methods to check if there is enough room for army along path, check danger along path,
Added method to build roads around 'dead' tiles
...
..\ctp2_data\default\aidata\goals.txt
..\ctp2_data\default\aidata\strategies.txt
Added new bonuses, new Goal (GOAL_STEALTH_EXPLORE)
changed ratio forces a bit
2004.09.10
Bug fixes by Fromafar:
..\ctp2_data\ui\interface\agesscreen.cpp
..\ctp2_data\ui\netshell\allinonewindow.cpp
..\ctp2_data\ui\netshell\lobbywindow.cpp
Repaired memory leaks, and improved the compatibility handling of age names.
2004.09.11
..\ctp2_data\ui\interface\agesscreen.cpp
Design change by Fromafar:
1. Use the AGE_ONE etc. texts from gl_str.txt when available.
2. Use the ns_strings.ldl startagestrings when the AGE_ONE etc. texts are not available and the number of ages is equal to the number of startagestrings.
3. Just display "AGE_ONE", etc. in all other cases.
So, for compatibility, you have to use the ns_strings.ldl with the original 5 age names.
2004.09.11
Text file update by Martin Gühmann:
..\ctp2_data\default\terrain.txt[b]
Updated the terrain scores so that match they more to the ones from Apolyton, this results in a more aggressive settling behaviour of the AI.
[b]..\ctp2_data\default\civilisation.txt
..\ctp2_data\english\civ_str.txt
..\ctp2_data\german\civ_str.txt
..\ctp2_data\italian\civ_str.txt
Reinserted the civs from the original game. And removed most of the new civs to fit to the UI limitation. The following civs have been readded:
Korean
Nigerian
Welsh
Cuban
Nicaraguan
Irish
The following civs have been removed in comparision to the last version:
Byzantine
Babylonian
Carthaginian
Austrian
Swedish
Celtic
The following civs are now in but are not in the original game.
Arabian
Nubian
Aztec
All the aditional city names and civs names are still in the string files, the additional civs over the limit of 45 are still in the civilisation.txt but outcommented to make sure that all civs are selectable by the human player that are in the game. The downside of this restoration is that the readded civs just have 30 city names. That is also true for the Nubians and the Poles. Unfortunatly there is no French and Spanish version of the civ_str.txt therefore I wasn't able to provide for these languages at least non-translated strings in English, the consequence of these missing strings are that the Frensh and Spanish version of CTP2 doesn't run.
2004.09.12
Great Libary modification by Fromafar
gs\utility\stringutils.cpp
gs\utility\stringutils.h
ui\interface\greatlibrary.cpp
ui\interface\greatlibrary.h
ui\interface\great_library_util.cpp
ui\interface\greatlibrarywindow.cpp
Increased great library data storage size from 4k to 8k (for the German version), and added support for target memory range checking when parsing text strings.
2004.09.12
Improved AI and mayor tile improvement behaviour by Martin Gühmann:
..\ctp2_code\gs\gameobj\CityData.cpp
..\ctp2_code\gs\gameobj\CityData.h
Added NeedMoreFood to determine whether the AI should build a food tile improvement.
..\ctp2_code\ai\CityManagement\governor.cpp
..\ctp2_code\ai\CityManagement\governor.h
- Removed .NET warnings
- Added Calvitex' roads around cities code
- Removed code that prevents the AI and mayors from building undersea tunnels.
- Modified g_cityAstar.FindRoadPath to match the new signature
- Added more arguments to FindBestTileImprovement function, so that it can take
the terrain improvements from the other tiles into consideration.
- Food tile improvements are now build if food is needed and not if there is
plenty of food for the city.
..\ctp2_code\ctp2_code\robot\pathing\CityAstar.cpp
..\ctp2_code\ctp2_code\robot\pathing\CityAstar.h
- Added owner argument to FindRoadPath so that the m_owner variable can be set the
actual owner.
- Unexplored terrain is now taken into consideration
- Tiles on that no road improvement can be built, because it has non, e.g dead or
the according advance is missing, e.g. water.
- Tiles that no one owns are taken into account, but with higher costs so that
tiles are prefered that are owned, but leave the possiblity open to build a road
when the territoral connection is missing.
- Foreign tiles are ignored unless the foreigner is an ally, maybe a higher penalty
then for unowned tiles should be indroduced.
- Linking cities on different continents and building of undersea tunnels is now
also possible.
- To calculate the costs for one tile the MoveCosts are weighted with the pw costs
this results in good and cheap pathes.
..\ctp2_code\gs\newdb\StartegyRecord.cpp
..\ctp2_code\gs\newdb\StartegyRecord.h
..\ctp2_code\gs\newdb\StrategyRecord.stamp
..\ctp2_code\gs\newdb\startegy.cdb
Exposed to new constant to startegy.txt to calculate whether food is needed:
code:
// Maximum number of turns required for city growth of one pop that
// is accepted for the AI and mayors. Default value == 30.
// Bit (Int) TurnsAcceptedForOnePop = 30
Int TurnsAcceptedForOnePop = 30
// The number of pops before the current pop maximum the AI and mayors
// stop to consinder building food terrain improvements in the radius
// of the according city. Default value == 1.
// Bit (Int) StopBuildingFoodBeforePopMax = 1
Int StopBuildingFoodBeforePopMax = 1
Actual those constants should be Bits so that when two startegies are merged the value of that startegy in that the value is not defined merged into the other. But unfortunatly Bits don't allow default values, at least not yet.
..\ctp2_code\ai\ctpai.cpp
Set back the exploration resolution to five, there seem still to be a slow down in the game for no obvious gain.
..\ctp2_code\ctp2_code\robot\pathing\astar.cpp
..\ctp2_code\ctp2_code\robot\pathing\Astar.h
..\ctp2_code\ctp2_code\robot\pathing\unitastar.cpp
..\ctp2_code\ctp2_code\robot\pathing\UnitAstar.h
..\ctp2_code\ctp2_code\robot\pathing\TradeAstar.cpp
..\ctp2_code\ctp2_code\robot\pathing\RobotAstar.h
Restored the last versions of these files as the check whether a path is blocked or not has to be put into the EntryCost function or into one of the from there called other functions, that will reduce the additional code and the calculation time.
..\ctp2_code\gs\newdb\GoalRecord.cpp
..\ctp2_code\gs\newdb\GoalRecord.h
..\ctp2_code\gs\newdb\GoalRecord.stamp
..\ctp2_code\gs\newdb\goal.cdb
Restored backward compartibility by giving the new flags default values.
Edit: Link removed, new all pack has been posted see further down this thread.
-Martin
Last edited by Martin Gühmann on 28-12-2004 at 02:35
|
|
|  |
 |
|
Fromafar
|
|
Bug fix and user interface improvement for the tactical info tab of the Unit manager.
ai\strategy\scheduler\scheduler.cpp
Fixed crash when selecting this tab with the CTC mod.
ui\interface\unitmanager.cpp
Select and center on the transport when double-clicking on a transported unit.
[Edit: file link removed. Included in the 2004.12.27 source collection.]
Last edited by Fromafar on 05-01-2005 at 01:36
|
|
|  |
 |
|
Fromafar
|
|
Bug fixes:
ai\diplomacy\diplomat.cpp
Corrected handling of invalid strategies.
ai\strategy\squads\squad_strength.cpp
Prevented crashes with invalid units.
[Edit: file link removed. Included in the 2004.12.27 source collection.]
Last edited by Fromafar on 05-01-2005 at 01:37
|
|
|  |
 |
|
calvitix
|
|
Strasbourg (North-Est France)
Jun 2003 time: 05:31
|
|
ctp2_code\ai\strategy\goals\CTPgoal.cpp
ctp2_code\ai\strategy\goals\CTPgoal.h
ctp2_code\ai\strategy\goals\goal.h
ctp2_code\ai\strategy\goals\goal.cpp
Added changes to favorize Respect of non-treaspassing Treaty and retreat units.
Added checks to avoid Army blocked in grouping phasis(grouping in a city when there is garrison,...)
Changed the Group size check (not based on agent size, but on cellunitlist num (as a grouped army is considered as 1 single agent).
ctp2_code\ai\strategy\scheduler\scheduler.cpp
Rollback goals in double search (costs too much calculation time, and isn't necessary)
ctp2_code\robot\pathing\UnitaStar.cpp
Added methods to check if there is enough room for army along path, check danger along path,
integrated in the Entrycost method.
ctp2_data\default\aidata\goals.txt
Changed several values
Attachment: 2004.09.23.armymovementupdate1.2.zip
This has been downloaded 16 time(s).
|
|
|  |
 |
|
Fromafar
|
|
Small fixes:
ctp2_data\default\gamedata\script.slc: typo corrected.
ctp2_code\ctp\c3.h: useless compiler warning disabled.
ctp2_code\gs\gameobj\army.h
ctp2_code\gs\gameobj\army.cpp
Added CanTransport and IsCivilian, and a few other consistency changes.
ctp2_code\gs\gameobj\armydata.h
Consistency changes.
ctp2_code\gs\gameobj\armydata.cpp
Prevented a crash when a space plane gets assigned multiple orders.
Note: the latter only solves the crash - by ignoring the move order when the space plane has already been launched. The underlying problem of the multiple orders has not been addressed. Somehow, it looks like an attempt is made to move the space plane out of a city - to make room for other units? - and launch it - to collect cargo? - at the same turn.
[Edit: file link removed. Included in the 2004.12.27 source collection.]
Last edited by Fromafar on 05-01-2005 at 01:38
|
|
|  |
 |
|  |
All times are GMT. The time now is 05:31. Apolyton Time is 00:31. |
top of page
|
|
|
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is ON
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|