Jump to content

Res Gestae Mod


KKaslana
 Share

Recommended Posts

Hello everyone! I'm Nagasushi. Some days ago I tried to register a forum account, but unfortunately it didn't get approved, so I have to borrow this account from someone to make a post for my new mod Res Gestae. Please download from my Github link here or at the end of this post.

https://github.com/Nagasushi2021/Res_Gestae

Res Gestae is intended to be a 'small overhaul mod', which changes many aspects of the game without diverging too far from vanilla, or adding too many complicated mechanics that will be hard to be adapted for the future versions of 0ad. We endeavour to provided a balanced gameplay that will be attested by mathematical calculations and matches between AIs and humans. We will also aim to make sure that the AI included in this mod will employ diversified strategies and tactics at the difficulties that will suit everyone, from absolute beginners to the multiplayer pros. Furthermore, there is an emphasis on the tactics, strategies, and particularly on the viability of diversified gameplay styles. Also as the name suggests, we draw our inspiration from real world history, which means we will try to emulate the military tactics they used, their army composition, and more particular features of each civilisation.

Outline of the initial version:

Pathfinder: twisted pathfinder parameters in order to prevent unit overlapping and exceedingly smooth movement. Units are able to block enemies properly. Subject to future changes.

Unit changes (only done for citizen soldiers, need more testing): unit balance, and various changes making tactics and micromanagement possible.

AI: I have made a bot called Catilina based on Petra bot, and tested it with @Yekaterina. Currently the medium difficulty is roughly equal to a 1300-1400 level human player. Note that this bot is intended for testing rather than competing against human players at the moment. We recommend 'balanced' behaviour, and 200-300 pop, very low to medium resource, small to medium map size settings. It should work on any map not divided by water regions (e.g. mainland). If you want to see two Catilina bots fighting against each other, we recommend small Corinthian Isthmus map, since they prefer to head to the opponent's base rather than fighting against its army directly on other maps.

Techs: Merged damage techs and added movement speed techs to encourage combined army.

=========================================================================================================

0.0.4 Preview (not yet available on github)

This update will focus on champions and clean up some existing civ features that will not be presented in Res Gestae, paving the way for civ differentiation in the next update. It will also include other gameplay changes and hotfixes.

Hotfixes: Fixed some incorrect unit stats.

                 Fixed champion movement issue (resulted by low returning rate+pushing mechanic+pathfinder parameters, reported by various players)

Civ Features: Removed some existing civ features.

