the cutting room mirror

Klick Klack

Klick Klack is a simple puzzler about guiding a moving ball in a manually rotating labyrinth.

Development Text#

Inside the game's assets folder are many files that were left over from the game's development. Two of them reveal what is possibly an earlier name for the game: "Clacky Maze".

clackymaze.sublime-project#

{
   "folders":
   [
       {
           "path": "."
       }
   ]
}

clackymaze.sublime-workspace#

Within this file, a curious name is mentioned several times: "GlowGridDisco". This might be an earlier name for GlowGrid 2, which would only be released three months after this game.

{
    "auto_complete":
    {
        "selected_items":
        [
            [
                "_to",
                "_touchY"
            ],
            [
                "unlocked",
                "unlockedLevel"
            ],
            [
                "sele",
                "selectedLevel"
            ],
            [
                "tiles",
                "tilesTravelled"
            ],
            [
                "scale",
                "yScale"
            ],
            [
                "level",
                "levelData"
            ],
            [
                "cherr",
                "cherryData"
            ],
            [
                "cherry",
                "cherryData"
            ],
            [
                "gena",
                "generateStartingBoard"
            ],
            [
                "Game",
                "gamesPlayed"
            ],
            [
                "sho",
                "showNativeRateDialog"
            ],
            [
                "dat",
                "dataVersion"
            ],
            [
                "car",
                "carousel"
            ],
            [
                "grid",
                "gridData"
            ],
            [
                "tra",
                "transition"
            ],
            [
                "is",
                "isIPhoneX"
            ],
            [
                "anch",
                "anchorY"
            ],
            [
                "play",
                "playBtn"
            ],
            [
                "settings",
                "settingsBtn"
            ],
            [
                "sound",
                "soundBtn"
            ],
            [
                "anc",
                "anchorY"
            ],
            [
                "score",
                "scoreGroup"
            ],
            [
                "image",
                "imageSheetInfo"
            ],
            [
                "or",
                "orientation"
            ],
            [
                "cre",
                "createImage"
            ],
            [
                "high",
                "highScoreText"
            ],
            [
                "til",
                "tilesTravelled"
            ],
            [
                "rota",
                "rotationHalfway"
            ],
            [
                "fun",
                "function\tfunction"
            ],
            [
                "x",
                "xScale"
            ],
            [
                "path",
                "pathWidth"
            ],
            [
                "pat",
                "pathWidth"
            ],
            [
                "hi",
                "hilite"
            ],
            [
                "player",
                "playerSprite"
            ],
            [
                "res",
                "restart"
            ],
            [
                "dest",
                "destroyList"
            ],
            [
                "des",
                "destroyList"
            ],
            [
                "star",
                "startY"
            ],
            [
                "reset",
                "resetBomb"
            ],
            [
                "pro",
                "tileProgress"
            ],
            [
                "tile",
                "tileProgress"
            ],
            [
                "bac",
                "background-color"
            ],
            [
                "strlo",
                "strtolower"
            ],
            [
                "leve",
                "levelValues"
            ],
            [
                "json",
                "json_encode"
            ],
            [
                "spra",
                "spreadsheetFeed"
            ],
            [
                "be",
                "bestReport"
            ],
            [
                "clos",
                "closestValue"
            ],
            [
                "close",
                "closestDistance"
            ],
            [
                "avg",
                "avgDistanceY"
            ],
            [
                "adj",
                "adjacentDistancesX"
            ],
            [
                "rgb",
                "rgb1"
            ],
            [
                "_boa",
                "_boardLayer"
            ],
            [
                "pale",
                "palette"
            ],
            [
                "men",
                "detailMenuH"
            ],
            [
                "me",
                "detailMenuH"
            ],
            [
                "m",
                "detailMenuH"
            ],
            [
                "de",
                "detailMenuH"
            ],
            [
                "create",
                "createBoardView"
            ],
            [
                "contn",
                "contentWidth"
            ],
            [
                "rep",
                "response"
            ],
            [
                "on",
                "onComplete"
            ],
            [
                "pre",
                "premiumPID"
            ],
            [
                "show",
                "showRewarded"
            ]
        ]
    },
    "buffers":
    [
        {
            "file": "lib/bus.lua",
            "settings":
            {
                "buffer_size": 3492,
                "encoding": "UTF-8",
                "line_ending": "Windows"
            }
        },
        {
            "file": "scenes/game-scene.lua",
            "settings":
            {
                "buffer_size": 1241,
                "line_ending": "Windows"
            }
        },
        {
            "file": "game/game.lua",
            "settings":
            {
                "buffer_size": 15808,
                "encoding": "UTF-8",
                "line_ending": "Windows"
            }
        },
        {
            "file": "app/app.lua",
            "settings":
            {
                "buffer_size": 5847,
                "encoding": "UTF-8",
                "line_ending": "Windows"
            }
        },
        {
            "file": "scenes/select-scene.lua",
            "settings":
            {
                "buffer_size": 9323,
                "line_ending": "Windows"
            }
        },
        {
            "contents": "Searching 70 files for \"justUnlocked\"\n\nD:\\Projects\\KlickKlack\\app\\app\\app.lua:\n  231  \tend\n  232  \n  233: \tSession.justUnlocked=false\n  234  \tlocal nextLevelGate=nil\n  235  \tif Config.levelData[level+1] and Config.levelData[level+1].gate then \n  ...\n  237  \tend\n  238  \tif nextLevelGate and oldHighScore<nextLevelGate and score>=nextLevelGate then \n  239: \t\tSession.justUnlocked=true\n  240  \tend\n  241  \n\nD:\\Projects\\KlickKlack\\app\\scenes\\select-scene.lua:\n  368  \t\t\n  369  \n  370: \t\tif Session.justUnlocked then \n  371  \t\t\tApp.allowTouch(false)\n  372  \n  ...\n  395  \t\t\t\tApp.allowTouch(true)\n  396  \t\t\tend)\n  397: \t\t\tSession.justUnlocked=false\n  398  \n  399  \t\tend\n\n4 matches across 2 files\n\n\nSearching 70 files for \"attri\"\n\nD:\\Projects\\KlickKlack\\app\\app\\app.lua:\n  172  \n  173  \tif Env.isIOS then\n  174: \t\tAttribution=new('services.attribution')\n  175: \t\tAttribution.init()\n  176  \tend\n  177  \n  ...\n  241  \n  242  \tif nextLevelGate and oldHighScore<nextLevelGate and score>=nextLevelGate then \n  243: \t\tAttribution.logLevelUnlocked(nextLevel)\n  244  \t\tSession.justUnlocked=true\n  245  \tend\n\nD:\\Projects\\KlickKlack\\app\\LaunchScreen.storyboardc\\01J-lp-oVM-view-Ze5-6b-2t3.nib:\n    <binary>\n\nD:\\Projects\\KlickKlack\\app\\lib\\simple-json.lua:\n    8  -- Latest version: http://regex.info/blog/lua/json\n    9  --\n   10: -- This code is released under a Creative Commons CC-BY \"Attribution\" License:\n   11  -- http://creativecommons.org/licenses/by/3.0/deed.en_US\n   12  --\n\n10 matches across 3 files\n",
            "settings":
            {
                "buffer_size": 1495,
                "line_ending": "Windows",
                "name": "Find Results",
                "scratch": true
            }
        },
        {
            "file": "services/attribution.lua",
            "settings":
            {
                "buffer_size": 809,
                "encoding": "UTF-8",
                "line_ending": "Windows"
            }
        },
        {
            "file": "build.settings",
            "settings":
            {
                "buffer_size": 2943,
                "encoding": "UTF-8",
                "line_ending": "Windows"
            }
        }
    ],
    "build_system": "Packages/Python/Python.sublime-build",
    "build_system_choices":
    [
        [
            [
                [
                    "Packages/Python/Python.sublime-build",
                    ""
                ],
                [
                    "Packages/Python/Python.sublime-build",
                    "Syntax Check"
                ]
            ],
            [
                "Packages/Python/Python.sublime-build",
                ""
            ]
        ]
    ],
    "build_varint": "",
    "command_palette":
    {
        "height": 392.0,
        "last_filter": "pack",
        "selected_items":
        [
            [
                "pack",
                "Package Control: Install Package"
            ]
        ],
        "width": 400.0
    },
    "console":
    {
        "height": 323.0,
        "history":
        [
            "import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)"
        ]
    },
    "distraction_free":
    {
        "menu_visible": true,
        "show_minimap": false,
        "show_open_files": false,
        "show_tabs": false,
        "side_bar_visible": false,
        "status_bar_visible": false
    },
    "expanded_folders":
    [
        "/D/Projects/KlickKlack/app",
        "/D/Projects/KlickKlack/app/app",
        "/D/Projects/KlickKlack/app/assets",
        "/D/Projects/KlickKlack/app/data",
        "/D/Projects/KlickKlack/app/fonts",
        "/D/Projects/KlickKlack/app/game",
        "/D/Projects/KlickKlack/app/lib",
        "/D/Projects/KlickKlack/app/scenes",
        "/D/Projects/KlickKlack/app/services"
    ],
    "file_history":
    [
        "/D/Projects/KlickKlack/app/services/facebook.lua",
        "/D/Projects/KlickKlack/app/services/gpgs.lua",
        "/D/Projects/KlickKlack/app/app/app.lua",
        "/D/Projects/KlickKlack/app/scenes/select-scene.lua",
        "/D/Projects/KlickKlack/app/app/conf.lua",
        "/D/Projects/KlickKlack/app/scenes/carousel.lua",
        "/D/Projects/KlickKlack/app/lib/bus.lua",
        "/D/Projects/KlickKlack/app/game/generator.lua",
        "/D/Projects/KlickKlack/app/game/game.lua",
        "/D/Projects/KlickKlack/app/game/tutorial.lua",
        "/D/Projects/KlickKlack/app/scenes/game-scene.lua",
        "/D/Projects/KlickKlack/app/lib/a-star.lua",
        "/D/Projects/KlickKlack/app/game/astar-test.lua",
        "/D/Projects/KlickKlack/app/app/graphics.lua",
        "/D/Projects/KlickKlack/app/app/ads.lua",
        "/D/Projects/KlickKlack/app/scenes/title-scene.lua",
        "/D/Projects/KlickKlack/app/app/env.lua",
        "/D/Projects/KlickKlack/app/scenes/tutorial-scene.lua",
        "/D/Projects/KlickKlack/app/app/log.lua",
        "/D/Projects/KlickKlack/app/app/user.lua",
        "/D/Projects/KlickKlack/app/services/iap.lua",
        "/D/Projects/KlickKlack/app/services/rate.lua",
        "/D/Projects/KlickKlack/app/main.lua",
        "/D/Projects/KlickKlack/app/config.lua",
        "/D/Projects/KlickKlack/app/build.settings",
        "/D/Projects/KlickKlack/app/app/launch.lua",
        "/D/Projects/KlickKlack/app/app/touch.lua",
        "/D/Projects/KlickKlack/app/app/shop.lua",
        "/D/Projects/KlickKlack/app/lib/scenes.lua",
        "/D/Projects/KlickKlack/app/scenes/splash-scene.lua",
        "/D/Projects/corona-empty/empty/config.lua",
        "/D/Projects/corona-empty/empty/build.settings",
        "/D/Projects/corona-empty/empty/main.lua",
        "/D/Projects/KlickKlack/app/app/unity-ads.lua",
        "/D/Projects/KlickKlack/app/app/iap.lua",
        "/D/Projects/KlickKlack/app/app/sounds.lua",
        "/D/Projects/KlickKlack/app/assets/sprites.lua",
        "/D/Projects/KlickKlack/app/app/locale.lua",
        "/D/Projects/KlickKlack/app/assets/sprites@4x.lua",
        "/D/Projects/KlickKlack/app/fonts/MaropawiClub.otf",
        "/D/Projects/KlickKlack/app/app/main.lua",
        "/D/Projects/KlickKlack/app/log.lua",
        "/D/Projects/KlickKlack/app/app/config.lua",
        "/D/Projects/KlickKlack/app/lib/db-storage.lua",
        "/D/Projects/KlickKlack/app/assets/sprites@2x.lua",
        "/D/Projects/KlickKlack/app/assets/sprites-.lua",
        "/D/Projects/KlickKlack/app/button.lua",
        "/D/Projects/KlickKlack/app/lib/debug.lua",
        "/D/Projects/KlickKlack/app/sounds.lua",
        "/C/Work/Projects/ClickClack/dev/app/lib/db-storage.lua",
        "/C/Work/Projects/ClickClack/dev/app/scenes/game-scene.lua",
        "/C/Work/Projects/ClickClack/dev/app/button.lua",
        "/C/Work/Projects/ClickClack/dev/app/main.lua",
        "/C/Work/Projects/ClickClack/dev/app/lib/colors.lua",
        "/C/Work/Projects/ClickClack/dev/app/sounds.lua",
        "/C/Work/Projects/ClickClack/dev/app/audio/rotate.wav",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/fonts/RifficFree-Bold.ttf",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/config.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/build.settings",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/main.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/sounds.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/debug.lua",
        "/C/Work/Prototypes/GlowGridDisco/dev/app/launch.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/scenes/game-scene.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/lib/scenes.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/lib/helpers.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/button.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/lib/colors.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/audio.lua",
        "/C/Work/Prototypes/GlowGridDisco/dev/app/audio.lua",
        "/C/Work/Prototypes/GlowGridDisco/dev/app/debug.lua",
        "/C/Work/Prototypes/clackymaze/ClackyMaze/scene/game-scene.lua",
        "/C/Work/Prototypes/GlowGridDisco/dev/main.lua",
        "/C/Work/Projects/zutgames-com/html/index.php",
        "/C/Work/Projects/zutgames-com/html/footer.php",
        "/C/Work/Projects/zutgames-com/html/css/zut.css",
        "/C/Work/Projects/zutgames-com/html/header.php",
        "/C/Work/Projects/zutgames-com/html/index_hue",
        "/C/Work/Projects/zutgames-com/html/presskit/i love hue/data.xml",
        "/C/Work/Projects/zutgames-com/html/presskit/sheet.php",
        "/C/Work/Projects/zutgames-com/html/presskit/style.css",
        "/C/Work/Projects/zutgames-com/html/presskit/index.php",
        "/C/Work/Projects/zutgames-com/html/i-love-hue.php",
        "/C/Work/Projects/zutgames-com/html/jobs.php",
        "/C/Work/Projects/zutgames-com/html/glowgrid.php",
        "/C/Work/Projects/zutgames-com/html/presskit/glowgrid/data.xml",
        "/C/Work/Projects/zutgames-com/html/presskit/pushcat/data.xml",
        "/C/Work/Projects/zutgames-com/html/presskit/data.xml",
        "/D/Projects/zutgames.com/site/html/index.php",
        "/D/Projects/zutgames.com/site/html/footer.php",
        "/D/Projects/zutgames.com/site/html/presskit/sheet.php",
        "/D/Projects/zutgames.com/site/html/i-love-hue.php",
        "/D/Projects/zutgames.com/site/html/presskit/i love hue/data.xml",
        "/D/Projects/zutgames.com/site/html/presskit/data.xml",
        "/C/Work/Projects/I Love Hue/I Love Hue dev/art/tools/generator.jsx",
        "/D/Projects/i-love-hue/old-checkout/dev/app/env.lua",
        "/D/Projects/i-love-hue/old-checkout/dev/app/app.lua",
        "/C/Work/Projects/zutgames-com/site/.htaccess",
        "/D/Projects/i-love-hue/old-checkout/dev/services/iap.lua",
        "/D/Projects/i-love-hue/old-checkout/dev/app/launch.lua",
        "/D/Projects/i-love-hue/old-checkout/dev/app/shop.lua",
        "/D/Projects/i-love-hue/old-checkout/dev/main.lua",
        "/C/Work/Projects/zutgames-com/site/html/header.php",
        "/C/Work/Projects/zutgames-com/site/html/index.php",
        "/D/Builds/installer.bat",
        "/D/Projects/zutgames.com/www/header.php",
        "/C/tools/xampp/apache/conf/extra/httpd-vhosts.conf",
        "/D/Projects/zutgames.com/site/.htaccess",
        "/D/Projects/zutgames.com/site/index.html",
        "/D/Projects/zutgames.com/site/html/css/zut.css",
        "/D/Projects/zutgames.com/site/html/header.php",
        "/D/Projects/zutgames.com/site/html/pushcat.php",
        "/D/Projects/i-love-hue/_data.xml",
        "/D/Projects/i-love-hue/index.php",
        "/D/Projects/i-love-hue/data.xml",
        "/D/Projects/zutgames.com/www/index.php",
        "/D/Projects/zutgames.com/site/html/404.php",
        "/D/Projects/zutgames.com/index.php",
        "/C/tools/xampp/apache/conf/original/extra/httpd-vhosts.conf",
        "/C/tools/xampp/apache/conf/extra/httpd-xampp.conf",
        "/D/Projects/zutgames.com/www/css/zut.css",
        "/D/Projects/zutgames.com/www/css/logo-nav.css",
        "/D/Projects/i-love-hue/dev/pub/i-love-hue.com/www/Mobile_Detect.php",
        "/C/Users/Fritz/AppData/Local/Temp/Temp1_Mobile-Detect-2.8.22.zip/Mobile-Detect-2.8.22/Mobile_Detect.json",
        "/D/Projects/i-love-hue/dev/pub/i-love-hue.com/www/index.php",
        "/D/Projects/i-love-hue/dev/pub/i-love-hue.com/www/i-love-hue.css",
        "/D/Projects/i-love-hue/dev/art/tools/generator.jsx",
        "/D/Projects/i-love-hue/art/tools/generator.jsx"
    ],
    "find":
    {
        "height": 40.0
    },
    "find_in_files":
    {
        "height": 178.0,
        "where_history":
        [
            "<open folders>",
            "C:\\Work\\Prototypes\\clackymaze\\ClackyMaze",
            ""
        ]
    },
    "find_state":
    {
        "case_sensitive": false,
        "find_history":
        [
            "attri",
            "%",
            "justUnlocked",
            "touch",
            "\n\t",
            "_touchArea",
            "touchX",
            "_didTouch",
            "cherry",
            "loop",
            "sounds.",
            "y=tile.y",
            "transition.",
            "shadowOffset",
            "shadow",
            "isVIs",
            "shadow.isV",
            "tile.xScale",
            "shadow",
            "session.level",
            "DEBUG_IGNORE_LOCKED",
            "init",
            "exit",
            "Session.level",
            "dump",
            "print",
            "log",
            "print",
            "icon",
            "lock",
            "connect",
            "userInit",
            "connect",
            "SUBMITsCORE",
            "scoreboard",
            "SCOREBOARD",
            "LEADERBOARD",
            "leader",
            "showLeader",
            "crown",
            "scoreGroup",
            "score",
            "lock",
            "jump",
            "lockedS",
            "col",
            "DEBUG_TEST_UNLOCK",
            "unlocked",
            "unlockedLevel",
            "ui",
            "element.ui",
            "isLocked",
            "jump",
            "transito",
            "transitionOut",
            "element.locked",
            "level.unlockedState",
            "createLevel",
            "transitionIn",
            "createLevel",
            "element.ui",
            "end",
            "didJustReachGate",
            "carousel.sele",
            "init",
            "rate",
            "justUnlocked",
            "gameOver",
            "cherry!",
            "isLocked",
            "select(",
            "gate",
            "icon",
            "frame",
            "cherry",
            "init",
            "restart",
            "Session.level",
            "_selected",
            "update",
            "end",
            "_selected=",
            "onSelect",
            "lockLabel",
            "getEle",
            "iconButtonScale",
            "gameOver",
            "scoreText.",
            "score",
            "isVi",
            "score",
            "play",
            "p0lay",
            "exit",
            "getCherry",
            "deletePr",
            "deletePR",
            "framesElapsed",
            "onframe",
            "restart",
            "frame",
            "isPla",
            "restart",
            "create",
            "resetCherry",
            "reset",
            "tilesTra",
            "cherry.x",
            "resetCHerr",
            "resetCher",
            "resetCherry",
            "restart",
            "playerSPrite=",
            "xScale",
            "playerSPrite.isV",
            "restart",
            "pulseCher",
            "resetCHerry",
            "resetLevel",
            "resetCh",
            "resetCHer",
            "tile.i",
            "0.8",
            "shuffle",
            "resetBoard",
            "generat",
            "init",
            "orient"
        ],
        "highlight": true,
        "in_selection": false,
        "preserve_case": false,
        "regex": false,
        "replace_history":
        [
            "log",
            "element.unlockedState",
            "justUnlocked",
            "this.elements",
            "SMALL",
            "_selected",
            "closeBtn",
            "Config",
            "sheet",
            "sheetInfo",
            "Graphics.createImage",
            "Graphics.createImageRect",
            "_placementID",
            "tile.",
            "b",
            "#333",
            "Ubuntu",
            "Montserrat",
            "Rubik",
            "getWorksheetFeed",
            "cmsWorksheetFeed",
            "$setID",
            "rgb3",
            "rgb4",
            "rgb3",
            "rgb2",
            "rgb1",
            "width",
            "height",
            " || ",
            " && ",
            "var",
            "pinned",
            " && ",
            " || ",
            "var",
            ";",
            ")",
            "}",
            "if (p",
            "rgb",
            "rgb1",
            "Bus",
            "App.unit",
            "_didWatch",
            "dispatch",
            "_isRestoring",
            "iap"
        ],
        "reverse": false,
        "show_context": true,
        "use_buffer2": true,
        "whole_word": false,
        "wrap": true
    },
    "groups":
    [
        {
            "selected": 6,
            "sheets":
            [
                {
                    "buffer": 0,
                    "file": "lib/bus.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 3492,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                2245,
                                2245
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax",
                            "tab_size": 4,
                            "translate_tabs_to_spaces": true
                        },
                        "translation.x": 0.0,
                        "translation.y": 1152.0,
                        "zoom_level": 1.0
                    },
                    "stack_index": 6,
                    "type": "text"
                },
                {
                    "buffer": 1,
                    "file": "scenes/game-scene.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 1241,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                0,
                                0
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax"
                        },
                        "translation.x": 0.0,
                        "translation.y": 0.0,
                        "zoom_level": 1.0
                    },
                    "stack_index": 4,
                    "type": "text"
                },
                {
                    "buffer": 2,
                    "file": "game/game.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 15808,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                6478,
                                6478
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax",
                            "translate_tabs_to_spaces": false
                        },
                        "translation.x": 0.0,
                        "translation.y": 5408.8,
                        "zoom_level": 1.0
                    },
                    "stack_index": 3,
                    "type": "text"
                },
                {
                    "buffer": 3,
                    "file": "app/app.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 5847,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                0,
                                5847
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax",
                            "translate_tabs_to_spaces": false
                        },
                        "translation.x": 0.0,
                        "translation.y": 2815.2,
                        "zoom_level": 1.0
                    },
                    "stack_index": 5,
                    "type": "text"
                },
                {
                    "buffer": 4,
                    "file": "scenes/select-scene.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 9323,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                8727,
                                8727
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax",
                            "translate_tabs_to_spaces": false
                        },
                        "translation.x": 0.0,
                        "translation.y": 6240.0,
                        "zoom_level": 1.0
                    },
                    "stack_index": 2,
                    "type": "text"
                },
                {
                    "buffer": 5,
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 1495,
                        "regions":
                        {
                            "match":
                            {
                                "flags": 112,
                                "regions":
                                [
                                    [
                                        115,
                                        127
                                    ],
                                    [
                                        366,
                                        378
                                    ],
                                    [
                                        495,
                                        507
                                    ],
                                    [
                                        625,
                                        637
                                    ],
                                    [
                                        808,
                                        813
                                    ],
                                    [
                                        834,
                                        839
                                    ],
                                    [
                                        857,
                                        862
                                    ],
                                    [
                                        1006,
                                        1011
                                    ],
                                    [
                                        1372,
                                        1377
                                    ]
                                ],
                                "scope": ""
                            }
                        },
                        "selection":
                        [
                            [
                                814,
                                814
                            ]
                        ],
                        "settings":
                        {
                            "detect_indentation": false,
                            "line_numbers": false,
                            "output_tag": 2,
                            "result_base_dir": "",
                            "result_file_regex": "^([^ \t].*):$",
                            "result_line_regex": "^ +([0-9]+):",
                            "scroll_past_end": true,
                            "syntax": "Packages/Default/Find Results.hidden-tmLanguage"
                        },
                        "translation.x": 0.0,
                        "translation.y": 425.6,
                        "zoom_level": 1.0
                    },
                    "stack_index": 1,
                    "type": "text"
                },
                {
                    "buffer": 6,
                    "file": "services/attribution.lua",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 809,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                158,
                                158
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax",
                            "translate_tabs_to_spaces": false
                        },
                        "translation.x": 0.0,
                        "translation.y": 0.0,
                        "zoom_level": 1.0
                    },
                    "stack_index": 0,
                    "type": "text"
                },
                {
                    "buffer": 7,
                    "file": "build.settings",
                    "semi_transient": false,
                    "settings":
                    {
                        "buffer_size": 2943,
                        "regions":
                        {
                        },
                        "selection":
                        [
                            [
                                2734,
                                2734
                            ]
                        ],
                        "settings":
                        {
                            "syntax": "Packages/Lua/Lua.sublime-syntax"
                        },
                        "translation.x": 0.0,
                        "translation.y": 1767.0,
                        "zoom_level": 1.0
                    },
                    "stack_index": 7,
                    "type": "text"
                }
            ]
        }
    ],
    "incremental_find":
    {
        "height": 27.0
    },
    "input":
    {
        "height": 68.0
    },
    "layout":
    {
        "cells":
        [
            [
                0,
                0,
                1,
                1
            ]
        ],
        "cols":
        [
            0.0,
            1.0
        ],
        "rows":
        [
            0.0,
            1.0
        ]
    },
    "menu_visible": true,
    "output.exec":
    {
        "height": 396.0
    },
    "output.find_results":
    {
        "height": 0.0
    },
    "pinned_build_system": "Packages/Python/Python.sublime-build",
    "project": "clackymaze.sublime-project",
    "replace":
    {
        "height": 50.0
    },
    "save_all_on_build": true,
    "select_file":
    {
        "height": 0.0,
        "last_filter": "",
        "selected_items":
        [
        ],
        "width": 0.0
    },
    "select_project":
    {
        "height": 500.0,
        "last_filter": "",
        "selected_items":
        [
        ],
        "width": 380.0
    },
    "select_symbol":
    {
        "height": 0.0,
        "last_filter": "",
        "selected_items":
        [
        ],
        "width": 0.0
    },
    "selected_group": 0,
    "settings":
    {
    },
    "show_minimap": true,
    "show_open_files": false,
    "show_tabs": true,
    "side_bar_visible": true,
    "side_bar_width": 381.0,
    "status_bar_visible": true,
    "template_settings":
    {
    }
}

