June 2015 Development Update

Greetings Wizards,

For the past month a whole lot of development effort has been focused into the getting the new introduction to the game up and running.  Mainly this has included a more robust quest system, ways of doing some simple event scripting within the dungeon maps, and the town tower building tutorial and a way to talk to people in town.  Here the new town dialog user interface can be seen.

New town dialog user interface

New town dialog user interface

Alex and Aden finished a couple new monsters this month including the new Overseer earth creature.  I haven’t figured out his magic power yet, but Alex created a couple of different hand variations, maybe they’ll come into play somehow.

New Earth Monster: Overseer

New Earth Monster: Overseer

Lastly, I also managed to squeeze in a new spell called Stalagmite too.  This spell raises 6-8 rock columns around the caster that remain for a few turns to provide some protection from nearby melee enemies.  Enemies that want to melee attack the the player first have to bash through the columns of rock to get a clear shot.

New Earth Spell: Stalagmite

New Earth Spell: Stalagmite

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 Changes:
– New spell Stalagmite: causes 8-13 blocking, destructible stalagmites to raise around the caster lasting for 6 turns.
– Upgraded to Unity 5.1 engine
– Town based dialog UI is now working including names, portraits, text typing, sounds effects, and quick complete clicks/taps
– Dungeon dialog bubbles got a lot of polish including names, text typing, sound effects, and continue button
– Intro dungeon quest and intro tower quest are now complte and in game (still need art for opening Wayside Inn scene though)
– The Overseer and Harpy can now be found in the game (basic melee attacks only)
– Enemies can now bash destructibles that are in their way such as barrels and the floating cosmic treasure rocks
– Champion monsters now “flee” until they are 2 tiles away within certain health thresholds
– Monsters that were fleeing and have obtained a “safe” distance now become “bold” until they get hurt, a bold enemy won’t flee

Story:
– Rough draft of script at about 80% complete
– First version of intro inn, intro dungeon, and intro to town are now in place complete with characters and all dialog

Art:
– Completed Animations for Harpy and Overseer
– Completed art for Mimic
– Completed several armor art pieces for boots and chest pieces
– New art for several wands

