Add Overworld locations.
Refactor dungeon module to locations to reflect what it contains.
This commit is contained in:
parent
5500d628f1
commit
b343a0cb80
|
@ -5,8 +5,8 @@ use lazy_static::lazy_static;
|
|||
use super::item::ItemId;
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
#[error("{0} is not a dungeon room")]
|
||||
pub struct NotADungeonRoom(u8);
|
||||
#[error("{0} is not a dungeon super tile")]
|
||||
pub struct NotADungeonSuperTile(u8);
|
||||
|
||||
#[derive(Clone, Copy, Eq, Hash, PartialEq)]
|
||||
pub enum Dungeon {
|
||||
|
@ -25,14 +25,14 @@ pub enum Dungeon {
|
|||
GanonsTower,
|
||||
}
|
||||
|
||||
pub fn get_dungeon_from_room(room_id: u8) -> Result<Dungeon, NotADungeonRoom> {
|
||||
pub fn get_dungeon_from_room(room_id: u8) -> Result<Dungeon, NotADungeonSuperTile> {
|
||||
for (dungeon, rooms) in DUNGEON_ROOMS.iter() {
|
||||
if let Ok(_) = rooms.binary_search(&room_id) {
|
||||
return Ok(*dungeon);
|
||||
}
|
||||
}
|
||||
|
||||
Err(NotADungeonRoom(room_id))
|
||||
Err(NotADungeonSuperTile(room_id))
|
||||
}
|
||||
|
||||
const HYRULE_CASTLE_ROOMS: [u8; 21] = [
|
||||
|
@ -145,309 +145,391 @@ lazy_static! {
|
|||
|
||||
#[derive(Clone, Copy, Eq, PartialEq, Hash)]
|
||||
#[repr(u16)]
|
||||
pub enum Room {
|
||||
Ganon = 0,
|
||||
HyruleCastleNorthCorridor,
|
||||
HyruleCastleSwitchRoom,
|
||||
HoulihanRoom,
|
||||
TurtleRockCrystalRollerRoom,
|
||||
EmptyCloneRoom0x05,
|
||||
SwampPalaceArrghus,
|
||||
TowerOfHeraMoldorm,
|
||||
CaveHealingFairy,
|
||||
PalaceOfDarknessMedusaChestRoom,
|
||||
PalaceOfDarknessStalfossTrapRoom,
|
||||
PalaceOfDarknessTurtleRoom,
|
||||
GanonsTowerEntranceRoom,
|
||||
GanonsTowerAgahnim2,
|
||||
IcePalaceEntranceRoom,
|
||||
EmptyCloneRoom0x0F,
|
||||
GanonEvacuationRoute,
|
||||
HyruleCastleBombableStockRoom,
|
||||
Sanctuary,
|
||||
TurtleRockHokkuBokkuKeyRoom2,
|
||||
TurtleRockBigKeyRoom,
|
||||
TurtleRockUselessTubes,
|
||||
SwampPalaceSwimmingTreadmill,
|
||||
TowerOfHeraMoldormFallRoom,
|
||||
Cave0x18BigFairyDropEntrance,
|
||||
PalaceOfDarknessDarkMaze,
|
||||
PalaceOfDarknessBigChestRoom,
|
||||
PalaceOfDarknessMimicsMovingWallRoom,
|
||||
GanonsTowerIceArmos,
|
||||
GanonsTowerFinalHallway,
|
||||
IcePalaceBombFloorBariRoom,
|
||||
IcePalacePengatorBigKeyRoom,
|
||||
AgahnimsTowerAgahnim,
|
||||
HyruleCastleKeyRatRoom,
|
||||
HyruleCastleSewerTextTriggerRoom,
|
||||
TurtleRockWestExitToBalcony,
|
||||
TurtleRockDoubleHokkuBokkuBigChestRoom,
|
||||
EmptyCloneRoom0x25,
|
||||
SwampPalaceStatueRoom,
|
||||
TowerOfHeraBigChest,
|
||||
SwampPalaceEntranceRoom,
|
||||
SkullWoodsMothula,
|
||||
PalaceOfDarknessBigHubRoom,
|
||||
PalaceOfDarknessMapChestFairyRoom,
|
||||
CaveHookshotCaveBackdoor,
|
||||
EmptyCloneRoom0x2D,
|
||||
IcePalaceCompassRoom,
|
||||
CaveKakarikoWellHP,
|
||||
AgahnimsTowerMaidenSacrificeChamber,
|
||||
TowerOfHeraHardhatBeetleRoom,
|
||||
HyruleCastleSewerKeyChestRoom,
|
||||
DesertPalaceLanmolas,
|
||||
SwampPalacePushBlockPuzzlePreBigKeyRoom,
|
||||
SwampPalaceBigKeyBsRoom,
|
||||
SwampPalaceBigChestRoom,
|
||||
SwampPalaceMapChestWaterFillRoom,
|
||||
SwampPalaceKeyPotRoom,
|
||||
SkullWoodsGibdoKeyMothulaHoleRoom,
|
||||
PalaceOfDarknessBombableFloorRoom,
|
||||
PalaceOfDarknessSpikeBlockConveyorRoom,
|
||||
CaveHookshotCave,
|
||||
GanonsTowerTorchRoom2,
|
||||
IcePalaceStalfosKnightConveyorHellway,
|
||||
IcePalaceMapChestRoom,
|
||||
AgahnimsTowerFinalBridgeRoom,
|
||||
HyruleCastleFirstDarkRoom,
|
||||
HyruleCastle6RopesRoom,
|
||||
DesertPalaceTorchPuzzleMovingWallRoom,
|
||||
ThievesTownBigChestRoom,
|
||||
ThievesTownJailCellsRoom,
|
||||
SwampPalaceCompassChestRoom,
|
||||
EmptyCloneRoom0x47,
|
||||
EmptyCloneRoom0x48,
|
||||
SkullWoodsGibdoTorchPuzzleRoom,
|
||||
PalaceOfDarknessEntranceRoom,
|
||||
PalaceOfDarknessWarpsSouthMimicRoom,
|
||||
GanonsTowerMiniHelmasaurConveyorRoom,
|
||||
GanonsTowerMoldormRoom,
|
||||
IcePalaceBombJumpRoom,
|
||||
IcePalaceCloneRoomFairyRoom,
|
||||
HyruleCastleWestCorridor,
|
||||
HyruleCastleThroneRoom,
|
||||
HyruleCastleEastCorridor,
|
||||
DesertPalacePopos2BeamosHellwayRoom,
|
||||
SwampPalaceUpstairsPitsRoom,
|
||||
CastleSecretEntranceUncleRoom,
|
||||
SkullWoodsKeyPotTrapRoom,
|
||||
SkullWoodsBigKeyRoom,
|
||||
SkullWoodsBigChestRoom,
|
||||
SkullWoodsFinalSectionEntranceRoom,
|
||||
PalaceOfDarknessHelmasaurKing,
|
||||
GanonsTowerSpikePitRoom,
|
||||
GanonsTowerGanonBallZ,
|
||||
GanonsTowerGauntlet123,
|
||||
IcePalaceLonelyFirebar,
|
||||
IcePalaceHiddenChestSpikeFloorRoom,
|
||||
HyruleCastleWestEntranceRoom,
|
||||
HyruleCastleMainEntranceRoom,
|
||||
HyruleCastleEastEntranceRoom,
|
||||
DesertPalaceFinalSectionEntranceRoom,
|
||||
ThievesTownWestAtticRoom,
|
||||
ThievesTownEastAtticRoom,
|
||||
SwampPalaceHiddenChestHiddenDoorRoom,
|
||||
SkullWoodsCompassChestRoom,
|
||||
SkullWoodsKeyChestTrapRoom,
|
||||
EmptyCloneRoom0x69,
|
||||
PalaceOfDarknessRupeeRoom,
|
||||
GanonsTowerMimicsRoom,
|
||||
GanonsTowerLanmolasRoom,
|
||||
GanonsTowerGauntlet45,
|
||||
IcePalacePengatorsRoom,
|
||||
EmptyCloneRoom0x6F,
|
||||
HyruleCastleSmallCorridorToJailCells,
|
||||
HyruleCastleBoomerangChestRoom,
|
||||
HyruleCastleMapChestRoom,
|
||||
DesertPalaceBigChestRoom,
|
||||
DesertPalaceMapChestRoom,
|
||||
DesertPalaceBigKeyChestRoom,
|
||||
SwampPalaceWaterDrainRoom,
|
||||
TowerOfHeraEntranceRoom,
|
||||
EmptyCloneRoom0x78,
|
||||
EmptyCloneRoom0x79,
|
||||
EmptyCloneRoom0x7A,
|
||||
GanonsTowerMisc,
|
||||
GanonsTowerEastSideCollapsingBridgeExplodingWallRoom,
|
||||
GanonsTowerWinderWarpMazeRoom,
|
||||
IcePalaceHiddenChestBombableFloorRoom,
|
||||
IcePalaceBigSpikeTrapsRoom,
|
||||
HyruleCastleJailCellRoom,
|
||||
HyruleCastleNextToChasmRoom,
|
||||
HyruleCastleBasementChasmRoom,
|
||||
DesertPalaceWestEntranceRoom,
|
||||
DesertPalaceMainEntranceRoom,
|
||||
DesertPalaceEastEntranceRoom,
|
||||
EmptyCloneRoom0x86,
|
||||
TowerOfHeraTileRoom,
|
||||
EmptyCloneRoom0x88,
|
||||
EasternPalaceFairyRoom,
|
||||
EmptyCloneRoom0x8A,
|
||||
GanonsTowerBlockPuzzleSpikeSkipMapChestRoom,
|
||||
GanonsTowerEastAndWestDownstairsBigChestRoom,
|
||||
GanonsTowerTileTorchPuzzleRoom,
|
||||
IcePalaceBlobsWithTetrisBarrier,
|
||||
EmptyCloneRoom0x8F,
|
||||
MiseryMireVitreous,
|
||||
MiseryMireFinalSwitchRoom,
|
||||
MiseryMireDarkBombWallSwitchesRoom,
|
||||
MiseryMireDarkCaneFLoorSwitchPuzzleRoom,
|
||||
EmptyCloneRoom0x94,
|
||||
GanonsTowerFinalCollapsingBridgeRoom,
|
||||
GanonsTowerTorches1Room,
|
||||
MiseryMireTorchPuzzleMovingWallRoom,
|
||||
MiseryMireEntranceRoom,
|
||||
EasternPalaceEyegoreKeyRoom,
|
||||
EmptyCloneRoom0x9A,
|
||||
GanonsTowerManySpikesWarpMazeRoom,
|
||||
GanonsTowerInvisibleFloorMazeRoom,
|
||||
GanonsTowerCompassChestInvisibleFloorRoom,
|
||||
IcePalaceBigChestRoom,
|
||||
IcePalaceIceFloorPotsKeyAndSwitch,
|
||||
MiseryMirePreVitreousRoom,
|
||||
MiseryMireFishRoom,
|
||||
MiseryMireBridgeKeyChestRoom,
|
||||
MiseryMireEmptyLConnectingRoom,
|
||||
TurtleRockTrinexx,
|
||||
GanonsTowerWizzrobesRooms,
|
||||
GanonsTowerMoldormFallRoom,
|
||||
TowerOfHeraFairyRoom,
|
||||
EasternPalaceStalfosSpawnRoom,
|
||||
EasternPalaceBigChestRoom,
|
||||
EasternPalaceMapChestRoom,
|
||||
ThievesTownMovingSpikesKeyPotRoom,
|
||||
ThievesTownBlindTheThief,
|
||||
EmptyCloneRoom0xAD,
|
||||
IcePalaceIceTRoom,
|
||||
IcePalaceIceBridgeRoom,
|
||||
AgahnimsTowerCircleOfPots,
|
||||
MiseryMireHourglassRoom,
|
||||
MiseryMireSlugRoom,
|
||||
MiseryMireSpikeKeyChestRoom,
|
||||
TurtleRockPreTrinexxRoom,
|
||||
TurtleRockDarkMaze,
|
||||
TurtleRockChainChompsRoom,
|
||||
TurtleRockMapChestKeyChestRollerRoom,
|
||||
EasternPalaceBigKeyRoom,
|
||||
EasternPalaceLobbyCannonballsRoom,
|
||||
EasternPalaceDarkAntifairyKeyPotRoom,
|
||||
ThievesTownHellway,
|
||||
ThievesTownConveyorToilet,
|
||||
EmptyCloneRoom0xBD,
|
||||
IcePalaceBlockPuzzleRoom,
|
||||
IcePalaceCloneRoomSwitchRoom,
|
||||
AgahnimsTowerDarkBridgeRoom,
|
||||
MiseryMireCompassChestTileRoom,
|
||||
MiseryMireBigHubRoom,
|
||||
MiseryMireBigChestRoom,
|
||||
TurtleRockFinalCrystalSwitchPuzzleRoom,
|
||||
TurtleRockLaserBridge,
|
||||
TurtleRockSomariaHub,
|
||||
TurtleRockTorchPuzzle,
|
||||
EasternPalaceArmosKnights,
|
||||
EasternPalaceEntranceRoom,
|
||||
UnknownRoom,
|
||||
ThievesTownNorthWestEntranceRoom,
|
||||
ThievesTownNorthEastEntranceRoom,
|
||||
EmptyCloneRoom0xCD,
|
||||
IcePalaceHoleToKholdstareRoom,
|
||||
EmptyCloneRoom0xCF,
|
||||
AgahnimsTowerDarkMaze,
|
||||
MiseryMireConveyorSlugBigKeyRoom,
|
||||
MiseryMireWizzrobesRoom,
|
||||
EmptyCloneRoom0xD3,
|
||||
EmptyCloneRoom0xD4,
|
||||
TurtleRockLaserKeyRoom,
|
||||
TurtleRockEntranceRoom,
|
||||
EmptyCloneRoom0xD7,
|
||||
EasternPalacePreArmosKnightsRoom,
|
||||
EasternPalaceCannonballRoom,
|
||||
EasternPalacePotSwitchRoom,
|
||||
ThievesTownSouthWestEntranceRoom,
|
||||
ThievesTownSouthEastEntranceRoom,
|
||||
EmptyCloneRoom0xDD,
|
||||
IcePalaceKholdstare,
|
||||
CaveBackwardsDeathMountainTopFloor,
|
||||
AgahnimsTowerEntranceRoom,
|
||||
CaveLostWoodsHP,
|
||||
CaveLumberjacksTreeHP,
|
||||
CaveMagicBat,
|
||||
CaveLostOldManHouse,
|
||||
CaveLostOldManHouseBack,
|
||||
Cave0xE6,
|
||||
Cave0xE7,
|
||||
CaveSuperBunnyTop,
|
||||
EmptyCloneRoom0xE9,
|
||||
CaveSpectacleRockHP,
|
||||
CaveBumperCaveTop,
|
||||
EmptyCloneRoom0xEC,
|
||||
Cave0xED,
|
||||
CaveSpiralCave,
|
||||
CaveCrystalSwitch5ChestsRoom,
|
||||
CaveLostOldManStartingCaveBottom,
|
||||
CaveLostOldManStartingCaveTop,
|
||||
HouseOldWomanNextDoor,
|
||||
HouseOldWomanSahasrahlasWifeMaybe,
|
||||
HouseAngryBrothersWest,
|
||||
HouseAngryBrothersEast,
|
||||
EmptyCloneRoom0xF6,
|
||||
EmptyCloneRoom0xF7,
|
||||
CaveSuperBunnyBottom,
|
||||
CaveSpectacleRockExit,
|
||||
CaveSpectacleRockPrizeEntrance,
|
||||
CaveBumperCaveBottom,
|
||||
EmptyCloneRoom0xFC,
|
||||
Cave0xFD,
|
||||
CaveSpiralCaveExit,
|
||||
CaveParadoxCaveMiddleEntrance,
|
||||
ShopInLostWoods0x100,
|
||||
ScaredLadyHouses,
|
||||
SickKid,
|
||||
InnBushHouse,
|
||||
LinksHouse,
|
||||
ShabadooHouse,
|
||||
ChestGameBombHouse,
|
||||
LibraryBombFarmRoom,
|
||||
ChickenHouse,
|
||||
WitchHut,
|
||||
Aginah,
|
||||
Dam,
|
||||
MimicCave,
|
||||
CaveOutsideMiseryMire,
|
||||
CaveDarkHyliaLedgeHint,
|
||||
ShopDarkWorldShops,
|
||||
ShopFireShieldShop,
|
||||
ArcherGame,
|
||||
CaveShop,
|
||||
KingsTomb,
|
||||
WaterfallCaveMireHint,
|
||||
BigFairy,
|
||||
FatFairy,
|
||||
SpikeCave,
|
||||
ChestGamblingGame,
|
||||
BlindsHouse,
|
||||
Mutant,
|
||||
MirrorCaveGroveAndTomb,
|
||||
BombShop,
|
||||
BlindsBasement,
|
||||
HypeCave,
|
||||
KakarikoShopLumberjackHouse,
|
||||
IceRodCave,
|
||||
SmithHouse,
|
||||
FortuneTellers,
|
||||
MiniMoldormCave,
|
||||
FiftyRupeeCaveBonkCave,
|
||||
TwentyRupeeCaveDarkHyliaSpikeHintCave,
|
||||
CheckerBoardCave,
|
||||
HammerPegCave,
|
||||
pub enum SuperTile {
|
||||
Ganon = 0x0,
|
||||
HyruleCastleNorthCorridor = 0x1,
|
||||
HyruleCastleSwitchRoom = 0x2,
|
||||
HoulihanRoom = 0x3,
|
||||
TurtleRockCrystalRollerRoom = 0x4,
|
||||
EmptyCloneRoom0x05 = 0x5,
|
||||
SwampPalaceArrghus = 0x6,
|
||||
TowerOfHeraMoldorm = 0x7,
|
||||
CaveHealingFairy = 0x8,
|
||||
PalaceOfDarknessMedusaChestRoom = 0x9,
|
||||
PalaceOfDarknessStalfossTrapRoom = 0xa,
|
||||
PalaceOfDarknessTurtleRoom = 0xb,
|
||||
GanonsTowerEntranceRoom = 0xc,
|
||||
GanonsTowerAgahnim2 = 0xd,
|
||||
IcePalaceEntranceRoom = 0xe,
|
||||
EmptyCloneRoom0x0F = 0xf,
|
||||
GanonEvacuationRoute = 0x10,
|
||||
HyruleCastleBombableStockRoom = 0x11,
|
||||
InsideSanctuary = 0x12,
|
||||
TurtleRockHokkuBokkuKeyRoom2 = 0x13,
|
||||
TurtleRockBigKeyRoom = 0x14,
|
||||
TurtleRockUselessTubes = 0x15,
|
||||
SwampPalaceSwimmingTreadmill = 0x16,
|
||||
TowerOfHeraMoldormFallRoom = 0x17,
|
||||
Cave0x18BigFairyDropEntrance = 0x18,
|
||||
PalaceOfDarknessDarkMaze = 0x19,
|
||||
PalaceOfDarknessBigChestRoom = 0x1a,
|
||||
PalaceOfDarknessMimicsMovingWallRoom = 0x1b,
|
||||
GanonsTowerIceArmos = 0x1c,
|
||||
GanonsTowerFinalHallway = 0x1d,
|
||||
IcePalaceBombFloorBariRoom = 0x1e,
|
||||
IcePalacePengatorBigKeyRoom = 0x1f,
|
||||
AgahnimsTowerAgahnim = 0x20,
|
||||
HyruleCastleKeyRatRoom = 0x21,
|
||||
HyruleCastleSewerTextTriggerRoom = 0x22,
|
||||
TurtleRockWestExitToBalcony = 0x23,
|
||||
TurtleRockDoubleHokkuBokkuBigChestRoom = 0x24,
|
||||
EmptyCloneRoom0x25 = 0x25,
|
||||
SwampPalaceStatueRoom = 0x26,
|
||||
TowerOfHeraBigChest = 0x27,
|
||||
SwampPalaceEntranceRoom = 0x28,
|
||||
SkullWoodsMothula = 0x29,
|
||||
PalaceOfDarknessBigHubRoom = 0x2a,
|
||||
PalaceOfDarknessMapChestFairyRoom = 0x2b,
|
||||
CaveHookshotCaveBackdoor = 0x2c,
|
||||
EmptyCloneRoom0x2D = 0x2d,
|
||||
IcePalaceCompassRoom = 0x2e,
|
||||
CaveKakarikoWellHP = 0x2f,
|
||||
AgahnimsTowerMaidenSacrificeChamber = 0x30,
|
||||
TowerOfHeraHardhatBeetleRoom = 0x31,
|
||||
HyruleCastleSewerKeyChestRoom = 0x32,
|
||||
DesertPalaceLanmolas = 0x33,
|
||||
SwampPalacePushBlockPuzzlePreBigKeyRoom = 0x34,
|
||||
SwampPalaceBigKeyBsRoom = 0x35,
|
||||
SwampPalaceBigChestRoom = 0x36,
|
||||
SwampPalaceMapChestWaterFillRoom = 0x37,
|
||||
SwampPalaceKeyPotRoom = 0x38,
|
||||
SkullWoodsGibdoKeyMothulaHoleRoom = 0x39,
|
||||
PalaceOfDarknessBombableFloorRoom = 0x3a,
|
||||
PalaceOfDarknessSpikeBlockConveyorRoom = 0x3b,
|
||||
CaveHookshotCave = 0x3c,
|
||||
GanonsTowerTorchRoom2 = 0x3d,
|
||||
IcePalaceStalfosKnightConveyorHellway = 0x3e,
|
||||
IcePalaceMapChestRoom = 0x3f,
|
||||
AgahnimsTowerFinalBridgeRoom = 0x40,
|
||||
HyruleCastleFirstDarkRoom = 0x41,
|
||||
HyruleCastle6RopesRoom = 0x42,
|
||||
DesertPalaceTorchPuzzleMovingWallRoom = 0x43,
|
||||
ThievesTownBigChestRoom = 0x44,
|
||||
ThievesTownJailCellsRoom = 0x45,
|
||||
SwampPalaceCompassChestRoom = 0x46,
|
||||
EmptyCloneRoom0x47 = 0x47,
|
||||
EmptyCloneRoom0x48 = 0x48,
|
||||
SkullWoodsGibdoTorchPuzzleRoom = 0x49,
|
||||
PalaceOfDarknessEntranceRoom = 0x4a,
|
||||
PalaceOfDarknessWarpsSouthMimicRoom = 0x4b,
|
||||
GanonsTowerMiniHelmasaurConveyorRoom = 0x4c,
|
||||
GanonsTowerMoldormRoom = 0x4d,
|
||||
IcePalaceBombJumpRoom = 0x4e,
|
||||
IcePalaceCloneRoomFairyRoom = 0x4f,
|
||||
HyruleCastleWestCorridor = 0x50,
|
||||
HyruleCastleThroneRoom = 0x51,
|
||||
HyruleCastleEastCorridor = 0x52,
|
||||
DesertPalacePopos2BeamosHellwayRoom = 0x53,
|
||||
SwampPalaceUpstairsPitsRoom = 0x54,
|
||||
CastleSecretEntranceUncleRoom = 0x55,
|
||||
SkullWoodsKeyPotTrapRoom = 0x56,
|
||||
SkullWoodsBigKeyRoom = 0x57,
|
||||
SkullWoodsBigChestRoom = 0x58,
|
||||
SkullWoodsFinalSectionEntranceRoom = 0x59,
|
||||
PalaceOfDarknessHelmasaurKing = 0x5a,
|
||||
GanonsTowerSpikePitRoom = 0x5b,
|
||||
GanonsTowerGanonBallZ = 0x5c,
|
||||
GanonsTowerGauntlet123 = 0x5d,
|
||||
IcePalaceLonelyFirebar = 0x5e,
|
||||
IcePalaceHiddenChestSpikeFloorRoom = 0x5f,
|
||||
HyruleCastleWestEntranceRoom = 0x60,
|
||||
HyruleCastleMainEntranceRoom = 0x61,
|
||||
HyruleCastleEastEntranceRoom = 0x62,
|
||||
DesertPalaceFinalSectionEntranceRoom = 0x63,
|
||||
ThievesTownWestAtticRoom = 0x64,
|
||||
ThievesTownEastAtticRoom = 0x65,
|
||||
SwampPalaceHiddenChestHiddenDoorRoom = 0x66,
|
||||
SkullWoodsCompassChestRoom = 0x67,
|
||||
SkullWoodsKeyChestTrapRoom = 0x68,
|
||||
EmptyCloneRoom0x69 = 0x69,
|
||||
PalaceOfDarknessRupeeRoom = 0x6a,
|
||||
GanonsTowerMimicsRoom = 0x6b,
|
||||
GanonsTowerLanmolasRoom = 0x6c,
|
||||
GanonsTowerGauntlet45 = 0x6d,
|
||||
IcePalacePengatorsRoom = 0x6e,
|
||||
EmptyCloneRoom0x6F = 0x6f,
|
||||
HyruleCastleSmallCorridorToJailCells = 0x70,
|
||||
HyruleCastleBoomerangChestRoom = 0x71,
|
||||
HyruleCastleMapChestRoom = 0x72,
|
||||
DesertPalaceBigChestRoom = 0x73,
|
||||
DesertPalaceMapChestRoom = 0x74,
|
||||
DesertPalaceBigKeyChestRoom = 0x75,
|
||||
SwampPalaceWaterDrainRoom = 0x76,
|
||||
TowerOfHeraEntranceRoom = 0x77,
|
||||
EmptyCloneRoom0x78 = 0x78,
|
||||
EmptyCloneRoom0x79 = 0x79,
|
||||
EmptyCloneRoom0x7A = 0x7a,
|
||||
GanonsTowerMisc = 0x7b,
|
||||
GanonsTowerEastSideCollapsingBridgeExplodingWallRoom = 0x7c,
|
||||
GanonsTowerWinderWarpMazeRoom = 0x7d,
|
||||
IcePalaceHiddenChestBombableFloorRoom = 0x7e,
|
||||
IcePalaceBigSpikeTrapsRoom = 0x7f,
|
||||
HyruleCastleJailCellRoom = 0x80,
|
||||
HyruleCastleNextToChasmRoom = 0x81,
|
||||
HyruleCastleBasementChasmRoom = 0x82,
|
||||
DesertPalaceWestEntranceRoom = 0x83,
|
||||
DesertPalaceMainEntranceRoom = 0x84,
|
||||
DesertPalaceEastEntranceRoom = 0x85,
|
||||
EmptyCloneRoom0x86 = 0x86,
|
||||
TowerOfHeraTileRoom = 0x87,
|
||||
EmptyCloneRoom0x88 = 0x88,
|
||||
EasternPalaceFairyRoom = 0x89,
|
||||
EmptyCloneRoom0x8A = 0x8a,
|
||||
GanonsTowerBlockPuzzleSpikeSkipMapChestRoom = 0x8b,
|
||||
GanonsTowerEastAndWestDownstairsBigChestRoom = 0x8c,
|
||||
GanonsTowerTileTorchPuzzleRoom = 0x8d,
|
||||
IcePalaceBlobsWithTetrisBarrier = 0x8e,
|
||||
EmptyCloneRoom0x8F = 0x8f,
|
||||
MiseryMireVitreous = 0x90,
|
||||
MiseryMireFinalSwitchRoom = 0x91,
|
||||
MiseryMireDarkBombWallSwitchesRoom = 0x92,
|
||||
MiseryMireDarkCaneFLoorSwitchPuzzleRoom = 0x93,
|
||||
EmptyCloneRoom0x94 = 0x94,
|
||||
GanonsTowerFinalCollapsingBridgeRoom = 0x95,
|
||||
GanonsTowerTorches1Room = 0x96,
|
||||
MiseryMireTorchPuzzleMovingWallRoom = 0x97,
|
||||
MiseryMireEntranceRoom = 0x98,
|
||||
EasternPalaceEyegoreKeyRoom = 0x99,
|
||||
EmptyCloneRoom0x9A = 0x9a,
|
||||
GanonsTowerManySpikesWarpMazeRoom = 0x9b,
|
||||
GanonsTowerInvisibleFloorMazeRoom = 0x9c,
|
||||
GanonsTowerCompassChestInvisibleFloorRoom = 0x9d,
|
||||
IcePalaceBigChestRoom = 0x9e,
|
||||
IcePalaceIceFloorPotsKeyAndSwitch = 0x9f,
|
||||
MiseryMirePreVitreousRoom = 0xa0,
|
||||
MiseryMireFishRoom = 0xa1,
|
||||
MiseryMireBridgeKeyChestRoom = 0xa2,
|
||||
MiseryMireEmptyLConnectingRoom = 0xa3,
|
||||
TurtleRockTrinexx = 0xa4,
|
||||
GanonsTowerWizzrobesRooms = 0xa5,
|
||||
GanonsTowerMoldormFallRoom = 0xa6,
|
||||
TowerOfHeraFairyRoom = 0xa7,
|
||||
EasternPalaceStalfosSpawnRoom = 0xa8,
|
||||
EasternPalaceBigChestRoom = 0xa9,
|
||||
EasternPalaceMapChestRoom = 0xaa,
|
||||
ThievesTownMovingSpikesKeyPotRoom = 0xab,
|
||||
ThievesTownBlindTheThief = 0xac,
|
||||
EmptyCloneRoom0xAD = 0xad,
|
||||
IcePalaceIceTRoom = 0xae,
|
||||
IcePalaceIceBridgeRoom = 0xaf,
|
||||
AgahnimsTowerCircleOfPots = 0xb0,
|
||||
MiseryMireHourglassRoom = 0xb1,
|
||||
MiseryMireSlugRoom = 0xb2,
|
||||
MiseryMireSpikeKeyChestRoom = 0xb3,
|
||||
TurtleRockPreTrinexxRoom = 0xb4,
|
||||
TurtleRockDarkMaze = 0xb5,
|
||||
TurtleRockChainChompsRoom = 0xb6,
|
||||
TurtleRockMapChestKeyChestRollerRoom = 0xb7,
|
||||
EasternPalaceBigKeyRoom = 0xb8,
|
||||
EasternPalaceLobbyCannonballsRoom = 0xb9,
|
||||
EasternPalaceDarkAntifairyKeyPotRoom = 0xba,
|
||||
ThievesTownHellway = 0xbb,
|
||||
ThievesTownConveyorToilet = 0xbc,
|
||||
EmptyCloneRoom0xBD = 0xbd,
|
||||
IcePalaceBlockPuzzleRoom = 0xbe,
|
||||
IcePalaceCloneRoomSwitchRoom = 0xbf,
|
||||
AgahnimsTowerDarkBridgeRoom = 0xc0,
|
||||
MiseryMireCompassChestTileRoom = 0xc1,
|
||||
MiseryMireBigHubRoom = 0xc2,
|
||||
MiseryMireBigChestRoom = 0xc3,
|
||||
TurtleRockFinalCrystalSwitchPuzzleRoom = 0xc4,
|
||||
TurtleRockLaserBridge = 0xc5,
|
||||
TurtleRockSomariaHub = 0xc6,
|
||||
TurtleRockTorchPuzzle = 0xc7,
|
||||
EasternPalaceArmosKnights = 0xc8,
|
||||
EasternPalaceEntranceRoom = 0xc9,
|
||||
UnknownRoom = 0xca,
|
||||
ThievesTownNorthWestEntranceRoom = 0xcb,
|
||||
ThievesTownNorthEastEntranceRoom = 0xcc,
|
||||
EmptyCloneRoom0xCD = 0xcd,
|
||||
IcePalaceHoleToKholdstareRoom = 0xce,
|
||||
EmptyCloneRoom0xCF = 0xcf,
|
||||
AgahnimsTowerDarkMaze = 0xd0,
|
||||
MiseryMireConveyorSlugBigKeyRoom = 0xd1,
|
||||
MiseryMireWizzrobesRoom = 0xd2,
|
||||
EmptyCloneRoom0xD3 = 0xd3,
|
||||
EmptyCloneRoom0xD4 = 0xd4,
|
||||
TurtleRockLaserKeyRoom = 0xd5,
|
||||
TurtleRockEntranceRoom = 0xd6,
|
||||
EmptyCloneRoom0xD7 = 0xd7,
|
||||
EasternPalacePreArmosKnightsRoom = 0xd8,
|
||||
EasternPalaceCannonballRoom = 0xd9,
|
||||
EasternPalacePotSwitchRoom = 0xda,
|
||||
ThievesTownSouthWestEntranceRoom = 0xdb,
|
||||
ThievesTownSouthEastEntranceRoom = 0xdc,
|
||||
EmptyCloneRoom0xDD = 0xdd,
|
||||
IcePalaceKholdstare = 0xde,
|
||||
CaveBackwardsDeathMountainTopFloor = 0xdf,
|
||||
AgahnimsTowerEntranceRoom = 0xe0,
|
||||
CaveLostWoodsHP = 0xe1,
|
||||
CaveLumberjacksTreeHP = 0xe2,
|
||||
CaveMagicBat = 0xe3,
|
||||
CaveLostOldManHouse = 0xe4,
|
||||
CaveLostOldManHouseBack = 0xe5,
|
||||
Cave0xE6 = 0xe6,
|
||||
Cave0xE7 = 0xe7,
|
||||
CaveSuperBunnyTop = 0xe8,
|
||||
EmptyCloneRoom0xE9 = 0xe9,
|
||||
CaveSpectacleRockHP = 0xea,
|
||||
CaveBumperCaveTop = 0xeb,
|
||||
EmptyCloneRoom0xEC = 0xec,
|
||||
Cave0xED = 0xed,
|
||||
CaveSpiralCave = 0xee,
|
||||
CaveCrystalSwitch5ChestsRoom = 0xef,
|
||||
CaveLostOldManStartingCaveBottom = 0xf0,
|
||||
CaveLostOldManStartingCaveTop = 0xf1,
|
||||
HouseOldWomanNextDoor = 0xf2,
|
||||
HouseOldWomanSahasrahlasWifeMaybe = 0xf3,
|
||||
HouseAngryBrothersWest = 0xf4,
|
||||
HouseAngryBrothersEast = 0xf5,
|
||||
EmptyCloneRoom0xF6 = 0xf6,
|
||||
EmptyCloneRoom0xF7 = 0xf7,
|
||||
CaveSuperBunnyBottom = 0xf8,
|
||||
CaveSpectacleRockExit = 0xf9,
|
||||
CaveSpectacleRockPrizeEntrance = 0xfa,
|
||||
CaveBumperCaveBottom = 0xfb,
|
||||
EmptyCloneRoom0xFC = 0xfc,
|
||||
Cave0xFD = 0xfd,
|
||||
CaveSpiralCaveExit = 0xfe,
|
||||
CaveParadoxCaveMiddleEntrance = 0xff,
|
||||
ShopInLostWoods0x100 = 0x100,
|
||||
ScaredLadyHouses = 0x101,
|
||||
SickKid = 0x102,
|
||||
InnBushHouse = 0x103,
|
||||
InsideLinksHouse = 0x104,
|
||||
ShabadooHouse = 0x105,
|
||||
ChestGameBombHouse = 0x106,
|
||||
LibraryBombFarmRoom = 0x107,
|
||||
ChickenHouse = 0x108,
|
||||
InsideWitchHut = 0x109,
|
||||
Aginah = 0x10a,
|
||||
Dam = 0x10b,
|
||||
MimicCave = 0x10c,
|
||||
CaveOutsideMiseryMire = 0x10d,
|
||||
CaveDarkHyliaLedgeHint = 0x10e,
|
||||
ShopDarkWorldShops = 0x10f,
|
||||
ShopFireShieldShop = 0x110,
|
||||
ArcherGame = 0x111,
|
||||
CaveShop = 0x112,
|
||||
KingsTomb = 0x113,
|
||||
WaterfallCaveMireHint = 0x114,
|
||||
BigFairy = 0x115,
|
||||
FatFairy = 0x116,
|
||||
SpikeCave = 0x117,
|
||||
ChestGamblingGame = 0x118,
|
||||
BlindsHouse = 0x119,
|
||||
Mutant = 0x11a,
|
||||
MirrorCaveGroveAndTomb = 0x11b,
|
||||
InsideBombShop = 0x11c,
|
||||
BlindsBasement = 0x11d,
|
||||
HypeCave = 0x11e,
|
||||
KakarikoShopLumberjackHouse = 0x11f,
|
||||
IceRodCave = 0x120,
|
||||
SmithHouse = 0x121,
|
||||
FortuneTellers = 0x122,
|
||||
MiniMoldormCave = 0x123,
|
||||
FiftyRupeeCaveBonkCave = 0x124,
|
||||
TwentyRupeeCaveDarkHyliaSpikeHintCave = 0x125,
|
||||
CheckerBoardCave = 0x126,
|
||||
HammerPegCave = 0x127,
|
||||
LostWoods = 0x8000,
|
||||
LumberjackHouse = 0x8002,
|
||||
DeathMountainWest = 0x8003,
|
||||
DeathMountainEast = 0x8005,
|
||||
DeathMountainTurtleWarp = 0x8007,
|
||||
EntranceDeathMountain = 0x800a,
|
||||
EntranceZorasDomain = 0x800f,
|
||||
PathFromLostWoodsToKakariko = 0x8010,
|
||||
KakarikoFortuneTeller = 0x8011,
|
||||
NorthWestWhirlpoolWarp = 0x8012,
|
||||
Sanctuary = 0x8013,
|
||||
Graveyard = 0x8014,
|
||||
River = 0x8015,
|
||||
WitchHut = 0x8016,
|
||||
EastOfWitchHut = 0x8017,
|
||||
Kakariko = 0x8018,
|
||||
CastleWoods = 0x801a,
|
||||
HyruleCastle = 0x801b,
|
||||
WitchGraveyardBridge = 0x801d,
|
||||
EasternPalace = 0x801e,
|
||||
Smithy = 0x8022,
|
||||
StonyFieldNorth = 0x8025,
|
||||
KakarikoMazeRace = 0x8028,
|
||||
KakarikoLibrary = 0x8029,
|
||||
HauntedGrove = 0x802a,
|
||||
BetweenGroveAndLinksHouse = 0x802b,
|
||||
LinksHouse = 0x802c,
|
||||
StonyFieldSouth = 0x802d,
|
||||
BetweenLakeHyliaAndEasternPalace = 0x802e,
|
||||
FluteSpot5 = 0x802f,
|
||||
Desert = 0x8030,
|
||||
SouthOfHauntedGrove = 0x8032,
|
||||
NorthwestSwamp = 0x8033,
|
||||
NortheastSwamp = 0x8034,
|
||||
LakeHylia = 0x8035,
|
||||
IceCave = 0x8037,
|
||||
DesertPass = 0x803a,
|
||||
SouthwestSwamp = 0x803b,
|
||||
SoutheastSwamp = 0x803c,
|
||||
SouthShore = 0x803f,
|
||||
ShullWoods = 0x8040,
|
||||
DarkLumberjackShop = 0x8042,
|
||||
DarkDeathMountainWest = 0x8043,
|
||||
DarkDeathMountainEast = 0x8045,
|
||||
TurtleRock = 0x8047,
|
||||
BumperCave = 0x804a,
|
||||
Catfish = 0x804f,
|
||||
PathFromSkullWoodsToVillage = 0x8050,
|
||||
OutcastFortuneTeller = 0x8051,
|
||||
NorthWestPond = 0x8052,
|
||||
DarkChapel = 0x8053,
|
||||
DarkGraveyard = 0x8054,
|
||||
DarkRiver = 0x8055,
|
||||
DarkWitchHut = 0x8056,
|
||||
EastOfDarkWitchHut = 0x8057,
|
||||
VillageOfOutcasts = 0x8058,
|
||||
FireShieldShopForest = 0x805a,
|
||||
Pyramid = 0x805b,
|
||||
BrokenBridge = 0x805d,
|
||||
PalaceOfDarkness = 0x805e,
|
||||
PurpleChestHouse = 0x8062,
|
||||
DarkStonyFieldNorth = 0x8065,
|
||||
DiggingGame = 0x8068,
|
||||
TrappedFrog = 0x8069,
|
||||
StumpysGrove = 0x806a,
|
||||
BetweenGroveAndBombShop = 0x806b,
|
||||
BombShop = 0x806c,
|
||||
HammerPegBridge = 0x806d,
|
||||
BetweenPODAndIceLake = 0x806e,
|
||||
DarkFluteSpot5 = 0x806f,
|
||||
MiseryMire = 0x8070,
|
||||
SouthOfStumpysGrove = 0x8072,
|
||||
DarkNorthwestSwamp = 0x8073,
|
||||
DarkNortheastSwamp = 0x8074,
|
||||
IceLake = 0x8075,
|
||||
DarkIceCave = 0x8077,
|
||||
BoxCanyonBetweenMireAndSwamp = 0x807a,
|
||||
DarkSouthwestSwamp = 0x807b,
|
||||
DarkSoutheastSwamp = 0x807c,
|
||||
DarkSouthShore = 0x807f,
|
||||
MasterSwordGladeAndUnderBridge = 0x8080,
|
||||
ZorasDomain = 0x8081,
|
||||
}
|
||||
|
||||
use Room::*;
|
||||
use SuperTile::*;
|
||||
|
||||
lazy_static! {
|
||||
pub static ref ROOM_NAMES: HashMap<Room, &'static str> = {
|
||||
pub static ref ROOM_NAMES: HashMap<SuperTile, &'static str> = {
|
||||
|
||||
let names = [
|
||||
(Ganon, "Ganon"),
|
||||
|
@ -752,7 +834,7 @@ lazy_static! {
|
|||
};
|
||||
}
|
||||
|
||||
pub const NEED_KILLABLE_ROOMS: [Room; 39] = [
|
||||
pub const NEED_KILLABLE_ROOMS: [SuperTile; 39] = [
|
||||
EasternPalaceBigKeyRoom, // For anti-fairy circle around pot switch
|
||||
PalaceOfDarknessTurtleRoom,
|
||||
PalaceOfDarknessMimicsMovingWallRoom,
|
||||
|
@ -797,7 +879,7 @@ pub const NEED_KILLABLE_ROOMS: [Room; 39] = [
|
|||
// All the rooms that require special handling.
|
||||
|
||||
/// These rooms need to be locked to GFX ID 28.
|
||||
pub const FREEZOR_ROOMS: [Room; 5] = [
|
||||
pub const FREEZOR_ROOMS: [SuperTile; 5] = [
|
||||
IcePalaceEntranceRoom,
|
||||
IcePalaceHiddenChestBombableFloorRoom,
|
||||
IcePalaceBlobsWithTetrisBarrier,
|
||||
|
@ -806,7 +888,7 @@ pub const FREEZOR_ROOMS: [Room; 5] = [
|
|||
];
|
||||
|
||||
/// These rooms need to be locked to GFX ID 17.
|
||||
pub const WATER_ROOMS: [Room; 33] = [
|
||||
pub const WATER_ROOMS: [SuperTile; 33] = [
|
||||
GanonsTowerEntranceRoom,
|
||||
GanonsTowerAgahnim2,
|
||||
SwampPalaceSwimmingTreadmill,
|
||||
|
@ -842,12 +924,12 @@ pub const WATER_ROOMS: [Room; 33] = [
|
|||
GanonsTowerMoldormFallRoom,
|
||||
];
|
||||
|
||||
pub const SHADOW_ROOMS: [Room; 2] = [
|
||||
pub const SHADOW_ROOMS: [SuperTile; 2] = [
|
||||
IcePalaceStalfosKnightConveyorHellway,
|
||||
IcePalaceIceFloorPotsKeyAndSwitch,
|
||||
];
|
||||
|
||||
pub const WALL_MASTER_ROOMS: [Room; 5] = [
|
||||
pub const WALL_MASTER_ROOMS: [SuperTile; 5] = [
|
||||
SkullWoodsGibdoKeyMothulaHoleRoom,
|
||||
SkullWoodsGibdoTorchPuzzleRoom,
|
||||
SkullWoodsKeyPotTrapRoom,
|
||||
|
@ -855,7 +937,7 @@ pub const WALL_MASTER_ROOMS: [Room; 5] = [
|
|||
GanonsTowerTileTorchPuzzleRoom,
|
||||
];
|
||||
|
||||
pub const BUMPER_CRYSTAL_LASER_ROOMS: [Room; 42] = [
|
||||
pub const BUMPER_CRYSTAL_LASER_ROOMS: [SuperTile; 42] = [
|
||||
TurtleRockCrystalRollerRoom,
|
||||
PalaceOfDarknessTurtleRoom,
|
||||
TurtleRockHokkuBokkuKeyRoom2,
|
||||
|
@ -900,14 +982,14 @@ pub const BUMPER_CRYSTAL_LASER_ROOMS: [Room; 42] = [
|
|||
CaveCrystalSwitch5ChestsRoom,
|
||||
];
|
||||
|
||||
pub const PULL_SWITCH_ROOMS: [Room; 4] = [
|
||||
pub const PULL_SWITCH_ROOMS: [SuperTile; 4] = [
|
||||
HyruleCastleSwitchRoom,
|
||||
SkullWoodsBigChestRoom,
|
||||
ThievesTownWestAtticRoom,
|
||||
Dam,
|
||||
];
|
||||
|
||||
pub const TONGUE_ROOMS: [Room; 7] = [
|
||||
pub const TONGUE_ROOMS: [SuperTile; 7] = [
|
||||
TurtleRockCrystalRollerRoom,
|
||||
TurtleRockWestExitToBalcony,
|
||||
SwampPalaceBigKeyBsRoom,
|
||||
|
@ -917,7 +999,7 @@ pub const TONGUE_ROOMS: [Room; 7] = [
|
|||
IcePalaceHoleToKholdstareRoom,
|
||||
];
|
||||
|
||||
pub const NO_STATUE_ROOMS: [Room; 12] = [
|
||||
pub const NO_STATUE_ROOMS: [SuperTile; 12] = [
|
||||
SwampPalaceSwimmingTreadmill,
|
||||
SwampPalaceStatueRoom,
|
||||
SwampPalaceEntranceRoom,
|
||||
|
@ -932,19 +1014,19 @@ pub const NO_STATUE_ROOMS: [Room; 12] = [
|
|||
AgahnimsTowerDarkMaze,
|
||||
];
|
||||
|
||||
pub const MOVING_CANNONS_ROOMS: [Room; 2] = [
|
||||
pub const MOVING_CANNONS_ROOMS: [SuperTile; 2] = [
|
||||
GanonsTowerGanonBallZ,
|
||||
DesertPalaceBigKeyChestRoom,
|
||||
];
|
||||
|
||||
pub const CANNON_ROOMS: [Room; 3] = [
|
||||
pub const CANNON_ROOMS: [SuperTile; 3] = [
|
||||
EasternPalaceLobbyCannonballsRoom,
|
||||
EasternPalaceCannonballRoom,
|
||||
MimicCave, // ???
|
||||
];
|
||||
|
||||
/// These rooms have no enemies to randomize, or are special bosses that can't be switched out.
|
||||
pub const DONT_RANDOMIZE_ROOMS: [Room; 8] = [
|
||||
pub const DONT_RANDOMIZE_ROOMS: [SuperTile; 8] = [
|
||||
Ganon,
|
||||
HyruleCastleNorthCorridor,
|
||||
HoulihanRoom,
|
||||
|
@ -955,7 +1037,7 @@ pub const DONT_RANDOMIZE_ROOMS: [Room; 8] = [
|
|||
IcePalaceBigSpikeTrapsRoom, // Anything else would be too easy?
|
||||
];
|
||||
|
||||
pub const NO_SPECIAL_ENEMIES_IN_STANDARD_MODE_ROOMS: [Room; 21] = [
|
||||
pub const NO_SPECIAL_ENEMIES_IN_STANDARD_MODE_ROOMS: [SuperTile; 21] = [
|
||||
HyruleCastleNorthCorridor,
|
||||
HyruleCastleSwitchRoom,
|
||||
HyruleCastleBombableStockRoom,
|
||||
|
@ -979,7 +1061,7 @@ pub const NO_SPECIAL_ENEMIES_IN_STANDARD_MODE_ROOMS: [Room; 21] = [
|
|||
HyruleCastleBasementChasmRoom,
|
||||
];
|
||||
|
||||
pub const BOSS_ROOMS: [Room; 16] = [
|
||||
pub const BOSS_ROOMS: [SuperTile; 16] = [
|
||||
Ganon,
|
||||
SwampPalaceArrghus,
|
||||
TowerOfHeraMoldorm,
|
||||
|
@ -998,7 +1080,7 @@ pub const BOSS_ROOMS: [Room; 16] = [
|
|||
IcePalaceKholdstare,
|
||||
];
|
||||
|
||||
pub const DONT_USE_IMMOVABLE_ENEMIES: [Room; 57] = [
|
||||
pub const DONT_USE_IMMOVABLE_ENEMIES: [SuperTile; 57] = [
|
||||
PalaceOfDarknessTurtleRoom, // for single terrorpin in L shaped section
|
||||
SwampPalaceSwimmingTreadmill,
|
||||
PalaceOfDarknessDarkMaze, // top placement will probably block maze
|
||||
|
@ -1058,7 +1140,7 @@ pub const DONT_USE_IMMOVABLE_ENEMIES: [Room; 57] = [
|
|||
MimicCave,
|
||||
];
|
||||
|
||||
pub const DONT_USE_FLYING_ENEMIES: [Room; 2] = [
|
||||
pub const DONT_USE_FLYING_ENEMIES: [SuperTile; 2] = [
|
||||
MiseryMireWizzrobesRoom,
|
||||
MimicCave,
|
||||
];
|
Loading…
Reference in a new issue