data\fetch.py#

A Python script that is used to obtain the game's text strings.

index={}
index['strings']='https://docs.google.com/spreadsheets/d/e/2PACX-1vR6-duGN9PFsVuvfPzD3maxf1ZvUbJr7LTp6_bT9PRcfAcrfNc-mNh-Aywpkhgca8ImeueqW37D2b_N/pub?gid=0&single=true&output=tsv'


import urllib.request
import csv
import time
from pprint import pprint

def isNumber(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

def fetch(url):
    with urllib.request.urlopen(url) as response:
        r = response.read()
    u=r.decode('UTF-8')
    reader = csv.reader(u.split('\n'),delimiter='\t')
    index=0
    data={}

    for row in reader:
        item={}
        if index==0:
            names=row
        else:
            for i in range(len(row)):
                name=names[i]

                
                if name[0:1]!='_' and len(row[i])>0:
                    cell=row[i]
                    
                    if cell.lower()=='false':
                        cell=False
                    elif cell.lower()=='true':
                        cell=True
                    elif isNumber(cell):
                        cell=int(cell)
                    elif cell[0]=="$":
                        cell=cell[1:]
                    elif ',' in cell:
                        vals=cell.split(',')
                        cell=[x for x in vals if x!=''] 
                    item[name]=cell
            if len(row[0])>0:
                data[row[0]]=item
        index=index+1
    return data

data={}

for key,url in index.items():

    data[key]=fetch(url)
    print(key+" ok")
    time.sleep(1)

import json
j=json.dumps(data)
j=j.replace('True','true')
j=j.replace('False','false')
print(j)
with open('data.txt', 'w') as file:
    file.write(j)

References#


  1. Play Store app page↩︎
  2. Apple Store page - Version History↩︎