Buildings: Towers have bonus against cavalry. (Towers had little use against early cav rush and they usually considered as not worthy in early game. This update makes towers the most effective way to defend against cav rush - an investment that can actually keep your base safe. And it won't a proper siege much harder. So consequently, if the rushing side finds the opponent's base well defended by towers, it would be a better idea to find some hunts or rush another player instead. This helps with building a rush-boom-turtle-rush counter dynamic.

Units: This updates contains the initial changes for champions: based on my mathematical model fr production and battle strength, champions, particularly melee infantry types, have much better cost efficiency than in vanilla a25. This makes waiting for phase three a good choice alongside attacking with citizen soldiers and rams in phase two. Different civs have genuinely different champions, with their pros and cons. Further balancing adjustments will be needed.

Mercenaries: they are based on a23 mercenaries now - good at fighting; bad at gathering; expensive but fast to train

Siege units stats changes

AI: various minor AI changes           

=========================================================================================================

0.0.3

The first major update of Res Gestae:

AI difficulties: There are nine AI difficulty levels now - I found the highest one most entertaining for myself. Note that the rating intervals are merely guidelines, which do not reflect your level in vanilla multiplayer.

AI: Various improvements including use of towers, change of combat behaviours, adjustments for gameplay changes, basic support for tiny map and more. Diversification: Catilina has different behaviours in each match - it might rush or choose to attack at different time.

Gameplay changes: Arsenal and rams are available for all factions in Phase 2, which encourages more diversified strategies other than booming and attacking when pop cap is reached. Consequently, phase 3 will give players much better options to boost economy and army strength (in this version some p3 techs already have reduced cost). Champions will be addressed together with civ differentiation in future updates.

Techs: reduced cost for many p3 techs and phase3 itself.

Units: slightly changed gathering rates. Rams have significantly more health and lower damage - siege will last longer and winning battles is much more important for both sides: attacking side should not overspam rams; defending side should not try to 'pick out' rams before defeating attacker's army. 

Buildings: economic buildings and palisades are much easier to destroy. Lower hack resistance for almost all buildings. Stones towers deal more damage and cost more resources - it should be a good option to garrison towers when you are under attack. Slightly better vision for all towers.

Other changes: slightly changed formations. 'Random' draws each civ with equal probability now.

=========================================================================================================

Planned features that will NOT be implemented in recent updates: (due to compatibility issues or amount of work required)

AI border contact management - we do not recommend having AI closer than 1v1 small mainland (e.g. 1v1 on any tiny map, or 2v2 on any small map)

Naval overhaul and AI naval management

UnitAI changes - compatibility issues with current release and svn

AI defence overhaul - Catilina is using the defence modules of Petra, which should be substantially reworked. Only minor improvements will be implemented in recent updates.

==========================================================================================================

MOD IS NOW PLAYABLE. COMPATIBLE WITH ALPHA 25.

https://github.com/Nagasushi2021/Res_Gestae

Still a work in progress. 

Please report bugs and suggest balancing and gameplay ideas

 

 

 

Edited by KKaslana
  • Like 5
  • Thanks 1
Link to comment
Share on other sites

0.0.3: Demo match between two default Catilina bots on small mainland. After three major battles, Persians crushed Macedonians with superior techs. Note that the behaviours of the AI changed a lot.

 

===================================================================================================

0.0.1: It takes me too much time to upload videos, so I will just upload these two videos to demonstrate the importance of tactics in Ress Gestae. The armies in these two videos are identical - Mauryan side is superior in number and cost. First video: without micro-management

Edited by KKaslana
  • Like 2
Link to comment
Share on other sites

Hello Nagasushi. I've tried you mod. So far, it's loads of fun. The new AI is a beast at macro (in comparison to petra). I have been playing it at Balaced + Hard and couldn't beat it yet. 

The pathing seems nice and i like the movement upgrade for infantry. The ranged units seem a bit weird though. Most have 2.2-2.7 attack interval and high damage, but the javelin cavalry has only 7 range. Was that intentional? Javelin infantry has 30 range and bow cav has 50 range so why javeling cav only has 7 range?

Nevertheless, it is a fun mod!

Link to comment
Share on other sites

I would also like to add that elephants seems a bit OP. Usually they can't receive armor upgrades, but it seems that in this mod they can. This means that during a late game conflict with the Mauryas i was facing 1300HP elephants with 11 hack armor and 8-9 pierce armor, so they might need a little bit of tuning down.

Link to comment
Share on other sites

Hi @Micfild. Thank you for your feedback. Don't worry if you can't beat medium level - easy level is too easy due to some petra features, but I will add more difficulty levels very soon.

The attack strength of an unit is measured by their damage per second (dps), which is Attack value/Interval. For example, inf spear has 5.5/1=5.5, inf jav has 20/2.275=8.8, sling has 20/2.5=8, archer has 20/2.7=7.4, jav cav has 20/2.4=8.3. These attack intervals are much more realistic and they can make archers easier to balance.

There are three reasons why javelin cavs have very short range:

1) Flanking with cavs is possible because ranged infantry has minimum range - when cavs get into this range, they won't be able to fight back, though in practice a large number of ranged infantry can still kill cavs, which is a desirable result. If jav cavs have longer range than the minimal range of ranged infs, flanking won't work.

2) Cavalries shouldn't simply be stronger, faster, and harder hitting versions of infantry - they have very different roles. Short range makes them unsuitable for fighting against infantry spears head on.

