------------------------------------------------------------------
----------------------- Beta 1G Change Log -----------------------
------------------------------------------------------------------
------------------------
--- MAJOR FEATURES ---
------------------------
**********
* Dynasties *
Overview:
The player can now get married (currently happens randomly) and have children (again, totally random). After 20 turns the children will 'come of age' and become champion units on the map. At this time, the "Arrange Marrage" option becomes available in diplomacy. Daughters will get married into the other faction (you lose her as a unit), but 2 of every 3 children will return to your faction when they grow up.
Details:
+ Added initial dynasty data stuff
- Players keep track of their family tree
- Sovereigns have a random chance to get married
- Married females have a random chance to give birth to a male or female child
- Children "grow up" after 20 turns
- Everything saves/loads
+ Added some basic dynasty debug info to the kingdom report wnd until the real dynasty screen is implemented
+ Fixed some missing ref releases
+ Message boxes release their message data on close so that they don't hold refs to data that they don't need and postpone destruction of the data
+ Fixed gender randomization for children
+ When a child in a dynasty grows up, they now clone whichever of their parents actually exists and are stationed in the first city built by the player
+ Started adding stuff for creating a new unit type and saving/loading it out, basically just an extension of what the AI is already doing when designing their units
+ When children grow up, they now create a separate unit type (though it's still just a clone of their parent's),
and can save/load its info
+ Started hooking up the dynasty wnd, added the dxpacks and some of the classes to the project
+ Added debug messages and asserts to code for making a child grow up, hopefully replacing the crash that Anthony got with an assert and some helpful info instead. If anyone hits the assert, please let me know so I can figure out what the deal is.
+ Added wedding rings picture to marriage message
+ Changed and moved some temp hardcoded strings to the string file
+ Added null pointer check to CUnitType copy cto
+ Fixed crash when a child grows up after their parents have died/don't exist
+ Implemented being able to arrange marriages through the diplomacy screen
+ Fixed some issues with marriage that popped up once this could be done
+ Added report items for births, marriages, and growing up in kingdoms you know about
+ Unhide now calls UpdateControls on the family tree subwnd, if it's shown
+ Added member variables m_pDummyListgrid and m_aStatsEntryWnds
+ Added private helpers FillInfoCardForSelected, CreateStatsEntries, FillStatsArea, and ClearStatsArea
+ Fixed a bug with the type of m_pUnitRelationsListbox
+ Implemented pretty much every part of this screen except for the family tree graphic, which has been temporarily replaced by a selectable list of all the family members
+ Also, all of the list grids are messed up, counting the number of visible entries incorrectly. I think I tracked down where the bug is here, but I wanted to check with other people before I went messing with the code. Once the list grid is counting the entries correctly, though, I checked that the data is all fine, so it should show up correctly after that.
+ Changed stuff to not be the children of cut scene windows, because that totally messes with the resizing of everything
+ Added some dummy controls to act as parents of the controls that were orphaned because of this cut scene window thing
+ Added a temporary list box to the area where the family tree will be displayed, so that functionality could be coded in without the graphic
being implemented yet
+ Added member variable m_pDynastyMember
+ Added AddParentRelation, AddSpouseRelation, and AddChildRelation
+ Added temporary functions SetDynastyMember and GetDynastyMember, which are just being used to flesh out the functionality of the dynasty wnd until the fancy family tree graphic is implemented
+ Implemented the core functionality of the dynasty screen
- However, it is missing the family tree graphic, and instead is using a temporary list grid of all of the members of the sovereign's family that you can click on to get the info for
- Also, I've run into a bug with the list grids where it is positioning the entries incorrectly. I think I know what is causing it, but I want to ask Cari/Jesse before I change any code to try to fix it. After that's fixed, though, the relations info and stats info should stop being positioned funny, and I've verified that the (invisible/poorly placed) data is correct
+ Added global function CreateRandomizedUnitType, which takes a unit type name and pointers to some unit type suggestions and generates a new unit
type out of it, adding it to the global vector of unit types but not saving it to xml or anything
+ However, it's not implemented yet, and just clones the first unit type suggestion for now
+ Fixed size and placement of dynasty screen list grids so that they display correctly
+ Children that have had a marriage arranged are listed as "betrothed" instead of "married" in the dynasty screen
+ Added missing images to various dynasty popups and report entries
+ Fixed some string/image mixups in the report entries
+ Fixed dynasty screen cutscene to display selected unit correctly, with animation
+ Created a new global function CreateRandomizedUnitType, which takes unit type suggestions and makes a new one out of it, adding it to the global
vector of unit types but otherwise not saving it anywhere else. It's not fully implemented, though, and just creates a clone of the first unit
suggestion passed in instead.
+ Slightly changed how stat calculation for units is done to support random unit types better
- Basically made two functions for setting a unit's level: SetLevel and GrowLevel. SetLevel should be called when initially creating a unit, as it looks in the level milestone info to get the stats that that unit should have. GrowLevel should be used on units that already exist and have a level, and it will grow the unit level by 1 and increase each stat by some percentage of the current value instead of looking in the level milestones again. Therefore, level milestones are useful for setting the stats of units that you create at arbitrary levels, but once a unit is created, they follow a different stat growth path.
- Because of this change, unit types created on the fly only need to set their stats when they are created, and don't need to worry about generating multiple level milestones to use as a path for ability growth.
+ Implemented more of the CUnitType function for creating a random unit type
- Randomizes unit stats
- Psuedo-randomizes equipment; basically, for each equipment slot, there is a chance of either equipping the item equipped in that slot by the suggested unit type passed in, equipping nothing, or equpping a completely random piece of equipment that fits in that slot and that the player satisfies the prereqs for.
+ Added line of succession information to the dynasty screen
+ Displayed where the quote for the unit is supposed to go, because I couldn't find a better place for it yet
+ Says how far away they are from the throne, or "King/Queen" if they are the current rulers
+ The succession order updates when people die, leave, or get added to the dynasty
+ Family members displayed in roughly oldest->youngest order in the dynasty screen list box, aka a breadth-first traversal of the family tree
that will eventually be displayed there
+ Implemented saving/loading of all the info in CUnitType in the game save file, for saving child unit types/NPCs
+ This fixes a bug in child unit types where they would get the wrong equipment on load
+ Added short display names for all the unit stats (e.g. Attack = ATK) for places where UI string length is cramped, like the dynasty screen
+ Randomized female unit types no longer get beards and will always equip one of the robes
+ Added a "capital city" for each player, which for now is just the first city built by that player
+ Fixed bug where setting the level of a champion unit didn't refresh all of the stats
********
* Quests *
Overview:
Throughout the course of the game, you'll be presented with the option to help the people of the land by embarking on Quests. Quests may trigger when a unit his a tile on the map, when your kingdom hits a given stat, or randomly.
Details:
+ This check-in introduces the initial (extremely basic) version of the quest system. Each player (both human and AI) has a Quest Manager (the class CQuestManager), which tracks all of their pending, active, completed and failed quests. Currently, active quests are updated every turn to see if they’ve been completed. Quest data is read in from XML from the Game\Data\English\Core Quests directory. The quest data structures are unfinished, but currently consist of a QuestDef, which contains the quest name, description, and trigger information. It also contains a number of QuestObjectiveDefs, which define the conditions that need to be met for the quest to succeed or fail.
+ Added a very simple test quest, “Damsel in Distress”, defined in QuestCityPop.xml, located in the Core Quests directory. When your kingdom hits a total population of 40, the quest dialogue pops up, tasking you with clearing out a swamp bandit goodie hut, which will appear in close proximity to your first city. When it is cleared out, the quest is completed, and a dialogue will pop up congratulating you.
+ Quests are now entirely event- and data-driven. Quests are only updated when specific events occur that may affect them (such as the population of a city changing, a monster being slain, or a goodie hut being cleared), which allows them to respond to changes immediately, without requiring constant condition checking.
+ Added world events for faction population change, and for a goodie hut being cleared.
+ The quest prompt now allows you to decline a quest.
+ Added a flag to CGoodieHut that identifies if it is the target of a quest. To access it, call CGoodieHut::GetIsQuestTarget( ). If the flag is set to TRUE, the goodie hut will not spawn a reward when cleared (as the quest itself will bestow any rewards we may want to give).
+ Added the ability for the quest system to support “fetch quests”, and updated the test quest “Damsel in Distress” so that it spawns a “damsel” item in your inventory, which then must be returned to your capital city to complete the quest. This also shows off the ability for the quest system to support multi-objective quests. As each objective activates, a dialog pops up to inform you what you need to do to complete it.
+ Added an event for when a unit enters a city.
+ Quests can now give gold as a reward for completing them successfully. The “Damsel in Distress” quest has been modified to give 500 gold on completion.
+ Added a new type of Game Object: Quest Locations. Similar to goodie huts, quest locations are placed on the map when you research certain technologies in the Adventure technology path (currently, researching Ruin Delving causes a small number of them to spawn around your capital). They are only visible and useable to a single player (though the functionality to allow any number of players to see a quest location exists). When a quest location is visited, it spawns a random quest, if one is available (currently only the test “Rats in the Basement” quest is set to trigger when a quest location is visited, and it is not flagged as repeatable, so only the first quest location visited will trigger a quest). At the moment, there is only one type of quest location, defined in Game\Data\English\Core Quests\CoreQuestLocations.xml, and it appears on the map with the kingdom inn cloth map icon and tile design as a placeholder.
+ Updated the Kingdom Report window with tabs to switch between the main view and the quest journal, which shows all the quest information for the player (and other players, if in debug mode).
+ Quests can now be flagged as repeatable if we want them to be able to appear more than once during the course of a game. They default to not repeatable, which means they may trigger once per player, per game.
+ Quest items can no longer be consumed or equipped.
+ Added a (very basic) Rats in the Basement quest that can be triggered by visiting a quest location.
+ Added events for visiting a quest location and unlocking a technology.
+ Expanded on the “Rats in the Basement” quest (renamed it to “Rats in the Ruins” to fit in better with the text I banged out for it, naturally we can always change this). It now has you clearing out a Rat Nest goodie hut, which results in you getting a “Dead Rat” quest item, and taking a few points of damage (scratches from the rats). You then have to return the Dead Rat to the Inn you received the quest from, which completes the quest, giving you a reward of 500 gold.
+ QuestDefs and QuestConditionDefs can now be assigned an arbitrary number of GameModifiers, which are applied upon completion of the quest/condition. Both test quests currently in the game, “Damsel in Distress” and “Rats in the Ruins” use them to give quest items, rewards, and (in the case of the rats) penalties.
+ Quest locations now remain on the map after being visited, and can be used in the quest itself (for example, the “Rats in the Ruins” quest has the player returning Inn quest location from which it is spawned as the final objective).
+ Quest data is now saved and loaded properly, and the save game version has been incremented (now at 11) to invalidate old save files.
+ Added a new event for when a unit is killed.
+ Added new quest condition trackers for killing units and building improvements, which allows those actions to be incorporated
into quest objectives.
+ Added an event for when a unit reaches a new level.
+ Quest can now be triggered by a unit reaching a specified level. A unit reaching a level can also be used as a quest condition.
+ Cleaned up the CQuestManager code to make it more modular, and easier to implement new quest triggers.
+ Added a Player game modifier that will spawn Quest Locations for that player, called SpawnQuestLocations. To use it, set the string value (StrVal) to the type of quest location you want to spawn (currently there is only one: QuestLocationTest), set Count to the number of locations you want, set Value to how much you want the number of locations to vary by (for example, if you set Count to 5 and Value to 3, between 2 and 8 quest locations will be spawned), and Radius to how far away from a city the location can appear (this functions as the maximum range; the minimum range is currently hard-coded to 4, and if Range is less than or equal to that, it is automatically bumped up to 5). Each quest location is spawned within the given radius of a random city owned by the player, so that they are distributed throughout your territory. Currently, a SpawnQuestLocations game modifier has been assigned to the Ruin Delving technology (Ruin_Delving_Altar, to be precise), so that when that technology is unlocked, 4 to 6 quest locations are spawned on the map.
******************************
* Faction and Sovereign Customization *
Overview:
Players now pick their sovereign and faction at the start of the game, or have the choice of creating their own. Saved races and sovereigns are saved out to the 'My Games/Elemental' directories of 'Units' and 'Races'.
Details:
+ Added missing AddRef for CCreateSovereignWndMessageData::GetFactionConfig ()
+ Added handling for drag end message for when items are dragged onto the unit scene view
+ Now uses passed-in faction config to initialize the sovereign unit type
+ Saves created unit type to the passed-in faction config
+ Unhide sets the faction spellbook name to TestSpellbook, instead of setting it as a starting spell
+ CopyDisplayTextIntoPlayer saves an internal name for the new faction, equal to the display name for now
+ Fixed bug in SetUnitTypeMale and SetUnitTypeFemale where it would skip unequipping some incompatible equipment because it was removing them while going
through the list and not updating the index correctly
+ Added m_lCustomizationPointsToAssign
+ Added GetPoints
+ SetUnitTypeMale and SetUnitTypeFemale call ResetInitialBackupHairAndClothes on g_pCreateSovereignAppearanceSubWnd, so it will keep the right hair and everything even if that subwnd isn't hidden at that point
+ Remembering hair and clothes when deselecting equipment
- People should play with it and see if it makes sense the way equipping/unequipping things behaves and is displayed now, because I tried out a few different combinations of displaying backup hair/clothes and whether equipment always overrides hair/clothes, and didn't find a way that felt particularly awesome. Right now, if you equip hair/clothes in a given slot, it remembers that when you equip some sort of equipment in that slot instead so that when you unequip the equipment, the hair/clothes are still there. But the entries don't appear equipped when there is a piece of equipment taking that slot instead, and equipping hair/clothes in a slot will still remove the regular equipment in that slot. This makes sense to me when I mess around with it, but other people should say if it doesn't and have other suggestions.
+ Made ToggleAbilityBonus public instead of private
+ Changed Callback to handle clicking and highlighting the same way the entries in create sovereign screen do
+ Made string controls non-transparent
+ Added UpdatePointsDisplay and OnEntryHighlighted
+ Replaced FillInfoForSelected with FillInfoForSelectedAbilityEntry and FillInfoForSelectedColorEntry
+ Changing abilities doesn't update the 3D scene anymore
+ Removed some unneeded refills of the ability and entry lists
+ Changed Callback to handle selection and highlighting of the various entries the same way the create sovereign screen does
+ Added bRecreateUnit parameter to Update3DScene
+ Update3DScene uses CreateRandomizedUnitType to make the unit for display
********
* Magic *
Overview:
You can now build up spell points and spend them on available magic spells. These can then be cast if you're tapping into the appropriate shards.
Details:
+ Mana Types
- Make simpler resource types for 'Fire Shard', 'Air Shard', etc...improvements give those
- List Global Player Resources and shards in the kindgom window
- Weed out Elemental Shards giving special mana types
- Not-Stored Generic resources calculating properly for the player
- easy APIs to grab the mana values from a player+ Fixed a problem with the stamp XML that was releasing too many refs from the tile data, causing the data to be trashed by the time the game tried to place a stamp.
+ Modified the spell casting code so that spells cannot be cast outside of their specified range.
+ Added a new XML tag “SpellType” to the SpellDef, which defines when a spell can be used. If set to “Strategic”, it can only be cast on the strategic map. “Tactical” spells can only be used in tactical battles, and “Universal” spells can be used anywhere.
+ Re-enabled spell casting. Currently, Volcanic Eruption is the only spell that shows up, since it’s the only one that’s had its type set to “Strategic”.
+ Fixed issue with CWorld::RaiseLandAtTile( ) and CWorld::LowerLandAtTile( ) not correctly adjusting the heights of the terrain.
+ Modified the spell casting selection graphic so that it turns red when the mouse is pointing at an invalid target (for instance, if the target is outside of the spell’s range), and green when it’s over a valid target. If the player attempts to cast the spell while over an invalid target, nothing will happen.
+ Added a SpellClass tag to the SpellDef XML, which dictates the conditions required for the spell to be cast. Current classes are “Offensive”, “Defensive”, “Terraform” and “Other”. Offensive spells cannot be cast on a tile that would affect the caster (which prevents the user from dropping a volcano on their sovereign and instantly losing the game). Terraforming spells cannot be cast on a tile with a unit or game object (i.e., improvement, goodie hut, resource, shard, ect.). Unless specified, all spells default to “Other”.
+ Added a SpellTargetType tag to the SpellDef XML, which defines where, and on what, a spell may be cast. Current target types include “FriendlyUnit”, “EnemyUnit”, “Monster”, “Self”, “FriendlyTerritory”, and “Any”. Unless specified, all spells default to “Any”.
+ Champion units other than the Sovereign are now able to cast spells (such as his children, after they come of age).
+ Created Mass Heal and Charm Monster spells, disabled the Volcanic Eruption spell. The Mass Heal spell can only be cast on friendly units, while the Charm Monster spell can only be cast on creature units.
+ There’s now only one generic type of mana, which is used to cast all spells, instead of the six (life, death, fire, water, air, and earth) we used to have.
+ Incremented the save game version to 12, as units now only save one current mana variable, rather than both the current and maximum values for each old type of mana.
****************
* Wandering Heroes *
Overview:
The world is now populated by a handful of wondering heroes, scouring the world for treasure and adventrure. They cannot be yet recruited, but give a nice XP boost if you best them in combat.
Details:
+ Created and added AiChampNPC. It is a class much like the AICreature class, a class to represent a player that is the AI brain for the NPC champs.
+ added faction type FACTION_TYPE_CHAMP_NPC
+ Added m_ulChampNPCPlayerID, GetChampNPCPlayerID(), IsWildCreaturePlayer(id), IsChampNPCPlayer(id), CreateChampNPCPlayer(), and GetChampNPCPlayer().
+ added m_ulChampNPCPlayerID to ctr
+ changed params of CreatePlayer() to also include a bool for whether or not the player being created is the NPC Champ player.
+ CreateChampNPCPlayer() creates a player to control the NPCs. Then creates 5 NPCs and puts them on the map.
+ when setting relations of players and creatures to PERMANENT_WAR, also set relations between the Champ NPC player and other players to be NEUTRAL.
+ added code so that the local player will not get the FIRST_CONTACT message from the NPC Champ player.
+ added a member vector of unit type pointers, so they can be saved and loaded
+ added function called StoreUnitType(), which takes a PUnitType param, and adds it to the vector
+ when Champ NPC player creates their 5 NPC champs from a randomized unit type, it now calls CAIChampNPC::StoreUnitType()
***********
* Leveling Up *
Overview:
You now get points to spend on stats when a unit levels up.
Details:
+ added member variable PUnitStatType m_pUnitStatType, initialized to NULL, set in ctr, SAFE_RELEASED in dtr.
+ removed member variable TString m_strUnitStatInternalName and adjusted code that used it to use m_pUnitStatType->GetInternalName() instead
+ removed code for the BONUS_VALUE part of the screen, since +/- buttons will now affect the stats cur value and there will no longer be a BONUS_VALUE section
+ displayed value for stat is m_fInitialValue + GetAddedValue().
+ GetAddedValue() returns result of m_pUnitStatType->GetAffectPerLevelUpPoint() * m_ulAddedPoints;
+ When LevelUpWnd is closed, stat increases are applied as before.
Bookmarks