diff --git a/files/PlatformContent/pc/terrain/diffusearray.dds b/files/PlatformContent/pc/terrain/diffusearray.dds new file mode 100644 index 0000000..8ac4f78 Binary files /dev/null and b/files/PlatformContent/pc/terrain/diffusearray.dds differ diff --git a/files/PlatformContent/pc/terrain/materials.json b/files/PlatformContent/pc/terrain/materials.json new file mode 100644 index 0000000..12113d6 --- /dev/null +++ b/files/PlatformContent/pc/terrain/materials.json @@ -0,0 +1,610 @@ +{ + "platform": "pc", + "atlas": + { + "pc": { + "width": 2048, + "height": 2048, + "tileSize": 256, + "tileCount": 6, + + "sliceSize": 512, + + "borderSize": 42 + }, + "ios": { + "width": 2048, + "height": 2048, + "tileSize": 256, + "tileCount": 6, + + "borderSize": 42 + }, + "android": { + "width": 2048, + "height": 2048, + "tileSize": 256, + "tileCount": 6, + + "borderSize": 42 + }, + "durango": { + "width": 32, + "height": 32, + "tileSize": 4, + "tileCount": 6, + + "sliceSize": 512, + + "borderSize": 42 + } + }, + "materials":[ + { + "name":"Air"} + , + { + "name":"Water", + "water":0.5} + , + { + "name":"Grass", + "base_color":[ + 106, + 127, + 63] + , + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.25, + "detiling":4, + "rotation":1, + "blend":{ + "min":0.0829, + "max":1, + "scale":0.435} + } + , + "texture_side":{ + "tiling":0.2, + "detiling_legacy":0.2, + "detiling":5, + "blend":{ + "min":0.067, + "max":0.933, + "scale":0.1998} + } + , + "texture_bottom":{ + "tiling":0.45, + "detiling_legacy":0.45, + "detiling":2.2219, + "blend":{ + "min":0.05, + "max":1.3329, + "scale":0.5399} + } + } + , + { + "name":"Slate", + "base_color":[ + 63, + 127, + 107] + , + "shift":0.1, + "texture":{ + "tiling":0.55, + "detiling_legacy":0.55, + "detiling":1.818, + "blend":{ + "min":0.25, + "max":1, + "scale":0.12} + } + , + "blend":{ + "min":0, + "max":1, + "scale":0.1, + "blend":{ + "min":0, + "max":1, + "scale":0.1} + } + } + , + { + "name":"Concrete", + "base_color":[ + 127, + 102, + 63] + , + "quantize":0.5, + "type":"hard", + "texture_top":{ + "tiling":0.5, + "detiling_legacy":0.8, + "detiling":1.25, + "blend":{ + "min":-0.05, + "max":1, + "scale":0.0552} + } + , + "texture_side":{ + "tiling":0.4, + "detiling_legacy":0.4, + "detiling":2.5, + "blend":{ + "min":-0.05, + "max":0.9498, + "scale":0.1602} + } + } + , + { + "name":"Brick", + "base_color":[ + 138, + 86, + 62] + , + "cubify":1, + "type":"hard", + "mapping":"cube", + "texture":{ + "tiling":0.8, + "detiling_legacy":0.2, + "detiling":5, + "blend":{ + "min":0.1668, + "max":0.767, + "scale":0.1397} + } + } + , + { + "name":"Sand", + "base_color":[ + 143, + 126, + 95] + , + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.25, + "detiling":4, + "blend":{ + "min":0.017, + "max":1.0499, + "scale":0.3552} + } + , + "texture_side":{ + "tiling":0.25, + "detiling_legacy":0.55, + "detiling":1.818, + "blend":{ + "min":0.1668, + "max":0.9829, + "scale":0.3947} + } + } + , + { + "name":"WoodPlanks", + "base_color":[ + 139, + 109, + 79] + , + "cubify":1, + "type":"hard", + "mapping":"cube", + "texture":{ + "tiling":0.8, + "detiling_legacy":0.5, + "detiling":2, + "blend":{ + "min":0.15, + "max":0.883, + "scale":9.9999e-05} + } + } + , + { + "name":"Rock", + "base_color":[ + 102, + 108, + 111] + , + "shift":0.2998, + "type":"hardsoft", + "texture":{ + "tiling":0.55, + "detiling_legacy":0.55, + "detiling":1.818, + "rotation":0.5, + "blend":{ + "min":0.05, + "max":0.4, + "scale":0.0798} + } + } + , + { + "name":"Glacier", + "base_color":[ + 101, + 176, + 234] + , + "texture_top":{ + "tiling":0.23, + "detiling_legacy":0.55, + "detiling":1.818, + "blend":{ + "min":0.2669, + "max":0.967, + "scale":0.3552} + } + , + "texture_side":{ + "tiling":0.2, + "detiling_legacy":0.9, + "detiling":1.1108, + "blend":{ + "min":0.1168, + "max":0.833, + "scale":0.165} + } + , + "texture_bottom":{ + "tiling":0.23, + "detiling_legacy":0.5997, + "detiling":1.6653, + "blend":{ + "min":0.4499, + "max":1.1, + "scale":0.3197} + } + } + , + { + "name":"Snow", + "base_color":[ + 195, + 199, + 218] + , + "texture":{ + "tiling":0.2998, + "detiling_legacy":0.2998, + "detiling":0.2998, + "blend":{ + "min":-0.067, + "max":0.8999, + "scale":0.4649} + } + } + , + { + "name":"Sandstone", + "base_color":[ + 137, + 90, + 71] + , + "texture_top":{ + "tiling":0.5, + "detiling_legacy":0.6995, + "detiling":0.6995, + "rotation":0.5, + "blend":{ + "min":0.067, + "max":1.2, + "scale":0.2849} + } + , + "texture_side":{ + "tiling":0.2998, + "detiling_legacy":0.5, + "detiling":2, + "blend":{ + "min":0.05, + "max":0.6169, + "scale":0.225} + } + , + "texture_bottom":{ + "tiling":0.45, + "detiling_legacy":0.45, + "detiling":3.333, + "blend":{ + "min":-0.0829, + "max":1.1, + "scale":0.4199} + } + } + , + { + "name":"Mud", + "base_color":[ + 58, + 46, + 36] + , + "texture":{ + "tiling":0.2998, + "detiling_legacy":0.1, + "detiling":10, + "blend":{ + "min":0.1668, + "max":0.933, + "scale":0.3149} + } + } + , + { + "name":"Basalt", + "base_color":[ + 30, + 30, + 37] + , + "shift":0.2, + "type":"hardsoft", + "texture":{ + "tiling":0.55, + "detiling_legacy":0.55, + "detiling":1.818, + "blend":{ + "min":0.1, + "max":1.0326, + "scale":0.0402} + } + } + , + { + "name":"Ground", + "base_color":[ + 102, + 92, + 59] + , + "texture":{ + "tiling":0.2998, + "detiling_legacy":0.2998, + "detiling":3.333, + "rotation":0.5, + "blend":{ + "min":0.2669, + "max":0.933, + "scale":0.195} + } + } + , + { + "name":"CrackedLava", + "base_color":[ + 232, + 156, + 74] + , + "shift":0.1, + "texture":{ + "tiling":0.28, + "detiling_legacy":0.2998, + "detiling":3.333, + "rotation":0.5, + "blend":{ + "min":-0.067, + "max":0.85, + "scale":0.2148} + } + } + , + { + "name":"Asphalt", + "base_color":[ + 115, + 123, + 107] + , + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.23, + "detiling":4.3478, + "blend":{ + "min":0.3, + "max":1.0326, + "scale":0.24} + } + , + "texture_side":{ + "tiling":0.2, + "detiling_legacy":0.9, + "detiling":1.1108, + "blend":{ + "min":-0.017, + "max":0.967, + "scale":0.1096} + } + } + , + { + "name":"Cobblestone", + "base_color":[ + 132, + 123, + 90] + , + "quantize":0.1499, + "type":"hardsoft", + "texture_top":{ + "tiling":0.23, + "detiling_legacy":0.25, + "detiling":4, + "blend":{ + "min":0.133, + "max":1.167, + "scale":0.2597} + } + , + "texture_side":{ + "tiling":0.2, + "detiling_legacy":0.9, + "detiling":1.1108, + "blend":{ + "min":-0.1, + "max":0.5669, + "scale":0.1998} + } + } + , + { + "name":"Ice", + "base_color":[ + 129, + 194, + 224] + , + "shift":0.1499, + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.25, + "detiling":4, + "rotation":0.1} + , + "texture_side":{ + "tiling":0.25, + "detiling_legacy":0.25, + "detiling":4} + , + "blend":{ + "min":0, + "max":1, + "scale":0.1} + } + , + { + "name":"LeafyGrass", + "base_color":[ + 115, + 132, + 74] + , + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.33, + "detiling":3.0299, + "rotation":1, + "blend":{ + "min":0.017, + "max":0.767, + "scale":0.2898} + } + , + "texture_side":{ + "tiling":0.25, + "detiling_legacy":0.25, + "detiling":4, + "blend":{ + "min":0.133, + "max":0.75, + "scale":0.1902} + } + } + , + { + "name":"Salt", + "base_color":[ + 198, + 189, + 181] + , + "texture_top":{ + "tiling":0.23, + "detiling_legacy":0.55, + "detiling":1.818, + "blend":{ + "min":0.1668, + "max":1, + "scale":0.3251} + } + , + "texture_side":{ + "tiling":0.2, + "detiling_legacy":0.9, + "detiling":1.1108, + "blend":{ + "min":-0.067, + "max":0.9168, + "scale":0.2597} + } + } + , + { + "name":"Limestone", + "base_color":[ + 206, + 173, + 148] + , + "texture_top":{ + "tiling":0.25, + "detiling_legacy":0.55, + "detiling":1.818, + "rotation":0.1, + "blend":{ + "min":0.1668, + "max":0.9168, + "scale":0.3498} + } + , + "texture_side":{ + "tiling":0.25, + "detiling_legacy":0.5, + "detiling":2, + "blend":{ + "min":0, + "max":0.967, + "scale":0.135} + } + } + , + { + "name":"Pavement", + "base_color":[ + 148, + 148, + 140] + , + "quantize":0.25, + "type":"hardsoft", + "texture_top":{ + "tiling":0.46, + "detiling_legacy":0.25, + "detiling":4, + "blend":{ + "min":0.2169, + "max":0.9829, + "scale":0.12} + } + , + "texture_side":{ + "tiling":0.46, + "detiling_legacy":0.25, + "detiling":4, + "blend":{ + "min":-0.133, + "max":1.067, + "scale":0.1152} + } + } + ] + } diff --git a/files/PlatformContent/pc/textures/sky/indoor512_bk.tex b/files/PlatformContent/pc/textures/sky/indoor512_bk.tex new file mode 100644 index 0000000..49e3285 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_bk.tex differ diff --git a/files/PlatformContent/pc/textures/sky/indoor512_dn.tex b/files/PlatformContent/pc/textures/sky/indoor512_dn.tex new file mode 100644 index 0000000..698bae2 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_dn.tex differ diff --git a/files/PlatformContent/pc/textures/sky/indoor512_ft.tex b/files/PlatformContent/pc/textures/sky/indoor512_ft.tex new file mode 100644 index 0000000..ed84018 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_ft.tex differ diff --git a/files/PlatformContent/pc/textures/sky/indoor512_lf.tex b/files/PlatformContent/pc/textures/sky/indoor512_lf.tex new file mode 100644 index 0000000..2fdf770 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_lf.tex differ diff --git a/files/PlatformContent/pc/textures/sky/indoor512_rt.tex b/files/PlatformContent/pc/textures/sky/indoor512_rt.tex new file mode 100644 index 0000000..41ce094 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_rt.tex differ diff --git a/files/PlatformContent/pc/textures/sky/indoor512_up.tex b/files/PlatformContent/pc/textures/sky/indoor512_up.tex new file mode 100644 index 0000000..f3a695f Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/indoor512_up.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_bk.tex b/files/PlatformContent/pc/textures/sky/sky512_bk.tex new file mode 100644 index 0000000..3f55061 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_bk.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_dn.tex b/files/PlatformContent/pc/textures/sky/sky512_dn.tex new file mode 100644 index 0000000..96fa75c Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_dn.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_ft.tex b/files/PlatformContent/pc/textures/sky/sky512_ft.tex new file mode 100644 index 0000000..bf370f1 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_ft.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_lf.tex b/files/PlatformContent/pc/textures/sky/sky512_lf.tex new file mode 100644 index 0000000..af7f1cd Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_lf.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_rt.tex b/files/PlatformContent/pc/textures/sky/sky512_rt.tex new file mode 100644 index 0000000..a78b967 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_rt.tex differ diff --git a/files/PlatformContent/pc/textures/sky/sky512_up.tex b/files/PlatformContent/pc/textures/sky/sky512_up.tex new file mode 100644 index 0000000..9c2aae7 Binary files /dev/null and b/files/PlatformContent/pc/textures/sky/sky512_up.tex differ diff --git a/files/PlatformContent/pc/textures/wangIndex.dds b/files/PlatformContent/pc/textures/wangIndex.dds new file mode 100644 index 0000000..6522290 Binary files /dev/null and b/files/PlatformContent/pc/textures/wangIndex.dds differ diff --git a/main.py b/main.py index 873dcc6..11821a8 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,5 @@ #Roblox Tweaker -#Version: 1.1 +#Version: 1.2 from tkinter import Tk, filedialog from time import sleep @@ -11,104 +11,116 @@ import psutil import requests +_version = "1.2" + class Main(): + def __init__(self): - ctypes.windll.kernel32.SetConsoleTitleW('Roblox Tweaker') + ctypes.windll.kernel32.SetConsoleTitleW("Roblox Tweaker") self.root = Tk() self.root.withdraw() - self.root.iconbitmap('./files/roblox_tweaker_logo.ico') + self.root.iconbitmap("./files/roblox_tweaker_logo.ico") - self.roblox_folder_path = os.environ['LocalAppData']+'/Roblox' - self.roblox_versions_folder_path = self.roblox_folder_path+'/Versions' - self.desktop_path = os.environ['UserProfile']+'/Desktop' + self.roblox_folder_path = os.environ["LocalAppData"]+"/Roblox" + self.roblox_versions_folder_path = self.roblox_folder_path+"/Versions" + self.desktop_path = os.environ["UserProfile"]+"/Desktop" - self.roblox_version_folder_path = '' - self.roblox_version_platform_content_pc_folder_path = '' - self.roblox_terrain_folder_path = '' - self.roblox_textures_folder_path = '' + self.roblox_version_folder_path = "" + self.roblox_version_platform_content_pc_folder_path = "" + self.roblox_terrain_folder_path = "" + self.roblox_textures_folder_path = "" - os.system('cls') - print('Roblox Tweaker 1.1:\n') - print('[1]Delete textures | [2]Reinstall Roblox | [3]Exit') - menu_choice = input('>') - while menu_choice not in ['1','2','3']: - os.system('cls') - print('Roblox Tweaker 1.1:\n') - print('[1]Delete textures | [2]Reinstall Roblox | [3]Exit') - menu_choice = input('>') + os.system("cls") + print(f"Roblox Tweaker {_version}:\n") + print("[1]Delete textures | [2]Reinstall Roblox | [3]Exit") + menu_choice = input(">") + while menu_choice not in ["1","2","3"]: + os.system("cls") + print(f"Roblox Tweaker {_version}:\n") + print("[1]Delete textures | [2]Reinstall Roblox | [3]Exit") + menu_choice = input(">") #Delete textures - if menu_choice == '1': + if menu_choice == "1": self.delete_textures() #Create Backup - elif menu_choice == '2': + elif menu_choice == "2": self.reinstall_roblox() #Exit - elif menu_choice == '3': - os.system('cls') + elif menu_choice == "3": + os.system("cls") exit(0) self.__init__() def delete_textures(self): - os.system('cls') - print('Select the version folder to delete the textures from.') + os.system("cls") + print("Select the version folder to delete the textures from.") self.get_roblox_version_folder_path() if not self.roblox_version_folder_path: return - if os.path.isdir(self.roblox_version_platform_content_pc_folder_path): - os.system('cls') - print('Deleting the folders from "Roblox" folder:\n') - - if os.path.isdir(self.roblox_terrain_folder_path): - print('Deleting "terrain" folder.') - shutil.rmtree(self.roblox_terrain_folder_path) + os.system("cls") + print("Do you want to:\n[1]Delete All | [2]Delete 'terrain' | [3]Delete 'textures'") + delete_choice = input(">") + while delete_choice not in ["1","2","3"]: + os.system("cls") + print("Do you want to:\n[1]Delete All | [2]Delete 'terrain' | [3]Delete 'textures'") + delete_choice = input(">") + + if os.path.isdir(self.roblox_terrain_folder_path) or os.path.isdir(self.roblox_textures_folder_path): + os.system("cls") + if delete_choice: + print("Deleting the folders from 'Roblox' folder:\n") - if os.path.isdir(self.roblox_textures_folder_path): - print('Deleting "textures" folder.') - shutil.rmtree(self.roblox_textures_folder_path) - - print('\nDeleting completed.') + if os.path.isdir(self.roblox_terrain_folder_path) and delete_choice == "1" or delete_choice == "2": + print("Deleting 'terrain' folder.") + shutil.rmtree(self.roblox_terrain_folder_path) + + if os.path.isdir(self.roblox_textures_folder_path) and delete_choice == "1" or delete_choice == "3": + print("Deleting 'textures' folder.") + shutil.rmtree(self.roblox_textures_folder_path) + + print("\nDeleting completed.") sleep(1.5) if not os.path.isdir(self.roblox_terrain_folder_path) or not os.path.isdir(self.roblox_textures_folder_path): - os.system('cls') - print('Copying the folders from "files" folder:\n') + os.system("cls") + print("Copying the folders from 'files' folder:\n") - files_platform_content_pc_folder_path = './files/PlatformContent/pc' + files_platform_content_pc_folder_path = "./files/PlatformContent/pc" - if not os.path.isdir(self.roblox_terrain_folder_path): - print('Copying "terrain" folder.') - files_terrain_folder_path = f'{files_platform_content_pc_folder_path}/terrain' + if not os.path.isdir(self.roblox_terrain_folder_path) and delete_choice == "1" or delete_choice == "2": + print("Copying 'terrain' folder.") + files_terrain_folder_path = f"{files_platform_content_pc_folder_path}/terrain" copy_tree(files_terrain_folder_path, self.roblox_terrain_folder_path) - if not os.path.isdir(self.roblox_textures_folder_path): - print('Copying "textures" folder.') - files_textures_folder_path = f'{files_platform_content_pc_folder_path}/textures' + if not os.path.isdir(self.roblox_textures_folder_path) and delete_choice == "1" or delete_choice == "3": + print("Copying 'textures' folder.") + files_textures_folder_path = f"{files_platform_content_pc_folder_path}/textures" copy_tree(files_textures_folder_path, self.roblox_textures_folder_path) - print('\nCopying completed.') + print("\nCopying completed.") sleep(1.5) def reinstall_roblox(self): - os.system('cls') - print('Warning: if you procedure, its going to Reset/Overwrite the folder entirely,') - print('if you had modified the files before, make sure to backup.\n') - print('Do you want to continue anyway? Type "yes" to procedure anyway, Type anything else to go back.') - reinstall_choice = input('>').lower() + os.system("cls") + print("Warning: if you procedure, its going to Reset/Overwrite the folder entirely,") + print("if you had modified the files before, make sure to backup.\n") + print("Do you want to continue anyway? Type 'yes' to procedure anyway, Type anything else to go back.") + reinstall_choice = input(">").lower() - if reinstall_choice != 'yes': + if reinstall_choice != "yes": return sleep(0.5) - os.system('cls') + os.system("cls") if os.path.isdir(self.roblox_versions_folder_path): - print('Select the version folder to Reinstall the files.') + print("Select the version folder to Reinstall the files.") self.get_roblox_version_folder_path() if not self.roblox_version_folder_path: @@ -116,15 +128,15 @@ def reinstall_roblox(self): sleep(1.5) - subprocess.Popen(f'{self.roblox_version_folder_path}/RobloxPlayerLauncher.exe') + subprocess.Popen(f"{self.roblox_version_folder_path}/RobloxPlayerLauncher.exe") sleep(0.5) - while 'RobloxPlayerLauncher.exe' in (i.name() for i in psutil.process_iter()): - os.system('cls') - print('Reinstalling in progress.\n') + while "RobloxPlayerLauncher.exe" in (i.name() for i in psutil.process_iter()): + os.system("cls") + print("Reinstalling in progress.\n") - print('Reinstalling completed.') + print("Reinstalling completed.") elif not os.path.isdir(self.roblox_versions_folder_path): self.install_roblox() @@ -133,50 +145,50 @@ def reinstall_roblox(self): def install_roblox(self): print("Looks like you don't have Roblox installed, for some reason... why even bother using the program?") - print('Do you want to install Roblox? Type "yes" to procedure anyway, Type anything else to go back.') - install_choice = input('>').lower() + print("Do you want to install Roblox? Type 'yes' to procedure anyway, Type anything else to go back.") + install_choice = input(">").lower() - if install_choice != 'yes': + if install_choice != "yes": return - if not os.path.isdir('./downloaded_files'): - os.makedirs('./downloaded_files') + if not os.path.isdir("./downloaded_files"): + os.makedirs("./downloaded_files") sleep(0.5) - os.system('cls') - request = requests.get('https://www.roblox.com/download/client') - with open(f'./downloaded_files/RobloxPlayerLauncher.exe', 'wb') as file: + os.system("cls") + request = requests.get("https://www.roblox.com/download/client") + with open("./downloaded_files/RobloxPlayerLauncher.exe", "wb") as file: file.write(request.content) - while not os.path.isfile('./downloaded_files/RobloxPlayerLauncher.exe'): - os.system('cls') - print('Downloading in progress.\n') + while not os.path.isfile("./downloaded_files/RobloxPlayerLauncher.exe"): + os.system("cls") + print("Downloading in progress.\n") - print('Downloading completed.') + print("Downloading completed.") sleep(1.5) - subprocess.Popen('./downloaded_files/RobloxPlayerLauncher.exe') + subprocess.Popen("./downloaded_files/RobloxPlayerLauncher.exe") sleep(0.5) - while 'RobloxPlayerLauncher.exe' in (i.name() for i in psutil.process_iter()): - os.system('cls') - print('Installing in progress.\n') + while "RobloxPlayerLauncher.exe" in (i.name() for i in psutil.process_iter()): + os.system("cls") + print("Installing in progress.\n") - print('Installing completed.') + print("Installing completed.") sleep(1.5) def get_roblox_version_folder_path(self): - self.roblox_version_folder_path = filedialog.askdirectory(title='Select the version folder.', + self.roblox_version_folder_path = filedialog.askdirectory(title="Select the version folder.", initialdir=self.roblox_versions_folder_path, parent=self.root) - self.roblox_version_platform_content_pc_folder_path = f'{self.roblox_version_folder_path}/PlatformContent/pc' - self.roblox_terrain_folder_path = f'{self.roblox_version_platform_content_pc_folder_path}/terrain' - self.roblox_textures_folder_path = f'{self.roblox_version_platform_content_pc_folder_path}/textures' + self.roblox_version_platform_content_pc_folder_path = f"{self.roblox_version_folder_path}/PlatformContent/pc" + self.roblox_terrain_folder_path = f"{self.roblox_version_platform_content_pc_folder_path}/terrain" + self.roblox_textures_folder_path = f"{self.roblox_version_platform_content_pc_folder_path}/textures" -if __name__ == '__main__': +if __name__ == "__main__": Main() \ No newline at end of file