code: protected void updateActionFrames ()
      {
          // get a reference to the action sequence so that we can obtain
          // our animation frames and configure our frames per second
          ActionSequence actseq = _charmgr.getActionSequence(_action);
          if (actseq == null) {
              String errmsg = "No such action '" + _action + "'.";
              throw new IllegalArgumentException(errmsg);
          }
  
          try {
              // obtain our animation frames for this action sequence
              _aframes = _charmgr.getActionFrames(_descrip, _action);
  
              // clear out our frames so that we recomposite on next tick
              _frames = null;
  
              // update the sprite render attributes
              setFrameRate(actseq.framesPerSecond);
  
          } catch (NoSuchComponentException nsce) {
              log.warning("Character sprite references non-existent component",
                  "sprite", this, "err", nsce);
  
          } catch (Exception e) {
              log.warning("Failed to obtain action frames",
                  "sprite", this, "descrip", _descrip, "action", _action, e);
          }
      }
docs: Rebuilds our action frames given our current character descriptor and action sequence. This
  is called when either of those two things changes.