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)