commit ecf3d6e3dda9fe35b3e440c99be75a4af169bde6
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Oct 5 23:38:15 2021 +0200

    1) introduce possibility to move objects, i.e. display them not in the middle of the screen (not fully functional yet)
    2) do away with unneeded any more interface 'EffectController' - since ObjectPreRender is the only implementation now.

diff --git a/src/main/java/org/distorted/objectlib/effects/BaseEffect.java b/src/main/java/org/distorted/objectlib/effects/BaseEffect.java
index 64131db1..f42366ce 100644
--- a/src/main/java/org/distorted/objectlib/effects/BaseEffect.java
+++ b/src/main/java/org/distorted/objectlib/effects/BaseEffect.java
@@ -30,6 +30,7 @@ import org.distorted.objectlib.effects.objectchange.ObjectChangeEffect;
 import org.distorted.objectlib.effects.solve.SolveEffect;
 import org.distorted.objectlib.effects.win.WinEffect;
 import org.distorted.objectlib.R;
+import org.distorted.objectlib.main.ObjectPreRender;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -197,17 +198,17 @@ public class BaseEffect
 
   ////////////////////////////////////////////////////////////////////////////////
 
-    public long startEffect(DistortedScreen screen, EffectController cont) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
+    public long startEffect(DistortedScreen screen, ObjectPreRender pre) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
       {
       Method method1 = mClass.getDeclaredMethod("create", int.class);
 
       Object value1 = method1.invoke(null,mCurrentType);
       BaseEffect baseEffect = (BaseEffect)value1;
 
-      Method method2 = mClass.getDeclaredMethod("start", int.class, DistortedScreen.class, EffectController.class);
+      Method method2 = mClass.getDeclaredMethod("start", int.class, DistortedScreen.class, ObjectPreRender.class);
 
       Integer translated = translatePos(mCurrentPos)+1;
-      Object value2 = method2.invoke(baseEffect,translated,screen,cont);
+      Object value2 = method2.invoke(baseEffect,translated,screen,pre);
       return (Long)value2;
       }
 
diff --git a/src/main/java/org/distorted/objectlib/effects/EffectController.java b/src/main/java/org/distorted/objectlib/effects/EffectController.java
deleted file mode 100644
index 8f083e13..00000000
--- a/src/main/java/org/distorted/objectlib/effects/EffectController.java
+++ /dev/null
@@ -1,35 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright 2020 Leszek Koltunski                                                               //
-//                                                                                               //
-// This file is part of Magic Cube.                                                              //
-//                                                                                               //
-// Magic Cube is free software: you can redistribute it and/or modify                            //
-// it under the terms of the GNU General Public License as published by                          //
-// the Free Software Foundation, either version 2 of the License, or                             //
-// (at your option) any later version.                                                           //
-//                                                                                               //
-// Magic Cube is distributed in the hope that it will be useful,                                 //
-// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
-// GNU General Public License for more details.                                                  //
-//                                                                                               //
-// You should have received a copy of the GNU General Public License                             //
-// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-package org.distorted.objectlib.effects;
-
-import org.distorted.library.message.EffectListener;
-import org.distorted.objectlib.main.TwistyObject;
-import org.distorted.objectlib.helpers.MovesFinished;
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-public interface EffectController extends EffectListener
-  {
-  void addRotation(MovesFinished listener, int axis, int rowBitmap, int angle, int millisPerDegree);
-  TwistyObject getOldObject();
-  TwistyObject getObject();
-  int getNumScrambles();
-  void solveOnly();
-  }
diff --git a/src/main/java/org/distorted/objectlib/effects/objectchange/ObjectChangeEffect.java b/src/main/java/org/distorted/objectlib/effects/objectchange/ObjectChangeEffect.java
index e14e5990..fee13575 100644
--- a/src/main/java/org/distorted/objectlib/effects/objectchange/ObjectChangeEffect.java
+++ b/src/main/java/org/distorted/objectlib/effects/objectchange/ObjectChangeEffect.java
@@ -26,10 +26,9 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.message.EffectListener;
 
