edition = "2023"; import "common.proto"; package com.fourisland.lingo2_archipelago; message ProxyIdentifier { uint64 panel = 1; string answer = 2; } message Connection { uint64 from_room = 1; uint64 to_room = 2; uint64 required_door = 3; oneof trigger { uint64 port = 4; uint64 painting = 5; ProxyIdentifier panel = 6; } } message Door { uint64 id = 1; uint64 ap_id = 11; uint64 map_id = 9; uint64 room_id = 10; string name = 2; repeated string receivers = 3; repeated uint64 move_paintings = 4; repeated ProxyIdentifier panels = 5; string control_center_color = 6; repeated string switches = 7; DoorType type = 8; } message Panel { uint64 id = 1; uint64 ap_id = 10; uint64 room_id = 2; string name = 3; string path = 4; string clue = 5; string answer = 6; repeated string symbols = 7; repeated Proxy proxies = 8; uint64 required_door = 9; } message Painting { uint64 id = 1; uint64 room_id = 2; string name = 9; string path = 10; string display_name = 4; string orientation = 3; bool move = 6; bool enter_only = 7; bool flipped = 8; uint64 required_door = 5; } message Port { uint64 id = 1; uint64 room_id = 2; string name = 3; string path = 4; string orientation = 5; uint64 required_door = 6; } message Room { uint64 id = 1; uint64 map_id = 8; string name = 2; string display_name = 3; repeated uint64 panels = 4; repeated uint64 paintings = 5; repeated Letter letters = 6; repeated uint64 ports = 7; repeated uint64 doors = 9; } message Map { uint64 id = 1; string name = 2; } message AllObjects { repeated Map maps = 7; repeated Room rooms = 1; repeated Door doors = 2; repeated Panel panels = 3; repeated Painting paintings = 4; repeated Port ports = 5; repeated Connection connections = 6; map special_ids = 8; } Archipelago/gamedata.gd?h=data-v4&id=9e023e65e171a40fc72b34700260e3b8e6a80228'>diff stats
path: root/client/Archipelago/gamedata.gd
blob: 16368a94393d105c5a186fc3706a0038b3765e15 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
extends Node

var SCRIPT_proto

var objects
var door_id_by_map_node_path = {}
var painting_id_by_map_node_path = {}
var door_id_by_ap_id = {}
var map_id_by_name = {}


func _init(proto_script):
	SCRIPT_proto = proto_script


func load(data_bytes):
	objects = SCRIPT_proto.AllObjects.new()

	var result_code = objects.from_bytes(data_bytes)
	if result_code != SCRIPT_proto.PB_ERR.NO_ERRORS:
		print("Could not load generated data: %d" % result_code)
		return

	for map in objects.get_maps():
		map_id_by_name[map.get_name()] = map.get_id()

	for door in objects.get_doors():
		var map = objects.get_maps()[door.get_map_id()]

		if not map.get_name() in door_id_by_map_node_path:
			door_id_by_map_node_path[map.get_name()] = {}

		var map_data = door_id_by_map_node_path[map.get_name()]
		for receiver in door.get_receivers():
			map_data[receiver] = door.get_id()

		for painting_id in door.get_move_paintings():
			var painting = objects.get_paintings()[painting_id]
			map_data[painting.get_path()] = door.get_id()

		if door.has_ap_id():
			door_id_by_ap_id[door.get_ap_id()] = door.get_id()

	for painting in objects.get_paintings():
		var room = objects.get_rooms()[painting.get_room_id()]
		var map = objects.get_maps()[room.get_map_id()]

		if not map.get_name() in painting_id_by_map_node_path:
			painting_id_by_map_node_path[map.get_name()] = {}

		var _map_data = painting_id_by_map_node_path[map.get_name()]


func get_door_for_map_node_path(map_name, node_path):
	if not door_id_by_map_node_path.has(map_name):
		return null

	var map_data = door_id_by_map_node_path[map_name]
	return map_data.get(node_path, null)


func get_door_ap_id(door_id):
	var door = objects.get_doors()[door_id]
	if door.has_ap_id():
		return door.get_ap_id()
	else:
		return null


func get_door_receivers(door_id):
	var door = objects.get_doors()[door_id]
	return door.get_receivers()


func get_door_map_name(door_id):
	var door = objects.get_doors()[door_id]
	var map = objects.get_maps()[door.get_map_id()]
	return map.get_name()