commit 8ab435b927410830477caeeaa5c868fe532d3024
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Oct 4 22:11:39 2021 +0200

    1. Remove 'db level' from objectlib (this belongs to the app!)
    2. change ScreenPlay's 'mObject' to be an ObjectType.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
index 3820317d..d9049a34 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogNewRecord.java
@@ -38,6 +38,7 @@ import android.widget.TextView;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.network.RubikScores;
+import org.distorted.objectlib.main.ObjectType;
 import org.distorted.screens.ScreenList;
 import org.distorted.screens.RubikScreenPlay;
 
@@ -79,9 +80,9 @@ public class RubikDialogNewRecord extends AppCompatDialogFragment
         if( name.length()>0 )
           {
           RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-          int object = play.getObject();
+          ObjectType object = play.getObject();
 
-          bundle.putInt("tab", object );
+          bundle.putInt("tab", object.ordinal() );
           bundle.putBoolean("submitting", true);
 
           RubikDialogScores scoresDiag = new RubikDialogScores();
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java b/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
index b8dc0df3..962de79b 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
@@ -109,6 +109,7 @@ class RubikDialogScoresPagerAdapter extends PagerAdapter implements RubikNetwork
     {
     prepareView();
 
+    ObjectType[] types = ObjectType.values();
     int MAX = RubikScreenPlay.LEVELS_SHOWN;
     int toDo=0;
     int[] toDoTab = new int[mNumTabs];
@@ -117,7 +118,7 @@ class RubikDialogScoresPagerAdapter extends PagerAdapter implements RubikNetwork
 
     for(int i=0; i<mNumTabs; i++)
       {
-      lastTab[i]= ObjectType.getDBLevel(i);
+      lastTab[i]= RubikScreenPlay.getDBLevel(types[i]);
       maxTab[i] = Math.min(lastTab[i],MAX);
       toDoTab[i]= 0;
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
index a085b3fc..59ef6dad 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogSetName.java
@@ -148,7 +148,7 @@ public class RubikDialogSetName extends AppCompatDialogFragment
           RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
 
           Bundle bundle = new Bundle();
-          bundle.putInt("tab", play.getObject() );
+          bundle.putInt("tab", play.getObject().ordinal() );
           bundle.putBoolean("submitting", true);
 
           RubikDialogScores scores = new RubikDialogScores();
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
index d592a1b2..8e496528 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogTutorialView.java
@@ -76,7 +76,7 @@ public class RubikDialogTutorialView extends FrameLayout
     String packageName = act.getPackageName();
 
     TutorialList list  = TutorialList.getObject(position);
-    ObjectType objList = list.getObjectList();
+    ObjectType objType = list.getObject();
 
     View tab = inflate( act, R.layout.dialog_tutorial_tab, null);
     LinearLayout layout = tab.findViewById(R.id.tabLayout);
@@ -92,7 +92,7 @@ public class RubikDialogTutorialView extends FrameLayout
 
       int countryID = res.getIdentifier( coun, "drawable", packageName);
 
-      View row = createRow(ract,countryID,desc,url,auth,widthT,objList);
+      View row = createRow(ract,countryID,desc,url,auth,widthT,objType);
       layout.addView(row);
       }
 
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index ee4466a0..5fc2bd1b 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -272,24 +272,10 @@ public class RubikActivity extends TwistyActivity
         scores.setCountry(this);
         }
 
-      boolean success = false;
       RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-      int object = play.getObject();
-
-      if( object>=0 && object< ObjectType.NUM_OBJECTS )
-        {
-        success = true;
-        ObjectType nextObj = ObjectType.values()[object];
-        view.getPreRender().changeObject(nextObj);
-        }
-
-      if( !success )
-        {
-        ObjectType obj = ObjectType.getObject(RubikScreenPlay.DEF_OBJECT);
-        play.setObject(this,obj);
-        view.getPreRender().changeObject(obj);
-        }
-
+      ObjectType object = play.getObject();
+      view.getPreRender().changeObject(object);
+      
       if( mIsChinese && !mPolicyAccepted ) PrivacyPolicy();
       }
     
