Advertisement
xThomas

sunohydras balance ideas short

Dec 17th, 2021
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.97 KB | None | 0 0
  1. /*
  2.  
  3. Malay has halbs, but I think giving Malay Rams and Treadmill crane would make it enjoyable for others as you have no real rush option and they are slow to build up a good army and slow to push relying on Bbc/Treb push... thus siege rams making it atleast more aggressive and Treadmill crane making it so u don't have to always play from behind defending to get to your ideal Malay composition.
  4.  
  5. A civ like Byz would benefit from Treadmill crane alone and maybe blood lines (although bloodlines would impact Byz RM I think alot)
  6. But Treadmill crane is a good start.
  7.  
  8.  
  9. Ethopian could use Treadmill crane as it has no legitamate mobility option and is hard to defend when rushed as they have weak cavalry and weak infantry line where they shine mostly with archer and SO.. if ur a player who lacks micro or early game, this civ probably sucks to play as they really lack mobility and early game+late game hugely imo.
  10.  
  11. Italian is an okay civ I'd may not need anything, but in my opinion not quite there yet in strength (yes they got great UU) but honestly mobility not being great outside of condo early in which they typically lose to cavalry anyway, and the fact that they defend poorly and rely on castle unit/bbc in which case I see most players castle clump with Italian due to only having condo/pikemen to defend which could be disasterous anyway. Maybe an Halb upgrade would help with resorting to turtling for UU majority of time of getting rushed in tg. All in all I just think their early game and defense is a liability and their late game is not great either, although we can all probably agree their mid game can be super strong but that's situationally. Bestly put, italians is a situational civ rn imo. Can be great to play at times, or can totally just suck and be useless.
  12. Porto is tough to say as they got a scary deathball at times and i rate them decent at defending as u can go champ or halb. Also can rush with Cavalier (if your feeling good).. but I feel like their missing something. Once deathball is done they seem super weak and expensive on wood and gold (yea they get a gold bonus, but when ur main gold unit is a BBC combined with like UU or something else, u can drain gold quite fast). Also really immobile as ur camping with bbc. Maybe squires on their infantry can give them a little push? Or maybe even giving them Siege Ram as an alternative so ur not always having to death ball/slow push to win.
  13.  
  14. Brits just need Treadmill crane, they have no rushing options mostly a sling civ or support civ. Typically easily countered by majority of civs like elephant civs, Rams, siege civs, or paladins, eagles and alot of UUs. Lol. Plus super immobile. But overall great supporting civ and sling civ. But just too situational. My only solution I have is give them Treadmill crane, if they can manage early on or get a jump they can be a force. I've played too many games where I could only sling/support or just camp with brits.
  15.  
  16. Goths is tricky...I think Treadmill crane would make them too strong. This is a civ that I like but can see where they can suck to play in most TGs. Maybe Siege Ram or the Last armor for infantry is needed at this point, their mid game is suspect and early/late game can be hit or miss...
  17.  
  18. And lastly to Zacks point, give Khmer Bombard cannon back and take away Treadmill crane because with both Khmer might be too Op like it used to be.. I think is the better solution, as u should be able to defend okay with the fact u can garrison villagers via house and they have great econ.
  19.  
  20. I think I covered most the civs that need something done the most in terms of TG
  21.  
  22. */
  23.  
  24. /*
  25. suno hydra dm balance ideas
  26. XS script by xThomas
  27. Created: Dec 16, 2021
  28. Modified: Dec 16, 2021
  29.  
  30. Version: 1.0
  31. use this line to include it in a random map script
  32. #includeXS myscript.xs
  33. */
  34. void plateMailArmor(int player = 1) {
  35. int spear = 93;
  36. int militia = 74;
  37. int huskarl_c = 41;
  38. int huskarl_b = 759;
  39.  
  40. int spear_melee_armor = 1024 + 3;
  41. int militia_melee_armor = 1024 + 4;
  42. int huskarl_melee_armor = 1024 + 3;
  43. xsEffectAmount(cSetAttribute, spear, cArmor, spear_melee_armor, player);
  44. xsEffectAmount(cSetAttribute, militia, cArmor, militia_melee_armor, player);
  45. xsEffectAmount(cSetAttribute, huskarl_c, cArmor, huskarl_melee_armor, player);
  46. xsEffectAmount(cSetAttribute, huskarl_b, cArmor, huskarl_melee_armor, player);
  47.  
  48. int spear_piercearmor = 768 + 4;
  49. int militia_piercearmor = 768 + 5;
  50. int huskarl_piercearmor = 768 + 12;
  51. xsEffectAmount(cSetAttribute, spear, cArmor, spear_piercearmor, player);
  52. xsEffectAmount(cSetAttribute, militia, cArmor, militia_piercearmor, player);
  53. xsEffectAmount(cSetAttribute, huskarl_c, cArmor, huskarl_piercearmor, player);
  54. xsEffectAmount(cSetAttribute, huskarl_b, cArmor, huskarl_piercearmor, player);
  55. }
  56.  
  57. void upgradeSiegeRam(int player = 1) {
  58. xsChatData("TEST: Enable Siege Ram for player %d", player);
  59. // fakebram = 35;
  60. int realbram = 1258;
  61. int siegeram = 548;
  62. xsEffectAmount(cUpgradeUnit, realbram, siegeram, 0, player);
  63. return;
  64. }
  65.  
  66. void upgradeHalberdier(int player = 1) {
  67. xsChatData("TEST: Enable HALB for player %d", player);
  68. int spear = 93;
  69. int halb = 359;
  70. xsEffectAmount(cUpgradeUnit, spear, halb, 0, player);
  71. return;
  72. }
  73.  
  74. void researchTreadmillCrane(int player = 1) {
  75. xsChatData("Enable TreadmillCrane for player %d", player);
  76. xsEffectAmount(cMulAttribute, 118, 13, 1.2, player);
  77. xsEffectAmount(cMulAttribute, 212, 13, 1.2, player);
  78. return;
  79. }
  80.  
  81. void oldTarkan() {
  82. int tarkan = 755;
  83. xsChatData("Old Tarkan");
  84. xsEffectAmount(cSetAttribute, tarkan, cArmor, 775);
  85. xsEffectAmount(cSetAttribute, tarkan, cShownPierceArmor, 3);
  86. xsEffectAmount(cEnableObject, 886, cAttributeDisable, 0);
  87. xsEffectAmount(cEnableObject, 887, cAttributeDisable, 0);
  88. }
  89.  
  90. void oldCavArcherCost() {
  91. int cavarcher = 39;
  92. xsEffectAmount(cSetAttribute, cavarcher, cWoodCost, 28);
  93. xsEffectAmount(cSetAttribute, cavarcher, cGoldCost, 49);
  94. }
  95.  
  96. void researchBombardCannon(int player = 1) {
  97. xsChatData("Enable Bombard Cannon for player %d", player);
  98. xsEffectAmount(cEnableObject, 36, cAttributeEnable, 0, player);
  99. return;
  100. }
  101.  
  102. /* ===================== */
  103. // for post imp starts you need to set the base unit
  104. // a post imp unit spawned from castle wont get the change
  105. // although one spawned by create_object will
  106. // create_object behaves different is a gotcha when ur testing map
  107. /* ===================== */
  108.  
  109. // kipchaks have 1.8 fire rate (from 2.2) and have 0 attack delay like they used to
  110. void buffKipchak() {
  111. xsChatData("Kipchaks have 0 delay, base ROF 1.8 (was 2.2)");
  112. int kipchak = 1231;
  113. float oldBaseROF = 1.8; // currently 2.2
  114. float x = 1.8 / 2.2;
  115.  
  116. float desiredROF = 1.8*0.85; // thumb ring
  117. xsEffectAmount(cSetAttribute, kipchak, cAttackDelay, 0);
  118. xsEffectAmount(cMulAttribute, kipchak, cAttackReloadTime, x);
  119.  
  120. int e_kipchak = 1233;
  121. xsEffectAmount(cSetAttribute, e_kipchak, cAttackDelay, 0);
  122. xsEffectAmount(cMulAttribute, e_kipchak, cAttackReloadTime, x);
  123.  
  124. int freekipchak = 1260;
  125. xsEffectAmount(cSetAttribute, freekipchak, cAttackDelay, 0);
  126. xsEffectAmount(cMulAttribute, freekipchak, cAttackReloadTime, x);
  127. }
  128.  
  129. // mangudai have 0 attack delay and move at a speed of 1.43 like they used to
  130. void buffMangudai() {
  131. int mangudai = 11;
  132. float desiredSpeed = 1.43*1.1; // husbandry
  133. xsEffectAmount(cSetAttribute, mangudai, cAttackDelay, 0);
  134. xsEffectAmount(cSetAttribute, mangudai, cMovementSpeed, desiredSpeed);
  135. xsChatData("Mangudai have 0 delay, CHECK SPEED 1.43 IF HUSBANDRY APPLIED");
  136.  
  137. }
  138.  
  139. // mameluke take less damage from halbs and have 0 attack delay
  140. void buffMamelukeAttackDelay() {
  141. int mameluke = 282;
  142. xsEffectAmount(cSetAttribute, mameluke, cAttackDelay, 0);
  143. }
  144.  
  145. void saracenCamelryAOC() {
  146. // EXPERIMENTAL
  147. int mameluke = 282;
  148. xsChatData("Mamelukes have armor vs halb as in AOC DM.");
  149. // mameluke armor class is 35, halberdier does 11 to mameluke armor
  150. int desiredMamelukeArmor = (35*256) + 11;
  151. xsEffectAmount(cSetAttribute, mameluke, cArmor, desiredMamelukeArmor);
  152. // camel armor is class 30, halb does 26 vs camel armor
  153. int desiredCamelArmor = (30*256) + 10;
  154. xsEffectAmount(cSetAttribute, mameluke, cArmor, desiredCamelArmor);
  155.  
  156. // does this change how pikes do vs mamelukes at all?
  157. // adding extra camel armor messed with how camels perform vs mames so i need to fix that
  158. }
  159.  
  160. void camelryFIXMEcamels(){
  161. // UNTESTED : Mameluke damage from Cuman Camels, Tatar Flaming Camels
  162. // Working : Mamelukes take 23 Damage from Heavy Camels, 25 Damage from Imperial Camel
  163. int p = 0;
  164. int max = xsGetNumPlayers();
  165. while(p < max) {
  166. p++;
  167. int c = xsGetPlayerCivilization(p);
  168. switch(c) {
  169. default : {
  170. // WORKS FOR IMPERIAL AND HEAVY CAMELS
  171. xsChatData("difault camels");
  172. xsEffectAmount(cSetAttribute, 329, cAttack, 8987); // SHOULD apply to camels created from stables
  173.  
  174. }
  175. case 33 : {
  176. xsEffectAmount(cSetAttribute, 329, cAttack, 8987); // SHOULD apply to camels created from stables
  177. // TATARS FLAMING CAMELS I HAVE NO IDEA HOW TO FIX NOW MAMES DONT DIE TO THEM AT ALL
  178. int flamingcamel = 1263;
  179. }
  180. case 34 : {
  181. // CUMAN CAMELS ONLY HAVE 5 BONUS VS CAMELS SO THEY CAN'T GET EXTRA ATTACK VS MAMELUKES FUUUUUU
  182. xsChatData("cumans camels");
  183. xsEffectAmount(cSetAttribute, 329, cAttack, 8976); // Camel does 16 less damage to mameluke compared to heavy camel
  184. }
  185. }
  186. }
  187. }
  188.  
  189. // mamelukes are classified as ships again lmao
  190. /* void nerfMamelukeS(int player = 1) {
  191. // i would need to mess with mameluke armors and halberdier bonuses vs ships and camels and mamelukes and its a massive pain so i dropped the nerf idea and also i dont think its possible to add armor/attack classes, at least it wasnt with up
  192. } */
  193. // see below: camels are ships
  194.  
  195. // rms can't change armor classes, but towers/castles already do +1 vs camels
  196. void camelsAreSortaShips(int player = 1) {
  197. int camelArmorClass = 30;
  198. int watchtower = 79;
  199. int desiredCamelAttackBonus = 9;
  200. int camelAttack = (camelArmorClass * 256) + desiredCamelAttackBonus;
  201. xsEffectAmount(cSetAttribute, watchtower, cAttack, camelAttack);
  202. xsChatData("Camels take bonus damage from towers again lmao");
  203. // TODO: mimic heated shot
  204. }
  205.  
  206. // 15% faster instead of 10%
  207. void buffKhmerBattleElephant(int player = 1) {
  208. float mult = 1.15/1.1;
  209. int battleElephant = 1132;
  210. // int battleElephantElite = 1134;
  211. xsEffectAmount(cMulAttribute, battleElephant, cMovementSpeed, mult, player);
  212. }
  213.  
  214. // +1 Range... team bonus?
  215. void buffKoreansOnager(int player = 1) {
  216. // may need to use a rule to handle team bonuses
  217. }
  218.  
  219. void thumbRing(int player = 1) {
  220. int archerClass = 0;
  221. int cavArcherClass = 36;
  222. int archer = 4;
  223. // int crossbowman = 24;
  224. // int arbalest = 492;
  225. int cavarcher = 39;
  226. int heavycavalryarcher = 474;
  227. // WORKING: Archer thumb ring
  228. // WARNING: cav archer not tested
  229. xsEffectAmount(cSetAttribute, archerClass, cAccuracyPercent, 100, player);
  230. xsEffectAmount(cSetAttribute, cavArcherClass, cAccuracyPercent, 100, player);
  231.  
  232. xsEffectAmount(cMulAttribute, archer, cAttackReloadTime, 0.85, player);
  233. xsEffectAmount(cMulAttribute, cavarcher, cAttackReloadTime, 0.9, player);
  234.  
  235. }
  236.  
  237. void buffMayansObsidianArrows(int player = 1) {
  238.  
  239. }
  240.  
  241. // make their attack do +6 damage vs buildings
  242. // on top of the +5 vs archers?
  243. void buffArambai(int player = 1) {
  244.  
  245. }
  246.  
  247. // blast furnace?
  248. // leitis and winged hussar compensate enough imo, its just a nerf to pally
  249. void buffLithuanians(int player = 1) {
  250.  
  251. }
  252.  
  253.  
  254. void main() {
  255. // camelsAreSortaShips();
  256. buffKipchak();
  257. buffMamelukeAttackDelay();
  258. // saracenCamelryAOC();
  259. // camelryFIXMEcamels();
  260. buffMangudai();
  261. oldTarkan();
  262. oldCavArcherCost();
  263. int p = 0;
  264. int max = xsGetNumPlayers();
  265. while(p < max) {
  266. p++;
  267. int c = xsGetPlayerCivilization(p);
  268. switch(c) {
  269. case cBritons : {
  270. xsChatData("Player %d is Brits", p);
  271. researchTreadmillCrane(p);
  272. }
  273. case cFranks : {
  274. xsChatData("Player %d is Franks", p);
  275. researchTreadmillCrane(p);
  276. }
  277. case cGoths : {
  278. xsChatData("Player %d is Goths", p);
  279. // researchTreadmillCrane(p);
  280. plateMailArmor(p);
  281. upgradeSiegeRam(p);
  282. }
  283. case cTeutons : {
  284.  
  285. }
  286. case cJapanese : {
  287.  
  288. }
  289. case cChinese : {
  290.  
  291. }
  292. case cByzantines : {
  293. xsChatData("Player %d is Byz", p);
  294. researchTreadmillCrane(p);
  295. }
  296. case cPersians : {
  297.  
  298. }
  299. case cSaracens : {
  300. xsChatData("Player %d is Saracens", p);
  301. // buffMameluke(p); // moved outside
  302. // nerfMamelukeShips(p) // outside
  303. }
  304. case cTurks : {
  305.  
  306. }
  307. case cVikings : {
  308. xsChatData("Player %d is Vikings", p);
  309. thumbRing(p);
  310. }
  311. case cMongols : {
  312. xsChatData("Player %d is Mongols", p);
  313. // buffMangudai(p);
  314. }
  315. case cCelts : {
  316.  
  317. }
  318. case cSpanish : {
  319.  
  320. }
  321. case cAztecs : {
  322.  
  323. }
  324. case cMayans : {
  325. xsChatData("Player %d is Mayans", p);
  326. buffMayansObsidianArrows(p);
  327. }
  328. case cHuns : {
  329. xsChatData("Player %d is Huns", p);
  330. researchTreadmillCrane(p);
  331. }
  332. case cKoreans : {
  333. xsChatData("Player %d is Koreans", p);
  334. buffKoreansOnager(p);
  335. }
  336. case cItalians : {
  337. upgradeHalberdier(p);
  338. }
  339. case cIndians : {
  340.  
  341. }
  342. case cIncas : {
  343.  
  344. }
  345. case cMagyars : {
  346.  
  347. }
  348. case cSlavs : {
  349. xsChatData("Player %d is Slavs", p);
  350. researchTreadmillCrane(p);
  351. }
  352. case cPortuguese : {
  353.  
  354. }
  355. case cEthiopians : {
  356. researchTreadmillCrane(p);
  357. }
  358. case cMalians : {
  359.  
  360. }
  361. case cBerbers : {
  362.  
  363. }
  364. case cKhmer : {
  365. xsChatData("Player %d is Khmer", p);
  366. researchTreadmillCrane(p);
  367. buffKhmerBattleElephant(p);
  368. researchBombardCannon(p);
  369. }
  370. case cMalay : {
  371. xsChatData("Player %d is Malay", p);
  372. researchTreadmillCrane(p);
  373. upgradeSiegeRam(p);
  374. }
  375. case cBurmese : {
  376. xsChatData("Player %d is Burmese", p);
  377. researchTreadmillCrane(p);
  378. buffArambai(p);
  379. }
  380. case cVietnamese : {
  381.  
  382. }
  383. case cBulgarians : {
  384.  
  385. }
  386. case cTatars : {
  387.  
  388. }
  389. case cCumans : {
  390. xsChatData("Player %d is Cumans", p);
  391. // researchTreadmillCrane(p);
  392. // buffKipchak();
  393. }
  394. case cLithuanians : {
  395.  
  396. }
  397. case cBurgundians : {
  398.  
  399. }
  400. case cSicilians : {
  401.  
  402. }
  403. case cPoles : {
  404.  
  405. }
  406. case cBohemians : {
  407.  
  408. }
  409.  
  410.  
  411.  
  412. }
  413. }
  414. }
  415.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement