/// /// /// /// /// /// /// /// PlayBegins.rulebook.addRule(new Rule({ name : "Randomize Forest Region", firstPriority : Rule.PRIORITY_HIGHEST, code : async runner => { await Forest.region.randomize(); } })); RegionRandom.rulebookRandomizeRegion.addRule(new Rule({ name : "Add the first rooms to guarantee position.", firstPriority : Rule.PRIORITY_HIGHEST, code : async runner => { // Add the clearing in the woods let cells = [ Forest.ForestBed, Forest.OrcVillageSouthGates, Forest.CentaurVillageSoutheastGates, Forest.Pond, Forest.WitchHut, Forest.MazeEntrance, Forest.OminousCave, Forest.TheObelisk, ]; for (let i = 0; i < cells.length; i++) { let options : RandomizingRoomOptions = { map : Forest.region.map, room : cells[i], region : Forest.region }; await RegionRandom.rulebookBeforePlaceRoom.execute({noun : options}); await RegionRandom.rulebookPlaceRoom.execute({noun : options}); await RegionRandom.rulebookAfterPlaceRoom.execute({noun : options}); } let minimumAmountOfRooms = cells.length * 7; let placed = Forest.region.getRooms().length; // At this stage, every room is placed for (let i = (minimumAmountOfRooms - placed); i > 0; i--) { Forest.region.place(new Forest.region.fodderRoomClass()); } }, conditions : runner => { return runner.noun == Forest.region; } })); RegionRandom.rulebookRandomizeRegion.createAndAddRule({ name : "Beautify the Forest - Plainify", firstPriority : RegionRandom.ruleAddExtraConnections.firstPriority, priority : RegionRandom.ruleAddExtraConnections.priority + 1, code : () => { ForestFodder.definedRooms(> Forest.region.getRooms().filter((room : RoomRandom) => { return room.placed && room instanceof ForestFodder; })); } }); RegionRandom.rulebookRandomizeRegion.createAndAddRule({ name : "Beautify the Forest - Make Beaten Paths", firstPriority : RegionRandom.ruleAddExtraConnections.firstPriority, priority : RegionRandom.ruleAddExtraConnections.priority - 1, code : () => { ForestFodder.makePaths(> Forest.region.getRooms().filter((room : RoomRandom) => { return room.placed && room instanceof ForestFodder; })); } }); RegionRandom.rulebookRandomizeRegion.createAndAddRule({ name : "Beautify the Forest - Just give descriptions to them", firstPriority : RegionRandom.ruleAddExtraConnections.firstPriority, priority : RegionRandom.ruleAddExtraConnections.priority - 2, code : () => { ForestFodder.panicModeBeautify(> Forest.region.getRooms().filter((room : RoomRandom) => { return room.placed && room instanceof ForestFodder; })); } }); RegionRandom.rulebookRandomizeRegion.addRule(new Rule({ name : "After placing and doing extra connections", firstPriority : -1, code : async runner => { // Add the clearing in the woods let cells = [ ]; for (let i = 0; i < cells.length; i++) { let options : RandomizingRoomOptions = { map : Forest.region.map, room : cells[i], region : Forest.region }; await RegionRandom.rulebookBeforePlaceRoom.execute({noun : options}); await RegionRandom.rulebookPlaceRoom.execute({noun : options}); await RegionRandom.rulebookAfterPlaceRoom.execute({noun : options}); } }, conditions : runner => { return runner.noun == Forest.region; } }));