diff --git a/src/main/java/org/distorted/main/RubikObjectStateActioner.java b/src/main/java/org/distorted/main/RubikObjectStateActioner.java
index 1b411225..91693e8b 100644
--- a/src/main/java/org/distorted/main/RubikObjectStateActioner.java
+++ b/src/main/java/org/distorted/main/RubikObjectStateActioner.java
@@ -81,16 +81,14 @@ public class RubikObjectStateActioner implements ObjectStateActioner
 
   private void reportRecord(TwistyActivity act, String debug, int scrambleNum)
     {
-    RubikActivity ract = (RubikActivity)act;
-    RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    RubikScores scores = RubikScores.getInstance();
-
-    int object      = play.getObject();
-    int level       = play.getLevel();
-    ObjectType list = ObjectType.getObject(object);
-    String name     = scores.getName();
-
-    String record = list.name()+" level "+level+" time "+mNewRecord+" isNew: "+mIsNewRecord+" scrambleNum: "+scrambleNum;
+    RubikActivity ract  = (RubikActivity)act;
+    RubikScreenPlay play= (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
+    RubikScores scores  = RubikScores.getInstance();
+    ObjectType object   = play.getObject();
+    int level           = play.getLevel();
+    String name         = scores.getName();
+
+    String record = object.name()+" level "+level+" time "+mNewRecord+" isNew: "+mIsNewRecord+" scrambleNum: "+scrambleNum;
 
     if( BuildConfig.DEBUG )
        {
diff --git a/src/main/java/org/distorted/network/RubikNetwork.java b/src/main/java/org/distorted/network/RubikNetwork.java
index 2a104813..0cad0712 100644
--- a/src/main/java/org/distorted/network/RubikNetwork.java
+++ b/src/main/java/org/distorted/network/RubikNetwork.java
@@ -36,7 +36,7 @@ import androidx.fragment.app.FragmentActivity;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.objectlib.main.ObjectType;
 
-import static org.distorted.objectlib.main.ObjectType.MAX_LEVEL;
+import static org.distorted.screens.RubikScreenPlay.MAX_LEVEL;
 import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -458,6 +458,22 @@ public class RubikNetwork implements Runnable
     return url;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private static String getObjectList()
+    {
+    StringBuilder list = new StringBuilder();
+    ObjectType[] objects = ObjectType.values();
+
+    for(int i=0; i<NUM_OBJECTS; i++)
+      {
+      if( i>0 ) list.append(',');
+      list.append(objects[i].name());
+      }
+
+    return list.toString();
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private String constructDownloadURL()
@@ -471,7 +487,7 @@ public class RubikNetwork implements Runnable
 
     String url="https://distorted.org/magic/cgi-bin/download.cgi";
     url += "?n="+name+"&v="+veri+"&r="+numRuns+"&p="+numPlay+"&c="+country+"&e="+mVersion+"d";
-    url += "&o="+ ObjectType.getObjectList()+"&min=0&max="+MAX_LEVEL+"&l="+MAX_PLACES;
+    url += "&o="+getObjectList()+"&min=0&max="+MAX_LEVEL+"&l="+MAX_PLACES;
 
     return url;
     }
@@ -501,7 +517,7 @@ public class RubikNetwork implements Runnable
     String url1="https://distorted.org/magic/cgi-bin/submit.cgi";
     String url2 = "n="+name+"&v="+veri+"&r="+numRuns+"&p="+numPlay+"&i="+deviceID+"&e="+mVersion+"d";
     url2 += "&d="+renderer+"&s="+version;
-    url2 += reclist+"&c="+country+"&f="+epoch+"&oo="+ ObjectType.getObjectList();
+    url2 += reclist+"&c="+country+"&f="+epoch+"&oo="+getObjectList();
     url2 += "&min=0&max="+MAX_LEVEL+"&lo="+MAX_PLACES;
     String hash = computeHash( url2, salt.getBytes() );
 
diff --git a/src/main/java/org/distorted/network/RubikScores.java b/src/main/java/org/distorted/network/RubikScores.java
index 5d9d103b..4da06a63 100644
--- a/src/main/java/org/distorted/network/RubikScores.java
+++ b/src/main/java/org/distorted/network/RubikScores.java
@@ -28,7 +28,7 @@ import android.telephony.TelephonyManager;
 import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
-import static org.distorted.objectlib.main.ObjectType.MAX_LEVEL;
+import static org.distorted.screens.RubikScreenPlay.MAX_LEVEL;
 
 import org.distorted.objectlib.main.ObjectType;
 
diff --git a/src/main/java/org/distorted/patterns/RubikPatternList.java b/src/main/java/org/distorted/patterns/RubikPatternList.java
index c8a5e8ea..dae703d7 100644
--- a/src/main/java/org/distorted/patterns/RubikPatternList.java
+++ b/src/main/java/org/distorted/patterns/RubikPatternList.java
@@ -72,11 +72,11 @@ public enum RubikPatternList
 // PUBLIC API
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static int getOrdinal(int object)
+  public static int getOrdinal(ObjectType object)
     {
     for(int i=0; i<NUM_OBJECTS; i++)
       {
-      if( objects[i].mObject.ordinal() == object )
+      if( objects[i].mObject == object )
         {
         return i;
         }
diff --git a/src/main/java/org/distorted/screens/RubikScreenAbstract.java b/src/main/java/org/distorted/screens/RubikScreenAbstract.java
index e7a3697c..7ccfa647 100644
--- a/src/main/java/org/distorted/screens/RubikScreenAbstract.java
+++ b/src/main/java/org/distorted/screens/RubikScreenAbstract.java
@@ -22,6 +22,7 @@ package org.distorted.screens;
 import android.content.SharedPreferences;
 
 import org.distorted.main.RubikActivity;
+import org.distorted.objectlib.main.ObjectType;
 import org.distorted.patterns.RubikPatternList;
 import org.distorted.tutorials.TutorialList;
 
@@ -32,7 +33,7 @@ public abstract class RubikScreenAbstract
   int getPatternOrdinal()
     {
     RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    int obj  = play.getObject();
+    ObjectType obj  = play.getObject();
     int ret = RubikPatternList.getOrdinal(obj);
 
     if( ret<0 )
@@ -48,7 +49,7 @@ public abstract class RubikScreenAbstract
   int getTutorialOrdinal()
     {
     RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-    int obj  = play.getObject();
+    ObjectType obj  = play.getObject();
 
     int ret = TutorialList.getOrdinal(obj);
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenPattern.java b/src/main/java/org/distorted/screens/RubikScreenPattern.java
index 1c06d48e..2d88a2c0 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPattern.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPattern.java
@@ -67,9 +67,7 @@ public class RubikScreenPattern extends RubikScreenAbstract
 
     if( !play.setObject(act,object) )
       {
-      int objectPlay= play.getObject();
-
-      act.changeObject(ObjectType.getObject(objectPlay),false);
+      act.changeObject(play.getObject(),false);
       }
     }
 
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index 1c7891ce..65b75e85 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -54,7 +54,8 @@ public class RubikScreenPlay extends RubikScreenBase
   {
   public static final int NUM_COLUMNS  = 4;
   public static final int LEVELS_SHOWN = 10;
-  public static final int DEF_OBJECT= ObjectType.CUBE_3.ordinal();
+  public static int MAX_LEVEL;
+  public static final ObjectType DEF_OBJECT= ObjectType.CUBE_3;
 
   private static final int[] BUTTON_LABELS = { R.string.scores,
                                                R.string.patterns,
@@ -70,7 +71,7 @@ public class RubikScreenPlay extends RubikScreenBase
   private ImageButton mObjButton, mMenuButton, mSolveButton;
   private Button mPlayButton;
   private PopupWindow mObjectPopup, mMenuPopup, mPlayPopup;
-  private int mObject = DEF_OBJECT;
+  private ObjectType mObject = DEF_OBJECT;
   private int mObjectSize, mMenuLayoutWidth, mMenuLayoutHeight, mPlayLayoutWidth;
   private int mLevelValue;
   private float mButtonSize, mMenuItemSize, mMenuTextSize;
@@ -78,6 +79,20 @@ public class RubikScreenPlay extends RubikScreenBase
   private LinearLayout mPlayLayout;
   private int mUpperBarHeight;
 
+  static
+    {
+    ObjectType[] types = ObjectType.values();
+    int max = Integer.MIN_VALUE;
+
+    for (ObjectType type : types)
+      {
+      int cur = getDBLevel(type);
+      if( cur>max ) max = cur;
+      }
+
+    MAX_LEVEL = max;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void leaveScreen(RubikActivity act)
@@ -120,7 +135,7 @@ public class RubikScreenPlay extends RubikScreenBase
     createBottomPane(act,width,mSolveButton);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void setupObjectButton(final RubikActivity act, final float width)
     {
@@ -163,7 +178,7 @@ public class RubikScreenPlay extends RubikScreenBase
           {
           View popupView = mPlayPopup.getContentView();
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
-          final int dbLevel = ObjectType.getDBLevel(mObject);
+          final int dbLevel = getDBLevel(mObject);
           final int levelsShown = Math.min(dbLevel,LEVELS_SHOWN);
           final int popupHeight = (int)(levelsShown*(mMenuItemSize+margin)+3*margin+mMenuItemSize*(LAST_BUTTON-1.0f));
           final int realHeight = Math.min(popupHeight,maxHeight);
@@ -258,7 +273,7 @@ public class RubikScreenPlay extends RubikScreenBase
           {
           if( act.getPreRender().isUINotBlocked() && ScreenList.getCurrentScreen()== ScreenList.PLAY )
             {
-            mObject = obj;
+            mObject = ObjectType.getObject(obj);
             act.changeObject(list, true);
             adjustLevels(act);
             mMovesController.clearMoves(act);
@@ -344,10 +359,8 @@ public class RubikScreenPlay extends RubikScreenBase
     {
     switch(button)
       {
-      case 0: RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-              int object = play.getObject();
-              Bundle sBundle = new Bundle();
-              sBundle.putInt("tab", object );
+      case 0: Bundle sBundle = new Bundle();
+              sBundle.putInt("tab", mObject.ordinal() );
               sBundle.putBoolean("submitting", false);
               RubikDialogScores scores = new RubikDialogScores();
               scores.setArguments(sBundle);
@@ -403,7 +416,7 @@ public class RubikScreenPlay extends RubikScreenBase
 
   public void savePreferences(SharedPreferences.Editor editor)
     {
-    editor.putInt("statePlay_object", mObject);
+    editor.putString("statePlay_objName", mObject.name() );
 
     if( mObjectPopup!=null )
       {
@@ -428,23 +441,18 @@ public class RubikScreenPlay extends RubikScreenBase
 
   public void restorePreferences(SharedPreferences preferences)
     {
-    mObject= preferences.getInt("statePlay_object", DEF_OBJECT);
-    int dbLevel = ObjectType.getDBLevel(mObject);
-
-    // This means the app has been upgraded to a new version which swapped the
-    // Object for a new one with larger sizeIndex and now getMaxLevel() returns
-    // 0. Reset the object to default, otherwise we'll get a crash later on.
-
-    if( dbLevel==0 ) mObject = DEF_OBJECT;
+    String objName= preferences.getString("statePlay_objName", DEF_OBJECT.name() );
+    int ordinal = ObjectType.getOrdinal(objName);
+    mObject = ordinal>=0 ? ObjectType.values()[ordinal] : DEF_OBJECT;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public boolean setObject(RubikActivity act, ObjectType obj)
     {
-    if( mObject!=obj.ordinal() )
+    if( mObject!=obj )
       {
-      mObject = obj.ordinal();
+      mObject = obj;
       if( mPlayLayout!=null ) adjustLevels(act);
       return true;
       }
@@ -493,8 +501,8 @@ public class RubikScreenPlay extends RubikScreenBase
 
   private void adjustLevels(final RubikActivity act)
     {
-    int dbLevel = ObjectType.getDBLevel(mObject);
-    int numScrambles = ObjectType.getNumScramble(mObject);
+    int dbLevel = getDBLevel(mObject);
+    int numScrambles = ObjectType.getNumScramble(mObject.ordinal());
     int numLevel = Math.min(dbLevel, LEVELS_SHOWN);
     String[] levels = new String[numLevel];
 
@@ -541,7 +549,7 @@ public class RubikScreenPlay extends RubikScreenBase
       button.setText(levels[i]);
       button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
 
-      int icon = scores.isSolved(mObject, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
+      int icon = scores.isSolved(mObject.ordinal(), level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
       button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
 
       button.setOnClickListener( new View.OnClickListener()
@@ -564,6 +572,33 @@ public class RubikScreenPlay extends RubikScreenBase
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// historically older versions of the app had lower 'maxScrambles' in case of several objects and
+// those got remembered in the server-side DB already, so we need to keep using them. This function
+// provides a map between 'maxScramble' of an object and its 'dbLevel'. All new objects will have
+// those two values the same.
+
+  public static int getDBLevel(ObjectType object)
+    {
+    switch(object)
+      {
+      case CUBE_3: return 16;
+      case CUBE_4: return 20;
+      case CUBE_5: return 24;
+      case PYRA_4: return 14;
+      case PYRA_5: return 20;
+      case MEGA_5: return 35;
+      case DIAM_2: return 10;
+      case DIAM_3: return 18;
+      case REDI_3: return 14;
+      case HELI_3: return 18;
+      case SKEW_3: return 17;
+      case REX_3 : return 16;
+      case MIRR_3: return 16;
+      default    : return ObjectType.getNumScramble(object.ordinal());
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int getLevel()
@@ -573,7 +608,7 @@ public class RubikScreenPlay extends RubikScreenBase
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObject()
+  public ObjectType getObject()
     {
     return mObject;
     }
diff --git a/src/main/java/org/distorted/screens/RubikScreenSolving.java b/src/main/java/org/distorted/screens/RubikScreenSolving.java
index 8395c62e..914c0f68 100644
--- a/src/main/java/org/distorted/screens/RubikScreenSolving.java
+++ b/src/main/java/org/distorted/screens/RubikScreenSolving.java
@@ -35,6 +35,7 @@ import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
 import org.distorted.main.RubikActivity;
 import org.distorted.network.RubikScores;
+import org.distorted.objectlib.main.ObjectType;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -185,9 +186,9 @@ public class RubikScreenSolving extends RubikScreenBase
       mElapsed = System.currentTimeMillis()-mStartTime;
 
       RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-      int object  = play.getObject();
+      ObjectType object  = play.getObject();
       int level   = play.getLevel();
-      boolean isNew = mScores.setRecord(object, level, mElapsed);
+      boolean isNew = mScores.setRecord(object.ordinal(), level, mElapsed);
 
       return isNew ? mElapsed : -mElapsed;
       }
diff --git a/src/main/java/org/distorted/tutorials/TutorialList.java b/src/main/java/org/distorted/tutorials/TutorialList.java
index 80daf4f3..ff349465 100644
--- a/src/main/java/org/distorted/tutorials/TutorialList.java
+++ b/src/main/java/org/distorted/tutorials/TutorialList.java
@@ -443,16 +443,16 @@ public enum TutorialList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static int getOrdinal(int object)
+  public static int getOrdinal(ObjectType object)
     {
-    if( object== ObjectType.DIN4_3.ordinal() )
+    if( object== ObjectType.DIN4_3 )
       {
-      object= ObjectType.DINO_3.ordinal();
+      object= ObjectType.DINO_3;
       }
 
     for(int i=0; i<NUM_OBJECTS; i++)
       {
-      if( objects[i].mObject.ordinal() == object )
+      if( objects[i].mObject == object )
         {
         return i;
         }
@@ -463,7 +463,7 @@ public enum TutorialList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public ObjectType getObjectList()
+  public ObjectType getObject()
     {
     return mObject;
     }
diff --git a/src/main/java/org/distorted/tutorials/TutorialScreen.java b/src/main/java/org/distorted/tutorials/TutorialScreen.java
index 084424ee..815c6d70 100644
--- a/src/main/java/org/distorted/tutorials/TutorialScreen.java
+++ b/src/main/java/org/distorted/tutorials/TutorialScreen.java
@@ -74,7 +74,8 @@ public class TutorialScreen
       public void onClick(View v)
         {
         RubikScreenPlay play = (RubikScreenPlay) ScreenList.PLAY.getScreenClass();
-        int numScrambles = ObjectType.getNumScramble(play.getObject());
+        int ordinal = play.getObject().ordinal();
+        int numScrambles = ObjectType.getNumScramble(ordinal);
         act.getPreRender().scrambleObject(numScrambles);
         }
       });
