Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 2026-04-08 in Posts

  1. Spread of common infantry - Archer:2.25 Crossbowman:3 Javelineer:4 Slinger:3 Spread means how inaccurate the shooting becomes at 100m from target. The spread is less when closer than 100m. For example, it is half at 50m. Thus, archer and crossbowman are proportionally the same: 2.25 x 60 / 100 = 3 x 45 / 100 = 1.35 A projectile (arrow / stone / javelin) is considered to hit a infantry when it arrives at radius < 1.5m from target (indeed, a circle). A projectile is considered to hit a calvary when it arrives at the 3m x 6m rectangle of the target (indeed, a rectangle), which is a little larger than the size of two infantry. Dog is smaller, elephant is larger, charriot is larger. Now, at the beginning of a shoot, after waiting a short initial prepare time (once only), the future location of the target (because it may be walking) is very often precisely predicted, and the projectile is shot there, at a speed around 70m-100m per second, depending on unit. It should mathematically hit the target at the exact position when the projectile lands. Therefore, if the target changed direction during this time, the predicted future location is no longer correct, and the projectile might miss. This behavior is the principle of dodging. Even if the target did not change direction, the projectile might also miss due to the spread. The exact spread is given by a pair of independent normal random variable at variance of 1m. It is then multiplied by the spread. The result is some sort of 2D normal distribution, but since x and y are independent random variables, the 2D CDF is not circular, but more like a square. It seems super difficult to mathematically calculate the exact probability of it hitting a target. Let's get a rough idea by assuming the 1D case. I don't know how much would it deviate from 2D case, would be great if some mathematician could help. (Edit: I solved the 2D case, see reply below) In the simplified 1D case, I just use some online normal CDF calculator, fixing lower bound at -1.5, upper bound at 1.5, mean at 0, standard deviation at 2.25 x 60 / 100 = 1.35. Archer hits an infantry at 60m with probability 73.35%. After an upgrade of spread (-20%), standard deviation = 2.25 x 0.8 x 60 / 100 = 1.08, the probability is 83.51%. Crossbowman and slinger hits infantry at 45m with probability 73.35%. At rank 2 spread -20%, the probability is 83.51%. Indeed, exactly same as archer at 60m, coincidentally. Javelineer hits infantry at 30m with probability 78.87%. At rank 2, the probability is 88.18%. The best unit would be rank 3 archer plus spread upgrade, at standard deviation = 2.25 x 0.8^3 x 60 / 100, hitting target at 60m with 97%. Last but not least, when a projectile misses a target, it is not wasted. It will hit some innocent person standing there. Reference: https://gitea.wildfiregames.com/0ad/0ad/src/branch/main/binaries/data/mods/public/simulation/components/Attack.js#L714
    2 points
  2. Several civilisations had fortresses, notably the diadochi. The Greeks seem to practice the epiteichismos, which was about fortifying key settlements and outposts. In some cases, we can truly speak of fortresses, so much have the sites been modified by the process. However the Romans do not seem to have proper forteresses, with permanent structures, during the Punic Wars. Regarding the Celts, the boundary between fortresses and fortified settlements is rather blurred. Hillforts and oppida sometimes have relatively few civilian structures and seem to have specialized in a military function. The alternative I can imagine would be to have specialised CC. Some CC could be converted in a more military or defensive structure. The issue with the current system of walls and gates is that the IA is not using it really and it is quite a challenging project to improve the IA in this aspect. A single massive defensive building is far easier to handle. The Germanic faction currently lacks historical depth. It's actually an initiative that started as a mod and then spilled over into the game. Many buildings were designed without necessarily having an archaeological or historical basis to rely on.
    2 points
  3. Yes, the calculations mentioned are basically flight archery: arrows falling vertically to a target, which is, by far, not the way it was done. For "flat" archery, the simplest way to fix the approximate calculation is to evaluate the y (named z in the code, doesn't matter) CDF between -1.5 and infinite (meaning it never goes above the target but hits instead, it should actually be some big number, but far away from the target the probability density is low anyway, and all considers the distributions are the same as before, thus ignores physics, other methods could be considered), and get 86.67%, which multiplied by 73.35% from x gives a total of 63.57%. If one wants to apply the circular correction, the infinite part has to be ignored, thus only a half-square (73.35%*73.35%/2) is semi-circularised (the factor pi*1.5*1.5/(3*3) is still valid, since it should be half of both, which cancels out), giving: (63.57%-(73.35%*73.35%/2))+((73.35%*73.35%/2)*pi*1.5*1.5/(3*3))=57.8%. I got the probabilities numerically (counting points falling on those shapes, which could be readdressed if wanted), and got 63.6% and 59.7%, which confirms the calculations. For just the square and circle from before I get 53.8% (which indeed is (73.35%)^2) and 46.1% (which was calculated as 42.26%, the approximation of circularisation gives then a 4% difference, which is 2% for semi-circularisation).
    1 point
  4. The X and Y values are for a horizontal circle where the arrow will land, right? My thinking is that a much bigger range of different Y landing points would still hit the target because of the low, high velocity trajectory followed by the arrows. I suppose as a result the variation in X landing positions probably contributes a lot more to overall accuracy than the Y variations. I did a test: basic carthaginian archer at 60m with 0 techs versus hero (infantry hero): 1:42 to 3:47, duration of 100 shots according to unit fire rate. 87 damage dealt at 2.016 damage per hit gives us 43/100 shots hitting the hero. metadata.jsoncommands.txt I think if archers need a buff, we could boost their accuracy some and maybe their move speed slightly.
    1 point
  5. Careful. It's not the distribution that you are multiplying, it's each value. Otherwise, you would be changing the amplitude (height), not the standard deviation (width). And this works only because you are applying it to a normal distribution of mean 0 and standard deviation 1. On a side note, there are many "bell shapes": Cauchy, hyperbolic secant, etc, the normal distribution is a Gaussian, and before you mentioned "variance", keep in mind that's the square of the standard deviation. I counted 3 given the phrase I quoted. But now I went to the code and I understand what's going on. You calculate first values for normal distributions for x and y (mean 0, standard deviation 1), and then you multiplied them by the distance spread (which changes the standard deviation of the resulting Gaussian, as explained before). Well, this shouldn't give you a square (I thought you were integrating with wrong limits to get the probabilities, but I think that's the part you are doing with a CDF calculator). This is the relevant part of the code: const distanceModifiedSpread = ApplyValueModificationsToEntity("Attack/" + type + "/Projectile/Spread", +this.template[type].Projectile.Spread, this.entity) * predictedPosition.horizDistanceTo(selfPosition) / 100; const randNorm = randomNormal2D(); const offsetX = randNorm[0] * distanceModifiedSpread; const offsetZ = randNorm[1] * distanceModifiedSpread; data.position = new Vector3D(predictedPosition.x + offsetX, predictedHeight, predictedPosition.z + offsetZ); Which I'm going to simplify, in python, and fix distanceModifiedSpread = 60, for 100000 points: N = 100000 predictedPosition = {'x':10,'z':10} distanceModifiedSpread = 60 for _ in range(N): randNorm = (random.gauss(0,1), random.gauss(0,1)) offsetX = randNorm[0]*distanceModifiedSpread offsetZ = randNorm[1]*distanceModifiedSpread data_position = (predictedPosition['x'] + offsetX, predictedPosition['z'] + offsetZ) I get this density plot: So, not a square. That's acceptable enough, but bear in mind that your calculations are approximations. When you used the CDF calculator to integrate a Gaussian with mean 0, standard deviation 1.35, between -1.5 and 1.5, and got 73.35%, and multiplied by itself, you are indeed calculating the probability of hitting a square. Then you multiply that by a factor telling you how much smaller is the circle respect to the square, but that multiplication is having the hidden assumption that the probability distribution is the same in all points of that square (that's what multiplication really means, weighing all elements the same way, and that's why integrals and convolutions are more powerful). If you want to get the exact result, you have to multiply first and integrate later (or use the CDF calculator, but that's for the weak :P). The actual CDF can be found for example in https://en.wikipedia.org/wiki/Rayleigh_distribution, since it's related to the problem of having a "two-dimensional vector Y=(U,V) which has components that are bivariate normally distributed, centered at zero, with equal variances , and independent".
    1 point
  6. http://www.romanarmy.net/xanten.shtml
    1 point
  7. Maybe worth mentioning, here they have the best preserved example in the world of a manuballista mechanism, from the 1st century AD. I always like to visit these weird unique items in museums, we are all familiar with the Roman semi-cylindrical shields, but not everyone knows there's only one remaining, the scutum from Dura-Europos, at the Yale University Art Gallery: https://artgallery.yale.edu/collections/objects/5959.
    1 point
  8. Indeed, but how historical seem to you many of these fortresses, and how much just a product of nostalgic AoE2 cloning? (something that I've seen discussed many times already). I don't think removing them from some civilisations, not only to make it more historically accurate, but to differentiate civilisations more, should necessarily mean to unbalance the game, but that balance should be found in their differences, otherwise it's just "similar vs similar" (agreed that it would take more work). On a somewhat different note: shouldn’t Germans not have stone walls? At least less so than Sparta (which eventually had, but late, and still this doesn't appear in the game). People are complaining already :P, and will even more when poorly garrisoned ships are stolen like a candy to a baby. Regarding damage distribution, I'd say leave it to the player to decide, by ordering the cards of the units garrisoned (and have some panel somewhere where you can set a default order, to greatly reduce micro). Calculations is something to test, surely in some mod first, and then decide, hard to know beforehand those details, but this is the only simple nice way I see to have siege engines do something that resembles actual siege, and use something more realistic and engaging than capture points (wasn't proposed by me, I just extended the idea to ships). EDIT: I misremembered, virtual combat was proposed for ships and normally garrisoned units, and I extended it to siege and proposed base garrisons in place of capture points:
    1 point
  9. I entirely agree. Capturing buildings should be difficult but rewarding. And the buildings should be tied to the territory. I find it absurd when someone loses his CC and he destroy every buildings before the capture. A fortress should be also able to create a new territory but smaller than the CC, to have a territorial anchor. True. We don't want a bland AoE clone. The difficulty behind virtual combat is how to make it good with only calculation because the player would not control which unit are getting the hits. People can get frustrated if the damage are distributed evenly and they would get frustrated as well if we give the damages preferentially to specific types of unit. There is also the issue of calculating the damaged of ranged and mounted units. People will complain.
    1 point
  10. That's why I still swear on having a non-controllable default garrison on buildings, ships and siege engines against which one has to enter in "virtual combat" that would act as capture resistance and turn around limiter, and would made boarding and siege make more sense
    1 point
  11. Capture mechanic's could be related to specific buildings only: Military: Fortress, Towers, Gate's. Civilian: Civ Center, Wonders, Temples. Other structures should have a territory dependency like houses could be automatically captured if a city civ centre is captured. In that way, city siege could have two objectives: Destroy everything at glance. Capture primordial structures to take over the city if the defenses aren't prepared enough to defend the city avoiding turtling. Capturing fortress could gather small area of effect over the nearby buildings. Capturing city could have strong area of effect of nearby buildings.
    1 point
  12. Happy Easter (two days late)!
    1 point
  13. Maybe we could go into a Settlers (3? 4?) direction with roads, where the more units travel over the ground, a path starts to appear there. I know textures of the map aren’t editable yet, but maybe something to think about? It would also be interesting if when you build buildings closet together a road automatically spawns in between them.
    1 point
  14. New Structures, units and art for Mycenaean and Minoans:
    1 point
  15. Back to tooltips ladies and gentlemen.
    1 point
  16. Probably not, but I think better not to drift towards the unrealistic direction. The big ships are one of the things I liked about the game the first time (and many have commented the same). I think it would be the wrong call to make things look more and more like any other RTS. I hope this is done at some point, would also solve the issue of strategising against ships with modified stats because of the troops being carried. Maybe. Personally I prefer battles that look closer to the Shogun 2 Total War ones, not so much on the side of numbers, but tactics. Although numbers is also good. On a side note, maybe different water depths could be considered, differentiated by color, which would be important the more relevant the bodies of water become: -Shallow: for the transit of most land units (except siege for example) and small boats. -Moderate: for small and normal boats, but not the largest ones. -Deep: for all boats. Maybe eventual bridges should not be built over it (except for the Persians, who could have also bridges made of ships).
    1 point
  17. This version is simply the old mod with very few changes, however, in this process I saw several points that could be altered. 1 - Focus on the end of the Bronze Age (Assyrian Empire, New Egyptian Empire); 2 - Exclude the ArkGreek models (generic and uninteresting), and instead develop Minoan and Mycenaean civilizations from the models we already have (I created a Minoan spearman, it was pretty cool); 3 - Includes art for the Jewish civilization (but I will validate if I can use it), however I will be careful not to fall into certain exaggerated content. 4 - I used existing Bkg civilizations, I can create new unique ones for each civilization. 5 - A Nubian kingdom would be interesting and easy to create, in this category a Phoenician kingdom would also be. 6 - I know there are several interesting civilizations to include, but I want to be realistic in this regard. NOTE: Any help is welcome (especially art and code).For those who don't yet have experience in mod development, but are willing to learn, I can help by teaching what little I know.
    1 point
  18. After Han captures a Persian CC, a hidden unit becomes available in that CC: Han Cavalry Crossbowman. This unit is never mentioned in Structure Trees.
    1 point
  19. Alright, here is what I envision for scenario 0: Scenario 0 will neither to last the length of a full game nor feel like it. Instead, it is only supposed to introduce players to the basic controls and UI. The map more or less covers the following area: The player starts in the southwestern/bottom-left corner with a couple of soldiers, women, and the hero, but no structures, and is told to scout the land for a suitable place to build the colony. Because there are no ships yet, the player is indirectly forced to make their way counter-clockwise around the map. On the way, two things happen: Firstly, the player finds a treasure and collects it. He is then told to collect enough treasures more from around the map to afford a civic center. Secondly, a few wild animals attack some of his units, and the player learns the basics of combat. Eventually, he will find his way onto the target peninsula and is ordered to construct a civic center here. The player "wins" the game as soon as the construction of this civic center is finished. What do you think?
    1 point
×
×
  • Create New...