Model – state of things

Service – access to the state

Data-Contracts – how the state is presented to clients

Proxy – how a remote client deals with the service; the representation of service operations in another programming environment

View-Model – all sort of additional goodies to make the state and proxy behave reactively and transparently to the UI (lots of data wrappers, state-change notifications and command/selection driven service operations).

User-Interface – template driven from the view-model

I’ll admit it isn’t as succinct as pithy initialisms such as MVC or MVVM, but it is more accurate for what I do.  It is generally bi-directional as well.

  1. Model expressed through services as contracts are accessible through proxies as view-models (and contracts) that are projected into user interface.
  2. User-interface is manipulated to affect view-models that use proxies to invoke service operations (typically with data contracts as parameters) that alter model state.

Since Last Summer

As usual, been busy, but I took some time earlier this month to summarize code changes since June:


  • support for Game Master client features
  • construct guard configurability
  • damage handling for objects/troves/ammo-bundles improved
  • targeting improvements for sets of things
  • diseases
  • wight (undead)
  • critical hit for powers and spells
  • handle destroyed objects: sub-parts
  • line capture: lightning bolt geometry


  • movement updates for furnishing
  • save without full reload: full rewrite with refresh
  • squeeze on fall: deflection
  • Hedral-Grip: 8*8 bitmask for face coverage


  • Hedral-Grip continues
  • elevation maintenance heuristic improved
  • IList->IDictionary (interaction exclusions)
  • improving hinder/squeeze near furnishings
  • cache furnishing planar points for sides
  • shuriken
  • shield swap phantom limbs removed
  • buckler rules conformed
  • shield bash
  • object binding connected sides
  • throwing rule net progress


  • more net stuff: entanglement
  • Covering group adjunct: creates a “covering” slot
  • Freeze trait (for gargoyle)
  • character model base pogs
  • actor list in service ordered by name…
  • some errant “waiting” blocks removed
  • Turn tracker service to client improved
  • portal editor improvements
  • start of Secret Corner Pivot Portal


  • RoomAwareness updates for secret doors
  • CoreIndex (object/token by Guids)
  • IPanelShading and PanelShadingInfo: panel overrides cell drawing
  • Secret doors
  • Search actions
  • auto-Search: elves and dwarves


  • more auto-search
  • trapfinding class feature
  • spider throwing net
  • Activation mechanisms
  • LocatorMove interaction (lightweight overlapped capture zone)
  • Surface trigger
  • Open-close triggerable
  • force open actions
  • Secret Sliding Portal
  • editor cleanups in workshop
  • mechanism mount object: binding triggers and responses


  • trigger editors
  • triggerable editors
  • merge locator editing into object editors as other tab
  • attack triggerables
  • Health bar in client
  • proximity trigger

February-May Roundup


  • client UI ease-of-use
  • action menus along top of actor view UI
  • gem name fixes (true versus observable were reversed)
  • targeting improvements/fixes
  • fix for “Munchausen” bootstrapping problem (picking oneself up)


  • ammo recovery
  • throwable weapon relocation
  • ammunition bundle refactoring (new model for handling groups of ammo)


  • finishing ammo
  • identity improvements
  • CoreListAim and CoreListTargeting
  • AmmoDropHandler: merge ammo and bundles by known identity
  • use of ammo bundles and new containers with weapon strikes
  • QuantitySelectAim: extract ammo support


  • ghoul fever
  • ghoul as replacement template
  • zombie/skeleton template improvements as well
  • ghoulify functionality (UI and ghoul fever result)
  • ghoulish/ghastly paralysis
  • sickened as poison damage
  • ghastly stench
  • temporary poison immunities on saves (if allowed by poison)
  • Cleave Feat (and support classes)
  • fixed coreStep problem with multiple serial steps
  • proneEffect use improved
  • drop handlers use falling movment
  • falling-stop trove merge
  • item/object damage handlers (finally)
  • item/object save handlers (finally)


Visualization Overview

The Visualization Overview section is now available in my growing tuning series.  I struggled with being somewhere between a catalog of functionality (and going too deep), an API overview (and being too shallow), and a design justification (and getting too long-winded).

Ultimately, the idea of the system overviews is to provide enough information so that the tuning pages I’m going to create have some context on what I’m tuning without me having to do it in-line and detract from the actual tuning content.

First Page

Finally finished off and published the first (non-bloggish) page of a “series” of pages I’ll be adding to (eventually) that I’d collected thoughts on about optimization stuff in the Ikosa Framework.

Ikosa Tuning Introduction