Code:
– New tower tutorial using quest system introducing the player to the ring menu, dialog with an NPC in town, building a tower, visiting the Sundries, and then visiting the tavern to get further quests
– Created blueprints for the tavern, tower, sundries
– Changed blueprint rewward tiers so that there is now a “system” tier, that tier is never ignored when generating randomized blueprint loot
– Added ring menu talk option and artwork
– Added InteractIndicator component that can show one indicator at a time with ping pong animation and icon fading in/out
– Added Actor.GetInteractDialog()
– Added Actor.HasQuestInfo()
– Added Actor.UdpateInteractIndicator()
– Vendors no longer are put into maps until level 2+
– Tower generator now creates a town with a travel gate, tavern, and sundries.
– Removed all the old tower tutorial logic and messages
– Added QuestCast behavior as a place to collect actor prototypes without having to specify them all the time in the quest prototype
– Actor.TeleportNearTo() now forces clear LOS as well
– Map.FindCellAround and all variations now take a flag for enforcing clear LOS option
– Removed static quest indicator from Tavern
– Added generic InteractIndicator prefab that can display talk and quest, attached it to the tavern
– Buildables now have bool that says whether they should have an interact indicator instacned or not
– Buildable inhabitatnts are now created when entering the map so that the actor id of the actor they are inhabiting can be used
– Added Buildable.UncoverWhenBuilt, it is now set for the travel gate and not the wizard tower … the logic has been moved from ScoutTower to Buildable so it can be used by multiple buildable types
– The audio listener in the tower maps has been moved from the tower to the travel gate
– Removed Map.Tower actor reference
– Added convenience function Buildable.SpeakDialog()
– Blueprints now have a flag to show/restrict their notice on pickup
– Added static Blueprint.GiveBlueprintToPlayer()
– DialogPrototype now has a bool that says whether it should be recorded if the dialog has been read or not on the player
– Build code path now starts with a non-virtual and executes the new doBuild() virtuals
– Singleton actors ids are no longer saved in the save file, they are now set at runtime each run
– Added properties DialogRead and DwellignActorId
– DialogPrototype can now be used as property keys and values
– QuestCollection functions SendQuery() and SendEvent() now handle the query or even removing the current quest that is being processed
– Removed QuestActionComplete, we want to avoid this kind of architecture because a quest reference can go bad on the callstack, and it’s hard to communicate back up the call chain that the quest refrence is now invalid
– Added support for quests to auto instance locations, be hidden from the UI, and give antoher quest upon close
– Added quest queries CanOpenBuildableMenu and GetDialog
– Quest.Query.Result now has a field for dialog prototype
– Added quest events BuildableCompleted and BuildableInteracted
– Added Map.UpdateInteractIndicators()
– Accepting a quest will now udpate interact indicators for actors in the world
– Added debug menu to give town quest in Antarit
– Dialog.Settings now has an explicit style that can be optionall set (bubble or scroll)
– Actor names are now displayed in the scroll based dialog UI
– Added Player.TranslateDisplayName() to return the user seleted player name from character creation
– Sundries blueprint no longer displays pickup notice
– Changed music for Wayside Inn level
– Fixed tower level being destroyed after completing the quest, quest level chains are now only destroyed if the quest prototype AutoInstanceLocation is true, which is false for the Antarit quest
– Tutorial message to pickup item in dungeon is now non blocking
– Fixed GoldHUD displaying gold value of zero on startup until the gold value changed on the player
– New Apple developer profile and app id for Spellbind Studios and Rogue Wizards proper
– Upgraded Sprite Manager 2
– Upgraded EZGui
– Fixed UI not working on mobile due to primary/secondary mouse button logic added a while ago
– Bumped up version to 0.1.141
– Put back gui _collider assignment until I hear back from Brady at AnB
– Fixed unwanted mouth key on Female Block anim removed
– Fixed a case that could create invalid save game files if an exception occurred during the level transition process
– Broke up QuestPrototype.AutoInstanceLocation into LocationCreateOnQuestCreate and LocationCreateOnQuestDestroy
– The intro quest is no longer completed when you use the gateway, it is instead completed upon load of the tower map
– Added support to complete quest when loading into the tower map, currently enabled for the intro quest
– Added error message when the current level is being destroyed … if we do this and then do things like save the game in that state then we can create invalid save files. The save could be intentional such as a travel through gateway or unintentional like user suspend app … and if after the level destroy a crash happens the save game will be permanently messed up.
– Created villager house prefab and supporting objects
– Created blueprint for villager house
– Created a ring menu build item for villager house for now so I can see all the art for feedback
– Moved the checkmark and cancel icons into a .psd file and .png export layers. Updated all UI buttons to use the exported .png files
– Fixed crash when building material and gold factory actors
– Fixed floating gold icon on the Gold Mine not showing up
– Interact indicators are now hidden when actors are rendered to a dynamic portrait, this prevents confusing icons showing up on the ring menu buttons that render the actual actor instances in the tower map into buttons for the interaction menus
– Fixed confusion when interacting with tavern and a talk option was available in that you can now see only the talk bubble in the talk button and not on the enter button (which is a dynamic portrait snapshot of the actual tavern in the game world with the talk bubble indicator)
– Actors no longer generate actions if thers is a dialog conversation active
– Ivan now comments on the player magic ability after the fireball skill is complete
– Added quest event for player skill start and complete
– Ivan is now marked as having seen magic only after the entire dialog is complete incase the player save quits the game in the middle of it
– The m_skill reference of ActionSkill is now cleared when the action id is broken from the skill instance via CompleteAction()
– When building the first structure (Wizard Tower), the radial build menu contains nothing except that tower structure
– After building a tower the player is given the blueprints for the Taven and Sundries so they can destroy and re-create them in the future if desired.
– Added TextTween to animate a text string using color and therefore without modifying multi-line and justification positions as it becomes visible within a SpriteText control
– Added TweenManager.Complete( tweenId )
– SpriteTextEx now tracks a typing in tween and has some functions to query its status and complete it etc.
– Added support for random start location to sound
– Added support to DialogBubble, DialogUI, and ScrollUI to play a looping sound during the display of text
– ScrollUI now does type-in text animation with sound
– Removed SoundEditor (inspector), this is no longer needed now that ranges for fields can be applied to any class via C# attributes
– Added support for 3 slice tiling via a subset of the 9 slice tiling tech
– Dialog bubbles now have a speaker lablel and 3 slice tiled background
– Added NineSlice.TileThreeSlice()
– Added supprot for dialog conversations to have a non-random fixed pitch for the speaking sound that is unique per speaker of the conversation
– Removed the randomness from the pitch and sound selection of the dialog bubble show sound
– The dialog bubble show sound is now also pitch shifted to match the speaking pitch shifting
– Moved addon extension C# files into a folder under /Assets/Scripts/AddOnExtensions including both class extenstions, new inspectors, etc.
– The continue button is no longer a “Nine Slice” part
– Moved continue button prefab and color settings into DialogManager
– DialogBubble now instances the continue button for blocking bubbles itself (instead of nine slice tech), the continue button is now also imbedded with the text itself and not hanging off at the edge of the dialog bubble
– Fixed offset of dialog bubbles being wrong sometimes
– Dialog bubbles are now offset “behind” actors depending on which way they are facing
– Dialog bubble pointer can now “slide” along the edge so that they point as close as possible to the bubble target position (after being brought inside screen bounds etc)
– Tavern now named “Strysa’s Tavern”
– Fixed a locked up state where a blocking bubble and the dialog UI were open at the same time and stomping on each others input handler listening for input
– Actions can no longer be generated when a blocking bubble is active
– The “item pickup” bubble tutorial is now blocking again
– The player is now leveled up to level 2 automatically when they pickup the second scroll if they are not level 2 or better
– The keyboard can now dismiss a blocking bubble or any other code that is waiting for “any” input
– Fixed keyboard events being generated with an invalid command id when just idling doing nothing
– Fixed infinite loop in dialog pointer sliding placement due to a lack of epsilon
– Fixed dialog bubble shifting left/right of parent actors that were moving around and changing facings
– Player dialog bubbles are now removed when the Dual Window UI is opened
– Fixed being able to cast spells when you didn’t have enough materials
– Fixed the dialog bubble saying “I don’t have enough materials” not coming up when it should have
– Stalagmite, Root, and ElectricField now inherit from SummonSkill and their prototypes inherit from SummonSkillPrototype
– Actors created via a summon skill can no decide to not be tracked via the summon inventory using the TrackSummoned flag in the prototype
– Cleaned up Root and Electric Field skill prototypes to put the actors to summon in the ToSummonPrefab of the SummonSkillPrototype base class, this allows the summoned actors to be saved actors in the map that will no longer try to move with the player to another map
– Split Skill.CanTargetFlags.IgnoreCost into two flags for IgnoreActionPointCost and IgnoreMaterialCost
– Removed Cell m_doorCount
– Added Cell m_destructibleCount
– Fixed “Melee Skill With Knockback 100%” not having a valid interact priority indicating it was in fact a melee skill
– Hooked up basic stalagmite spell functionlity (still needs a lot of work)
– Removed old stalagmite art files
– Fixed error prints from missing ranks when the debug actor text was turned on
– Refactored how diagonal movement constraints are calculated via Locomotor.GetMoveDirectionConstraints()
– Added path flags to allow pathing through destructibles
– Added can move flags to allow ignoring of destructibles
– Cleaned up some confusing variable naming when querying interaction, the param “secondaryInteraction” is now called “outOfRangeInteraction” since that’s what it really is
– Destructible actor class is now cached via an Actor status bit for speed
– Added a Skill.CanTargetFlag to treat destructibles as hostile
– Fixed trap plan settings so they only appear after rank 5+ etc
– Fixed turn deadlock after hitting a teleport trap and being transported far away from the trap, which became in-active, and cancelled the teleport action in mid execution
– Added TurnAction flag that allows the action to run even on an inactive actor, this is currently set for all move actions and for the teleport trap teleport action
– When actors are in a cell that goes inactive, when cancelling the actor actions we ingore any actions that are OK to run on inactive actors
– Locomotor now uses scripted action technology to trigger a trap that an actor steps on
– Removed the action user configurable “complete callbacks”, these were only used in order to trigger traps via the locomotor which is now done a different way and from teleport trap skills which has also been refactored
– Added a user configurable callback to skill for “OnActionStopped”, this callback is called whenver the action is completed or canceled for any reason
– Teleport traps now destory one shot triggers after the action they executes stops
– Refactored teleport trap logic to immediatley reveal and for one shots immediately disable saving
– Refactored some action code to use cancelOrCompleteCommon() where appropriate
– ActionSkills now fail their initialization if the actor that is executing them is inactive, we may need to relax or option this one day but for now this will help keep turn deadlock issues more bug free
– The AI no longer tries to bash destructibles if they are inactive, they will however continue to wander though
– Scheduled events from source actors that are no longer around are now ignored when their time is elapsed, there was not a specific issue with the code as it was … but this feels more like what I intended when I wrote it months ago
– Quest action spawn now supports a count
– Force the creation of two barrels around the start portal in the first dungeon
– Added quest event for “begin play first time”, as a separate event from “enter level first time”
– Cleaned up first and last level in chain condition prefab names
– Setting perforce mode for editor version control
– Fixed prefab key collision for new barrel spawn prefab for first quest
– Stalagmite spell is now functional with art, timing, and sound effects
– Added sounds for stalagmite cast/rumble, and spawn/die
– Fixed the blocking flag on pooled actors not being reset to the prefab value when recycled
– Barrels (and more generally any destructible) no longer give you experience when you destroy them
– Fixed Stalagmite DoSkill() not calling base class
– Created SoundManager as a base class for ActorSoundManager and UISoundManager
– Added a sound frame number to sound managers
– SoundManagers will no longer play a duplicate sound on the exact same game frame
– Added SoundGroup.m_soundFrame to track when when a sound group is played by a sound manager
– Replaced Skill.CanTargetFlags flag for DestructibleIsHostile with IgnoreDestructibles
– CanTargetResult.Flag.IgnoredByAI is now just Ignored
– During a can target query, destructibles are no longer required to pass a hostility check
– The AI now always ignores destructibles when using the SkillDecisions class in order to scan for valid targets for their skills
– Added simple Shaker animation component along
– Added simple camera shake to the main camera and an extension method Camera.Shake() to execute it
– SpriteClipAnimators can now auto play on start
– Poolified the SkillDecisions so that not every single AI contains one
– BasicAI no longer keeps a reference to a nav path, instead the path is allowed and freed from a pool each time one is needed
– OnRecycled() methods are now called OnReturningToPool()
– OnRepurposed() methods are now called OnAllocatedFromPool()
– Actor.OrientTo( MapCoord coord ) now orients differently but consistently for N/S directions
– Destructibles are now always considered hostile via Actor.IsHostileTo()
– OnPropertyChanged() methods now take a single PropertyChange parameter
– Added pool for PropertyChange objects to PropertyManager
– Fixed actors not facing the correct direction after Transfer() due to not calling ChangeFacing()
– Tweaked the property add/remove api to allow for the retuning of previously set property values when removing, changing, or adding property values. Previous property values are now used in the PropertyChange object during OnPropertyChanged() notifications to listeners
– AI’s now listen for property changes on their actor