+import org.distorted.objectlib.main.ObjectPreRender;
 import org.distorted.objectlib.main.TwistyObject;
-
 import org.distorted.objectlib.effects.BaseEffect;
-import org.distorted.objectlib.effects.EffectController;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -68,7 +67,7 @@ public abstract class ObjectChangeEffect extends BaseEffect implements EffectLis
       }
     }
 
-  private EffectController mController;
+  private ObjectPreRender mPre;
   private int mDuration;
   private final int[] mEffectReturned;
   private final int[] mCubeEffectNumber, mNodeEffectNumber;
@@ -146,7 +145,7 @@ public abstract class ObjectChangeEffect extends BaseEffect implements EffectLis
                 assignEffects(1);
                 mScreen.attach(mObject[1]);
                 break;
-        case 1: mController.effectFinished(FAKE_EFFECT_ID);
+        case 1: mPre.effectFinished(FAKE_EFFECT_ID);
                 break;
         }
       }
@@ -226,12 +225,12 @@ public abstract class ObjectChangeEffect extends BaseEffect implements EffectLis
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @SuppressWarnings("unused")
-  public long start(int duration, DistortedScreen screen, EffectController cont)
+  public long start(int duration, DistortedScreen screen, ObjectPreRender pre)
     {
     mScreen    = screen;
-    mObject[0] = cont.getOldObject();
-    mObject[1] = cont.getObject();
-    mController= cont;
+    mObject[0] = pre.getOldObject();
+    mObject[1] = pre.getObject();
+    mPre       = pre;
     mDuration  = duration;
 
     if( mObject[0]!=null )
diff --git a/src/main/java/org/distorted/objectlib/effects/scramble/ScrambleEffect.java b/src/main/java/org/distorted/objectlib/effects/scramble/ScrambleEffect.java
index b9a601f5..01a63e57 100644
--- a/src/main/java/org/distorted/objectlib/effects/scramble/ScrambleEffect.java
+++ b/src/main/java/org/distorted/objectlib/effects/scramble/ScrambleEffect.java
@@ -27,11 +27,10 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.message.EffectListener;
 
+import org.distorted.objectlib.main.ObjectPreRender;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.objectlib.main.TwistyObject;
-
 import org.distorted.objectlib.effects.BaseEffect;
-import org.distorted.objectlib.effects.EffectController;
 import org.distorted.objectlib.helpers.MovesFinished;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -67,7 +66,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
       }
     }
 
-  private EffectController mController;
+  private ObjectPreRender mPre;
   private int mEffectReturned;
   private int mNumScramblesLeft;
   private int mDurationPerDegree;
@@ -134,13 +133,13 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
       int angle= mScrambles[mNumScrambles][2];
 
       mNumScramblesLeft--;
-      mController.addRotation(this, axis, (1<<row), angle, mDurationPerDegree);
+      mPre.addRotation(this, axis, (1<<row), angle, mDurationPerDegree);
       mNumScrambles++;
       }
     else
       {
       mRotReady = true;
-      if( mPluginReady ) mController.effectFinished(FAKE_EFFECT_ID);
+      if( mPluginReady ) mPre.effectFinished(FAKE_EFFECT_ID);
       }
     }
 
@@ -224,7 +223,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
       disassignEffects();
 
       mPluginReady = true;
-      if( mRotReady ) mController.effectFinished(FAKE_EFFECT_ID);
+      if( mRotReady ) mPre.effectFinished(FAKE_EFFECT_ID);
       }
     }
 
