Search the Community
Showing results for tags 'Hannibal'.
-
Vox Populi - An Introduction This mod tries to address the main "weaknesses" of the current release: it aims to balance "op/up" units, it adjusts technologies and introduces some variety along the way As the name implies (Vox Populi = Voice of the People) , this mod is open to all suggestions of the 0 A.D. community and there is a high chance that if several "known" players agree on a suggestion, it could be added in here. Supported by a moderator and developer, the features of this mod - if found good - stand a great chance at entering the next release, perhaps even more so than some other balance mods. Anyway, I'm sure you all wouldn't like to read 349 paragraphs about why, what, where etc.. so I'll list the changes this mod brings (hopefully to 0 A.D. Alpha 23) NEW - Kushite civilization! (Differences from 22.1_KD) Replaced unfitting heroes with Nastasen and Arakamani Added Ptolemaic Trireme to be trainable - requires Nastasen hero Reduced Village Phase unit selection Righted the mix up of temples, now can separately build both Amun and Apedemak temples. - Amun temple is more expensive but offers unique technologies and a greater garrison number - at a cost. Mercenaries are promotable: made rank 2 and 3 actors for Clubmen -- placeholder, waiting for better others just keep actor but promote Vision Citizen-solider infantry base vision 50. (Maximum: 70) Citizen-Soldier cavalry base vision 55. (Maximum: 75) Champion infantry vision 75. Champion cavalry & Infantry heroes' vision 85. War elephants' vision & Cavalry heroes' vision 90. Elephant heroes' vision 95. All siege 90 vision except the Siege Tower's 100. Healers & Women base vision 25. (Maximum:45) Traders & Worker Elephants base vision 30. (Maximum: 50) Fishing ships base vision 10. (Maximum: 30) Merchant ships base vision 40. (Maximum: 50) Fire ships base vision 40. (Maximum: 50) Biremes and Triremes base vision 80. (Maximum: 90) Quinqueremes vision 100. Run speed adjusted to be reduced by same amount as Walk Speed. Players have long complained that such high vision is unrealistic and that it should be lowered. Attack Ranges & Movement Speed Archer units maximum attack range reduced by 4. Archer units gain +10 attack range per phase, slinger units +6. All units start with only 80% of original movement speed. Town Phase gives +10%, City Phase +14% Citizen Soldiers Cavalry rework Sword, spear and skirmisher cavalry have all been reworked. Based on tests so far: Sword Cavalry > Spear Cavalry > Skirmisher Cavalry > Sword Cavalry Ptolemaic camel units now inflict a 20% attack penalty on all cavalry (including allied) within a 40m range. Spear Cavalry 2s attack rate, attack reworked to suit the new values. Citizen-soldier archers' maximum movement speed increased to 10. NEW - Elite Seleucid Bronze Shield Pikemen now need 250XP to promote to Champion Silver Shield Pikemen Unit loot increases with rank. Elite units' stats improved slightly. Citizen-soldier cavalry capture rate decreased to 1, increase of only 10% hp per rank (instead of 20%). Logically, cavalry should have a lower capture rate than infantry. Champions All cavalry champions' capture attack reduced to 4. Archer champions' attack range decreased by 4. Skirmisher Chariot Champions now have 320HP and +2 pierce attack but require 2 population. Spear Cavalry Champions retain the 1.25x counter vs. other cavalry, likewise the 3 second attack rate. Gauls - Naked Fanatic pierce attack increased by 2. Heroes Carthaginians Hamilcar's 2nd aura: As you all probably have figured by now, Hamilcar is not a "useful" hero (giving only +15% speed compared to the attack bonuses of Marhabal & Hannibal) Thus, a new aura has been created (based on historical facts) which decreases enemy mercenary attack values by 20%. Persians Darius I's movement speed bonus aura increased from 10% to 15%. Romans Scipio's aura range increased from 10 meters to 30. Technologies NEW - Unique technologies for each civilization. (current goal is 1/civilization - incomplete, feel free to suggest) 2 new technologies at the Civic Centre, affecting both movement speed and health respectively. Artillery Instructors: Siege weapons cost 20% less wood This technology now costs: 500 food, 250 stone, 250 metal instead of the original 500 metal. Unlock Spies: All support units may now be bribed, not only traders. Mounts: Unlock village phase cavalry, researchable for 100F 100W 50M at the Corral. Mounts icon changed, now uses a portrait imported from Delenda Est. 2nd redundant tech replaced with an autoresearched one - at the cost of a warning message when using the Structure Tree Domestic animals base train time doubled, added new technology "Husbandry" for -15% train time and moved Stockbreeding to the Town Phase with maintained -25%. Blacksmith features new Specialization technologies Hero armor tech split up into mounted and infantry ones, now supersedes infantry and cavalry armor upgrades respectively. Stoa technology added as fitting the Royal Stoa's functions - Price Control: +15% market barter values. Wall Tower technologies added, first may shoot arrows then bolts. Carthage Colonisation technology (500W 500M) now affects Civic Structures (Civil Centre, Temples, Houses) by reducing their cost instead of -25% build time. Structures NEW - Stables Stables now available for all civs like for the persians currently. Unlock champion units technology moved to fortress as a consequence. All civilizations have received a new animal trainable from the Corral, this new addition is the Chicken, for all civilisations. Ships The Ptolemaic Juggernaut now costs only 5 population instead of the original 8. Siege Siege Towers' maximum arrow limit increased to 15. Some changes by @Grugnas were incorporated. Support Healers now cost 200 food. Trade Trade income was re-balanced based on suggestions by @Nescio Incorporated several features of the Pro Balance Mod (by @user1) https://wildfiregames.com/forum/index.php?/topic/22798-pro-balance-modconcept-please-test/ GUI Changes Panels now showing Vox Populi mod name with version. Lobby title says "Multiplayer Lobby (Using Vox Populi) - to avoid players forgetting they are using the mod and joining a vanilla game. Download Here!!! vox_populi_22.1.3.zip lightweight edition (for balance and testing purposes) vox_populi_22.1.2_lightweight.zip Installation Instructions: Extract this zip file into the mods folder. The correct folder depends on your operating system. Windows replace USERNAME with your windows login name. Vista or newer C:\Users\USERNAME\Documents\My Games\0ad\mods\ XP / 2000 C:\Documents and Settings\USERNAME\My Documents\My Games\0ad\mods\ OS X ~/Library/Application\ Support/0ad/mods/ Note: "~" is a shorthand for the current user directory. Linux ~/.local/share/0ad/mods/ Note: "~" is a shorthand for the current user directory. -------------------- Changelog 22.0.1 - base version 22.0.2 - Rabbits fixed, infantry archer champion speed increased to 13 to stay constant with citizen-soldier infantry archers. 22.0.3 - Trade nerf fix, vision rework based on suggestions by @elexis and @Grugnas 22.0.4 - Rabbits removed, cavalry rework, attack range and movement speed rework +++ 22.0.5 - Trade fix (based on suggestions by @Nescio), Skirmisher Champion Chariots rebalanced. 22.0.6 - 2 new CC techs, 2nd cavalry tech fix, new icons, new corral tech, increased training time for domestic animals, ++ 22.0.7 - Specialization technologies, hero armor technology rework, new stoa technology 22.0.8 - Wall Turret rework, new technologies first to unlock arrows then bolts. 22.0.9 - Unit loot increases with rank, cavalry only +10% hp/rank, some minor adjustments to elite bonus and spear champion cavalry. 22.1- Kushites added, seleucid pikemen can promote to champions 22.1.1 - Kushite hero rework, error fixes, reduced Village Phase unit selection 22.1.2 - Kushites: Temple rework and differentiation, mercenary fix 22.1.3 - Unique civ-specific technologies, hero abilities, stables added
-
Hi , Im working on .... Carthage : 7 players of 50 pop limit --> 6 districts + 1 army of 50 mercenary champs VS Rome : 1 player of 500 pop limit mostly invading by sea (like survival of fittest) + nubians troops coming from desert I'm using the elevation terrain hack to put some buildings on top of others and make them look like merged in order to have unique structures (below, the 5 houses produces those 5 females with no evacuation problem) Rome will invade with RAMS, but will not be able to crush the Carthage walls everywhere (terrain elevation as unbreakable wall and platform for bolt-lozaa ) If Rome is in the walls .. Some places will be used to make good retreats for those 5 noobs Gauls, Athenians, Iberians, all different but their HATE of Rome on their face Even if the map could be used to be playable, i want to go into the new camera function in 0ad22 to make great cinematics in the narrow streets of carthage during invasion action . (to make a SUPER promotional trailer of 0ad) Also, for the sake of global interests, it would be nice to have a 3D map of carthage which could be used , i.e , for any TV documentary For this, Carthage has to be fulled with contents to give it a living appareance. FEEL FREE to WORK on it and make updates on this thread the pmp https://ufile.io/6vgn1 the xml https://ufile.io/xwqlc
-
I think, I'm getting really close to finalize the domain specific lanaguage (DSL) used in Hannibal's groups and want to ask for some feedback, because this what this bot is all about. The idea is only groups talk to the engine. Some unit should gather a field, there is a group for that. Want to build houses - launch a builder group. Need resources, give the supplier group some entity ids of trees, mines or whales. Groups are the building blocks of the behavior of Hannibal, everything else is low level or services. If something is going wrong a group is probably missing or not properly programmed. Actually you can think of Hannibal as a bot framework with groups as the user interface. Let's say you want an anarchy bot, but don't want to deal with map analysis or the 0AD bot API, all you need to do is fork Hannibal and define new groups with new behavior. How does it work? Well, technically the DSL works by chaining JavaScript methods. Here is a trivial example: array .sort() .filter(item => item > 5) .forEach(/* do stuff */);That works because both sort() and filter() return an array. Fortunately JavaScript's automatic semicolon inserter doesn't kick in. Hannibal's DSL looks similar, but it adds another level. Let's start with the most important group, the base of any village, the grain pickers. I'm going to challenge your imagination, but give it a try: Assume YOU are that little female unit contracted to do nothing but gathering food. Still here? Ok, what is your job description? Basically: Stay alive and gather food. What are your options to stay alive? Let's say, if you got hit seriously flee and search for shelter. If the attacker is gone try to heal. And to gather? Well, that's simple: Gather food and carry it to a dropsite. OK, may be I should order a field if there is none. And even a dropsite, if all others are to far away. You see a gather-food-unit only needs a very simple mind. That's the concept of Hannibal: Give units a simple job description so they never go idle and group similar jobs together. From there complex bot behavior will follow/emerge. I now hear objections: You can't win a game with female food gatherer only! That's right. And I must say I haven't seen attacking units so far with this concept. So here is what I'm going to implement: The job description of a military is actually close to the above, stay alive and do damage. If you are successful move forward otherwise move back to a more secure place like a fully garrisoned fortress of a tower triangle. Hannibal's job is to provide this information, the attacking unit's job is to use it wisely. Can you now imagine a horde of cavalry keeping the right distance avoiding suicide attacks, never going idle and heal if exhausted? Back to the DSL, a group's scripts are triggered by events only. There is a one time event when the group launches, another when Hannibal assigns an asset (read entity, e.g. unit, field, house, dropsite), when the group got attacked, an asset got destroyed or a timed event. Here is the list: launchassignattackdestroyintervalObviously launch is kinda initialization. The group declares what assets are needed and presumably orders the first one. This is the grain pickers launch script: function launch (w) { w.units = ["exclusive", "food.grain GATHEREDBY WITH costs.metal = 0, costs.stone = 0"]; w.field = ["exclusive", "food.grain PROVIDEDBY"]; w.dropsite = ["shared", "food ACCEPTEDBY"]; w.units.size = 5; w.field.size = 1; w.dropsite.size = 1; w.nounify("units", "field", "dropsite"); w.dropsite.on.request(); }The assets are defined using the internal query language, they all need a size and then the definition gets 'nounified'. All left is requesting a dropsite which sooner or later triggers the assign script. The DSL has kind of a grammar consisting of sentences, nouns, subjects, objects, verbs, attributes and modifiers. w.dropsite.on.request();Above is a sentence. JS experts see property chaining works too. 'w' is the world the language is defined in. Each group acts in its own world. 'w' is always the first parameter in script call. Whenever something is nounified it is available either as subject or object. Here is what in this sentence happens: w // each sentence starts with the world .dropsite // dropsite is picked as current object .on // the current object is picked as subject .request() // the current subject fires an action, amount defaults here to 1; // sentence doneSo, in plain English it means: Dear Hannibal, I desperately need a dropsite for food. As most maps have a civic centre as start up building this command is actually a no-brainer. Probably already the next tick calls assign. If Hannibal can't provide a dropsite the map is probably un-playabale, because of lack of resources or whatever. Now things get a bit more complicated, the group may get assigned a dropsite, a field or an unit, so a filter is needed. function assign (w, item) { w.objectify("item", item); // got dropsite, requests unit, exits w.dropsite.on .member(w.item) .units.do.request() .exit ; ...Here dropsite is first selected as object, then as subject and then a member check follows. If that check fails all the rest of the sentence is ignored. In case of success units is selected as subject (do) and a unit is requested. 'exit' means all the rest of the whole script is ignored, think of 'return' in a JS function. It should be clear what comes next - a sentence for a new unit: // keep requesting units until size is metw.units.on .member(w.item) .lt(w.units.count, w.units.size) .request();'lt' - less than - compares 'size' as defined in launch with the actual amount of units. You miss the field? // the first unit requests field, exitsw.units.on .member(w.item) .match(w.units.count, 1) .match(w.field.count, 0) .field.do.request() .exit;Still the units do not gather, the script makes sure through the order of requesting there is a dropsite and units and a field. // got the field foundation, all units repair, exitsw.field.on .member(w.item) .match(w.item.foundation) .units.do.repair(w.field) .exit;Here is another modifier 'match' just checking whether a attribute is true. There are two more sentences, the whole thing is currently here: https://github.com/agentx-cgn/Hannibal/blob/master/source/simulation/ai/hannibal/grp-harvester.js#L61 For sure this is just the beginning, beside grain-picker, miners, lumber jacks, builders more is needed to support a village or even launch an attack. For example there will be a scout group having an object called scanner which scans the terrain and Hannibal transforms this information into a potential field needed to tell attackers which region is safe or not, thus giving the direction of forward or back. If at this point you think - wait stop - I have some sentences in mind for another group, you're welcome. Please, let me know or even better paste them below. This is the purpose of Hannibal, it let you try out in a simple way how an AI can work. All you need to do is put yourself into the position of an 0AD unit and determine your options. That's it. I nearly spend a year getting this idea running and actually see now units building villages, powered by groups scripts. I hope, I could understandably layout the potential. Now, my target is to release a sandbox (no attacks) version within weeks, showcasing this concept. Follow this topic for breathtaking videos PS. Developers may have all alarm clocks ringing because of performance, but keep in mind the scripts are fired on events only, there are not that many groups needed and so far none took longer than a millisecond. PPS: Ok, another one. A unit of your group got killed, what's the sentence? function destroy (w, item) { w.objectify("item", item); // lost unit, request another w.units .member(w.item) .request() ;}