3) Historical accuracy. It's completely implausible that cavalries use javelins rather than spears as their primary weapons on the battlefield, so I just want these jav cavs be a representation of general light scouting cavalries ( I would replace them with lighter spear cavs if I have the models). I made them slightly faster, and slighlty weaker (not easy to see from the stats) than sword cavs, so that they are very good for hunting, raiding, capturing lone buildings and chasing fleeing enemies, but not as good as melee cavs for flanking ranged units ( though they can still do that). Short range prevents them to be used as machine guns behind infantry lines, which is very absurd.

So give them a try, especially for raiding - they are not bad units.

I haven't made any change on armour techs or elephants.  So they receive the buffs if anf only if they do in vanilla a25. Yea, the elephants are quite op indeed. I will work on them when I start to deal with champs and civ differentiation.

Make sure that you gather your army before fighting, and don't forget attackmove (hold ctrl + right click). Have fun!

 

  • Like 1
Link to comment
Share on other sites

Thank you for the clarification Nagasushi. The smaller range of the javelin cav caught me by surprise, but your reasoning seems perfectly correct so i'll experiment with them a bit more. I've been playing with the Iberians lately and i was used to the cheaper Javelin cav with high mobility, range and damage output. It used to counter spears quite effectively, since 30 meters is quite a long range, given the cav's high mobility. Now that i know their intended purpose i can fit them better in my army. Also i do understand now why they have 150 HP instead of the usual 100.

As for the ranged units, i found it interesting that you added a minimum range to them, so they can't fight melee battles and have to constantly retreat in order to fire. I also noted that javelin infantry has higher pierce armor (5) than archers (1), i guess to justify their lower range. 

As for the Elephants, i'm pretty sure they didn't receive armory upgrades before your mod, but i'll double check just to be sure. 

I wasn't playing on medium. i put it on hard (if it makes any difference). But its been loads of fun. The AI doesn't slack and keeps sending wave after wave at one point, mixing army compositions, splitting  forces and even ignoring my attacks sometimes and going straight for my base (giving me a bit of a headache), but i enjoy the challenge. 

As for attack+move, its all i do, really. I even altered the hotkeys so that "hold ctrl+ right click" doesn't focus buildings, only units.

Nevertheless, this is a great mod. Great job!

EDIT 1:

You were correct. The Elephants receive armory upgrades in the base game as well.

Edited by Micfild
  • Like 1
Link to comment
Share on other sites

I've played vs the Catilina AI without the balancing modifications, and it does seem significantly more challenging. I wanted to suggest splitting off your AI modifications to a separate project/mod. I'd like to play with just the Catilina AI but otherwise vanilla 0ad.

Edited by andy5995
spelling correction
  • Like 2
Link to comment
Share on other sites

Re: @Micfild Yes, javs have higher armour for the case that they need to approach slingers or archers without melee units in front. However, even with higher armour, they will still lose, though they won't get massacred like in vanilla a24. Thier dps is high enough to make them the best choice for head-on battles.

Re: @wowgetoffyourcellphone What weapons are these Cav Scouts using?

Re: @andy5995 If you want to play with Catilina bot in vanilla, please do keep a copy of the version you have. It's made for testing purposes only, so its parameters are not optimized for vanilla a25. Since more features (like new techs, units and civs) will be added into Res Gestae, it's necessary to make Catilina adapted to these features - it's very likely that the future versions will not be compatible with vanilla. Since there will be a lot of extra work, I would not make a separate project. Also please have look at @Angen's Kiara bot, which has superior algorithms and I suppose it should always be compatible with vanilla.

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

On 20/09/2021 at 4:08 AM, Micfild said:

As for the ranged units, i found it interesting that you added a minimum range to them, so they can't fight melee battles and have to constantly retreat in order to fire.

