May 2015 Development Update


Greetings Wizards,

Welcome to the development highlights for May 2015.

Thank you Kickstarter backers for voting on your favorite pet, the results are in and these are the two pets that won!


Kickstarter Pet Winners

The female avatar is now animated playable in the game and a few of the Kickstarter backer headshots are now working their way into becoming avatars and NPCs in the game.  At first the plan was to just work the backers into the game as NPCs, but now we’re thinking why stop there?  With just a little work behind the scenes to make sure no NPCs look like the avatar selected by the player we’re thinking we might be able to make any of the backer artwork be a playable character while at the same time give the player a little customization to their look of their hero.


Simple Character Creation


Alex and Aden have also been busy working on the next set of 7 monsters.  The first two from this set have been fully drawn up and animated.  They don’t have anything but a standard melee attack in the game just yet, but we’ll be coming up with some cool powers for these creatures to make them truly unique.


New Fire Giant and Blob monsters


We also finally hooked up the lance weapon.  This weapon was actually drawn and animated late in 2014, but we were struggling with a way to make it different than the other weapons.  So for the first pass on the lance weapon we’re trying out a mechanic that gives you a free melee attack against a target if you approach it in a straight line.  So far it’s pretty cool.


New Lance Weapon

Finally, here’s the development highlights from the past month, and below that you’ll find all he gory details if you’re into that kind of thing.  Visit the May 2015 Development forum update to talk about changes.

Major Changes:
– Character selection screen
– The female avatar can now be chosen at the start is is fully animated and working
– Multiple avatars now work as NPCs and playable characters
– New Blob creature (melee attack only for now)
– New Fire Giant createure (melee attack only for now)
– Changed start of game to begin at the “Wayside Inn” and begin the actual narrative (using temporary art)
– New weapon “Lance”, a lance gives you a free attack as you approach a target in a straight line
– The axe now does damage in an arc of 3 tiles
– Hooked up the new axe animations
– Enchnanting and healing shrines can now randomly appear around the cosmic rift
– Added auto name generation to character selection screen as well as a user editiable name field
– Followers now disarm detected traps if they were going to move into a cell that contains one instead of walking into the trap
– Followers now have a lot more spells at thier disposal
– Followers will now always favor spells for attacks in the following order for the target vs spell affinity: 1) Weakness, 2) No Affinity, 3) Resistance, 4) Immunity
– Followers now come with a set of randomized weapons and armor
– Followers now get fanfare sound and visuals when they level up if they are visible in the world
– Follower spell levels are now always equal to their rank
– Followers now switch back and forth to the correct spell or weapon for the skill that they are executing from them, so now you see the correct magic “hand glow” and actual equipped weapon during the correct attacks etc.
– Followers now go through weapon switching animations when changing weapons/spells
– Followers can now use bows
– Quest system has been enhanced in order to implement the mainline quests from the story/narrative
– Scripted dialog is now possible between actors in dungeons
– Scripted dialog is now possible via the new conversation UI in town
– On desktop, left click now does a smart move/attack/use again while the right mouse will continue to do attacks without targets.
– Dungeon enchantment shrines can now be used only up to 3 times
– Reduced the frequency of affixes that generate item rank+2 or rank+3

– Rough draft of script at about 25% complete, the beginnings of this are now going into the game to see how it plays

– Completed Female Light Avatar animation, plus minor fixes to Male Light Avatar
– Completed artwork for
1) Fire Giant
2) Blob
3) Overseer
4) Harpy
5) Thiefling
6) Disturbling
– Set of 10 villager homes

– Submitted the game for consideration to show in IndieCade this year
– Submitted game and marketing materials for consideration to show with the Indie Megabooth at PAX prime this year

