moddables.json 11 KB

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