moddables.json 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. {
  2. /// These are objects that have subtypes that change various aspects of their mechanics
  3. /// Should be made configurable (either directly or via other parts of modding system ASAP)
  4. /// Editing these objects either directly or via mod may have negative effect on game since they are handled by engine
  5. // subtype: artifact ID
  6. "artifact" : {
  7. "index" :5,
  8. "handler": "artifact",
  9. "base" : {
  10. "base" : {
  11. "visitableFrom" : [ "+++", "+-+", "+++" ],
  12. "mask" : [ "VV", "VA"]
  13. },
  14. "sounds" : {
  15. "visit" : ["TREASURE"],
  16. "removal" : [ "PICKUP01", "PICKUP02", "PICKUP03", "PICKUP04", "PICKUP05", "PICKUP06", "PICKUP07" ]
  17. }
  18. }
  19. },
  20. // subtype: hero CLASS (not hero).
  21. "hero" : {
  22. "index" :34,
  23. "handler": "hero",
  24. "base" : {
  25. "aiValue" : 7500,
  26. "base" : {
  27. "visitableFrom" : [ "+++", "+-+", "+++" ],
  28. "mask" : [ "VVV", "VAV"]
  29. },
  30. "sounds" : {
  31. "removal" : ["KILLFADE"]
  32. }
  33. }
  34. },
  35. // subtype: creatures
  36. "monster" : {
  37. "index" :54,
  38. "handler": "monster",
  39. "base" : {
  40. "base" : {
  41. "visitableFrom" : [ "+++", "+-+", "+++" ],
  42. "mask" : [ "VV", "VA"]
  43. },
  44. "sounds" : {
  45. "removal" : ["KILLFADE"]
  46. }
  47. }
  48. },
  49. // subtype: resource ID
  50. "resource" : {
  51. "index" :79,
  52. "handler": "resource",
  53. "lastReservedIndex" : 6,
  54. "base" : {
  55. "base" : {
  56. "visitableFrom" : [ "+++", "+-+", "+++" ],
  57. "mask" : [ "VA" ]
  58. }
  59. },
  60. "types" : {
  61. "wood" : { "index" : 0, "aiValue" : 1400, "rmg" : { "value" : 1400, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTwood0.def" } } },
  62. "mercury" : { "index" : 1, "aiValue" : 2000, "rmg" : { "value" : 2000, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTmerc0.def" } } },
  63. "ore" : { "index" : 2, "aiValue" : 1400, "rmg" : { "value" : 1400, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTore0.def" } } },
  64. "sulfur" : { "index" : 3, "aiValue" : 2000, "rmg" : { "value" : 2000, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTsulf0.def" } } },
  65. "crystal" : { "index" : 4, "aiValue" : 2000, "rmg" : { "value" : 2000, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTcrys0.def" } } },
  66. "gems" : { "index" : 5, "aiValue" : 2000, "rmg" : { "value" : 2000, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTgems0.def" } } },
  67. "gold" : { "index" : 6, "aiValue" : 750, "rmg" : { "value" : 750, "rarity" : 300 }, "templates" : { "res" : { "animation" : "AVTgold0.def" } } }
  68. }
  69. },
  70. // subtype: faction
  71. "town" : {
  72. "index" :98,
  73. "handler": "town",
  74. "base" : {
  75. "aiValue" : 20000,
  76. "filters" : {
  77. // village image - fort not present
  78. "village" : [ "noneOf", [ "fort" ] ],
  79. // fort image - fort is here but not capitol
  80. "fort" : [ "allOf", [ "fort" ], [ "noneOf", ["capitol" ] ] ],
  81. // capitol image only when capitol is built
  82. "capitol" : [ "capitol" ]
  83. },
  84. // "faction" : "stringID", // should be set by engine
  85. "base" : {
  86. "visitableFrom" : [ "---", "+++", "+++" ],
  87. "mask" : [
  88. "VVVVVV", // a LOT of just visible rows due to towns like Tower
  89. "VVVVVV",
  90. "VVVVVV",
  91. "VVBBBV",
  92. "VBBBBB",
  93. "VBBABB"
  94. ]
  95. }
  96. }
  97. },
  98. // subtype: one of 3 possible boats
  99. "boat" : {
  100. "index" :8,
  101. "handler": "boat",
  102. "lastReservedIndex" : 2,
  103. "base" : {
  104. "aiValue" : 0,
  105. "base" : {
  106. "visitableFrom" : [ "+++", "+-+", "+++" ],
  107. "mask" : [ "VVV", "VAV" ]
  108. }
  109. },
  110. "types" : {
  111. "evil" : { "index" : 0, "rmg" : { "mapLimit" : 64 } },
  112. "good" : { "index" : 1, "rmg" : { "mapLimit" : 64 } },
  113. "neutral" : { "index" : 2, "rmg" : { "mapLimit" : 64 } },
  114. }
  115. },
  116. // subtype: color of guard
  117. "borderGuard" : {
  118. "index" :9,
  119. "handler": "borderGuard",
  120. "lastReservedIndex" : 7,
  121. "base" : {
  122. "aiValue" : 0,
  123. "sounds" : {
  124. "visit" : ["CAVEHEAD"],
  125. "removal" : [ "PICKUP01", "PICKUP02", "PICKUP03", "PICKUP04", "PICKUP05", "PICKUP06", "PICKUP07" ]
  126. }
  127. },
  128. "types" : {
  129. "lblue" : { "index" : 0 },
  130. "green" : { "index" : 1 },
  131. "red" : { "index" : 2 },
  132. "dblue" : { "index" : 3 },
  133. "brown" : { "index" : 4 },
  134. "purple" : { "index" : 5 },
  135. "white" : { "index" : 6 },
  136. "black" : { "index" : 7 }
  137. }
  138. },
  139. "borderGate" : {
  140. "index" :212,
  141. "handler": "borderGate",
  142. "lastReservedIndex" : 7,
  143. "base" : {
  144. "aiValue" : 0,
  145. "sounds" : {
  146. "visit" : ["CAVEHEAD"]
  147. }
  148. },
  149. "types" : {
  150. "lblue" : { "index" : 0 },
  151. "green" : { "index" : 1 },
  152. "red" : { "index" : 2 },
  153. "dblue" : { "index" : 3 },
  154. "brown" : { "index" : 4 },
  155. "purple" : { "index" : 5 },
  156. "white" : { "index" : 6 },
  157. "black" : { "index" : 7 }
  158. }
  159. },
  160. "keymasterTent" : {
  161. "index" :10,
  162. "handler": "keymaster",
  163. "lastReservedIndex" : 7,
  164. "base" : {
  165. "aiValue" : 10000,
  166. "sounds" : {
  167. "visit" : ["CAVEHEAD"]
  168. }
  169. },
  170. "types" : {
  171. "lblue" : { "index" : 0 },
  172. "green" : { "index" : 1 },
  173. "red" : { "index" : 2 },
  174. "dblue" : { "index" : 3 },
  175. "brown" : { "index" : 4 },
  176. "purple" : { "index" : 5 },
  177. "white" : { "index" : 6 },
  178. "black" : { "index" : 7 }
  179. }
  180. },
  181. //Seer Hut object is set off bottom-right corner, need to fix that
  182. "seerHut" : {
  183. "index" :83,
  184. "handler": "seerHut",
  185. "lastReservedIndex" : 2,
  186. "base" : {
  187. "aiValue" : 10000,
  188. "base" : {
  189. "visitableFrom" : [ "---", "+++", "+++" ],
  190. "mask" : [ "VVV", "VVV", "VAV" ]
  191. },
  192. "sounds" : {
  193. "visit" : ["QUEST"]
  194. }
  195. },
  196. "types" : {
  197. "0" : { "index" : 0 },
  198. "1" : { "index" : 1 },
  199. "2" : { "index" : 2 }
  200. }
  201. },
  202. // subtype: different revealed areas
  203. "cartographer" : {
  204. "index" :13,
  205. "handler": "cartographer",
  206. "lastReservedIndex" : 2,
  207. "base" : {
  208. "sounds" : {
  209. "visit" : ["LIGHTHOUSE"]
  210. }
  211. },
  212. "types" : {
  213. "water" : { "index" : 0, "aiValue" : 5000, "rmg" : { "zoneLimit" : 1, "value" : 5000, "rarity" : 20 } },
  214. "land" : { "index" : 1, "aiValue": 10000, "rmg" : { "zoneLimit" : 1, "value" : 10000, "rarity" : 20 } },
  215. "subterra" : { "index" : 2, "aiValue" : 7500, "rmg" : { "zoneLimit" : 1, "value" : 7500, "rarity" : 20 } }
  216. }
  217. },
  218. // subtype: resource ID
  219. "mine" : {
  220. "index" :53,
  221. "handler": "mine",
  222. "lastReservedIndex" : 7,
  223. "base" : {
  224. "sounds" : {
  225. "visit" : ["FLAGMINE"]
  226. }
  227. },
  228. "types" : {
  229. "sawmill" : {
  230. "index" : 0,
  231. "aiValue" : 1500,
  232. "rmg" : {
  233. "value" : 1500
  234. },
  235. "sounds" : {
  236. "ambient" : ["LOOPLUMB"]
  237. }
  238. },
  239. "alchemistLab" : {
  240. "index" : 1,
  241. "aiValue" : 3500,
  242. "rmg" : {
  243. "value" : 3500
  244. },
  245. "sounds" : {
  246. "ambient" : ["LOOPSTAR"]
  247. }
  248. },
  249. "orePit" : {
  250. "index" : 2,
  251. "aiValue" : 1500,
  252. "rmg" : {
  253. "value" : 1500
  254. },
  255. "sounds" : {
  256. "ambient" : ["LOOPSULF"]
  257. }
  258. },
  259. "sulfurDune" : {
  260. "index" : 3,
  261. "aiValue" : 3500,
  262. "rmg" : {
  263. "value" : 3500
  264. },
  265. "sounds" : {
  266. "ambient" : ["LOOPSULF"]
  267. }
  268. },
  269. "crystalCavern" : {
  270. "index" : 4,
  271. "aiValue" : 3500,
  272. "rmg" : {
  273. "value" : 3500
  274. },
  275. "sounds" : {
  276. "ambient" : ["LOOPCRYS"]
  277. },
  278. "battleground": "subterranean"
  279. },
  280. "gemPond" : {
  281. "index" : 5,
  282. "aiValue" : 3500,
  283. "rmg" : {
  284. "value" : 3500
  285. },
  286. "sounds" : {
  287. "ambient" : ["LOOPGEMP"]
  288. }
  289. },
  290. "goldMine" : {
  291. "index" : 6,
  292. "aiValue" : 7000,
  293. "rmg" : {
  294. "value" : 7000
  295. },
  296. "sounds" : {
  297. "ambient" : ["LOOPMINE"]
  298. },
  299. "battleground": "subterranean"
  300. },
  301. "abandoned" : {
  302. "index" : 7,
  303. "aiValue" : 3500,
  304. "sounds" : {
  305. "ambient" : ["LOOPCAVE"],
  306. "visit" : ["MYSTERY"]
  307. },
  308. "battleground": "subterranean"
  309. }
  310. }
  311. },
  312. "abandonedMine" : {
  313. "index" :220,
  314. "handler": "mine",
  315. "lastReservedIndex" : 7,
  316. "base" : {
  317. "aiValue" : 3500,
  318. "sounds" : {
  319. "ambient" : ["LOOPCAVE"]
  320. }
  321. },
  322. "types" : {
  323. "mine" : { "index" : 7, "battleground": "subterranean" }
  324. }
  325. },
  326. "garrisonHorizontal": {
  327. "index" :33,
  328. "handler": "garrison",
  329. "lastReservedIndex" : 1,
  330. "base" : {
  331. "aiValue" : 0,
  332. "sounds" : {
  333. "visit" : ["MILITARY"]
  334. }
  335. },
  336. "types": {
  337. "normal": {
  338. "index": 0,
  339. "sounds" : {
  340. "ambient" : ["LOOPSWAR"]
  341. }
  342. },
  343. "antiMagic": {
  344. "index": 1,
  345. "sounds" : {
  346. "ambient" : ["LOOPMAGI"]
  347. }
  348. }
  349. }
  350. },
  351. "garrisonVertical" : {
  352. "index" :219,
  353. "handler": "garrison",
  354. "lastReservedIndex" : 1,
  355. "base" : {
  356. "aiValue" : 0,
  357. "sounds" : {
  358. "visit" : ["MILITARY"]
  359. }
  360. },
  361. "types": {
  362. "normal": {
  363. "index": 0,
  364. "sounds" : {
  365. "ambient" : ["LOOPSWAR"]
  366. }
  367. },
  368. "antiMagic": {
  369. "index": 1,
  370. "sounds" : {
  371. "ambient" : ["LOOPMAGI"]
  372. }
  373. }
  374. }
  375. },
  376. // Subtype: paired monoliths
  377. "monolithOneWayEntrance" : {
  378. "index" :43,
  379. "handler": "monolith",
  380. "lastReservedIndex" : 7,
  381. "base" : {
  382. "sounds" : {
  383. "ambient" : ["LOOPMON1"],
  384. "visit" : ["TELPTOUT"]
  385. }
  386. },
  387. "types" : {
  388. "monolith1" : { "index" : 0 },
  389. "monolith2" : { "index" : 1 },
  390. "monolith3" : { "index" : 2 },
  391. "monolith4" : { "index" : 3 },
  392. "monolith5" : { "index" : 4 },
  393. "monolith6" : { "index" : 5 },
  394. "monolith7" : { "index" : 6 },
  395. "monolith8" : { "index" : 7 }
  396. }
  397. },
  398. "monolithOneWayExit" : {
  399. "index" :44,
  400. "handler": "monolith",
  401. "lastReservedIndex" : 7,
  402. "base" : {
  403. "sounds" : { "ambient" : ["LOOPMON1"] }
  404. },
  405. "types" : {
  406. "monolith1" : { "index" : 0 },
  407. "monolith2" : { "index" : 1 },
  408. "monolith3" : { "index" : 2 },
  409. "monolith4" : { "index" : 3 },
  410. "monolith5" : { "index" : 4 },
  411. "monolith6" : { "index" : 5 },
  412. "monolith7" : { "index" : 6 },
  413. "monolith8" : { "index" : 7 }
  414. }
  415. },
  416. "monolithTwoWay" : {
  417. "index" :45,
  418. "handler": "monolith",
  419. "lastReservedIndex" : 7,
  420. "base" : {
  421. "sounds" : {
  422. "ambient" : ["LOOPMON2"],
  423. "visit" : ["TELPTOUT"]
  424. }
  425. },
  426. "types" : {
  427. "monolith1" : { "index" : 0 },
  428. "monolith2" : { "index" : 1 },
  429. "monolith3" : { "index" : 2 },
  430. "monolith4" : { "index" : 3 },
  431. "monolith5" : { "index" : 4 },
  432. "monolith6" : { "index" : 5 },
  433. "monolith7" : { "index" : 6 },
  434. "monolith8" : { "index" : 7 }
  435. }
  436. },
  437. // subtype: level
  438. "randomDwellingLvl" : {
  439. "index" :217,
  440. "handler": "randomDwelling",
  441. "lastReservedIndex" : 6,
  442. "types" : {
  443. "objectLvl1" : { "index" : 0},
  444. "objectLvl2" : { "index" : 1},
  445. "objectLvl3" : { "index" : 2},
  446. "objectLvl4" : { "index" : 3},
  447. "objectLvl5" : { "index" : 4},
  448. "objectLvl6" : { "index" : 5},
  449. "objectLvl7" : { "index" : 6}
  450. }
  451. },
  452. // subtype: faction ID
  453. "randomDwellingFaction" : {
  454. "index" :218,
  455. "handler": "randomDwelling",
  456. "lastReservedIndex" : 8,
  457. "types" : {
  458. "objectCastle" : { "index" : 0},
  459. "objectRampart" : { "index" : 1},
  460. "objectTower" : { "index" : 2},
  461. "objectInferno" : { "index" : 3},
  462. "objectNecropolis" : { "index" : 4},
  463. "objectDungeon" : { "index" : 5},
  464. "objectStronghold" : { "index" : 6},
  465. "objectFortress" : { "index" : 7},
  466. "objectConflux" : { "index" : 8},
  467. }
  468. },
  469. // don't have subtypes (at least now), but closely connected to this objects
  470. "spellScroll" : {
  471. "index" :93,
  472. "handler": "artifact",
  473. "types" : {
  474. "object" : {
  475. "index" : 0,
  476. "aiValue" : 500,
  477. "sounds" : {
  478. "removal" : [ "PICKUP01", "PICKUP02", "PICKUP03", "PICKUP04", "PICKUP05", "PICKUP06", "PICKUP07" ]
  479. },
  480. "templates" : {
  481. "normal" : {
  482. "visitableFrom" : [ "+++", "+-+", "+++" ],
  483. "mask" : [ "VA" ],
  484. "animation" : "AVA0001.def"
  485. }
  486. }
  487. }
  488. }
  489. },
  490. "heroPlaceholder" : {
  491. "index" : 214,
  492. "handler": "heroPlaceholder",
  493. "types" : { "object" : { "index" : 0 } }
  494. }
  495. }