commit e26eb4e7868d2871fb60933ae80ed9e6953619a2
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Oct 22 16:49:37 2021 +0200

    Do not pull the inventors and the names of objects from Resources.

diff --git a/src/main/java/org/distorted/objectlib/json/JsonWriter.java b/src/main/java/org/distorted/objectlib/json/JsonWriter.java
new file mode 100644
index 00000000..d3036d61
--- /dev/null
+++ b/src/main/java/org/distorted/objectlib/json/JsonWriter.java
@@ -0,0 +1,527 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright 2021 Leszek Koltunski                                                               //
+//                                                                                               //
+// This file is part of Distorted.                                                               //
+//                                                                                               //
+// Distorted 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.                                                           //
+//                                                                                               //
+// Distorted 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 Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.distorted.objectlib.json;
+
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.objectlib.helpers.ObjectShape;
+import org.distorted.objectlib.helpers.ObjectSticker;
+import org.distorted.objectlib.helpers.ScrambleState;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import org.distorted.objectlib.main.TwistyObject;
+import org.distorted.objectlib.main.ObjectType;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+public class JsonWriter
+{
+  private static final int VERSION_MAJOR = 1;
+  private static final int VERSION_MINOR = 0;
+
+  private static JsonWriter mThis;
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JsonWriter()
+    {
+
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateCubits(TwistyObject object) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+
+    int[] numLayers     = object.getNumLayers();
+    float[][] positions = object.getCubitPositions(numLayers);
+    int numCubits = positions.length;
+    int numFaces = object.getNumCubitFaces();
+
+    for(int i=0; i<numCubits; i++)
+      {
+      JSONObject cubit = new JSONObject();
+      Static4D rotQuat  = object.getQuat(i,numLayers);
+      int variant       = object.getCubitVariant(i,numLayers);
+      int[] solvedQuats = object.getSolvedQuats(i,numLayers);
+
+      JSONArray pos = new JSONArray();
+      int numPos = positions[i].length;
+      for(int j=0; j<numPos; j++) pos.put(positions[i][j]);
+      cubit.put("centers", pos);
+      cubit.put("qx", rotQuat.get0() );
+      cubit.put("qy", rotQuat.get1() );
+      cubit.put("qz", rotQuat.get2() );
+      cubit.put("qw", rotQuat.get3() );
+      cubit.put("variant", variant );
+
+      if( solvedQuats!=null )
+        {
+        JSONArray solved = new JSONArray();
+        for (int solvedQuat : solvedQuats) solved.put(solvedQuat);
+        cubit.put("solvedQuats",solved);
+        }
+
+      JSONArray colors = new JSONArray();
+
+      for(int j=0; j<numFaces; j++)
+        {
+        int cubColor = object.getCubitFaceColor(i,j,numLayers);
+        colors.put(cubColor);
+        }
+      cubit.put("colors",colors);
+
+      array.put(cubit);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateCorners(float[][] corners) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+
+    for(float[] c : corners)
+      {
+      JSONObject corner = new JSONObject();
+      corner.put("strength", c[0]);
+      corner.put("radius"  , c[1]);
+      array.put(corner);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateCenters(float[][] centers) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+
+    for(float[] c : centers)
+      {
+      JSONObject center = new JSONObject();
+      center.put("x", c[0]);
+      center.put("y", c[1]);
+      center.put("z", c[2]);
+      array.put(center);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateBands(float[][] bands) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+
+    for (float[] b : bands)
+      {
+      JSONObject band = new JSONObject();
+      band.put("height"          , b[0]);
+      band.put("angle"           , b[1]);
+      band.put("distanceToCenter", b[2]);
+      band.put("distanceToFlat"  , b[3]);
+      band.put("numOfBands"      , b[4]);
+      band.put("extraI"          , b[5]);
+      band.put("extraJ"          , b[6]);
+      array.put(band);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateFaces(TwistyObject object, int[][] vertIndices, int[] bandIndices, int cubit, int[] numLayers) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+    int numFaces = vertIndices.length;
+    int variant = object.getCubitVariant(cubit,numLayers);
+
+    for(int i=0; i<numFaces; i++)
+      {
+      JSONObject face = new JSONObject();
+      face.put("bandIndex", bandIndices[i]);
+
+      int sticker = object.getVariantFaceColor(variant,i,numLayers);
+      face.put("sticker",sticker);
+
+      JSONArray vertArr = new JSONArray();
+      int numV = vertIndices[i].length;
+      for(int j=0; j<numV; j++) vertArr.put(vertIndices[i][j]);
+      face.put("vertexIndices",vertArr);
+
+      array.put(face);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateVertices(double[][] vertices, int[] cornerIndices, int[] centerIndices) throws JSONException
+    {
+    JSONArray array = new JSONArray();
+    int numVertices = vertices.length;
+
+    for(int j=0; j<numVertices; j++)
+      {
+      JSONObject vert = new JSONObject();
+      vert.put("x", vertices[j][0]);
+      vert.put("y", vertices[j][1]);
+      vert.put("z", vertices[j][2]);
+      vert.put("cornerIndex", cornerIndices[j]);
+      vert.put("centerIndex", centerIndices[j]);
+      array.put(vert);
+      }
+
+    return array;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONObject generateConvexity(float[] convexity) throws JSONException
+    {
+    JSONObject object = new JSONObject();
+    object.put("x", convexity[0]);
+    object.put("y", convexity[1]);
+    object.put("z", convexity[2]);
+    return object;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private int findCubitWithVariant(TwistyObject object, int variant, int numCubits, int[] numLayers)
+    {
+    for(int i=0; i<numCubits; i++)
+      {
+      if( object.getCubitVariant(i,numLayers)==variant ) return i;
+      }
+
+    return -1;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateShapes(TwistyObject object) throws JSONException
+    {
+    JSONArray shapes = new JSONArray();
+
+    int[] numLayers = object.getNumLayers();
+    int numVariants = object.getNumCubitVariants(numLayers);
+    float[][] positions = object.getCubitPositions(numLayers);
+    int numCubits = positions.length;
+
+    for(int i=0; i<numVariants; i++)
+      {
+      JSONObject shapeObj = new JSONObject();
+
+      ObjectShape shape = object.getObjectShape(i);
+
+      float[] convexity  = shape.getConvexityCenter();
+      double[][] vertices= shape.getVertices();
+      int[][] vertIndices= shape.getVertIndices();
+      float[][] bands    = shape.getBands();
+      int[] bandIndices  = shape.getBandIndices();
+      float[][] corners  = shape.getCorners();
+      int[] cornerIndices= shape.getCornerIndices();
+      float[][] centers  = shape.getCenters();
+      int[] centerIndices= shape.getCenterIndices();
+
+      int cubit = findCubitWithVariant(object,i,numCubits,numLayers);
+
+      if( convexity!=null )
+        {
+        JSONObject convObj = generateConvexity(convexity);
+        shapeObj.put("convexity", convObj);
+        }
+
+      JSONArray verticesArr = generateVertices(vertices,cornerIndices,centerIndices);
+      shapeObj.put("vertices", verticesArr);
+      JSONArray facesArr = generateFaces(object,vertIndices,bandIndices,cubit,numLayers);
+      shapeObj.put("faces", facesArr);
+      JSONArray bandsArr = generateBands(bands);
+      shapeObj.put("bands", bandsArr);
+      JSONArray cornerArr = generateCorners(corners);
+      shapeObj.put("cornerPush", cornerArr);
+      JSONArray centerArr = generateCenters(centers);
+      shapeObj.put("centerPush", centerArr);
+
+      shapes.put(shapeObj);
+      }
+
+    return shapes;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateStickers(TwistyObject object) throws JSONException
+    {
+    JSONArray stickers = new JSONArray();
+
+    int[] numLayers = object.getNumLayers();
+    int numStickers = object.getNumStickerTypes(numLayers);
+
+    for(int i=0; i<numStickers; i++)
+      {
+      JSONObject stickerObj = new JSONObject();
+      JSONArray  vertexArray= new JSONArray();
+
+      ObjectSticker sticker = object.retSticker(i);
+
+      float[] coords     = sticker.getCoords();
+      float[] curvatures = sticker.getCurvature();
+      float[] radii      = sticker.getRadii();
+      float   stroke     = sticker.getStroke();
+
+      stickerObj.put("stroke", stroke);
+      int numVertices = radii.length;
+
+      for(int j=0; j<numVertices; j++)
+        {
+        JSONObject vertex = new JSONObject();
+        vertex.put("x", coords[2*j  ]);
+        vertex.put("y", coords[2*j+1]);
+        vertex.put("angle", curvatures==null ? 0 : curvatures[j]);
+        vertex.put("radius",radii[j]);
+        vertexArray.put(vertex);
+        }
+      stickerObj.put("vertices", vertexArray);
+      stickers.put(stickerObj);
+      }
+
+    return stickers;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONObject generateMesh(TwistyObject object) throws JSONException
+    {
+    JSONObject mesh = new JSONObject();
+
+    JSONArray cubits   = generateCubits(object);
+    JSONArray shapes   = generateShapes(object);
+    JSONArray stickers = generateStickers(object);
+
+    mesh.put("cubits"  , cubits);
+    mesh.put("shapes"  , shapes);
+    mesh.put("stickers", stickers);
+
+    return mesh;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONObject generateMetadata(TwistyObject object) throws JSONException
+    {
+    JSONObject metadata = new JSONObject();
+
+    ObjectType type  = object.getObjectType();
+    String inventor  = object.getInventor();
+    String shortname = type.name();
+    String lowerShort= shortname.toLowerCase();
+    String longname  = object.getObjectName();
+
+    metadata.put("longname"     , longname );
+    metadata.put("shortname"    , shortname );
+    metadata.put("inventor"     , inventor);
+    metadata.put("year"         , object.getYearOfInvention());
+    metadata.put("complexity"   , object.getComplexity());
+    metadata.put("icon_huge"    , "h_"+lowerShort+".png");
+    metadata.put("icon_big"     , "b_"+lowerShort+".png");
+    metadata.put("icon_medium"  , "m_"+lowerShort+".png");
+    metadata.put("icon_small"   , "s_"+lowerShort+".png");
+    metadata.put("mesh"         , lowerShort+".dmesh");
+    metadata.put("num_scrambles", type.getNumScramble() );
+    metadata.put("size"         , object.getSize() );
+    metadata.put("solved_func"  , object.getSolvedFunctionIndex() );
+
+    return metadata;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateQuats(TwistyObject object) throws JSONException
+    {
+    JSONArray quatsArray = new JSONArray();
+    Static4D[] quats = object.getQuats();
+
+    for(Static4D quat : quats)
+      {
+      JSONObject q = new JSONObject();
+      q.put("x",quat.get0());
+      q.put("y",quat.get1());
+      q.put("z",quat.get2());
+      q.put("w",quat.get3());
+      quatsArray.put(q);
+      }
+
+    return quatsArray;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONArray generateAxis(TwistyObject object) throws JSONException
+    {
+    JSONArray axis = new JSONArray();
+
+    Static3D[] rotAxis = object.getRotationAxis();
+    int numAxis = rotAxis.length;
+    int[] basicAngle = object.getBasicAngle();
+    int[] numLayers = object.getNumLayers();
+    float[][] cuts = object.getCuts(numLayers);
+    boolean[][] rotatable = object.getLayerRotatable(numLayers);
+
+    for( int i=0; i<numAxis; i++ )
+      {
+      JSONObject axObject = new JSONObject();
+      Static3D ax = rotAxis[i];
+
+      axObject.put("x", ax.get0() );
+      axObject.put("y", ax.get1() );
+      axObject.put("z", ax.get2() );
+      axObject.put("basicAngle", basicAngle[i] );
+
+      JSONArray cutsArray = new JSONArray();
+      for(float cut : cuts[i]) cutsArray.put(cut);
+      axObject.put("cuts", cutsArray);
+      JSONArray rotaArray = new JSONArray();
+      for(boolean rot : rotatable[i]) rotaArray.put(rot);
+      axObject.put("rotatable", rotaArray );
+
+      axis.put(axObject);
+      }
+
+    return axis;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONObject generateScrambling(TwistyObject object) throws JSONException
+    {
+    JSONObject scrambling = new JSONObject();
+
+    ScrambleState[] states = object.getScrambleStates();
+    int scrambleType = object.getScrambleType();
+    scrambling.put("scrambleType",scrambleType );
+
+    if( states!=null )
+      {
+      JSONArray scrambleStates = new JSONArray();
+
+      for(ScrambleState state : states)
+        {
+        JSONArray axisArray = new JSONArray();
+        int numAxis = state.getNumAxis();
+
+        for(int ax=0; ax<numAxis; ax++)
+          {
+          JSONArray axArray = new JSONArray();
+          int[] axData = state.getAx(ax);
+
+          if( axData!=null )
+            for(int data : axData) axArray.put(data);
+
+          axisArray.put(axArray);
+          }
+
+        scrambleStates.put(axisArray);
+        }
+
+      scrambling.put("scrambleStates", scrambleStates);
+      }
+
+    return scrambling;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private JSONObject generateTouchControl(TwistyObject object) throws JSONException
+    {
+    JSONObject touchControl = new JSONObject();
+
+    touchControl.put("movementType" , object.getMovementType() );
+    touchControl.put("movementSplit", object.getMovementSplit() );
+
+    int[][][] enabled = object.getEnabled();
+
+    JSONArray enabledArray = new JSONArray();
+
+    for(int[][] faceEnabled : enabled)
+      {
+      JSONArray faceArray = new JSONArray();
+
+      for(int[] sectionEnabled : faceEnabled)
+        {
+        JSONArray sectionArray = new JSONArray();
+        for(int ax : sectionEnabled) sectionArray.put(ax);
+        faceArray.put(sectionArray);
+        }
+      enabledArray.put(faceArray);
+      }
+
+    touchControl.put("enabledAxis", enabledArray);
+
+    return touchControl;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public String createJsonString(TwistyObject object) throws JSONException
+    {
+    JSONObject json = new JSONObject();
+
+    JSONObject metadata    = generateMetadata(object);
+    JSONObject mesh        = generateMesh(object);
+    JSONArray  axis        = generateAxis(object);
+    JSONArray  quats       = generateQuats(object);
+    JSONObject scrambling  = generateScrambling(object);
+    JSONObject touchControl= generateTouchControl(object);
+
+    json.put("major"       , VERSION_MAJOR);
+    json.put("minor"       , VERSION_MINOR);
+    json.put("metadata"    , metadata);
+    json.put("mesh"        , mesh);
+    json.put("axis"        , axis);
+    json.put("quats"       , quats);
+    json.put("scrambling"  , scrambling);
+    json.put("touchcontrol", touchControl);
+
+    String ret = json.toString();
+    android.util.Log.e("D", ret);
+
+    return ret;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static JsonWriter getInstance()
+    {
+    if( mThis==null ) mThis = new JsonWriter();
+    return mThis;
+    }
+}
diff --git a/src/main/java/org/distorted/objectlib/main/TwistyObject.java b/src/main/java/org/distorted/objectlib/main/TwistyObject.java
index eda8daa9..f3482396 100644
--- a/src/main/java/org/distorted/objectlib/main/TwistyObject.java
+++ b/src/main/java/org/distorted/objectlib/main/TwistyObject.java
@@ -1373,9 +1373,9 @@ public abstract class TwistyObject
   public abstract Static3D[] getRotationAxis();
   public abstract int[] getBasicAngle();
   public abstract int getNumFaces();
-  public abstract int getObjectName(int[] numLayers);
-  public abstract int getInventor(int[] numLayers);
-  public abstract int getYearOfInvention(int[] numLayers);
-  public abstract int getComplexity(int[] numLayers);
+  public abstract String getObjectName();
+  public abstract String getInventor();
+  public abstract int getYearOfInvention();
+  public abstract int getComplexity();
   public abstract int getFOV();
   }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
index a7345554..dcf4ba1c 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java
@@ -119,28 +119,28 @@ public class TwistyBandaged2Bar extends TwistyBandagedAbstract
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.bandaged_2bar;
+    return "2Bar Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.bandaged_2bar_inventor;
+    return "unknown";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2000;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 8;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
index 465d13f8..383b5339 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java
@@ -126,28 +126,28 @@ public class TwistyBandaged3Plate extends TwistyBandagedAbstract
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.bandaged_3plate;
+    return "Bandaged Cube C";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.bandaged_3plate_inventor;
+    return "unknown";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2000;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 8;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
index 106fde0c..2fc7b4de 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java
@@ -250,28 +250,28 @@ public class TwistyBandagedEvil extends TwistyBandagedAbstract
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.bandaged_evil;
+    return "Bandaged Cube B";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.bandaged_evil_inventor;
+    return "unknown";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2000;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 8;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
index 0fead82e..3533ef9c 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java
@@ -119,28 +119,28 @@ public class TwistyBandagedFused extends TwistyBandagedAbstract
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.bandaged_fused;
+    return "Fused Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.bandaged_fused_inventor;
+    return "unknown";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2000;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 8;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyCuboid.java b/src/main/java/org/distorted/objectlib/objects/TwistyCuboid.java
index 6ed6db4e..52ad539a 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyCuboid.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyCuboid.java
@@ -687,37 +687,37 @@ public class TwistyCuboid extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.cube2;
-      case 3: return R.string.cube3;
-      case 4: return R.string.cube4;
-      case 5: return R.string.cube5;
+      case 2: return "Pocket Cube";
+      case 3: return "Rubik Cube";
+      case 4: return "Rubik's Revenge";
+      case 5: return "Professor's Cube";
       }
-    return R.string.cube3;
+    return "Rubik Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.cube2_inventor;
-      case 3: return R.string.cube3_inventor;
-      case 4: return R.string.cube4_inventor;
-      case 5: return R.string.cube5_inventor;
+      case 2: return "Larry Nichols";
+      case 3: return "Ernő Rubik";
+      case 4: return "Péter Sebestény";
+      case 5: return "Udo Krell";
       }
-    return R.string.cube3_inventor;
+    return "Ernő Rubik";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 1970;
       case 3: return 1974;
@@ -729,9 +729,9 @@ public class TwistyCuboid extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 4;
       case 3: return 6;
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java b/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
index 1d4ab8f4..fb34e3c9 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java
@@ -24,9 +24,6 @@ import static org.distorted.objectlib.main.Movement.TYPE_NOT_SPLIT;
 
 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;
 
@@ -591,37 +588,37 @@ public class TwistyDiamond extends Twisty8
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.diam2;
-      case 3: return R.string.diam3;
-      case 4: return R.string.diam4;
+      case 2: return "Skewb Diamond";
+      case 3: return "Face Turning Octahedron";
+      case 4: return "Master Face Turning Octahedron";
       }
 
-    return 0;
+    return "Skewb Diamond";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.diam2_inventor;
-      case 3: return R.string.diam3_inventor;
-      case 4: return R.string.diam4_inventor;
+      case 2: return "Uwe Meffert";
+      case 3: return "David Pitcher";
+      case 4: return "Timur Evbatyrov";
       }
 
-    return 0;
+    return "Uwe Meffert";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 1984;
       case 3: return 2003;
@@ -632,9 +629,9 @@ public class TwistyDiamond extends Twisty8
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 4;
       case 3: return 6;
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
index be1ae04e..23a2b9e5 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino.java
@@ -283,7 +283,7 @@ abstract class TwistyDino extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 2;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
index 788ec061..d640b36a 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino4.java
@@ -24,7 +24,6 @@ import android.content.res.Resources;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
-import org.distorted.objectlib.R;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.objectlib.helpers.ScrambleState;
 
@@ -102,21 +101,21 @@ public class TwistyDino4 extends TwistyDino
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.din43;
+    return "Dino Cube (4 color)";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.din43_inventor;
+    return "Robert Webb";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 1985;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java b/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
index c1164897..9b4f9750 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyDino6.java
@@ -24,7 +24,6 @@ import android.content.res.Resources;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
-import org.distorted.objectlib.R;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.objectlib.helpers.ScrambleState;
 
@@ -99,21 +98,21 @@ public class TwistyDino6 extends TwistyDino
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.dino3;
+    return "Dino Cube (6 color)";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.dino3_inventor;
+    return "Robert Webb";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 1985;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
index e7be04d5..57d3e742 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java
@@ -482,28 +482,28 @@ public class TwistyHelicopter extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.heli3;
+    return "Helicopter Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.heli3_inventor;
+    return "Adam G. Cowan";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2006;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 8;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java b/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
index 98affc92..265003b1 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyIvy.java
@@ -515,28 +515,28 @@ public class TwistyIvy extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.ivy2;
+    return "Ivy Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.ivy2_inventor;
+    return "Eitan Cher";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2009;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 1;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyJing.java b/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
index 9803130c..cb497c97 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyJing.java
@@ -468,28 +468,28 @@ public class TwistyJing extends Twisty4
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.jing;
+    return "Jing Pyraminx";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.jing_inventor;
+    return "Tony Fisher";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 1991;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 4;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java b/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
index 4216c8cc..f97c2aae 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java
@@ -739,33 +739,33 @@ public class TwistyKilominx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return R.string.minx2;
-    if( numL==5 ) return R.string.minx4;
-
-    return 0;
+    switch(getNumLayers()[0])
+      {
+      case 3: return "Kilominx";
+      case 5: return "Master Kilominx";
+      }
+    return "Kilominx";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return R.string.minx2_inventor;
-    if( numL==5 ) return R.string.minx4_inventor;
-
-    return 0;
+    switch(getNumLayers()[0])
+      {
+      case 3: return "Thomas de Bruin";
+      case 5: return "David Gugl";
+      }
+    return "Thomas de Bruin";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 3: return 2008;
       case 5: return 2010;
@@ -775,13 +775,13 @@ public class TwistyKilominx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return 5;
-    if( numL==5 ) return 8;
-
+    switch(getNumLayers()[0])
+      {
+      case 3: return 5;
+      case 5: return 8;
+      }
     return 8;
     }
 }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
index 79c49646..2c91b32a 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java
@@ -627,55 +627,54 @@ public class TwistyMegaminx extends TwistyMinx
       case 3: return ObjectType.MEGA_3;
       case 5: return ObjectType.MEGA_5;
       }
-
     return ObjectType.MEGA_3;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return R.string.minx3;
-    if( numL==5 ) return R.string.minx5;
-
-    return 0;
+    switch(getNumLayers()[0])
+      {
+      case 3: return "Megaminx";
+      case 5: return "Gigaminx";
+      }
+    return "Megaminx";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return R.string.minx3_inventor;
-    if( numL==5 ) return R.string.minx5_inventor;
-
-    return 0;
+    switch(getNumLayers()[0])
+      {
+      case 3: return "Ferenc Szlivka";
+      case 5: return "Tyler Fox";
+      }
+    return "Ferenc Szlivka";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 3: return 1982;
       case 5: return 2006;
       }
-    return 1982;
+    return 2006;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    int numL = numLayers[0];
-
-    if( numL==3 ) return 7;
-    if( numL==5 ) return 9;
-
+    switch(getNumLayers()[0])
+      {
+      case 3: return 7;
+      case 5: return 9;
+      }
     return 9;
     }
 }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java b/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
index ff4f8e7f..3045a5cc 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyMirror.java
@@ -670,33 +670,33 @@ public class TwistyMirror extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.mirr2;
-      case 3: return R.string.mirr3;
+      case 2: return "Pocket Mirror";
+      case 3: return "Mirror Cube";
       }
-    return R.string.mirr3;
+    return "Pocket Mirror";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.mirr2_inventor;
-      case 3: return R.string.mirr3_inventor;
+      case 2: return "Thomas de Bruin";
+      case 3: return "Hidetoshi Takeji";
       }
-    return R.string.mirr3_inventor;
+    return "Hidetoshi Takeji";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 2007;
       case 3: return 2006;
@@ -706,9 +706,9 @@ public class TwistyMirror extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 5;
       case 3: return 7;
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
index cc67adab..063a6e42 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java
@@ -466,35 +466,35 @@ public class TwistyPyraminx extends Twisty4
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 3: return R.string.pyra3;
-      case 4: return R.string.pyra4;
-      case 5: return R.string.pyra5;
+      case 3: return "Pyraminx";
+      case 4: return "Master Pyraminx";
+      case 5: return "Professor's Pyraminx";
       }
-    return R.string.pyra3;
+    return "Pyraminx";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 3: return R.string.pyra3_inventor;
-      case 4: return R.string.pyra4_inventor;
-      case 5: return R.string.pyra5_inventor;
+      case 3: return "Uwe Meffert";
+      case 4: return "Katsuhiko Okamoto";
+      case 5: return "Timur Evbatyrov";
       }
-    return R.string.pyra3_inventor;
+    return "Uwe Meffert";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 3: return 1970;
       case 4: return 2002;
@@ -505,9 +505,9 @@ public class TwistyPyraminx extends Twisty4
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 3: return 4;
       case 4: return 6;
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java b/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
index 8151bcbd..5c4f4e23 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
@@ -477,28 +477,28 @@ public class TwistyRedi extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.redi2;
+    return "Redi Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.redi2_inventor;
+    return "Oskar van Deventer";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2009;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 4;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyRex.java b/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
index 4f570ddc..5921cd66 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyRex.java
@@ -514,28 +514,28 @@ public class TwistyRex extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.rex3;
+    return "Rex Cube";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.rex3_inventor;
+    return "Andrew Cormier";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2009;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 3;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java b/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
index 4d931612..91cd591b 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySkewb.java
@@ -638,33 +638,33 @@ public class TwistySkewb extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.skew2;
-      case 3: return R.string.skew3;
+      case 2: return "Skewb";
+      case 3: return "Master Skewb";
       }
-    return R.string.skew2;
+    return "Skewb";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
-      case 2: return R.string.skew2_inventor;
-      case 3: return R.string.skew3_inventor;
+      case 2: return "Tony Durham";
+      case 3: return "Katsuhiko Okamoto";
       }
-    return R.string.skew2_inventor;
+    return "Tony Durham";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 1982;
       case 3: return 2003;
@@ -674,9 +674,9 @@ public class TwistySkewb extends Twisty6
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
-    switch(numLayers[0])
+    switch(getNumLayers()[0])
       {
       case 2: return 4;
       case 3: return 8;
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java b/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
index f56d16da..d0e30df7 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySquare1.java
@@ -370,28 +370,28 @@ public class TwistySquare1 extends TwistySquare
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.squa1;
+    return "Square-1";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.squa1_inventor;
+    return "Vojtech Kopsky, Karel Hrsel";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 1999;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 9;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java b/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
index fd8c3d82..fc002e08 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistySquare2.java
@@ -396,28 +396,28 @@ public class TwistySquare2 extends TwistySquare
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.squa2;
+    return "Square-2";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.squa2_inventor;
+    return "David Litwin";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 1995;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 7;
     }
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java b/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
index f3e311ca..8a9f854d 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyUltimate.java
@@ -473,28 +473,28 @@ public class TwistyUltimate extends Twisty12
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getObjectName(int[] numLayers)
+  public String getObjectName()
     {
-    return R.string.ulti2;
+    return "Skewb Ultimate";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getInventor(int[] numLayers)
+  public String getInventor()
     {
-    return R.string.ulti2_inventor;
+    return "Tony Fisher";
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getYearOfInvention(int[] numLayers)
+  public int getYearOfInvention()
     {
     return 2000;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int getComplexity(int[] numLayers)
+  public int getComplexity()
     {
     return 6;
     }
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index d8ff5751..7d3d66e8 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1,72 +1,4 @@
 <resources>
-    <string name="cube2" translatable="false">Pocket Cube</string>
-    <string name="cube3" translatable="false">Rubik Cube</string>
-    <string name="cube4" translatable="false">Rubik\'s Revenge</string>
-    <string name="cube5" translatable="false">Professor\'s Cube</string>
-    <string name="pyra3" translatable="false">Pyraminx</string>
-    <string name="pyra4" translatable="false">Master Pyraminx</string>
-    <string name="pyra5" translatable="false">Professor\'s Pyraminx</string>
-    <string name="skew2" translatable="false">Skewb</string>
-    <string name="skew3" translatable="false">Master Skewb</string>
-    <string name="diam2" translatable="false">Skewb Diamond</string>
-    <string name="diam3" translatable="false">Face Turning Octahedron</string>
-    <string name="diam4" translatable="false">Master Face Turning Octahedron</string>
-    <string name="redi2" translatable="false">Redi Cube</string>
-    <string name="heli3" translatable="false">Helicopter Cube</string>
-    <string name="ivy2"  translatable="false">Ivy Cube</string>
-    <string name="rex3"  translatable="false">Rex Cube</string>
-    <string name="dino3" translatable="false">Dino Cube (6 color)</string>
-    <string name="din43" translatable="false">Dino Cube (4 color)</string>
-    <string name="minx2" translatable="false">Kilominx</string>
-    <string name="minx3" translatable="false">Megaminx</string>
-    <string name="minx4" translatable="false">Master Kilominx</string>
-    <string name="minx5" translatable="false">Gigaminx</string>
-    <string name="ulti2" translatable="false">Skewb Ultimate</string>
-    <string name="squa1" translatable="false">Square-1</string>
-    <string name="squa2" translatable="false">Square-2</string>
-    <string name="jing"  translatable="false">Jing Pyraminx</string>
-    <string name="mirr2"  translatable="false">Mirror Cube</string>
-    <string name="mirr3"  translatable="false">Pocket Mirror</string>
-
-    <string name="bandaged_fused"  translatable="false">Fused Cube</string>
-    <string name="bandaged_2bar"   translatable="false">2Bar Cube</string>
-    <string name="bandaged_3plate" translatable="false">3Plate Cube</string>
-    <string name="bandaged_evil"   translatable="false">Evil Cube</string>
-
-    <string name="cube2_inventor" translatable="false">Larry Nichols</string>
-    <string name="cube3_inventor" translatable="false">Ernő Rubik</string>
-    <string name="cube4_inventor" translatable="false">Péter Sebestény</string>
-    <string name="cube5_inventor" translatable="false">Udo Krell</string>
-    <string name="pyra3_inventor" translatable="false">Uwe Meffert</string>
-    <string name="pyra4_inventor" translatable="false">Katsuhiko Okamoto</string>
-    <string name="pyra5_inventor" translatable="false">Timur Evbatyrov</string>
-    <string name="skew2_inventor" translatable="false">Tony Durham</string>
-    <string name="skew3_inventor" translatable="false">Katsuhiko Okamoto</string>
-    <string name="diam2_inventor" translatable="false">Uwe Meffert</string>
-    <string name="diam3_inventor" translatable="false">David Pitcher</string>
-    <string name="diam4_inventor" translatable="false">Timur Evbatyrov</string>
-    <string name="redi2_inventor" translatable="false">Oskar van Deventer</string>
-    <string name="heli3_inventor" translatable="false">Adam G. Cowan</string>
-    <string name="ivy2_inventor"  translatable="false">Eitan Cher</string>
-    <string name="rex3_inventor"  translatable="false">Andrew Cormier</string>
-    <string name="dino3_inventor" translatable="false">Robert Webb</string>
-    <string name="din43_inventor" translatable="false">Robert Webb</string>
-    <string name="minx2_inventor" translatable="false">Thomas de Bruin</string>
-    <string name="minx3_inventor" translatable="false">Ferenc Szlivka</string>
-    <string name="minx4_inventor" translatable="false">David Gugl</string>
-    <string name="minx5_inventor" translatable="false">Tyler Fox</string>
-    <string name="ulti2_inventor" translatable="false">Tony Fisher</string>
-    <string name="squa1_inventor" translatable="false">Vojtech Kopsky, Harel Hrsel</string>
-    <string name="squa2_inventor" translatable="false">David Litwin</string>
-    <string name="jing_inventor"  translatable="false">Tony Fisher</string>
-    <string name="mirr2_inventor" translatable="false">Thomas de Bruin</string>
-    <string name="mirr3_inventor" translatable="false">Hidetoshi Takeji</string>
-
-    <string name="bandaged_fused_inventor"  translatable="false">who knows</string>
-    <string name="bandaged_2bar_inventor"   translatable="false">who knows</string>
-    <string name="bandaged_3plate_inventor" translatable="false">who knows</string>
-    <string name="bandaged_evil_inventor"   translatable="false">who knows</string>
-
     <string name="objectchange_effect">Object Change Effect</string>
     <string name="solve_effect">Solve Effect</string>
     <string name="scramble_effect">Scramble Effect</string>
