about summary refs log tree commit diff stats
path: root/data/maps
diff options
context:
space:
mode:
Diffstat (limited to 'data/maps')
-rw-r--r--data/maps/daedalus/connections.txtpb312
-rw-r--r--data/maps/daedalus/rooms/Orange Room Hallway.txtpb4
2 files changed, 316 insertions, 0 deletions
diff --git a/data/maps/daedalus/connections.txtpb b/data/maps/daedalus/connections.txtpb index 223710a..09613ae 100644 --- a/data/maps/daedalus/connections.txtpb +++ b/data/maps/daedalus/connections.txtpb
@@ -535,6 +535,11 @@ connections {
535} 535}
536connections { 536connections {
537 from_room: "Z2 Room" 537 from_room: "Z2 Room"
538 to_room: "Orange Room Hallway"
539 door { name: "Z2 Room Southeast Door" }
540}
541connections {
542 from_room: "Orange Room Hallway"
538 to_room: "Orange Room" 543 to_room: "Orange Room"
539 door { name: "Z2 Room Southeast Door" } 544 door { name: "Z2 Room Southeast Door" }
540} 545}
@@ -1545,3 +1550,310 @@ connections {
1545 to_room: "Pyramid Top" 1550 to_room: "Pyramid Top"
1546 door { name: "Pyramid Third Floor Door" } 1551 door { name: "Pyramid Third Floor Door" }
1547} 1552}
1553connections {
1554 from_room: "Roof"
1555 to_room: "After Bee Room"
1556 oneway: true
1557 roof_access: true
1558}
1559connections {
1560 from_room: "Roof"
1561 to_room: "Amber North 2"
1562 oneway: true
1563 roof_access: true
1564}
1565connections {
1566 from_room: "Roof"
1567 to_room: "Black Hex"
1568 oneway: true
1569 roof_access: true
1570}
1571connections {
1572 from_room: "Roof"
1573 to_room: "Blue Hallway Tall Side"
1574 oneway: true
1575 roof_access: true
1576}
1577connections {
1578 from_room: "Roof"
1579 to_room: "Blue Hallway"
1580 oneway: true
1581 roof_access: true
1582}
1583# Blue Hallway Cut Side is inside.
1584connections {
1585 from_room: "Roof"
1586 to_room: "Eye Painting"
1587 oneway: true
1588 roof_access: true
1589}
1590connections {
1591 from_room: "Roof"
1592 to_room: "Globe Room"
1593 oneway: true
1594 roof_access: true
1595}
1596connections {
1597 from_room: "Roof"
1598 to_room: "Gray Color Door"
1599 oneway: true
1600 roof_access: true
1601}
1602connections {
1603 from_room: "Roof"
1604 to_room: "Green Color Door"
1605 oneway: true
1606 roof_access: true
1607}
1608connections {
1609 from_room: "Roof"
1610 to_room: "Green Smiley"
1611 oneway: true
1612 roof_access: true
1613}
1614connections {
1615 from_room: "Roof"
1616 to_room: "Hedges"
1617 oneway: true
1618 roof_access: true
1619}
1620connections {
1621 from_room: "Roof"
1622 to_room: "Maze Paintings Area"
1623 oneway: true
1624 roof_access: true
1625}
1626connections {
1627 from_room: "Roof"
1628 to_room: "Maze"
1629 oneway: true
1630 roof_access: true
1631}
1632connections {
1633 from_room: "Roof"
1634 to_room: "North Castle Area"
1635 oneway: true
1636 roof_access: true
1637}
1638connections {
1639 from_room: "Roof"
1640 to_room: "Number Paintings Area"
1641 oneway: true
1642 roof_access: true
1643}
1644connections {
1645 from_room: "Roof"
1646 to_room: "Orange Room Hallway"
1647 oneway: true
1648 roof_access: true
1649}
1650connections {
1651 from_room: "Roof"
1652 to_room: "Outside Book Room"
1653 oneway: true
1654 roof_access: true
1655}
1656connections {
1657 from_room: "Roof"
1658 to_room: "Outside Eye Temple"
1659 oneway: true
1660 roof_access: true
1661}
1662connections {
1663 from_room: "Roof"
1664 to_room: "Outside Hedges"
1665 oneway: true
1666 roof_access: true
1667}
1668connections {
1669 from_room: "Roof"
1670 to_room: "Outside Hotel"
1671 oneway: true
1672 roof_access: true
1673}
1674connections {
1675 from_room: "Roof"
1676 to_room: "Outside House"
1677 oneway: true
1678 roof_access: true
1679}
1680connections {
1681 from_room: "Roof"
1682 to_room: "Outside Magic Room"
1683 oneway: true
1684 roof_access: true
1685}
1686connections {
1687 from_room: "Roof"
1688 to_room: "Outside Orange Room"
1689 oneway: true
1690 roof_access: true
1691}
1692connections {
1693 from_room: "Roof"
1694 to_room: "Outside Pyramid"
1695 oneway: true
1696 roof_access: true
1697}
1698connections {
1699 from_room: "Roof"
1700 to_room: "Outside Red Room"
1701 oneway: true
1702 roof_access: true
1703}
1704connections {
1705 from_room: "Roof"
1706 to_room: "Outside Salt Room"
1707 oneway: true
1708 roof_access: true
1709}
1710connections {
1711 from_room: "Roof"
1712 to_room: "Outside Snake Room"
1713 oneway: true
1714 roof_access: true
1715}
1716connections {
1717 from_room: "Roof"
1718 to_room: "Post Orange Smiley Three Way"
1719 oneway: true
1720 roof_access: true
1721}
1722connections {
1723 from_room: "Roof"
1724 to_room: "Purple NW Vestibule"
1725 oneway: true
1726 roof_access: true
1727}
1728connections {
1729 from_room: "Roof"
1730 to_room: "Purple Room East"
1731 oneway: true
1732 roof_access: true
1733}
1734connections {
1735 from_room: "Roof"
1736 to_room: "Purple Room South"
1737 oneway: true
1738 roof_access: true
1739}
1740connections {
1741 from_room: "Roof"
1742 to_room: "Purple Room West"
1743 oneway: true
1744 roof_access: true
1745}
1746connections {
1747 from_room: "Roof"
1748 to_room: "Purple SE Vestibule"
1749 oneway: true
1750 roof_access: true
1751}
1752connections {
1753 from_room: "Roof"
1754 to_room: "Pyramid Second Floor"
1755 oneway: true
1756 roof_access: true
1757}
1758connections {
1759 from_room: "Roof"
1760 to_room: "Pyramid Top"
1761 oneway: true
1762 roof_access: true
1763}
1764connections {
1765 from_room: "Roof"
1766 to_room: "Quiet Entrance"
1767 oneway: true
1768 roof_access: true
1769}
1770connections {
1771 from_room: "Roof"
1772 to_room: "Red Color Door"
1773 oneway: true
1774 roof_access: true
1775}
1776connections {
1777 from_room: "Roof"
1778 to_room: "South Castle Area"
1779 oneway: true
1780 roof_access: true
1781}
1782connections {
1783 from_room: "Roof"
1784 to_room: "Starting Room"
1785 oneway: true
1786 roof_access: true
1787}
1788connections {
1789 from_room: "Roof"
1790 to_room: "Sweet Foyer"
1791 oneway: true
1792 roof_access: true
1793}
1794connections {
1795 from_room: "Roof"
1796 to_room: "Tree Entrance"
1797 oneway: true
1798 roof_access: true
1799}
1800connections {
1801 from_room: "Roof"
1802 to_room: "West Castle Area"
1803 oneway: true
1804 roof_access: true
1805}
1806connections {
1807 from_room: "Roof"
1808 to_room: "West Spire"
1809 oneway: true
1810 roof_access: true
1811}
1812connections {
1813 from_room: "Roof"
1814 to_room: "Yellow Color Door"
1815 oneway: true
1816 roof_access: true
1817}
1818connections {
1819 from_room: "Roof"
1820 to_room: "Z2 Room"
1821 oneway: true
1822 roof_access: true
1823}
1824connections {
1825 from_room: "Roof"
1826 to_room: "Zoo Center"
1827 oneway: true
1828 roof_access: true
1829}
1830connections {
1831 from_room: "Roof"
1832 to_room: "Zoo E"
1833 oneway: true
1834 roof_access: true
1835}
1836connections {
1837 from_room: "Roof"
1838 to_room: "Zoo N"
1839 oneway: true
1840 roof_access: true
1841}
1842connections {
1843 from_room: "Roof"
1844 to_room: "Zoo NE"
1845 oneway: true
1846 roof_access: true
1847}
1848connections {
1849 from_room: "Roof"
1850 to_room: "Zoo S"
1851 oneway: true
1852 roof_access: true
1853}
1854connections {
1855 from_room: "Roof"
1856 to_room: "Zoo SE"
1857 oneway: true
1858 roof_access: true
1859}
diff --git a/data/maps/daedalus/rooms/Orange Room Hallway.txtpb b/data/maps/daedalus/rooms/Orange Room Hallway.txtpb new file mode 100644 index 0000000..915e698 --- /dev/null +++ b/data/maps/daedalus/rooms/Orange Room Hallway.txtpb
@@ -0,0 +1,4 @@
1name: "Orange Room Hallway"
2panel_display_name: "Orange Room"
3# This has the same door at both sides, and mainly just connects Z2 Room and
4# Orange Room. It's separate because you can also get here from the Roof.
class="n">h_keyholder : h_room.keyholders()) { room.add_keyholders( ProcessKeyholder(h_keyholder, current_map_name, room.name())); } } uint64_t ProcessPanel(const HumanPanel& h_panel, const std::string& current_map_name, const std::string& current_room_name) { uint64_t panel_id = container_.FindOrAddPanel(current_map_name, current_room_name, h_panel.name(), std::nullopt, std::nullopt); PanelData& panel = *container_.all_objects().mutable_panels(panel_id); panel.set_path(h_panel.path()); panel.set_clue(h_panel.clue()); panel.set_answer(h_panel.answer()); std::copy( h_panel.symbols().begin(), h_panel.symbols().end(), google::protobuf::RepeatedFieldBackInserter(panel.mutable_symbols())); std::copy( h_panel.proxies().begin(), h_panel.proxies().end(), google::protobuf::RepeatedFieldBackInserter(panel.mutable_proxies())); if (h_panel.has_required_door()) { std::optional<std::string> map_name = h_panel.required_door().has_map() ? std::optional<std::string>(h_panel.required_door().map()) : std::nullopt; panel.set_required_door(container_.FindOrAddDoor( map_name, h_panel.required_door().name(), current_map_name)); } if (h_panel.has_required_room()) { std::optional<std::string> map_name = h_panel.required_room().has_map() ? std::optional<std::string>(h_panel.required_room().map()) : std::nullopt; panel.set_required_room(container_.FindOrAddRoom( map_name, h_panel.required_room().name(), current_map_name)); } return panel_id; } uint64_t ProcessPainting(const HumanPainting& h_painting, const std::string& current_map_name, const std::string& current_room_name) { uint64_t painting_id = container_.FindOrAddPainting( current_map_name, current_room_name, h_painting.name(), std::nullopt, std::nullopt); Painting& painting = *container_.all_objects().mutable_paintings(painting_id); painting.set_path(h_painting.path()); painting.set_display_name(h_painting.display_name()); painting.set_orientation(h_painting.orientation()); // Setting this explicitly because the Godot protobuf doesn't support // custom defaults. painting.set_gravity(h_painting.gravity()); if (h_painting.has_move()) { painting.set_move(h_painting.move()); } if (h_painting.has_enter_only()) { painting.set_enter_only(h_painting.enter_only()); } if (h_painting.has_exit_only()) { painting.set_exit_only(h_painting.exit_only()); } if (h_painting.has_required_door()) { std::optional<std::string> map_name = h_painting.required_door().has_map() ? std::optional<std::string>(h_painting.required_door().map()) : std::nullopt; painting.set_required_door(container_.FindOrAddDoor( map_name, h_painting.required_door().name(), current_map_name)); } return painting_id; } uint64_t ProcessPort(const HumanPort& h_port, const std::string& current_map_name, const std::string& current_room_name) { uint64_t port_id = container_.FindOrAddPort(current_map_name, current_room_name, h_port.name(), std::nullopt, std::nullopt); Port& port = *container_.all_objects().mutable_ports(port_id); port.set_path(h_port.path()); port.set_orientation(h_port.orientation()); // Setting this explicitly because the Godot protobuf doesn't support // custom defaults. port.set_gravity(h_port.gravity()); if (h_port.has_required_door()) { std::optional<std::string> map_name = h_port.required_door().has_map() ? std::optional<std::string>(h_port.required_door().map()) : std::nullopt; port.set_required_door(container_.FindOrAddDoor( map_name, h_port.required_door().name(), current_map_name)); } return port_id; } uint64_t ProcessLetter(const HumanLetter& h_letter, const std::string& current_map_name, const std::string& current_room_name) { uint64_t letter_id = container_.FindOrAddLetter(h_letter.key(), h_letter.level2()); Letter& letter = *container_.all_objects().mutable_letters(letter_id); letter.set_room_id(container_.FindOrAddRoom( current_map_name, current_room_name, std::nullopt)); letter.set_path(h_letter.path()); return letter_id; } uint64_t ProcessMastery(const HumanMastery& h_mastery, const std::string& current_map_name, const std::string& current_room_name) { uint64_t mastery_id = container_.FindOrAddMastery( current_map_name, current_room_name, h_mastery.name(), std::nullopt, std::nullopt); Mastery& mastery = *container_.all_objects().mutable_masteries(mastery_id); mastery.set_path(h_mastery.path()); return mastery_id; } uint64_t ProcessKeyholder(const HumanKeyholder& h_keyholder, const std::string& current_map_name, const std::string& current_room_name) { uint64_t keyholder_id = container_.FindOrAddKeyholder( current_map_name, current_room_name, h_keyholder.name(), std::nullopt, std::nullopt); Keyholder& keyholder = *container_.all_objects().mutable_keyholders(keyholder_id); keyholder.set_path(h_keyholder.path()); return keyholder_id; } void ProcessDoorsFile(std::filesystem::path path, const std::string& current_map_name) { if (!std::filesystem::exists(path)) { return; } auto doors = ReadMessageFromFile<HumanDoors>(path.string()); for (const HumanDoor& door : doors.doors()) { ProcessDoor(door, current_map_name); } } void ProcessDoor(const HumanDoor& h_door, const std::string& current_map_name) { uint64_t door_id = container_.FindOrAddDoor(current_map_name, h_door.name(), std::nullopt); Door& door = *container_.all_objects().mutable_doors(door_id); if (h_door.has_location_room()) { door.set_room_id(container_.FindOrAddRoom( current_map_name, h_door.location_room(), std::nullopt)); Room& room = *container_.all_objects().mutable_rooms(door.room_id()); room.add_doors(door_id); } std::copy( h_door.receivers().begin(), h_door.receivers().end(), google::protobuf::RepeatedFieldBackInserter(door.mutable_receivers())); std::copy( h_door.switches().begin(), h_door.switches().end(), google::protobuf::RepeatedFieldBackInserter(door.mutable_switches())); for (const PaintingIdentifier& pi : h_door.move_paintings()) { std::optional<std::string> map_name = pi.has_map() ? std::optional<std::string>(pi.map()) : std::nullopt; door.add_move_paintings(container_.FindOrAddPainting( map_name, pi.room(), pi.name(), current_map_name, std::nullopt)); } for (const PanelIdentifier& pi : h_door.panels()) { ProxyIdentifier* proxy = door.add_panels(); std::optional<std::string> map_name = pi.has_map() ? std::optional<std::string>(pi.map()) : std::nullopt; proxy->set_panel(container_.FindOrAddPanel( map_name, pi.room(), pi.name(), current_map_name, std::nullopt)); if (pi.has_answer()) { proxy->set_answer(pi.answer()); } } for (const KeyholderIdentifier& ki : h_door.keyholders()) { KeyholderAnswer* answer = door.add_keyholders(); std::optional<std::string> map_name = ki.has_map() ? std::optional<std::string>(ki.map()) : std::nullopt; answer->set_keyholder(container_.FindOrAddKeyholder( map_name, ki.room(), ki.name(), current_map_name, std::nullopt)); if (ki.has_key()) { answer->set_key(ki.key()); } } for (const RoomIdentifier& ri : h_door.rooms()) { std::optional<std::string> map_name = ri.has_map() ? std::optional<std::string>(ri.map()) : std::nullopt; door.add_rooms( container_.FindOrAddRoom(map_name, ri.name(), current_map_name)); } for (const DoorIdentifier& di : h_door.doors()) { std::optional<std::string> map_name = di.has_map() ? std::optional<std::string>(di.map()) : std::nullopt; door.add_doors( container_.FindOrAddDoor(map_name, di.name(), current_map_name)); } if (h_door.has_control_center_color()) { door.set_control_center_color(h_door.control_center_color()); } if (h_door.has_complete_at()) { door.set_complete_at(h_door.complete_at()); } door.set_type(h_door.type()); } void ProcessConnectionsFile(std::filesystem::path path, std::optional<std::string> current_map_name) { if (!std::filesystem::exists(path)) { return; } auto connections = ReadMessageFromFile<HumanConnections>(path.string()); for (const HumanConnection& connection : connections.connections()) { ProcessConnection(connection, current_map_name); } } void ProcessConnection(const HumanConnection& human_connection, const std::optional<std::string>& current_map_name) { Connection f_connection; if (human_connection.has_from_room()) { f_connection.set_from_room(container_.FindOrAddRoom( std::nullopt, human_connection.from_room(), current_map_name)); } else if (human_connection.has_from()) { ProcessSingleConnection(human_connection.from(), current_map_name, f_connection); } Connection r_connection; r_connection.set_to_room(f_connection.from_room()); if (human_connection.has_to_room()) { r_connection.set_from_room(container_.FindOrAddRoom( std::nullopt, human_connection.to_room(), current_map_name)); } else if (human_connection.has_to()) { ProcessSingleConnection(human_connection.to(), current_map_name, r_connection); } f_connection.set_to_room(r_connection.from_room()); if (human_connection.has_door()) { std::optional<std::string> map_name = human_connection.door().has_map() ? std::optional<std::string>(human_connection.door().map()) : std::nullopt; uint64_t door_id = container_.FindOrAddDoor( map_name, human_connection.door().name(), current_map_name); f_connection.set_required_door(door_id); r_connection.set_required_door(door_id); } container_.AddConnection(f_connection); if (!human_connection.oneway()) { container_.AddConnection(r_connection); } } void ProcessSingleConnection( const HumanConnection::Endpoint& endpoint, const std::optional<std::string>& current_map_name, Connection& connection) { if (endpoint.has_room()) { std::optional<std::string> map_name = endpoint.room().has_map() ? std::optional<std::string>(endpoint.room().map()) : std::nullopt; connection.set_from_room(container_.FindOrAddRoom( map_name, endpoint.room().name(), current_map_name)); } else if (endpoint.has_painting()) { std::optional<std::string> map_name = endpoint.painting().has_map() ? std::optional<std::string>(endpoint.painting().map()) : std::nullopt; std::string room_name; if (!endpoint.painting().has_room()) { std::cout << "Missing room name for painting " << endpoint.painting().name() << std::endl; room_name = "default"; } else { room_name = endpoint.painting().room(); } connection.set_from_room( container_.FindOrAddRoom(map_name, room_name, current_map_name)); connection.set_painting(container_.FindOrAddPainting( map_name, room_name, endpoint.painting().name(), current_map_name, std::nullopt)); } else if (endpoint.has_port()) { std::optional<std::string> map_name = endpoint.port().has_map() ? std::optional<std::string>(endpoint.port().map()) : std::nullopt; std::string room_name; if (!endpoint.port().has_room()) { std::cout << "Missing room name for port " << endpoint.port().name() << std::endl; room_name = "default"; } else { room_name = endpoint.port().room(); } connection.set_from_room( container_.FindOrAddRoom(map_name, room_name, current_map_name)); connection.set_port( container_.FindOrAddPort(map_name, room_name, endpoint.port().name(), current_map_name, std::nullopt)); } else if (endpoint.has_panel()) { std::optional<std::string> map_name = endpoint.panel().has_map() ? std::optional<std::string>(endpoint.panel().map()) : std::nullopt; std::string room_name; if (!endpoint.panel().has_room()) { std::cout << "Missing room name for panel " << endpoint.panel().name() << std::endl; room_name = "default"; } else { room_name = endpoint.panel().room(); } connection.set_from_room( container_.FindOrAddRoom(map_name, room_name, current_map_name)); connection.mutable_panel()->set_panel(container_.FindOrAddPanel( map_name, room_name, endpoint.panel().name(), current_map_name, std::nullopt)); if (endpoint.panel().has_answer()) { connection.mutable_panel()->set_answer(endpoint.panel().answer()); } } } void ProcessIdsFile(std::filesystem::path path) { auto ids = ReadMessageFromFile<IdMappings>(path.string()); for (const auto& [map_name, map] : ids.maps()) { for (const auto& [door_name, ap_id] : map.doors()) { uint64_t door_id = container_.FindOrAddDoor(map_name, door_name, std::nullopt); container_.all_objects().mutable_doors(door_id)->set_ap_id(ap_id); } for (const auto& [room_name, room] : map.rooms()) { for (const auto& [panel_name, ap_id] : room.panels()) { uint64_t panel_id = container_.FindOrAddPanel( map_name, room_name, panel_name, std::nullopt, std::nullopt); container_.all_objects().mutable_panels(panel_id)->set_ap_id(ap_id); } for (const auto& [mastery_name, ap_id] : room.masteries()) { uint64_t mastery_id = container_.FindOrAddMastery( map_name, room_name, mastery_name, std::nullopt, std::nullopt); container_.all_objects() .mutable_masteries(mastery_id) ->set_ap_id(ap_id); } } } auto& specials = *container_.all_objects().mutable_special_ids(); for (const auto& [tag, id] : ids.special()) { specials[tag] = id; } for (const auto& [letter_name, ap_id] : ids.letters()) { uint64_t letter_id = container_.FindLetterByName(letter_name); container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); } } std::string mapdir_; std::string outputpath_; Container container_; }; } // namespace } // namespace com::fourisland::lingo2_archipelago int main(int argc, char** argv) { if (argc != 3) { std::cout << "Incorrect argument count." << std::endl; std::cout << "Usage: datapacker [path to map directory] [output file]" << std::endl; return 1; } std::string mapdir = argv[1]; std::string outputpath = argv[2]; com::fourisland::lingo2_archipelago::DataPacker data_packer(mapdir, outputpath); data_packer.Run(); return 0; }