@@ -258,10 +257,10 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @SuppressWarnings("unused")
-  public long start(int duration, DistortedScreen screen, EffectController cont)
+  public long start(int duration, DistortedScreen screen, ObjectPreRender pre)
     {
-    mObject    = cont.getObject();
-    mController= cont;
+    mObject= pre.getObject();
+    mPre   = pre;
 
     // NOT mController.solve() !! This would be a very subtle bug. We need to do this immediately,
     // because here we are already inside the mController.preRender() function (doing 'scrambleObjectNow')
@@ -271,7 +270,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
 
     mBasicAngle = mObject.getBasicAngle();
 
-    int numScrambles = cont.getNumScrambles();
+    int numScrambles = pre.getNumScrambles();
     int dura = (int)(duration*Math.pow(numScrambles,0.66f));
     createBaseEffects(dura,numScrambles);
     createEffects    (dura,numScrambles);
diff --git a/src/main/java/org/distorted/objectlib/effects/solve/SolveEffect.java b/src/main/java/org/distorted/objectlib/effects/solve/SolveEffect.java
index 9a5b29b7..197f6d17 100644
--- a/src/main/java/org/distorted/objectlib/effects/solve/SolveEffect.java
+++ b/src/main/java/org/distorted/objectlib/effects/solve/SolveEffect.java
@@ -26,10 +26,10 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.message.EffectListener;
 
+import org.distorted.objectlib.main.ObjectPreRender;
 import org.distorted.objectlib.main.TwistyObject;
 
 import org.distorted.objectlib.effects.BaseEffect;
-import org.distorted.objectlib.effects.EffectController;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -65,7 +65,7 @@ public abstract class SolveEffect extends BaseEffect implements EffectListener
       }
     }
 
-  private EffectController mController;
+  private ObjectPreRender mPre;
   private int mDuration;
   private int mEffectReturned;
   private final int[] mCubeEffectNumber, mNodeEffectNumber;
@@ -132,11 +132,11 @@ public abstract class SolveEffect extends BaseEffect implements EffectListener
       {
       case 0: mEffectReturned = 0;
               mPhase          = 1;
-              mController.solveOnly();
+              mPre.solveOnly();
               createEffectsPhase1(mDuration);
               assignEffects(mPhase);
               break;
-      case 1: mController.effectFinished(FAKE_EFFECT_ID);
+      case 1: mPre.effectFinished(FAKE_EFFECT_ID);
               break;
       }
     }
@@ -199,12 +199,12 @@ public abstract class SolveEffect extends BaseEffect implements EffectListener
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @SuppressWarnings("unused")
-  public long start(int duration, DistortedScreen screen, EffectController cont)
+  public long start(int duration, DistortedScreen screen, ObjectPreRender pre)
     {
-    mScreen    = screen;
-    mObject    = cont.getObject();
-    mController= cont;
-    mDuration  = duration;
+    mScreen  = screen;
+    mObject  = pre.getObject();
+    mPre     = pre;
+    mDuration= duration;
 
     createEffectsPhase0(mDuration);
     assignEffects(mPhase);
diff --git a/src/main/java/org/distorted/objectlib/effects/win/WinEffect.java b/src/main/java/org/distorted/objectlib/effects/win/WinEffect.java
index cd039024..59340c58 100644
--- a/src/main/java/org/distorted/objectlib/effects/win/WinEffect.java
+++ b/src/main/java/org/distorted/objectlib/effects/win/WinEffect.java
@@ -26,10 +26,9 @@ import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.message.EffectListener;
 
+import org.distorted.objectlib.main.ObjectPreRender;
 import org.distorted.objectlib.main.TwistyObject;
-
 import org.distorted.objectlib.effects.BaseEffect;
-import org.distorted.objectlib.effects.EffectController;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -64,7 +63,7 @@ public abstract class WinEffect extends BaseEffect implements EffectListener
       }
     }
 
-  private EffectController mController;
+  private ObjectPreRender mPre;
   private int mDuration;
   private int mEffectReturned;
   private int mCubeEffectNumber, mNodeEffectNumber;
@@ -144,7 +143,7 @@ public abstract class WinEffect extends BaseEffect implements EffectListener
 
       if( effectID == id )
         {
-        if( ++mEffectReturned == total ) mController.effectFinished(FAKE_EFFECT_ID);
+        if( ++mEffectReturned == total ) mPre.effectFinished(FAKE_EFFECT_ID);
         mObject.remove(id);
         return;
         }
