name: "Flipped Red Area" panels { name: "RAISED" path: "Panels/Maze/panel_12" clue: "raised" answer: "lowered" symbols: SUN } om feed' href='https://code.fourisland.com/lingo2-archipelago/atom/scripts/randoExport.gd?h=main' type='application/atom+xml'/>
about summary refs log blame commit diff stats
path: root/scripts/randoExport.gd
blob: 931a2f80c6e2864c6a372061173535bdffb8f53e (plain) (tree)












































                                                                                  
                                                             
                                                      
                                                    










































































                                                                                                           
                                    
                                                                                
                                         
                                                        
                                     
                                                        
                                        
                                                        
                                      
                                                        
                                       
                                                        
                                        
                                                                                
                                      
                                                        
                                      
                                                        
                                       
                                                                                
                                    
                                                        
                                      
                                
                                        
                                                        
                                    
                                                        
                                      
                                
                                     
                                
                                     
                                                                             
                                      
                             
                                         










                                                                                                    
@tool
extends Node

@export_category("Debug")
@export var mybutton: bool:
	set(value):
		_my_button_pressed()


func _my_button_pressed():
	var results = []
	
	_visit_node(get_parent(), results)
	
	var file = FileAccess.open("user://rando_dump.txt", FileAccess.WRITE)
	file.store_string("".join(results))


func _visit_node(node, results: Array):
	var root_node = get_parent()
	var node_id = String(root_node.get_path_to(node).get_concatenated_names())
	
	if node is PanelMain:
		var clue = node.clue
		var answer = node.answer
		
		if node.missing_line == "clue":
			clue = node.answer
			answer = node.clue
		elif node.missing_line == "symbol":
			answer = node.symbol
		
		results.append("panels {\n  name: \"")
		results.append(clue.to_upper())
		results.append("\"\n  path: \"")
		results.append(node_id)
		results.append("\"\n  clue: \"")
		results.append(clue)
		results.append("\"\n  answer: \"")
		results.append(answer)
		results.append("\"\n")
		
		if node.missing_line != "symbol":
			var symbols = _parse_symbol(node.symbol)
			for symbol in symbols:
				results.append("  symbols: ")
				results.append(symbol)
				results.append("\n")
		
		for proxy in node.proxies:
			var proxy_node = node.get_node(proxy)
			var proxy_path = String(root_node.get_path_to(proxy_node).get_concatenated_names())
			results.append("  proxies { answer: \"")
			
			if proxy_node.missing_line == "clue":
				results.append(proxy_node.clue)
			elif proxy_node.missing_line == "symbol":
				results.append(proxy_node.symbol)
			else:
				results.append(proxy_node.answer)
			
			results.append("\" path: \"")
			results.append(proxy_path)
			results.append("\" }\n")
		
		results.append("}\n")
	elif node is DoorMain:
		var door_data = {"door_id": node_id}
		
		if !node.senders.is_empty():
			door_data["senders"] = _parse_node_paths(root_node, node, node.senders)
		
		if !node.senderGroup.is_empty():
			door_data["senderGroup"] = _parse_node_paths(root_node, node, node.senderGroup)
		
		#results["doors"][node_id] = door_data
	elif node is Collectable:
		if node.unlock_type == "key":
			results.append("letters {\n  key: \"")
			results.append(node.unlock_key)
			results.append("\"\n")
			
			if node.level == 2:
				results.append("  level2: true\n")
			
			results.append("  path: \"")
			results.append(node_id)
			results.append("\"\n}\n")
		elif node.unlock_type == "smiley":
			results.append("masteries {\n  name: \"MASTERY\"\n  path: \"")
			results.append(node_id)
			results.append("\"\n}\n")
	
	elif node is Painting or node is AutoPainting:
		results.append("paintings {\n  name: \"")
		results.append(node.name.to_upper())
		results.append("\"\n  path: \"")
		results.append(node_id)
		results.append("\"\n}\n")
	
	elif node is Worldport:
		results.append("ports {\n  name: \"")
		results.append(node.name.to_upper())
		results.append("\"\n  path: \"")
		results.append(node_id)
		results.append("\"\n}\n")
	
	elif node is Keyholder:
		results.append("keyholders {\n  name: \"")
		results.append(node.name.to_upper())
		results.append("\"\n  path: \"")
		results.append(node_id)
		results.append("\"\n}\n")
	
	for child in node.get_children():
		_visit_node(child, results)


func _parse_symbol(symbol):
	var raw = symbol.strip_edges()
	var result = []
	
	if raw.contains(":Syn") or raw.contains(":Ant"):
		result.append("SUN")
	if raw.contains(":Add") or raw.contains(":Rem") or raw.contains(":Adp"):
		result.append("SPARKLES")
	if raw.contains(":Hom") or raw.contains(":Rhy"):
		result.append("ZERO")
	if raw.contains(":Cat") or raw.contains(":Exa"):
		result.append("EXAMPLE")
	if raw.contains(":Par") or raw.contains(":Who"):
		result.append("BOXES")
	if raw.contains(":Plu") or raw.contains(":Sin"):
		result.append("PLANET")
	if raw.contains(":Int") or raw.contains(":Dim"):
		result.append("PYRAMID")
	if raw.contains(":Ene") or raw.contains(":Enr") or raw.contains(":Ent"):
		result.append("CROSS")
	if raw.contains(":Swe") or raw.contains(":Swu"):
		result.append("SWEET")
	if raw.contains(":Mas") or raw.contains(":Fem"):
		result.append("GENDER")
	if raw.contains(":Old") or raw.contains(":You") or raw.contains(":Ten"):
		result.append("AGE")
	if raw.contains(":Sou") or raw.contains(":Sor"):
		result.append("SOUND")
	if raw.contains(":Ana"):
		result.append("ANAGRAM")
	if raw.contains(":Job") or raw.contains(":Emp"):
		result.append("JOB")
	if raw.contains(":Sur") or raw.contains(":Srr"):
		result.append("STARS")
	if raw.contains(":Cha"):
		result.append("NULL")
	if raw.contains(":Eva"):
		result.append("EVAL")
	if raw.contains(":Sad") or raw.contains(":Odd") or raw.contains("@"):
		result.append("LINGO")
	if raw.contains("?"):
		result.append("QUESTION")
	
	return result


func _parse_node_paths(node, parent, array):
	var result = []
	
	for p in array:
		result.append(String(node.get_path_to(parent.get_node(p)).get_concatenated_names()))
	
	return result