Roundup 2


  • Model cache improvements
  • furnishing stuff
  • multiple cabinet drawer containers
  • location targeting
  • object storage/holding actions
  • client UI work
  • portal cleanup


  • movement budget consumed on failed movement
  • grasp awareness improvements
  • bump-into awareness
  • movement and lighting tweaks
  • RoomIndex


  • performance and edge case tweaks
  • room awareness performance
  • value-type usage increased
  • move-cost factors for moving objects
  • LocatorIndex
  • removed shader effects reference


  • auto-pump the time-tracker
  • turn time-extension when creatures acting (especially moving)
  • client UI concurrency stabilizations
  • pouch and devotional symbol slots (for caster classes)
  • menus via ObservableCollection
  • auto-hit (unattended objects, friendlies with harmless)
  • grip rules for climbing improved


  • more climbing test and fix
  • multi-level fractional power die
  • ghoul/ghast (mostly)
  • extraordinary power actions


  • poison as a trait
  • paralysis power
  • mental actions
  • secret saves
  • disease trait
  • more undead immunities (paralysis/disease)
  • violet fungus
  • tentacle natural weapon
  • construct guard (automaton)
  • extra health for constructs
  • dart/javelin (needed for goblins)
  • container notifies of lighting changes
  • thread per actor window
  • team affiliations
  • user/creature binding


  • IsMaster client handling
  • multiple (closeable) actor windows
  • UI re-organization
  • portrait cache on client
  • initiative visualizer (IsMaster)
  • IsMaster master and any actor prerequisite list
  • auto-turn tracker startup on unfriendly awareness

Annual Roundup 1

It’s been just slightly over a year since any substantive post.  Again, as the sole resource on Guildsmanship (Ikosa Framework), I get more from the coding than from promoting to the small set of people who are even slightly aware I have been coding the D20 system (v3.5) for the past decade (or so).


Last January: more furnishing things (mostly model generation)

February: even more furnishing things such as drawers and doors opening, UI workshop, in-game manipulation actions; ended with some drawing optimizations in the workshop and client

March: continuing on optimizations

April: even more optimizations (it’s easy to get addicted to performance numbers!)

May: got back into furnishing movement (push/pull/slide/rotate); also got into climbing, moving on furniture; and UI bound jump-down and hop-up actions

June: (slow month) but I added a new ModelCacheSelector; and here’s a quoted comment from a check-in: “Furnishing default implementations tend towards solid convex cuboids
overrides for hollow/cabinet/surface mainly change covered face exposures” (which I think was a refactoring to a base-class so I didn’t have to copy/implement certain geometry features)

I’ll add some more later today while I’m on a roll.

TFS Changeset Count

Lest I appear idle due to a lack of posts…

2016-01-27 (2)

And a small sample of the check-ins over the past few weeks:

2016-01-27 (3)

Since August…

Spell components (component pouch, devotional symbol and verbal).

Map redraw on invisibility state changes.

Creatures: bugbear, hobgoblin, orc, kobold, half-orc, gnoll, ogre, grimlock (light-sensitivity, weapon proficiencies, giant-type)

Classes: barbarian, rogue, ranger

Tacticals and class-features: evasion, improved evasion, rage, trap-sense, sneak-attack, uncanny-dodge, flanking, overrun, legal-position checks

Prerequisites now part of LocalViewer instead of a docked tool window, fixed some minor problems with responsiveness of controls,

Made single option, check and save prerequisites work with button arrays instead of combo-boxes.

Fixed poisonous natural weapon process flow and binding on spider’s bite attack.

I also spent some time working on trying to work out non-tactical settings and regional settings; but nothing that I can add into the core of the experience just yet.


It’s been a few months since I’ve posted, but I’ve had over a hundred code check-ins since then.  A quick round-up is in order:

For the first week after my last post I was debugging, performance tweaking and refactoring a lot, trying to cleanup some code and get the system to behave more like I’d expect as a user.  One of the major “new” accomplishments from that week was getting the spider to climb on the ceiling, and before two weeks were out, climbing around corners and fixing some client window issues.

Early June had some fixes to the workshop (and support functions in the core) for room editing and light propagation through room links.  The bulk of June into early July was working on movement-related things such as multi-step movement targeting which involves picking a cell in the distance (using target selection) and moving towards it with a single UI command; as both an alternative to single-stepping, but as a requirement for overrun and tumble through (as well as jump).  I basically had to rework the single-step movements to be a “degenerate” case of multi-step to get the whole system to be relatively streamlined.

June also saw the beginnings of my refactoring for VS 2015 (using the Community Edition Release Candidate).

By about July 26th I was experiencing a small amount of movement burnout (since I still hadn’t completely worked through overrun, tumble and bull-rush like I intended, let alone jump, run or charge).  And moved on to some other things.