– Character names are now displayed as part of the save game slot UI
– DynamicPortrait now forces the subject to be active during rendering
– SaveGameUI is now GameSlotScreen
– Added CharacterSelectScreen
– Added FrontEndScreen base class
– TitleUI now has references to the GameSlotScreen and the CharacterSelectScreen and can animate transitions between screens
– The player is now set as active in the world for tower maps so that it can be properly rendered by the dual window UI tab
– Added player name to the save data file and save data markers
– Avatar prefabs are now referenced in the game
– The Game object now has fields for player name and selected player gender
– UIManagerCommon how has an object pool of rendertexture/material pairs for portrait rendering and added an api to interact with the pool
– Added render texture and material prefabs for dyanmic portrait rendering (currently set to a 256×256 texture)
– Remove the static shrine image from the EnchantmentShrineUI and replaced with a plane that is rendered using a render texture of the subject actor
– Moved a bunch of helper functions from GameObjectUtils into GameObjectExtensions which an now be called directly off the game object class
– Added param to EnchantmentShrine to govern the camera zoom level of the portrait generated for the UI
– Created a DyamicPortrait component to wrap up the logic of using a render texture to render the portrait of an actor
– Usable and Buildable compoennts now have a zoom value for the portrait zoom settings when displayed in a dynamic portrait control
– Added two dymanic tab prefabs that both have DynamicPortrait entries
– Removed several static tab images for vendors, atars, shrines, etc in favor of using the new dynamic portrait tech
– Cleaned up a bunch of dual window UI that relied on tab prefabs for identifiers, instead they now use the dualwindow ui page ids
– Added a dual window ui page id for the bag as separate from the backpack to identify it … however in the end they both resolve to the single BackpackUI when alters its behavior based on the inventory context it is bound to
– DynamicPortrait now supports actor instance or prefabs
– Added ProtraitSettings which so far has two size fields for the dual window ui tab and ring menu button sizes
– Removed PortraitTabZoom field from Buildable and Usable and added a PortraitSettings to all actor prefabs that used it
– Fixed ModiferCollection.GetModifier() sometimes not finding a modifier if that modifier was the child modifier in a stack
– ContextMenuItem now has a DynamicPortrait object sized properly for the button
– The ring menu button highlight ring has also been moved forward in Z over the portrait and/or static sprite image
– Reorganized the buildable interact menus to be “verb” focused instead of “object” focused. For instance, the “menu tavern” is now “menu enter”, and that menu now contains “action enter” instead of “action tavern” … this allows all the interact menus to be able to be shared and re-used by multiple actors while at the same time the new dynamic portraits make the action button unique for each one
– Removed the environment specific actors and actor set for shrines and replaced with a shared one. Changed all shrines to use the shared material instead of the environment specific ones
– Fixed crash when opening up home menu
– Fixed crash in Shrine UI when dragging it into the scene view in the Unity editor
– Refactored use shrines to record the number of uses remaining
– Added UI elements and logic to the shrine UI to show the number of uses remaining
– Renamed male and female skeleton in the .spine file to “Human Male” and “Human Female”
– Exported all new human spine data (male and female)
– Renamed all human spine unity assets to “Human Male X”
– Renamed Avatar Wizard to Avatar Wizard Male
– Removed old human .json, .atlas, and texture that was exported from the old .spine project with just the human male
– Added playable female avatar
– Set default player avatar to the female for now
– Set the “guide” attachments in the female skeleton in the .spine file to “background” so they are not exported to the texture atlas
– Removed static tab images for player and followers
– Dual window UI now uses a dynamic tab to render the player image into it
– Added PortraitSettings to Player Actor for use in the dynamic portrait of the dual window ui tab
– Removed unused PartyUI.cs and PartyMemberUI.cs components and prefabs that used them
– Upgraded Spine runtime
– Adjusted all female item attachments to exactly mirror the male so that the glow effects work properly on all magic items for both genders
– Fixed item glows sometimes being out of sync with their item (talisman having two wildly different static frames)
– Actor.StaticFrame property is now virtual
– Item.StaticFrame property setter now also sets the static frame of any m_glow if one is present
– Fixed possible crash in PackedSpriteEx when setting animation frames due to an uninitialized index in the sprite tools, a workaround of finding the animation index manually has been put in place
– Fixed dungeon background images rendering inside a DynamicPortrait
– Virtualized Actor.SwitchToLayer() so that the player implementation can take into account the main camera with any child backgorund and not switch those to the destiation layer since that’s never what we want
– The ring menu now only uses dynamic portrait render resources for the actual menu items that are visible one menu at a time as they are shown/hidden instead of allocating resources for all possible menu items in all sub-menus upon opening
– Avatar.Gender is now Actor.Gender
– Added gender field to follower
– Removed unused Follower 02
– Added Follower debug menu with two options (acquire and kill followers)
– Follower display names are now saved in the save game archives
– Formalized whether an actor needs to meet item attribute requirements through the virtual Actor.MustMeetItemRequirements
– Removed the the unused Usabe.UsableByPlayersOnly
– Added loot tables for follower starting equipment
– Equipment.MeetsRequirements() now takes an actor user parameter
– InventorySlot now has an enum for which actor to go looking at for purposes of item requirements (ulitmate container or player)
– Vendor inventory slots are now marked as explicitly using the player for purposes of item requirements
– Fixed a bad PropertyCollection bug where properties that were evalated via formulas would return whatever random data might have been in the default int/float/time fields if the return value from the formula was ‘false’. Currently there is not a notion of “default return value” from a formula that a user could specify in the PropertyDefinition data, so instead in this case the C# defaults are returned in the output parameter, default(int), default(float), default(TimeSpan)
– Fixed a bad bug in RankFormula where the return value was always true reguardless if a rank property was found or not. Also, rank bonus logic was being needlessly calculated on collections that didn’t have a RankBase property to begin with.
– Added a little validate to rank values in a couple of propery formulas that use them
– Formalized whether an actor needs to pay spell material costs through the virtual Actor.MustPaySpellMaterialCost, which is true for players only
– Moved Player.LevelUp() into Actor.Level()
– Explicit calls to level up your player will now also auto level up your followers
– Moved level up effect code from CombatPlayer.cs to Combat.cs
– Actor.OnInventoryChanged() now takes a new enum param indicating whether the actor parameter was added, removed, or modified in quantity
– Fixed a case where items would not stack properly due to comparing rankbase vs rank instead of rankbase vs rankbase, this would manifest itself in that rank value would include rank bonuses from other items if you happen to have them on at the time.
– Added simple support to ActionSkill to do forced immediate weapon switching if requested (Followers do this for all skills they execute since they all come from items now)
– CombatFollower now uses OnItemInventoryChanged() callbacks in order to maintain a list of skill instanes of all weapons anywhere in the followers inventories, these skill are candidates to execute at anytime
– Combat.EquippedSkills is now virtual, the CombatFollower now completely overrides this and returns the internally maintained list m_skillsFromWEeapons
– LevelUp animation id to play has been moved from CombatPlayer to ProgressionManager so that Followers can use it too
– Followers now implement their property listener for Property.RankBase changes, and replicate that rank to all permuations of Property.SkillFamilyRankBase, this is the rank used for all spells that followers execute
– Fixed SkillDecision considering some existing options when adding a new option that it should have, the logic that checks for better/worse new options should only be executed if the existing option target actor and the new option target actor are the same
– Cleaned up some function names during SpellPickup and bound some logic so that it’s only done if players are picking up the spellbook object … however this logic was ultimate not needed for Followers since their loot tables give them the spell runes directly, but it felt nice to keep the cleanup
– Fixed Player.OnInventoryChanged() not calling the base class, fortunately there is not currently anything in there that was important for players
– Added a bunch of rank validation to function calls in the ProgressionManager that do logic based on rank, it’s was surprising how some zero ranks were getting through that should not have been
– Added actor class “Rank Default To One”, keys, potions, and materials are subclasses of this
– Wrapped up all appropriate calls to get actor base rank and rank via function GetRank(), TryGetRank(), GetRankBase(), TryGetRankBase() … these methods will warn if requesting a rank on an actor and one is not found with the exception that if the actor has teh “Rank Default To One” then 1 is returned without error
– Fixed error printing when trying to calculate the buy price of an item that didn’t have rank data (materials, keys, potiion), these now work properly via an actor class that says it’s OK to default the actor class to 1 when no property data is found
– Fixed player not animating in the paper doll in the tower … the player avatar is simply just never deactivated now and is left to render and animate somewhere way off camera
– Added support for spine slots “Missile Point Left” and “Missile Point Right”
– Fire Giant bone “axe” is now “Item Left”
– Added bone and slot “Missile Point Left” to Fire Giant .spine data
– Exported Fire Giant spine data and created all necessary material, textures, atlas, skeletons etc
– Fixed factory actors that were instanced for rendering into the ring menu attempting to produce their contents like they were real actors in the game map
– Renamed Master.OnEnteredMap() and Buildable.OnEnteredMap() to *.OnBeginPlay()
– Calls to Actor.OnEnterMap() now also call the new virtual Buildable.OnEnterMap() is the buildable is present
– Fixed sundries loot table generating too much loot to fit in the sundries goods inventory
– Actor.monitorWeaponSwitching() now pushes the equp logic into Weapon.FinishEquip()
– Weapon.BeginEquip() now takes an optional inventory location to move the weapon to and also return an anim id played (if any)
– Added support for weapon switching animations to ActionSkill
– SpineController no longer tries to play “m_nextAnim” if during the anim complete callback any other code said to play an animation. This is accomplished with a unique m_playCounter variable that’s incremented every time an animation is played.
– Actors in cells that begin hiding now have their actions cancelled (this is theory, there isn’t something that needed this exactly)
– Added actor class “Weapon Attrib Cleave” of which the axe is.
– Added Anim.Id support for Attack_Lance_01
– Added lance actor class, item, magic effets, audio on hits
– Turned off “prewarm” on all item magic particle systems, this solves all particles being pre-warmed in the same point in space due to weapons always having a scale of very very small when they are first revealed via the weapon switch animations and therefore wardrobe effects
– The following small amount of information is now displayed for the following weapon tooltips:
1) Chakrams: “Seeks multiple targets.”
2) Lances: “Extra attack straight ahead during movement.”
3) Axes: “Damages across tiles in an arc.”
– ActionSkill now has the capability to execute a scriped attack via a lunge attack weapon, doing so will change the runmode of that specific ActionMove into blocking and will queue a scripted ActionSkill to execute the lunge attack via the lunge weapon
– ActionSkill now has a set of bitflags for initialization
– Added field ActorClass.AttributeTooltipText
– Added actor class for “Lunge” and “mutli-seek”
– Added a list of actor “attribute actor classes” in the ActorManager, this list is used to generate the actor attribute class tooltips
– The runmode of a TurnAction is now retrieved again by the ActionManager since the action might change the runmode during Start(). This is only done if the action is not marked as destroyed
– Added new environment framework data objects for the “Intro” scene at the “Wayside Inn”
– Created placeholder wooden floor and wall sets
– Created intro doors and doorset
– Created world locations for the intro level and level chain
– WorldAtlas now has a reference to the intro level prefab so save games can resolve it upon load
– Moved door art and audio assets to the shared enviornment folder
– Moved backdrop assets to shared environment folder
– Fixed the marker browser editor not properly tracking mouse movements and detecting the right item under the cursor … the camera aspect needed to match the aspect of the editor window in order to do the windowToWorld() calculation correctly
– Fixed a bug in the cell background cutaway wall reveal that was causing the short walls to pop on screen the first time they were shown because their alpha was incorrectly initialized to 0 instead of 1
– Added a new map “static reveal style”, instead of animating up/down tiles the tiles are static without any animation. This style was for the intro map, but I think ultimately it wasn’t as cool as I was thinking it would be so we might not sue this
– Removed IntroGenerator
– Added MarkerSetGenerator, this is a map generator that is capable of creating a runtime map from the exact static layout data specified in a marker set and edited via the normal marker set editor
– Added markerset for the “intro inn” map, this is a fixed level of an inn with a front room, bell desk, and three guest rooms in the back
– Usables now have an .OnEnteredMap()
– Bumped up save game version
– Doors no longer save their direction in the save file and instead the direction is specified in the prefab
– Removed unnecessary outside calls to Door.SetDirection()
– Added support for sprites that do not render them selves when in the map, useful for editor utilitites, this is done via the new actor class “Hidden in Map”
– Added a “start marker” that can be placed in any map to indicate a start position, actors are considered markers if they have the new actor class “Marker Start Location”
– Fixed a bug in the room grid generator that was sometimes not punching doors though at a valid location
– Added support to room grid generator connection instancing to make the connection along a wall at a 1) random location, 2) middle, 3) min coord, and 4) max coord values. Ultimately these ended up not being used for the wayside inn map, but is good tech to have for future generator enhancements
– Added intro barrel and chest actors
– Added loot table for intro chest (not used yet)
– Added a generic re-usable scroll UI, currently in use for story journal entries (scrolls)
– Added first journal scroll object that drops from chest in the wayside inn
– Added JournalScrollPickup component
– Added Gateway to spawn in intro quest
– Gateways can now link to a quest via prototype
– Map.FindOpenCellAround() can now search for the “closest” cell
– Added JournalEntry property
– JournalEntry components are now property key components
– Quests can now have static single descriptions and names
– Property QuestNameIsActorName is now QuestTargetIsActorName
– Added option to quest prototype for “Name from Target”, in use for Kill quests but not for the first story quest
– Added Story Quest 01 Prototype and supporting data objects
– Cleaned up the QuestEvent and QuestAction APIs
– Removed Quest.OnDie(), which is now impleented through the quest event system
– Added a couple of simplistic quest actions for the first story quest
– Removed old QuestTrigger .cs files, the systme is going to be implemnted in a different way
– Added skeleton Dialog component
– Quests can now optionally hide their rewards from the quest details UI
– Re-organized the scroll asset locations for clarity among the ScrollUI
– Added audio for journal scroll pickups
– Added item class for quest items
– Fixed quest not completed text retrieval for template kill quests
– Fixed a stuck condition in the tutoriral after completing a quest using warping cheat commands
– First follower now spawned via quest system in first dungeon
– Dialog when interacting with first follower now works, follower joins you after dialog tree is complete
– UseFollower now send an event to the quest system instead of implicily letting the follower join you
– Removed the random follower population chance in the dungeon generators for now while the quest/story follower logic gets built and put into place
– Starting a new game now puts the player into the “Intro Scene” instead of the “Tower Scene”
– Added a ListPool to the QuestManager for quests to use and re-use generic lists for any of their logic
– QuestActions now return ignored, completed, or running
– Added QuestAction.OnComplete()
– QuestAction now has an optional “next action” to execute when complete
– QuestActionDialog is now actually capable of beginning a conversation with 1 to 4 actors
– Implemented Dialog.Begin() to actually run a conversation in the game
– Added quest actions for “on enter level chain” and “on interact actor”
– Quests now record if the player has entered the level chain at least once, quest actions for “on enter level chain” are by definition only executed once for the first entrance
– Quests now record and save a list of executed actions
– QuestAction is now an ArchivePrefabComponent so it can be referenced and resolved in a save game file
– Added MathHelper.PolygonCentroid() to calculate the center fo a polygon created of IVector2 points, initially this is used to make all participants of a conversation face the “center” of their spacial layout in the world
– Added custom editor DialogInspector for editing a Dialog prefab. In this layout you can specify the back and forth conversation between the player and up to 3 other targets. Text size is customizable and custom buttons for adding and moving dialog lines around now work properly
– If a speaker and recipient is present when showing a new dialog bubble, the DialogManager now ensures that both of those actors are facing each other when creating the bubble
– Added the quest query framework using Quest.Query and Quest.OnQuery()
– Moved the logic of Quest.Event.UseGateway from event to the new query system Quest.Query.CanUseGateway
– Removed QuestEvent.cs and moved the data structure inside the Quest class
– Added QuestIntro.cs
– Added actor classes “gateway” and “point of interest”
– The map now holds a list of all point of interest actors
– Gateways now have a context data member that indicates whether they are the entrance or exit portal of a dungeon level
– QuestEventSpawn can now target around the entrance or exit of a dungeon level, the gateways are located using the new point of interest system and the small list of actors stored in the map instance
– Added Inventory.FindLocationOption enum bitset and an option to pickup to the shortcut slot
– Added property for pickup to shortcut
– Loot tables now have a property collection prototype as a set of properties to be applied to any items generated from the loot table
– The initial drop loot table with the sword and potions now uses a property collection to have all loot generated have the pickup to shortcut and auto inspected property
– Added Actor.TeleportNearTo()
– Added generic smoke plume effect prefab that can be called from the EffectManager
– Refactored the Usable() Use() code path so that there is a non-virtual as the API entry point
– Added backup recorvery to ActionSkill.Reset() to make sure the action is decoupled from the skill instance in an error condition
– Followers can now have static names
– Follower01 is now Follower Ivan
– JournayEntry now has an entry to auto read on pickup
– Fixed a case during pickup logic where things that were not in the world were pickup animated to the player avatar (blueprint rewards from a quest)
– Fixed pickup case when objects that are destroyed during pickup were not removed from their source inventory
– A notice is now displayed when acquiring a follower
– Removed old intro quest
– Removed QuestPrototype.IsIntro, added NoticeOnComplet, added BlueprintDropRestricted, added RankExplicit
– Gateways no longer allow item spawning in the cell just north of them
– Added a set of fucntions to Gateway to tell if that instance is the level chain entrance, exit, or other aribitrary entrance/exit for a specific level index
– Dialog bubbles now have a setting that says if they are ‘optional’, and if there is a blocking bubble or the speaker is already speaking, the new dialog bubble is ignored
– Added quest event for entering a level for the first time
– Added a hude mode for “home” which shows only the home menu
– The first inn/intro level now always forces the hud mode of “home” for a completely simplified UI
– Added QuestCondition class, conditions must be met for QuestActions to be triggered
– Added QuestActionComplete, QuestActionLoot
– Reworked a bunch of logic for the first intro quest to always keep things in a valid state and just generally make more sense
– Formalized the intro quest with QuestIntro and QuestIntroPrototype, and a host of dialog, actions, and conditions to drive it
– Quests can now be closed on complete
– Quests can now have an explicit rank set from data
– Quests can now optionally show their completion notice
– Removed the old logic that generated the intro quest from the tavern
– Dialog can now have an explicit dismiss callback
– Dialog can now be debug completed by holding leftshift and clicking next
– DialogBubbles are now queued and processed in order while still respecting blocking bubbles one at a time
– Fixed DialogInspector so that it now uses SerializedProperty objects and will correctly mark itself dirty so that changes made in the inspector are actually saved to disk
– Fixed the GoldHud being visible when you first start a level
– Followers now set/clear invulnerability via OnAddedToInventory() callback
– Added Player.FollowerRemove()
– Ivan is now removed as a follower and marked as “no save” at the start of the “leave sequence” after picking up the key to Antarit so that if the game is saved during the conversation, the proper quest state is preserved upon game load (although the conversation is missed)
– Dialog now has the ability to have a delay at the start of the conversation
– A small delay has been introduced in the player dialog after Ivan has taken the dungeon exit portal from the first dungeon
– Added quest event for “player use skill”
– Added quest dialog when Ivan sees the player use their first magic spell
– Added quest dialog for picking up first item
– Added 8 quest marker actors
– Added QuestActionSpawn can now target the 8 quest markers
– Intro portal is now always spawned right of the chest in the inn
– Added blocking quest marker for portal spawn point in the inn
– Hack surpressed blueprint acquisition message for first quest reward (for now)
– Fixed Gateway.IsLevelChainExit()
– Renamed a couple of fields in level chain to be more clear that they refer to *instanced* levels and not possible levels in the chain
– Added Map.FindPointOfInterestByPrefab()
– Marker actor class is now a point of interest
– Removed old temp tower map intro dialog blurbs, a new intro town quest will be coming soon to help guide the tutorial
– Added bool QuestCompleted property, parameterized by the quest prototype
– QuestPrototype is now a PropertyKeyComponent so it can be used in properties
– Created skeleton empty QuestTowerWelcome and QuestTowerWelcomePrototype
– Dialog has been split up into two major classes, DialogPrototype for the prefab data while Dialog continues as a base class for dialog instances and is not a mono behavior.
– Added DialogDungeon which derives from Dialog and implements the dialog via dialog bubbles and in world actors
– Added skeleton class DialogTower which will soon implement tower conversations
– DialogManager now has a queue of dialog objects along with heap object pools for the creation and re-use of their instances
– Simplified the API necessary to start a instance of dialog, everyting is setup and started through the Dialog.Settings struct
– Modified all quest fields to use DialogPrototype objects instead of Dialog which is now a runtime class only
– Changed the Buildable.Interact() API to have a non-virtual at the root
– Create new quest query CanUseBuildable
– Control+P now executes the point of interest warp cheat command, which now also considers actors with the class POI as a possible destination
– Specific quest prototypes are now set via the inspector instead of code
– Added skeleton class and links for the scroll based DialogUI
– DialogUI now has basic funcionality
– Added debug dialog test menu item in the home->settings->debug->tower menu
– Cleaned up the Dialog class API a bit to make it easier for external users to Advance() the conversation
– Buildables now instance an optional inhabitant actor, the inhabitant is a child of the buildable but is initialized as inactive … these inhabitants are currently used for the dialog UI but will become much more in the future
– DialogUI is now functional (although still pretty bare bones)
– Added DialogUISpeaker component to wrap up the portrait and text display
– Fixed bugs when trying to repeatedly open/close the dual window ui before the previous open/close was complete … during the transitions all input is now disabled
– SpriteTextEx can now do a one time color set with transition time
– WardrobeEffects are now parented to a new game object which is a child of the wardrobe, this way all effects can be toggled on and off at the same time while preserving the enabled state of which effect children are active
– Added Wardrobe.ShowEffetParent()
– Fixed stack overflow in AI.ToString()
– Avatars have now been generalized to all Agents instead of just players
– Created Ivan and Strysa avatars
– Removed old code that bound the player shortcut inventory to the shortcut grid on startup, instead newer code is already in place via the ShortcutUI to bind and unbind as the ui become active and inactive
– Fixed DualWindowUI offsets not being far enough to completely hide the panels in full screen
– Fixed enemy blob name
– Down dirty support for different avatar heads in the SpineController and Avatar components
– Modified Spine.Slot so that attachments can be totally disabled on slots