courtyard.hx 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. var g_mirror = "courtyard_m";
  2. var g_exit = "izeras";
  3. function buildMainRooms()
  4. {
  5. trace("Starting Desolated Courtyard.");
  6. trace("Generating main rooms.");
  7. Struct.createSpecificRoom("aCEntrance").setName("start").addFlag(RoomFlag.Outside)
  8. .chain(Struct.createSpecificExit(g_mirror, "aCMidExit").addFlag(RoomFlag.Outside))
  9. .chain(Struct.createSpecificExit(g_exit, "aCEndExit").addFlag(RoomFlag.Outside))
  10. .chain(Struct.createSpecificRoom("aCEndRoom").addFlag(RoomFlag.Outside));
  11. trace("Generating fixed rooms.");
  12. Struct.createShop(Random.isBelow(0.5) ? MerchantType.Weapons : MerchantType.Actives)
  13. .setName("shop1")
  14. .addBetween("start", g_exit);
  15. Struct.createRoomWithType("BreakableGroundGate")
  16. .addBefore("shop1");
  17. if(Random.isBelow(0.5)) {
  18. Struct.createRoomWithType("Treasure")
  19. .addBetween("start", g_exit);
  20. }
  21. if(Random.isBelow(0.2)) {
  22. Struct.createRoomWithType("Treasure")
  23. .addBetween("start", g_exit);
  24. }
  25. Struct.createSpecificRoom("aCLadderGate")
  26. .addFlag(RoomFlag.Outside)
  27. .addBetween("start", g_exit, 2);
  28. Struct.createSpecificRoom("aCMultiTreasure")
  29. .addFlag(RoomFlag.Outside)
  30. .addBetween("start", g_exit);
  31. Struct.createRoomWithTypeFromGroup("MultiTreasure", "alaahCourtyardCommon")
  32. .addFlag(RoomFlag.Outside)
  33. .addBetween("start", g_exit);
  34. Struct.createRoomWithTypeFromGroup("HealPotion", "alaahCourtyardCommon")
  35. .addFlag(RoomFlag.Outside)
  36. .addBetween("start", g_exit);
  37. Struct.createRoomWithTypeFromGroup("CursedTreasure", "alaahCourtyardCommon")
  38. .addFlag(RoomFlag.Outside)
  39. .addBetween("start", g_exit);
  40. Struct.createRoomWithTypeFromGroup("BuyableTreasure", "alaahCourtyardCommon")
  41. .addFlag(RoomFlag.Outside)
  42. .addBetween("start", g_exit);
  43. Struct.createSpecificRoom("aCEvilRoom")
  44. .addFlag(RoomFlag.Outside)
  45. .addBetween("start", g_exit, 2);
  46. Struct.createSpecificRoom("aCEvilRoomEvil")
  47. .addFlag(RoomFlag.Outside)
  48. .addBetween("start", g_exit, 2);
  49. var exit = Struct.getRoomByName(g_exit);
  50. var undergrounds = Struct.allRooms.filter(function(_room)
  51. return _room != exit && _room.isMainLevel() && !_room.isParentOf(exit) && !_room.isChildOf(exit)
  52. );
  53. var outRooms = Struct.allRooms.filter(function(_room)
  54. return _room.isMainLevel() && _room.parent != null && _room.isParentOf(exit) && _room != exit
  55. );
  56. trace("Generating celldoors.");
  57. Struct.createRunicZDoor(Struct.createRoomWithType("Treasure"), 1, undergrounds);
  58. Struct.createRunicZDoor(Struct.createRoomWithTypeFromGroup("Special", "alaahCourtyardKey"), 2, undergrounds);
  59. Struct.createRunicZDoor(Struct.createRoomWithType("Treasure"), 3, undergrounds);
  60. Struct.createRunicZDoor(Struct.createRoomWithType("CursedTreasure"), 4, undergrounds);
  61. Struct.createRunicZDoor(Struct.createRoomWithTypeFromGroup("Special", "alaahCourtyardKey"), 4, undergrounds);
  62. Struct.createRunicZDoor(Struct.createSpecificRoom("GenericZDoor_LR"), 4, undergrounds);
  63. trace("Generating more fixed rooms.");
  64. Struct.createSpecificRoom("aCSecretWallJump")
  65. .addBefore(Random.arraySplice(outRooms).getName())
  66. .addFlag(RoomFlag.Outside);
  67. Struct.createSpecificRoom("aCSecretStomp")
  68. .addBefore(Random.arraySplice(outRooms).getName())
  69. .addFlag(RoomFlag.Outside);
  70. Struct.createSpecificRoom("aCSecretHouse")
  71. .addBefore(Random.arraySplice(outRooms).getName())
  72. .addFlag(RoomFlag.Outside);
  73. Struct.createSpecificRoom("aCSecretFlower")
  74. .addBefore(Random.arraySplice(outRooms).getName())
  75. .addFlag(RoomFlag.Outside);
  76. Struct.createSpecificRoom("aCIsland")
  77. .addBefore(Random.arraySplice(outRooms).getName())
  78. .addFlag(RoomFlag.Outside)
  79. .addZChild(Struct.createSpecificRoom("aCIslandInt"))
  80. .setName("desolate");
  81. }
  82. function buildSecondaryRooms()
  83. {
  84. var exit = Struct.getRoomByName(g_exit);
  85. var mains = Struct.allRooms.filter(function(_room)
  86. return _room.isMainLevel() && _room.parent != null && _room.isParentOf(exit) && _room != exit
  87. );
  88. trace("Generating combat rooms.");
  89. var mainsCopy = mains.copy();
  90. for(i in 0...4) {
  91. if(mainsCopy.length == 0) {
  92. mainsCopy = mains.copy();
  93. }
  94. Struct.createRoomWithTypeFromGroup("Combat", "alaahCourtyardCommon")
  95. .addFlag(RoomFlag.Outside)
  96. .addBefore(Random.arraySplice(mainsCopy).getName());
  97. }
  98. var combatRooms = Struct.allRooms.filter(function(_room)
  99. return _room.type == "Combat" && _room.hasFlag(RoomFlag.Outside)
  100. );
  101. var undergrounds = Struct.allRooms.filter(function(_room)
  102. return _room != exit && _room.isMainLevel() && !_room.isParentOf(exit) && !_room.isChildOf(exit)
  103. );
  104. trace("Generating trap rooms.");
  105. for(i in 0...Random.irange(2, 3)){
  106. Struct.createRoomWithTypeFromGroup("Trap_1", "alaahCourtyardCommon")
  107. .addFlag(RoomFlag.Outside)
  108. .addBefore(Random.arraySplice(combatRooms).getName());
  109. }
  110. Struct.createRoomWithTypeFromGroup("Combat", "alaahCourtyardKey")
  111. .addFlag(RoomFlag.Outside)
  112. .addBefore(Random.arraySplice(combatRooms).getName());
  113. for(i in 0...Random.irange(3, 5)) {
  114. Struct.createRoomWithTypeFromGroup("Trap_1", "CommonTraps")
  115. .addBefore(Random.arrayPick(undergrounds).getName());
  116. }
  117. }
  118. function addTeleports()
  119. {
  120. var exit = Struct.getRoomByName(g_exit);
  121. var secondExit = Struct.getRoomByName(g_exit);
  122. var rooms = Struct.allRooms.filter(function(_room)
  123. return _room.isMainLevel()
  124. );
  125. var mains = Struct.allRooms.filter(function(_room)
  126. return _room.isMainLevel() && _room.parent != null && _room.isParentOf(exit)
  127. );
  128. trace("Generating TPs.");
  129. for(room in rooms) {
  130. if(room.type == "Corridor" && room.isParentOf(exit) && room.childrenCount > 1 && room.calcTypeDistance("Teleport", true) > 1) {
  131. room.setType("Teleport");
  132. }
  133. }
  134. for(room in rooms.filter(function(_room) return !_room.hasFlag(RoomFlag.Outside) && (_room.type == "WallJumpGate" || _room.type == "LadderGate" || _room.type == "TeleportGate" || _room.type == "BreakableGroundGate")) ){
  135. if(room.calcTypeDistance("Teleport", false) > 1 ){
  136. Struct.createTeleportBefore(room);
  137. }
  138. }
  139. for(room in rooms) {
  140. if(room.childrenCount == 0 && room != secondExit && room.calcTypeDistance("Teleport", true) > 1){
  141. Struct.createRoomWithType("Teleport").addBefore(room.getName());
  142. }
  143. }
  144. if(exit.parent.type != "Teleport") {
  145. Struct.createRoomWithTypeFromGroup("Teleport", "alaahCourtyardCommon").addFlag(RoomFlag.Outside).addBefore(exit.getName());
  146. }
  147. var nodes = rooms.filter(function(_room)
  148. return _room.isMainLevel() && _room.hasFlag(RoomFlag.Outside)
  149. );
  150. nodes.sort(function(a, b) return compare(a.spawnDistance, b.spawnDistance));
  151. for(n in nodes) {
  152. if(n.spawnDistance > 1 && n.parent != null && n.calcTypeDistance("Teleport", true) > 2) {
  153. Struct.createRoomWithTypeFromGroup("Teleport", "alaahCourtyardCommon").addFlag(RoomFlag.Outside).addBefore(n.getName());
  154. }
  155. }
  156. }
  157. function buildTimedDoors() {}
  158. function finalize()
  159. {
  160. var exit = Struct.getRoomByName(g_exit);
  161. trace("Finalizing.");
  162. for(room in Struct.allRooms){
  163. if((room.type == "Corridor" || room.type == "Teleport") && room.isParentOf(exit)){
  164. room.setGroup("alaahCourtyardCommon");
  165. room.addFlag(RoomFlag.Outside);
  166. }
  167. }
  168. for(room in Struct.allRooms) {
  169. if(room.parent != null && room.hasFlag(RoomFlag.Outside)) {
  170. room.setConstraint(LinkConstraint.HorizontalSameDirOnly);
  171. room.setChildPriority(1);
  172. }
  173. }
  174. Struct.getRoomByName("start").addChild(Struct.createSpecificExit("BoatDock", "aCStartExit"));
  175. trace("Done.");
  176. }
  177. function buildMobRoster(_mobList)
  178. {
  179. trace("Applying mob roster.");
  180. addMobRosterFrom("PrisonCourtyard", _mobList);
  181. }
  182. function setLevelProps(_levelProps)
  183. {
  184. trace("Applying props.");
  185. _levelProps.wind = -3.0;
  186. _levelProps.musicIntro = "music/courtyard_intro.ogg";
  187. _levelProps.musicLoop = "music/courtyard_loop.ogg";
  188. _levelProps.zDoorColor = 144411;
  189. }
  190. function setLevelInfo(_levelInfo)
  191. {
  192. trace("Applying level info.");
  193. _levelInfo.baseLootLevel = 2;
  194. _levelInfo.baseMobTier = 2;
  195. _levelInfo.biome = "PrisonCourtyard2";
  196. _levelInfo.cellBonus = 0.0;
  197. _levelInfo.doubleUps = 0;
  198. _levelInfo.eliteRoomChance = 0.0;
  199. _levelInfo.eliteWanderChance = 1.0;
  200. _levelInfo.extraMobTier = 0;
  201. _levelInfo.flags = 13;
  202. _levelInfo.goldBonus = 0;
  203. _levelInfo.mobDensity = 3.0;
  204. _levelInfo.name = "Desolated Courtyard";
  205. _levelInfo.tripleUps = 2;
  206. }