@Stan`
Should this be adopted for vanilla a25/ future versions? It seems to be more realistic.

Edited by Ceres
  • Like 1
Link to comment
Share on other sites

2 hours ago, wowgetoffyourcellphone said:

Tried it. Neat. 

WARNING: Failed to draw cursor 'action-attack-noprojectile'

Yeah, that is arcanist being a @#$%. Please download the icon manually and put it in the correct place. Sadly can't do much about it. (When committed this issue is gone)

  • Like 1
Link to comment
Share on other sites

carolina0006.thumb.png.c79315480619714cae0b850a8c78815c.png

Just me and the boys Hacking Catalina's CC to dust before the developers nerf us to oblivion.:victory:

Seriously,  some initial observations.

Tiny Mainland is my idea of dangerous sandbox, so this is where I go to test new changes in new alphas.

I do admit that Catalina does make a great effort to boom, but it has some odd quirks.  The main difference that stood right out was that it spammed a lot of cavalry and attempted to hunt down every deer on the map.  Unfortunately I tend to populate my border with at least 3 small towers as soon as possible, so they met a quick end once they crossed the border despite their great numbers.

  In tiny Mainland there is still a decent amount of room between the initial borders so my towers don't really threaten the enemy until I have extended my border with 2 or three barracks with another tower added with each barrack extension.  I went level 2 at about 7 minutes. Catalina continued to produce farms and collect wood, but by this time my towers were on his border. Like Petra he continued to build houses close to the border within range of my towers and still suffers the same malady as Petra of sending a women to try to repair minor damage on all those buildings. Despite having over 30 wood cutters and 30 farmers on 10 farms he could not generate enough food to level up to 2 before twenty minutes.  At this point my towers were also threatening a market he was also trying to construct on the border so he launched an attack on the tower but with no upgrades at this point he could not mass enough troops to even damage a fully garrisoned tower.  Sometimes infantry wood take a couple of hacks on a tower, give up and go try to continue repair a next to useless house.  Until this suicide issue is addressed the AI will never have any respect.

At this point in a typical match in this scenario Petra stops being able to produce soldiers, but only sends an occasional women out to repair a border building.  Catalina did at least continue to farm and cut wood out of range, but remarkably did not attempt any mining.  By 40 minutes all the remaining workers had one by one gotten their final order to abandon their farm or tree and go repair a building. After one more try after producing one infantryman to attack a captured barracks, retreat to the CC to heal and return for another try he finally expired leaving the CC with 302 food 42 wood and 333 metal and no desire to produce more. (Usually Petra stops when it has less than 50 food.

Of course I kept spamming consular bodyguards to get my screenshot and little jab at the balance team in the thread I'm not allowed to post in.

This brutal humiliation of the enemy also works on Petra up to very hard.  Petra really can't function very well in a small environment. I started Catalina here on medium, without checking the level beforehand.  I will give the other harder levels a try.

Finally notice that 3 of the champions in the lower right hand corner are facing away from the building.  In my raiding to capture all the other buildings, various individuals kept getting stuck or not responding to the attack command.  Though motionless they did not have a resting pose.  I've never seen this before, even when having upwards 75 or more champions surrounding a building, or moving in unison across the map. 

  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...

I eventually tried the harder levels with a decent amount of success.  Even tried multiplayer games against catalina with petra as my allies (petra did pretty well). I finally abandoned my experiments when my consular cavalry champions kept "freezing" randomly when given an order to attack or retreat.  This was solved by removing the mod, so I have no plans to retry until this issue is resolved.

Another weird feature of the harder levels I noticed was that the massive amount of workers that catalina sent into my territory to collect resources, despite being under constant attack from fully garrisoned towers.  Catalina was still able to increase population with a mostly almost dead workforce, due to the sporadic targeting of the towers.

On two separate occasions of catalina reaching a pop max of 200 it passed by all my defenses and went straight to the CC.  Since the attack was early none of the troops had any upgrades so my CC full of women held out and I was able to empty my border towers and built new towers closer to the CC, which eventually decimated his entire army.  Catalina did not recover.

  • Like 2
Link to comment
Share on other sites

May I suggest a slight change to Line-of-sight aggression range in UnitAI.js? This helps reduce unit zerging and improves player control of his or her units:

 

UnitAI.prototype.GetQueryRange = function(iid)
{
	let ret = { "min": 0, "max": 0 };

	let cmpVision = Engine.QueryInterface(this.entity, IID_Vision);
	if (!cmpVision)
		return ret;
	let visionRange = cmpVision.GetRange();

	if (iid === IID_Vision)
	{
		ret.max = visionRange;
		return ret;
	}

	if (this.GetStance().respondStandGround)
	{
		let range = this.GetRange(iid);
		if (!range)
			return ret;
		ret.min = range.min;
		ret.max = Math.min(range.max, visionRange);
	}
	else if (this.GetStance().respondChase)
		ret.max = visionRange * 0.85; // << This has changed.
	else if (this.GetStance().respondHoldGround)
	{
		let range = this.GetRange(iid);
		if (!range)
			return ret;
		ret.max = Math.min(range.max + visionRange / 2, visionRange);
	}
	// We probably have stance 'passive' and we wouldn't have a range,
	// but as it is the default for healers we need to set it to something sane.
	else if (iid === IID_Heal)
		ret.max = visionRange;

	return ret;
};

 

And then also, stop units from automatically zerging any dangerous animal within range:

UnitAI.prototype.AttackEntitiesByPreference = function(ents)
{
	if (!ents.length)
		return false;

	let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack);
	if (!cmpAttack)
		return false;

	let attackfilter = function(e) {
		if (!cmpAttack.CanAttack(e))
			return false;

		let cmpOwnership = Engine.QueryInterface(e, IID_Ownership);
		if (cmpOwnership && cmpOwnership.GetOwner() > 0)
			return true;

		let cmpUnitAI = Engine.QueryInterface(e, IID_UnitAI);
		return cmpUnitAI && (!cmpUnitAI.IsAnimal()); // << This has changed.
	};

	let entsByPreferences = {};
	let preferences = [];
	let entsWithoutPref = [];
	for (let ent of ents)
	{
		if (!attackfilter(ent))
			continue;
		let pref = cmpAttack.GetPreference(ent);
		if (pref === null || pref === undefined)
			entsWithoutPref.push(ent);
		else if (!entsByPreferences[pref])
		{
			preferences.push(pref);
			entsByPreferences[pref] = [ent];
		}
		else
			entsByPreferences[pref].push(ent);
	}

	if (preferences.length)
	{
		preferences.sort((a, b) => a - b);
		for (let pref of preferences)
			if (this.RespondToTargetedEntities(entsByPreferences[pref]))
				return true;
	}

	return this.RespondToTargetedEntities(entsWithoutPref);
};

 

Honestly, both changes should be added to the base game, but in the meantime, could go into your mod (they're already in DE).

  • Like 2
Link to comment
Share on other sites

@wowgetoffyourcellphone Thank you for your suggestions. I will consider implementing this in a future version. Currently a25 and a26svn UnitAI.js files are not compatible - using the file from one version will cause errors in another one. I've tested both changes with a26svn.

ret variable has two functions: (1) The maximum separation for chasing, as the codes suggest. (2) The trigger range for autotargeting when the unit is idle or on attackmove.

In my opinion it isn't necessary that one value should be used for both fuctions, and (2) is much more important. I think it's good to decrease the trigger range for most units, but perhaps it's better to make it dependent on both vision and attackrange like in the case for defensive stance.

However, I found removing autotargeting on dangerous animals problematic. I agree preemptive pest control can cause quite a lot of troubles too. If units are not able to autotarget dangerous animals, they won't attack the animals unless (1)The animals are attacking your unit - in this case he can retaliate, but your nearby units won't help. (2) You ordered your units to target a particular animal - in this case when your target is killed, your units will be idle and not able to attack nearby animals that are attacking you.

This is very dangerous on maps with lots of animals attacking you, like Polar Sea, since you have to micro your units to kill the wolves one by one, otherwise they will stand idle and get killed. Fortunately, most popular maps don't have any dangerous animals.

Link to comment
Share on other sites

@KKaslana There has been talk about attack-ground improving unit balance as well as diversifying and improving battle skill. there is https://code.wildfiregames.com/D1971. I have talked to @Yekaterina about it being put in a mod already, but I wonder if this is a possible good mod to add it to?

also Hi nagasushi! its been a while :D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...