July 2015 Development Update

Greetings Wizards,

A lot of time in July was spent putting in some new monsters that completed all their art and animations, adding new behaviors for some monsters that already had art, and adding some game engine features to support the new behaviors and skills.

First off is the Fire Giant, we’ve had his artwork and animation in for a while now, but he didn’t do anything but a basic melee swing with his axe. Now the Fire Giant has a magic spell that shoots rays from his axe to several locations around him. At every location a burning fire hotspot is created which remains for a few turns. Additionally, any items at the location of a fire ray hit will be permanently destroyed and can’t be picked up.

Fire Giant’s “Fire Ray” skill

Alex and Aden finished the artwork and animation for the Disturbling, a super crazy cosmic creature. He’s got a bite melee attack, but has this really twisted looking magic attack where a hand comes out of a portal that opens in front of his mouth. Not sure what that’s gonna do yet.

Disturbling creature artwork and animation

The Thiefling is a new creature that can steal items from the player. He’ll prefer to steal items that are currently equipped or on the shortcut bar of your player, but sometimes also dips deep into your backpack and can steal any item. Watch out if he steals a stack of magic materials, you might quickly find you can no longer cast that fireball spell you had readied.

Thiefling stealing a helm from the player

Here’s the development highlights and details from the past month. Want to talk about these changes or other aspects of the game, then visit us in the online forums.

Major Features & Changes:

  • New Creature: Thiefling … these rat like hunchbacks can whip you with their tail or steal an item from your inventory and quickly flee with it.
  • New Creature: Mimic, these look like chests but will attack you when you disturb them, if you find them via “detect hidden”, you will see the true Mimic form but they remain dormant until you interact/hurt them.
  • Champion monsters now summon 1-2 minions when they cross below 80%, 50%, and 20% health.
  • Blob enemy now has a 75% chance to replicate when damaged or killed, each successive generation of replicated blob has -20% health per generation.
  • Fire Giant now has a ranged magic attack in which he raises his weapon and fires 3-6 bolts at surrounding cells causing a fire hazard to appear at the target and permanently destroying any items on the ground there.
  • Banish is now 10% more likely to work on the same target for each previously failed banish attempt on that target.
  • When you destroy an item for the first time, you now get a confirmation dialog to make it clear that the item is being destroyed and not un-equipped or dropped or something.
  • The minimap is now visible during the intro “Wayside Inn” intro map.
  • Sundries now always has at least 2 health potions to sell.
  • Chests now always drop better loot, they can no longer be empty or spawn materials.
  • Keys can no longer break when opening chests until you are level 5+.
  • Removed demolish from all town ring interact menus.
  • Disabled the physical damage combat immunity, it’s super harsh.
  • Totally removed all weapon +3 rank affixes by setting their weight within their affix group to zero (the affix still exists in data if we want it back).
  • Rebalanced the weights of affix weapon +1 and +2 ranks so that +1 ranks appear 90% of the time and +2 appear 10% of the time.

Art:

  • Dragon Whelp is now ready to be animated.
  • Owl is now ready to be animated.
  • The 18 Kickstarter Backers are 99% ready to be animated, these will be both playable characters and NPCs.
  • 10 Villager homes art is completed.
  • Thiefling animations complete.
  • Mimic animations complete.
  • Disturbling animations complete.

