about summary refs log tree commit diff stats
path: root/data/maps/daedalus
Commit message (Collapse)AuthorAgeFilesLines
* Ensure rainbow rooms entrance is always an itemStar Rauchenberger33 hours1-0/+1
|
* Annotated daedalus only mapsStar Rauchenberger2026-01-151-0/+1
|
* Latch the daed hedges tower doorStar Rauchenberger2025-11-101-0/+2
|
* Light Green Hex -> Pale Green HexStar Rauchenberger2025-11-021-1/+1
|
* Move direction panels when castle roof accessStar Rauchenberger2025-11-011-0/+3
|
* (Almost) all panels are locations or connections nowStar Rauchenberger2025-11-011-6/+168
|
* Removed some TODOsStar Rauchenberger2025-10-261-2/+0
|
* Latch the control center color doorsStar Rauchenberger2025-10-231-0/+3
|
* Renamed Welcome Back Door locationStar Rauchenberger2025-10-021-0/+1
|
* Rename seasonings doors locationStar Rauchenberger2025-09-291-0/+1
|
* Added display names to portsStar Rauchenberger2025-09-2815-0/+16
|
* [Data] Annotate shuffleable portsStar Rauchenberger2025-09-2115-6/+31
|
* [Data] Rename SMILE locationsStar Rauchenberger2025-09-191-0/+5
* [Data] Fix castle stairs (again)Star Rauchenberger2025-08-291-2/+2
|
* [Data] Replace move_paintings with receiversStar Rauchenberger2025-08-281-0/+3
| | | | Also fixed castle stairs.
* Couple of logic errorsStar Rauchenberger2025-08-281-1/+1
|
* Ok another Lime Pyramid connectionStar Rauchenberger2025-08-242-0/+25
|
* Connected up Lime PyramidStar Rauchenberger2025-08-242-0/+81
|
* Fixed typo in Blue Smiley Annex connectionStar Rauchenberger2025-08-241-1/+1
|
* Added daedalusStar Rauchenberger2025-08-24155-0/+9165
n class="w"> "Original line: " << original_line; throw std::invalid_argument(errormsg.str()); } std::string strval(line.substr(0, divider)); line.remove_prefix(divider + 2); if (key == "name") { heading.name = strval; } else if (key == "parent") { heading.parent = strval; } else if (key == "path") { heading.path = strval; } else if (key == "type") { heading.resource_type = strval; } else if (key == "id") { heading.id = strval; } } else if (line[0] == 'S' || line[0] == 'E') { GodotInstanceType rrval; char internal = line[0]; line.remove_prefix(13); // SubResource(" divider = line.find_first_of("\""); if (divider == std::string_view::npos) { std::ostringstream errormsg; errormsg << "Malformatted heading: " << line << std::endl << "Original line: " << original_line; throw std::invalid_argument(errormsg.str()); } std::string refid = std::string(line.substr(0, divider)); line.remove_prefix(divider + 3); GodotInstanceType instance_type; if (internal == 'E') { instance_type = GodotExtResourceRef{.id = refid}; } else { // SubResource is not supported right now. } if (key == "instance") { heading.instance_type = instance_type; } else { // Other keys aren't supported right now. } } else { divider = line.find_first_of(" ]"); if (divider == std::string_view::npos) { std::ostringstream errormsg; errormsg << "Malformatted heading: " << line << std::endl << "Original line: " << original_line; throw std::invalid_argument(errormsg.str()); } int numval = std::atoi(line.substr(0, divider).data()); line.remove_prefix(divider + 1); // keyvals_[key] = numval; } } return heading; } } // namespace std::string GodotNode::GetPath() const { if (parent.empty() || parent == ".") { return name; } else { return parent + "/" + name; } } GodotScene ReadGodotSceneFromFile(const std::string& path) { std::map<std::string, GodotExtResource> ext_resources; std::vector<GodotNode> nodes; std::ifstream input(path); std::string line; bool section_started = false; Heading cur_heading; std::ostringstream cur_value; bool value_started = false; auto handle_end_of_section = [&]() { section_started = false; value_started = false; if (cur_heading.type == "sub_resource") { // sub_resources_[std::get<int>(cur_heading.GetKeyval("id"))] = // {cur_heading, cur_value.str(), ""}; } else { // other_.emplace_back(cur_heading, cur_value.str()); } cur_value = {}; }; while (std::getline(input, line)) { if (section_started && (line.empty() || line[0] == '[')) { handle_end_of_section(); } if (!line.empty() && line[0] == '[') { Heading heading = ParseTscnHeading(line); if (heading.type == "gd_scene") { // file_descriptor_ = heading; } else if (heading.type == "ext_resource") { GodotExtResource ext_resource; ext_resource.path = heading.path; ext_resource.type = heading.resource_type; ext_resources[heading.id] = ext_resource; } else if (heading.type == "node") { if (heading.parent != "") { nodes.push_back(GodotNode{.name = heading.name, .parent = heading.parent, .instance_type = heading.instance_type}); } } else { cur_heading = heading; section_started = true; } } else if (!line.empty()) { if (value_started) { cur_value << std::endl; } else { value_started = true; } cur_value << line; } } if (section_started) { handle_end_of_section(); } return GodotScene(std::move(ext_resources), std::move(nodes)); } } // namespace com::fourisland::lingo2_archipelago