anchor.diff:    ground := ground + THOUGHT_X_OFFSET;
   
     InterpOffset := GetThoughtInterpSpriteOffset(Thought);
  +
  +  //While in development disable interpolation if the sprite is missing
  +  if (InterpOffset >= 1) and ((InterpOffset >= fRXData[rxUnits].Count) or (fRXData[rxUnits].Size[InterpOffset].X = 0)) then
  +    InterpOffset := -1;
   
     // Thought bubbles are animated in reverse
     AnimCount := THOUGHT_BOUNDS[Thought, 2] - THOUGHT_BOUNDS[Thought, 1];
  
positive.code:   -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1);
  var
    A: TKMAnimLoop;
  begin
    A := gMapElements[aTree].Anim;
    if INTERPOLATED_ANIMS and (aTree <= High(TREE_INTERP_LOOKUP)) and (TREE_INTERP_LOOKUP[aTree] > 0) then
    begin
      Result := TREE_INTERP_LOOKUP[aTree]
        + INTERP_LEVEL*(aStep mod Byte(A.Count));
  
      //For the last step of non-looping animations, skip the interp
      if aLoop or ((aStep mod Byte(A.Count)) < A.Count-1) then
        Result := Result + EnsureRange(Floor(INTERP_LEVEL*aStepFrac), 0, INTERP_LEVEL-1);
    end
    else
    begin
      Result := A.Step[aStep mod Byte(A.Count) +1]+1;
    end;
  end;
  
  
  
negative.code: 
      function GetUnitAnimSprite(aUnit: TKMUnitType; aAct: TKMUnitActionType; aDir: TKMDirection; aStep: Integer; aStepFrac: Single): Integer;
      function GetUnitAnimSpriteByPercent(aUnit: TKMUnitType; aAct: TKMUnitActionType; aDir: TKMDirection; aPercent: Single): Integer;
      function GetTreeAnimSprite(aTree, aStep: Integer; aStepFrac: Single; aLoop: Boolean): Integer;
  
      procedure ApplyTransform;
      procedure SetDefaultRenderParams;
  