Code & Framework:

  • Wardrobe effects can now be optionally pooled (Disturbling attack and die vortex is setup this way).
  • Wardrobe.HideEffect() can now match based on prefab as well as source actor id.
  • Removed portal from Disturbling .spine file and added a few portal guide images to assist in animation.
  • Disturbling die and attack portal is now done by an engine wardrobe effect.
  • Agents now support generic wardrobe effects for animation events.
  • Split Human Source.psd into 3 .psd files: Attachment.psd, Female.psd, and Male.psd.
  • Cleaned up, renamed, touched up all male and female NPC art layers.
  • Re-organized all attachment, body, and head layers for male and female.
  • Touched all attachment nodes in Spine for Male and Female character to point all attachments and body parts to the new exported images in their new location.
  • Set the bone ids for Head 01 to be Head_Ersh, Head_Morley for clarity and having a name to use instead of talking about a number.
  • Massive refactor of the Trigger and Trap family of classes to further unify how the logic is triggered and run.
  • Updated Electric Field, Spike Trap, Teleport Trap, Teleport Pad prefabs to the new trigger system.
  • Added generic “Open flame” environmental hazard that deals fire damage to any occupant of the cell its located in.
  • Triggers now have an Attack multiplier so they can participate as sources of skills that do damage without a combat module.
  • Manually revealing a trap will now play the reveal sound and visual effects.
  • New art for the spike and teleport trap pressure plates that just looks like a rock … in the detected state it is colored using the map compliment color.
  • ActorSpec now has a SourceSkill field, this is used by the RemoteSkillTrigger class on actor create.
  • Removed the now un-necessary “OnConstructedBySkill” message broadcast.
  • Hotspot class is now called RemoteSkillTrigger.
  • Added Trigger.InterruptExecuteTrigger() which generates an scripted action and starts it for the trigger, this is used when the object is triggered by movement via locomotor or when the object is created in a cell with an existing valid target using the INotifyChangeLocation system of the triggers actor.
  • Moved a bunch of trigger and trap C# files into a subfolder for organization, will be re-factoring these more later.
  • Removed Trigger.OnEndOfTurn().
  • Added Trigger.OnTriggerActionStarted() which is called from TurnAction.Start() for any action that is started which was generated by the trigger, the logic for “last triggered turn” has been set into here as the most reliable method of recording it.
  • Added FireRaySkill and FireRaySkillPrototype.
  • Reworked the Skill.CanTargetResult so that success occurs when no flags are set, this allows for derived skill classes to easily tack on more failure conditions without having to clear a success bit … if no code complains and sets bits, then the result is a success.
  • Refactored rope chain skills so that base classes of DoSkill() are always called where important things like storing the turn action id happen etc.
  • RopeSkill and RopeSkillPrototype are now abstract classes from which to build more complex skills like RopeChainSkill, FireRaySkill etc.
  • Removed unused Summonable class.
  • All summon skills now have field flags that support automatically doing combat at the target location of the summonable as well as auto adding the summoned actor to the action manager to do actions on the same turn it is summoned.
  • Fixed mouse over actor information display, this broken with the last InputManager refactor that changed where to properly look for the “top” input controller in the stack to see if we were doing “game world input” or where controlling some modal UI.
  • Refactored how the AI selects a ranged or melee attack … now out of range skills are properly considered so that we can choose to move closer in order to execute a skill because our stance prefers it, even if we can do another less preferred skill at our current location.
  • SkillDecisions now tracks 4 groups of skill 1) Melee in range, 2) Ranged in range, 3) Melee out of range, 4) Ranged out of range.
  • PackedSpriteEx class will now no longer drop lopping animation play requests on the floor if the game object is not active in the scene, now the requested animation is held on to, and when the object becomes enabled again the animation is started.
  • SpriteClipAnimator now behaves nicely when used in a game object pool.
  • Game.Instance now has a distinction between “Running” (any scene with game logic) and “Playing” (player has actual control).
  • Broke out “color via map” into a function on Actor.
  • Fixed newly created actors not being lit correctly in their new cell, now their cell lighting is synced upon creation.
  • Removed TriggerProxy prefab, class, and all ugly code littered throughout the trigger classes that were supporting it … there are no objects that are multi-size triggers at present and if we need this again we’ll do it way better next time.
  • Fixed attribute names overlapping the attribute icons on the scroll attribute UI.
  • Loot tables can now specify “All” instead of a random number of picks … in this evaluation order, every entry is evaluated once in the order that they appear in the table.
  • Moved vendor treasure tables into a folder.
  • Added tutorial message and id for “InventoryTrash” (wiped save games as a result).
  • Added custom inspector for LocalizedText, the text field is now displayed with a larger font.
  • InventorySlot now uses cached delegates for drag and drop operations to prevent constant memory allocation.
  • The InputManager is now capable of pushing and popping listener/controller pairs without having to have the code itself be bookend structured with push1->push2->pop2->pop1 … we can now support push1->push2->pop1->pop2 to allow for a more natural flow to writing the code in some situations.
  • Fixed spike trap creating spikes in the wrong location.
  • Fixed avatars not playing animations on the character select screen.
  • Added create frame to actor.
  • Fixed Actor.CalculateVisibility() from bailing out early on the first frame an actor is created since the component visibility hasn’t had a chance to be considered yet.
  • Fixed pooled actors having an invalid modifier collection when they were returned to the pool.
  • ModifierCollection is now cleared from actor upon destroy.
  • ModifierCollection is now allocated from a heap object pool in the CombatManager and re-used for all actors.
  • Fixed pooled actors immediately destroying themselves upon re-use if the last animation they played was a “die” animation, which is actually pretty common. Actors are no longer destroyed when a “Die” animation is ended, only when it is completed. A pooled actor that last played die, and then plays idle, “ends” the die animation … which shouldn’t be a trigger to fade out and destroy.
  • Centralized the logic of an actor being revealed into Actor.RevealHidden( revealer ).
  • Exposed ActionManager.TryAddActor() so that external systems can add new actors into the current turn of actors executing actions, the mimic makes use of this when it is spawned.
  • Detect hidden now occurs after the actor action has been started, now movement and detection in the same frame occurs with the new location instead of the old, which is a more expected result from a player standpoint.
  • Fixed the stolen loot dropped by a Thiefling having a scale of zero (and therefore being invisible) if you killed the Thiefling via the Banish spell, the banish logic now restores the actor scale to 1.0 before killing/destroying them which also restores scale on any contained child game objects / items.
  • Added support to ignore low health animations via the SpineController.
  • Added 3 new AudioSpecialX animation events.
  • Fixed a bug when dropping stolen loot that could make the loot not drop … now Inventory.DropAround() requires a center cell, and if no suitable locations around it are found the center cell itself is used as the drop location.
  • Removed ActorSetPlan and MarkerSetPlan, all logic is just now in the base class of ArchitectPlan and their identifier enum has been combined all into one.
  • AI components now save data to archives.
  • AI now has a set of status bits, the first one allows for suspension of action generation until the AI is damaged (used for detected mimics currently).
  • Thiefling now gets a free automatic flee action just after stealing an item so they can start their escape.
  • Added StealSkill and StealSkillPrototype.
  • Added more unique sound effects for the steal skill.
  • Added actor class “Steal Restricted”, currently set on spell runes and quest objects.
  • Tower Theme now has a reference to “Shared Enemies” since it’s necessary to load the EnemiesKilledCount property due to the Enemy param.
  • You can now bash enemies again if you have no weapon equipped.
  • Bash now does only 10% of the damage it used to.
  • Added “Stolen Goods” inventory.
  • Actor.InventoryCollection is no longer set via the inspector and is taken care of by code.
  • Added actor status for “PickupAnimating”, you can’t pickup an item that is being picked up.
  • Refactored the UsePickup component to eliminate the use of m_pickedUp, the double pickup restrictions are now done using the fact that the item cannot be in an inventory (unless InventoryPrototype flag says that’s ok) and the new Actor status “Pickup Animating”, this allows items that have been previously picked up return to the world where they can be picked up again, as is the case with the Thiefling stealing of items.
  • Refactored the API for allowing actors to do actions even when they’re inactive.
  • Added convenience functions to Actor to get an inventory (and sometimes add it if not found).
  • When you do any damage to something with “OneHealth” set in the combat module, the game now makes sure that you do at least one point of damage since that flag is intended to make things like destructibles super brittle so they can be broken with any attack, no matter how weak it was.
  • Added AI support to “flee with stolen goods”.
  • Exposed a few functions in item to size and scale the actor for world/inventory/generic.
  • Cleaned up the ThoughtBubble creation API using a settings structure.
  • New art for the thought bubble canvas.
  • Thought bubbles are now positioned better over the thinkers' heads.
  • Thought bubble contents are now presented using the item inventory rotation settings cause it looks cooler on a diagonal, they are also sized to make sure they fit in the thought bubble which is important for large weapons like the lance.
  • Sprite offset is now stored on awake and can be altered during runtime, the original offset is restored when the sprite returns to any pool.
  • Added support for more audio event types and instances in Spine animations.
  • Added support for actors to drop any stolen goods on the ground around them when they die.

Share this:

LikeLoading...