mirror of
				https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
				synced 2025-11-04 08:35:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
extends Node
 | 
						|
 | 
						|
var files := []
 | 
						|
var directories := []
 | 
						|
 | 
						|
signal fnt_file_downloaded(text: String)
 | 
						|
 | 
						|
var downloaded_fnt_text := []
 | 
						|
 | 
						|
signal pack_created
 | 
						|
 | 
						|
const base_info_json := {
 | 
						|
	"name": "New Pack",
 | 
						|
	"description": "Template, give me a description!",
 | 
						|
	"author": "Me, until you change it",
 | 
						|
	"version": "1.0"
 | 
						|
	}
 | 
						|
	
 | 
						|
const disallowed_files := ["bgm","ctex","json","fnt", "svg"]
 | 
						|
 | 
						|
func create_template() -> void:
 | 
						|
	await get_tree().process_frame
 | 
						|
	get_directories("res://Assets", files, directories)
 | 
						|
	for i in directories:
 | 
						|
		DirAccess.make_dir_recursive_absolute(i.replace("res://Assets", Global.config_path.path_join("resource_packs/new_pack")))
 | 
						|
	for i in files:
 | 
						|
		var destination = i
 | 
						|
		if destination.contains("res://"):
 | 
						|
			destination = i.replace("res://Assets", Global.config_path.path_join("resource_packs/new_pack"))
 | 
						|
		else:
 | 
						|
			destination = i.replace(Global.config_path.path_join("resource_packs/BaseAssets"), Global.config_path.path_join("resource_packs/new_pack"))
 | 
						|
		var data = []
 | 
						|
		if i.contains(".fnt") or i.contains("ScoreFont"):
 | 
						|
			data = await download_fnt_text(i) 
 | 
						|
			## Imagine being one of the best open source game engines, yet not able to get the FUCKING CONTENTS
 | 
						|
			## OF AN FNT FILE SO INSTEAD YOU HAVE TO WRITE THE MOST BULLSHIT CODE TO DOWNLOAD THE FUCKING FILE
 | 
						|
			## FROM THE FUCKING GITHUB REPO. WHY? BECAUSE GODOT IS SHIT. FUCK GODOT.
 | 
						|
		elif i.contains(".svg"):
 | 
						|
			## DON'T import SVGs
 | 
						|
			continue
 | 
						|
		elif disallowed_files.has(i.get_extension()) == false and i.contains("res://"):
 | 
						|
			var resource = load(i)
 | 
						|
			if resource is Texture:
 | 
						|
				if OS.is_debug_build(): print("texture:" + i)
 | 
						|
				var image: Image = resource.get_image()
 | 
						|
				image.convert(Image.FORMAT_RGBA8)
 | 
						|
				data = image.save_png_to_buffer()
 | 
						|
			elif resource is AudioStream:
 | 
						|
				match i.get_extension():
 | 
						|
					"mp3":
 | 
						|
						if OS.is_debug_build(): print("mp3:" + i)
 | 
						|
						data = resource.get_data()
 | 
						|
					"wav":
 | 
						|
						## guzlad: CAN NOT BE format FORMAT_IMA_ADPCM or FORMAT_QOA as they don't support the save function
 | 
						|
						## guzlad: Should be FORMAT_16_BITS like most of our other .wav files 
 | 
						|
						if OS.is_debug_build(): print("wav:" + i)
 | 
						|
						var wav_file: AudioStreamWAV = load(i)
 | 
						|
						if !OS.is_debug_build():
 | 
						|
							wav_file.save_to_wav(destination)
 | 
						|
						else:
 | 
						|
							print(error_string(wav_file.save_to_wav(destination)))
 | 
						|
					## guzlad: No OGG yet
 | 
						|
					_:
 | 
						|
						data = resource.get_data()
 | 
						|
		else:
 | 
						|
			if OS.is_debug_build(): print("else:" + i)
 | 
						|
			var old_file = FileAccess.open(i, FileAccess.READ)
 | 
						|
			data = old_file.get_buffer(old_file.get_length())
 | 
						|
			if OS.is_debug_build(): print("else error: " + error_string(old_file.get_error()))
 | 
						|
			old_file.close()
 | 
						|
 | 
						|
		if !data.is_empty():
 | 
						|
			if OS.is_debug_build(): print("saving:" + i)
 | 
						|
			var new_file = FileAccess.open(destination, FileAccess.WRITE)
 | 
						|
			new_file.store_buffer(data)
 | 
						|
			if OS.is_debug_build(): print("saving error: " + error_string(new_file.get_error()))
 | 
						|
			new_file.close()
 | 
						|
	
 | 
						|
	var pack_info_path = Global.config_path.path_join("resource_packs/new_pack/pack_info.json")
 | 
						|
	DirAccess.make_dir_recursive_absolute(pack_info_path.get_base_dir())
 | 
						|
	var file = FileAccess.open(pack_info_path, FileAccess.WRITE)
 | 
						|
	file.store_string(JSON.stringify(base_info_json, "\t"))
 | 
						|
	file.close()
 | 
						|
	print("Done")
 | 
						|
	pack_created.emit()
 | 
						|
 | 
						|
func download_fnt_text(file_path := "") -> PackedByteArray:
 | 
						|
	var http = HTTPRequest.new()
 | 
						|
	const GITHUB_URL = "https://raw.githubusercontent.com/JHDev2006/Super-Mario-Bros.-Remastered-Public/refs/heads/main/"
 | 
						|
	var url = GITHUB_URL + file_path.replace("res://", "")
 | 
						|
	add_child(http)
 | 
						|
	http.request_completed.connect(file_downloaded)
 | 
						|
	http.request(url, [], HTTPClient.METHOD_GET)
 | 
						|
	await fnt_file_downloaded
 | 
						|
	http.queue_free()
 | 
						|
	return downloaded_fnt_text
 | 
						|
 | 
						|
func file_downloaded(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void:
 | 
						|
	downloaded_fnt_text = body
 | 
						|
	fnt_file_downloaded.emit(downloaded_fnt_text)
 | 
						|
 | 
						|
func get_directories(base_dir := "", files := [], directories := []) -> void:
 | 
						|
	for i in DirAccess.get_directories_at(base_dir):
 | 
						|
		if base_dir.contains("LevelGuides") == false and base_dir.contains(".godot") == false:
 | 
						|
			directories.append(base_dir + "/" + i)
 | 
						|
			get_directories(base_dir + "/" + i, files, directories)
 | 
						|
			get_files(base_dir + "/" + i, files)
 | 
						|
 | 
						|
func get_files(base_dir := "", files := []) -> void:
 | 
						|
	for i in DirAccess.get_files_at(base_dir):
 | 
						|
		if base_dir.contains("LevelGuides") == false:
 | 
						|
			i = i.replace(".import", "")
 | 
						|
			#print(i)
 | 
						|
			var target_path = base_dir + "/" + i
 | 
						|
			var rom_assets_path = target_path.replace("res://Assets", Global.config_path.path_join("resource_packs/BaseAssets"))
 | 
						|
			if FileAccess.file_exists(rom_assets_path):
 | 
						|
				files.append(rom_assets_path)
 | 
						|
			else:
 | 
						|
				files.append(target_path)
 |