about summary refs log tree commit diff stats
path: root/apworld/client/main.gd
Commit message (Collapse)AuthorAgeFilesLines
* Handle Icarus's paintingsStar Rauchenberger2025-10-221-0/+1
|
* Show in-game when connection dropsStar Rauchenberger2025-10-011-0/+5
|
* Disconnect when saying no to version mismatchStar Rauchenberger2025-10-011-0/+3
|
* Client uses new versioning scheme nowStar Rauchenberger2025-09-291-5/+8
|
* Automatically close client when clicking QuitStar Rauchenberger2025-09-271-0/+1
|
* Game talks through CommonClient nowStar Rauchenberger2025-09-251-8/+8
|
* Client can be run from zipped apworld nowStar Rauchenberger2025-09-251-31/+31
|
* Move the client into the apworldStar Rauchenberger2025-09-251-0/+284
Only works on source right now, not as an apworld.
61 162 163 164 165 166 167 168 169 170 171
@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