@@ -155,7 +154,7 @@ public abstract class WinEffect extends BaseEffect implements EffectListener
 
       if( effectID == id )
         {
-        if( ++mEffectReturned == total ) mController.effectFinished(FAKE_EFFECT_ID);
+        if( ++mEffectReturned == total ) mPre.effectFinished(FAKE_EFFECT_ID);
         mObject.getEffects().abortById(id);
         return;
         }
@@ -165,12 +164,12 @@ public abstract class WinEffect extends BaseEffect implements EffectListener
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @SuppressWarnings("unused")
-  public long start(int duration, DistortedScreen screen, EffectController cont)
+  public long start(int duration, DistortedScreen screen, ObjectPreRender pre)
     {
-    mScreen    = screen;
-    mObject    = cont.getObject();
-    mController= cont;
-    mDuration  = duration;
+    mScreen   = screen;
+    mObject   = pre.getObject();
+    mPre      = pre;
+    mDuration = duration;
 
     createEffects(mDuration);
     assignEffects();
diff --git a/src/main/java/org/distorted/objectlib/main/ObjectControl.java b/src/main/java/org/distorted/objectlib/main/ObjectControl.java
index df841154..b0564f7d 100644
--- a/src/main/java/org/distorted/objectlib/main/ObjectControl.java
+++ b/src/main/java/org/distorted/objectlib/main/ObjectControl.java
@@ -26,6 +26,7 @@ import android.view.MotionEvent;
 
 import org.distorted.library.main.QuatHelper;
 import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.helpers.BlockController;
@@ -56,6 +57,7 @@ public class ObjectControl
     private Movement mMovement;
     private boolean mDragging, mBeginningRotation, mContinuingRotation;
     private int mScreenWidth, mScreenHeight, mScreenMin;
+    private Static3D mMove;
 
     private float mRotAngle, mInitDistance;
     private float mStartRotX, mStartRotY;
@@ -487,6 +489,12 @@ public class ObjectControl
         }
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Static3D getMove()
+      {
+      return mMove;
+      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // INTERNAL API (for AutomaticControl)
@@ -528,6 +536,7 @@ public class ObjectControl
 
       mPreRender = new ObjectPreRender(act,this,actioner);
       mInterface = actioner;
+      mMove = new Static3D(0,0,0);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -540,6 +549,13 @@ public class ObjectControl
       mPreRender.setScreenSize(width);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setMove(int xmove, int ymove)
+      {
+      mMove = new Static3D(xmove,ymove,0);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void onPause()
diff --git a/src/main/java/org/distorted/objectlib/main/ObjectPreRender.java b/src/main/java/org/distorted/objectlib/main/ObjectPreRender.java
index 2530624e..6062c1b5 100644
--- a/src/main/java/org/distorted/objectlib/main/ObjectPreRender.java
+++ b/src/main/java/org/distorted/objectlib/main/ObjectPreRender.java
@@ -25,17 +25,17 @@ import android.app.Activity;
 import android.content.SharedPreferences;
 
 import org.distorted.library.main.DistortedScreen;
+import org.distorted.library.message.EffectListener;
 
 import org.distorted.objectlib.helpers.ObjectLibInterface;
 import org.distorted.objectlib.effects.BaseEffect;
-import org.distorted.objectlib.effects.EffectController;
 import org.distorted.objectlib.effects.scramble.ScrambleEffect;
 import org.distorted.objectlib.helpers.BlockController;
 import org.distorted.objectlib.helpers.MovesFinished;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-public class ObjectPreRender implements EffectController
+public class ObjectPreRender implements EffectListener
   {
   private final WeakReference<Activity> mAct;
   private final ObjectControl mController;
@@ -104,7 +104,7 @@ public class ObjectPreRender implements EffectController
     if( mOldObject!=null ) mOldObject.releaseResources();
     mOldObject = mNewObject;
 
-    mNewObject = object.create( mController.getQuat(), mAct.get().getResources(), mScreenWidth);
+    mNewObject = object.create( mController.getQuat(), mController.getMove(), mAct.get().getResources(), mScreenWidth);
 
     if( mNewObject!=null )
       {
diff --git a/src/main/java/org/distorted/objectlib/main/ObjectType.java b/src/main/java/org/distorted/objectlib/main/ObjectType.java
index 7a76bf62..4419c2eb 100644
--- a/src/main/java/org/distorted/objectlib/main/ObjectType.java
+++ b/src/main/java/org/distorted/objectlib/main/ObjectType.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -149,7 +150,7 @@ public enum ObjectType
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyObject create(Static4D quat, Resources res, int scrWidth)
+  public TwistyObject create(Static4D quat, Static3D move, Resources res, int scrWidth)
     {
     DistortedTexture texture = new DistortedTexture();
     DistortedEffects effects = new DistortedEffects();
@@ -163,35 +164,35 @@ public enum ObjectType
       case  0:
       case  1:
       case  2:
-      case  3: return new TwistyCube          (size, quat, texture, mesh, effects, res, scrWidth);
-      case  4: return new TwistyJing          (size, quat, texture, mesh, effects, res, scrWidth);
+      case  3: return new TwistyCube          (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case  4: return new TwistyJing          (size, quat, move, texture, mesh, effects, res, scrWidth);
       case  5:
       case  6:
-      case  7: return new TwistyPyraminx      (size, quat, texture, mesh, effects, res, scrWidth);
+      case  7: return new TwistyPyraminx      (size, quat, move, texture, mesh, effects, res, scrWidth);
       case  8:
-      case  9: return new TwistyKilominx      (size, quat, texture, mesh, effects, res, scrWidth);
+      case  9: return new TwistyKilominx      (size, quat, move, texture, mesh, effects, res, scrWidth);
       case 10:
-      case 11: return new TwistyMegaminx      (size, quat, texture, mesh, effects, res, scrWidth);
-      case 12: return new TwistyUltimate      (size, quat, texture, mesh, effects, res, scrWidth);
+      case 11: return new TwistyMegaminx      (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 12: return new TwistyUltimate      (size, quat, move, texture, mesh, effects, res, scrWidth);
       case 13:
       case 14:
-      case 15: return new TwistyDiamond       (size, quat, texture, mesh, effects, res, scrWidth);
-      case 16: return new TwistyDino6         (size, quat, texture, mesh, effects, res, scrWidth);
-      case 17: return new TwistyDino4         (size, quat, texture, mesh, effects, res, scrWidth);
-      case 18: return new TwistyRedi          (size, quat, texture, mesh, effects, res, scrWidth);
-      case 19: return new TwistyHelicopter    (size, quat, texture, mesh, effects, res, scrWidth);
+      case 15: return new TwistyDiamond       (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 16: return new TwistyDino6         (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 17: return new TwistyDino4         (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 18: return new TwistyRedi          (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 19: return new TwistyHelicopter    (size, quat, move, texture, mesh, effects, res, scrWidth);
       case 20:
-      case 21: return new TwistySkewb         (size, quat, texture, mesh, effects, res, scrWidth);
-      case 22: return new TwistyIvy           (size, quat, texture, mesh, effects, res, scrWidth);
-      case 23: return new TwistyRex           (size, quat, texture, mesh, effects, res, scrWidth);
-      case 24: return new TwistyBandagedFused (size, quat, texture, mesh, effects, res, scrWidth);
-      case 25: return new TwistyBandaged2Bar  (size, quat, texture, mesh, effects, res, scrWidth);
-      case 26: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, res, scrWidth);
-      case 27: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, res, scrWidth);
-      case 28: return new TwistySquare1       (size, quat, texture, mesh, effects, res, scrWidth);
-      case 29: return new TwistySquare2       (size, quat, texture, mesh, effects, res, scrWidth);
+      case 21: return new TwistySkewb         (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 22: return new TwistyIvy           (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 23: return new TwistyRex           (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 24: return new TwistyBandagedFused (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 25: return new TwistyBandaged2Bar  (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 26: return new TwistyBandaged3Plate(size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 27: return new TwistyBandagedEvil  (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 28: return new TwistySquare1       (size, quat, move, texture, mesh, effects, res, scrWidth);
+      case 29: return new TwistySquare2       (size, quat, move, texture, mesh, effects, res, scrWidth);
       case 30:
-      case 31: return new TwistyMirror        (size, quat, texture, mesh, effects, res, scrWidth);
+      case 31: return new TwistyMirror        (size, quat, move, texture, mesh, effects, res, scrWidth);
       }
 
     return null;
diff --git a/src/main/java/org/distorted/objectlib/main/Twisty12.java b/src/main/java/org/distorted/objectlib/main/Twisty12.java
index 6c5097fb..bf4bfe55 100644
--- a/src/main/java/org/distorted/objectlib/main/Twisty12.java
+++ b/src/main/java/org/distorted/objectlib/main/Twisty12.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -52,10 +53,10 @@ public abstract class Twisty12 extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public Twisty12(int numLayers, int realSize, Static4D quat, DistortedTexture texture,
+  public Twisty12(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture texture,
                   MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(numLayers, realSize, quat, texture, mesh, effects, res, scrWidth);
+    super(numLayers, realSize, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/main/Twisty4.java b/src/main/java/org/distorted/objectlib/main/Twisty4.java
index ff29b3c7..b21a1ec1 100644
--- a/src/main/java/org/distorted/objectlib/main/Twisty4.java
+++ b/src/main/java/org/distorted/objectlib/main/Twisty4.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -38,10 +39,10 @@ public abstract class Twisty4 extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public Twisty4(int numLayers, int realSize, Static4D quat, DistortedTexture texture,
+  public Twisty4(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture texture,
                  MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(numLayers, realSize, quat, texture, mesh, effects, res, scrWidth);
+    super(numLayers, realSize, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/main/Twisty6.java b/src/main/java/org/distorted/objectlib/main/Twisty6.java
index 3c51743c..5cdbc1dc 100644
--- a/src/main/java/org/distorted/objectlib/main/Twisty6.java
+++ b/src/main/java/org/distorted/objectlib/main/Twisty6.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -39,10 +40,10 @@ public abstract class Twisty6 extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public Twisty6(int numLayers, int realSize, Static4D quat, DistortedTexture texture,
+  public Twisty6(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture texture,
                  MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(numLayers, realSize, quat, texture, mesh, effects, res, scrWidth);
+    super(numLayers, realSize, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/main/Twisty8.java b/src/main/java/org/distorted/objectlib/main/Twisty8.java
index 77d7a657..20b4b65a 100644
--- a/src/main/java/org/distorted/objectlib/main/Twisty8.java
+++ b/src/main/java/org/distorted/objectlib/main/Twisty8.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -40,10 +41,10 @@ public abstract class Twisty8 extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public Twisty8(int numLayers, int realSize, Static4D quat, DistortedTexture texture,
+  public Twisty8(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture texture,
                  MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(numLayers, realSize, quat, texture, mesh, effects, res, scrWidth);
+    super(numLayers, realSize, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/main/TwistyObject.java b/src/main/java/org/distorted/objectlib/main/TwistyObject.java
index e145e6c5..31dd8d01 100644
--- a/src/main/java/org/distorted/objectlib/main/TwistyObject.java
+++ b/src/main/java/org/distorted/objectlib/main/TwistyObject.java
@@ -137,7 +137,7 @@ public abstract class TwistyObject extends DistortedNode
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  TwistyObject(int numLayers, int realSize, Static4D quat, DistortedTexture nodeTexture,
+  TwistyObject(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture nodeTexture,
                MeshSquare nodeMesh, DistortedEffects nodeEffects, Resources res, int screenWidth)
     {
     super(nodeTexture,nodeEffects,nodeMesh);
@@ -204,6 +204,7 @@ public abstract class TwistyObject extends DistortedNode
     mObjectScale = new Static3D(scale,scale,scale);
     MatrixEffectScale scaleEffect = new MatrixEffectScale(mObjectScale);
     MatrixEffectQuaternion quatEffect  = new MatrixEffectQuaternion(quat, CENTER);
+    MatrixEffectMove moveEffect = new MatrixEffectMove(move);
 
     MatrixEffectScale nodeScaleEffect = new MatrixEffectScale(mNodeScale);
     nodeEffects.apply(nodeScaleEffect);
@@ -232,6 +233,7 @@ public abstract class TwistyObject extends DistortedNode
     mEffects.apply(mRotateEffect);
     mEffects.apply(quatEffect);
     mEffects.apply(scaleEffect);
+    mEffects.apply(moveEffect);
 
     // Now postprocessed effects (the glow when you solve an object) require component centers. In
     // order for the effect to be in front of the object, we need to set the center to be behind it.
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
index f0da0fca..50fd5474 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -34,10 +35,10 @@ import org.distorted.objectlib.helpers.ScrambleState;
 
 public class TwistyBandaged2Bar extends TwistyBandagedAbstract
 {
-  public TwistyBandaged2Bar(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                            DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyBandaged2Bar(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                            MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
index 2b0c5fa6..5e72ed82 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -34,10 +35,10 @@ import org.distorted.objectlib.helpers.ScrambleState;
 
 public class TwistyBandaged3Plate extends TwistyBandagedAbstract
 {
-  public TwistyBandaged3Plate(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                              DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyBandaged3Plate(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                              MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java
index a3ce9e79..80f0b740 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java
@@ -79,10 +79,10 @@ abstract class TwistyBandagedAbstract extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  TwistyBandagedAbstract(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                         DistortedEffects effects, Resources res, int scrWidth)
+  TwistyBandagedAbstract(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                         MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
index ac644119..17f2442e 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -34,10 +35,10 @@ import org.distorted.objectlib.helpers.ScrambleState;
 
 public class TwistyBandagedEvil extends TwistyBandagedAbstract
 {
-  public TwistyBandagedEvil(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
+  public TwistyBandagedEvil(int size, Static4D quat, Static3D move, DistortedTexture texture, MeshSquare mesh,
                             DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
index e80f54ff..b4843b05 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -34,10 +35,10 @@ import org.distorted.objectlib.helpers.ScrambleState;
 
 public class TwistyBandagedFused extends TwistyBandagedAbstract
 {
-  public TwistyBandagedFused(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                             DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyBandagedFused(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                             MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyCube.java b/src/main/java/org/distorted/objectlib/objects/TwistyCube.java
index c8544cf8..53abeaab 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyCube.java
@@ -64,10 +64,10 @@ public class TwistyCube extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyCube(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                    DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyCube(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                    MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java b/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
index cb0c4d30..267302b2 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
@@ -68,10 +68,10 @@ public class TwistyDiamond extends Twisty8
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyDiamond(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                       DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyDiamond(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                       MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
index 3bdf806d..647916c5 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
@@ -71,10 +71,10 @@ abstract class TwistyDino extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  TwistyDino(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-             DistortedEffects effects, Resources res, int scrWidth)
+  TwistyDino(int size, Static4D quat, Static3D move, DistortedTexture texture,
+             MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
index 86f0fe6e..f25404d3 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -38,10 +39,10 @@ public class TwistyDino4 extends TwistyDino
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyDino4(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                     DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyDino4(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                     MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
index ee70435f..e2f3901b 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -38,10 +39,10 @@ public class TwistyDino6 extends TwistyDino
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyDino6(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                     DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyDino6(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                     MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
index ea9c86dc..6b4a5cf1 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
@@ -76,10 +76,10 @@ public class TwistyHelicopter extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyHelicopter(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                          DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyHelicopter(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                          MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java b/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
index daffedce..65bc2bae 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
@@ -75,10 +75,10 @@ public class TwistyIvy extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyIvy(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                   DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyIvy(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                   MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyJing.java b/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
index 3d76cdee..cb51e970 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
@@ -72,10 +72,10 @@ public class TwistyJing extends Twisty4
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyJing(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                    DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyJing(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                    MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java b/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
index 87d60f68..134ff575 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
@@ -27,6 +27,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.library.main.QuatHelper;
 
@@ -43,10 +44,10 @@ public class TwistyKilominx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyKilominx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                        DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyKilominx(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                        MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
index 717ecf76..49051288 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
@@ -27,6 +27,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.library.main.QuatHelper;
 
@@ -44,10 +45,10 @@ public class TwistyMegaminx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyMegaminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                        DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyMegaminx(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                        MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyMinx.java b/src/main/java/org/distorted/objectlib/objects/TwistyMinx.java
index dc31f32d..0c56cab5 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyMinx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyMinx.java
@@ -96,10 +96,10 @@ abstract class TwistyMinx extends Twisty12
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture,
+  TwistyMinx(int numLayers, int realSize, Static4D quat, Static3D move, DistortedTexture texture,
              MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(numLayers, realSize, quat, texture, mesh, effects, res, scrWidth);
+    super(numLayers, realSize, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java b/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
index 2a318a7f..17d2e440 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
@@ -86,10 +86,10 @@ public class TwistyMirror extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyMirror(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                      DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyMirror(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                      MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
index 32a5a86f..825b3da4 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
@@ -65,10 +65,10 @@ public class TwistyPyraminx extends Twisty4
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyPyraminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                        DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyPyraminx(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                        MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java b/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
index 46245413..1cf3b11e 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
@@ -72,10 +72,10 @@ public class TwistyRedi extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyRedi(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                    DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyRedi(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                    MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyRex.java b/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
index 3b82d0f6..71bc21d8 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
@@ -73,10 +73,10 @@ public class TwistyRex extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyRex(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                   DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyRex(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                   MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java b/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
index febd649f..cd882f8d 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
@@ -71,10 +71,10 @@ public class TwistySkewb extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistySkewb(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                     DistortedEffects effects, Resources res, int scrWidth)
+  public TwistySkewb(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                     MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, 2*size-2, quat, texture, mesh, effects, res, scrWidth);
+    super(size, 2*size-2, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySquare.java b/src/main/java/org/distorted/objectlib/objects/TwistySquare.java
index 1e7d7fd3..f86ab4a6 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySquare.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySquare.java
@@ -64,10 +64,10 @@ abstract class TwistySquare extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  TwistySquare(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-               DistortedEffects effects, Resources res, int scrWidth)
+  TwistySquare(int size, Static4D quat, Static3D move, DistortedTexture texture,
+               MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java b/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
index 892e2154..83c48315 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -47,10 +48,10 @@ public class TwistySquare1 extends TwistySquare
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistySquare1(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                       DistortedEffects effects, Resources res, int scrWidth)
+  public TwistySquare1(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                       MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java b/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
index bf89a44a..88562577 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
@@ -24,6 +24,7 @@ import android.content.res.Resources;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshSquare;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
 import org.distorted.objectlib.R;
@@ -47,10 +48,10 @@ public class TwistySquare2 extends TwistySquare
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistySquare2(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                       DistortedEffects effects, Resources res, int scrWidth)
+  public TwistySquare2(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                       MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java b/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
index 4d4a3065..fab47383 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
@@ -76,10 +76,10 @@ public class TwistyUltimate extends Twisty12
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public TwistyUltimate(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
-                        DistortedEffects effects, Resources res, int scrWidth)
+  public TwistyUltimate(int size, Static4D quat, Static3D move, DistortedTexture texture,
+                        MeshSquare mesh, DistortedEffects effects, Resources res, int scrWidth)
     {
-    super(size, size, quat, texture, mesh, effects, res, scrWidth);
+    super(size, size, quat, move, texture, mesh, effects, res, scrWidth);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
