Jump to content

ffm2

Community Members
  • Posts

    108
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by ffm2

  1. Don't try to learn to play with that AI. Your example showed how bad it is. Sometimes they are completely off; Yeah, it was phrased to generous of me. I meant there's bits of truth in it. Like garrisoning units can have effects on buildings (soldiers in towers, traders in merchant ships). But you'd be better off without this wrong information from the LLM about the healers.
  2. A LLM doesn't understand the game. The answers are not very good but not completely off. A chess engine can play the game but can't tell you whats the reasoning. But it can tell you the 5 next best moves and what positions are better. See chess games between ChatGPT and stockfish in chess. ChatGPT just makes up moves that are against the rules. But when you ask it about openings it can tell you something about them on a certain level since there are a lot of texts about chess openings in the internet. In 0 a.d. there's game decisions that can be easily calculated. E.g. whether it makes economically more sense to do the farming upgrade or build one more farm. A "AI" makes no sense to use for this task. The direct calculation is more precise, fast and efficient. How many builders should build the first barrack and where is harder to answer. Building it with 2 builders is too slow. The investment cost of the barrack gives no benefit for too long. Building with 12 builders is too much as the efficiency per builder drops with each added builder. To do this optimal it makes sense to e.g. train a neuronal network. The problem with this atm. is that modders/users already enhance their game play by automating tasks better than humans can play the game. So this problem should be solved before each task can be optimized. And when each task is optimized it could be assembled to a engine for game play analysis or as a opponent.
  3. Of course, at the moment I can only express my disagreement with this rating and don't have much else to contribute. I also played with the score weights a bit and found that using resources used instead of resources gathered brings better results for my data base. But one has to split a test and a training data set first for adjustments like that (which I didn't in a quick attempt). For improvements one might analyze ValihrAnts (or other players that are obviously wrong valued) games and see where his strength can be seen in the data. And maybe even change the statistics that are logged in 0 a.d..
  4. I think this mod is highly ambitious. The desire to have what the mod attempts is big, but currently it's not accurate. Adding to this from another thread: Here is the script with which I evaluated the results. Maybe it helps to develop a better working algorithm. The script is to be run in .local/share/0ad/replays localratings_statistics.xlsx rating_localratings.py
  5. There's so much drama here, I think one can chose where to get involved and where not. If one just wants to play a simple game that day, one can do so. I chose to get involved with fair-play aspect and it already takes more time than I like to spend on it. If you have a working algorithm, maybe you can test it by modding local ratings mod. I think this mod currently does not rate well and favors certain styles and not just because there's too few games. ValihrAnt is rated 8.18 in replay-pallas.wildfiregames.ovh Players with higher rating than him: RangerK, FriedrichDerGrosse, Meister_Augustus, breakfastburrito_007, Atrik_III. All over 10 games. I checked how well all past games are predicted by the current local rating of the players in my database and overall it predicts the team with a higher sum of lr is the winner in 59.3% of the cases (so it is better than random guessing). The 20 games I have with ValihrAnt got predicted 70% false by the sum of the lr of the team (so worse than random guessing). Btw. my lr is -20.64 so maybe I'm biased. If I clean up the statistics I can release more, but I think scrolling through replay-pallas.wildfiregames.ovh with players in mind you know should suffice to get a feeling of the accuracy of local ratings. Another reason for toxicity I see is also the state of modding/cheating. Without discussing the cheats themself here it's also a culture shock for other gamers when they learn about the current state in 0 a.d.. This causes a lot of frustration which unloads in toxicity on both sides.
  6. The idea is to focus on relevant units more. In a even fight this helps to get the upper hand. I also just found that she had weird 9 unqued walk-custom commands in one turn. turn 5650 200 cmd 6 {"type":"gather","entities":[11751,11753,11754,11892],"target":5353,"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"137.03","y":"479.52"},{"x":"134.99","y":"470.80"},{"x":"131.97","y":"462.44"},{"x":"127.08","y":"454.95"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"134.75","y":"496.72"},{"x":"130.01","y":"494.75"},{"x":"126.08","y":"491.25"},{"x":"122.81","y":"487.11"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"121.53","y":"429.00"},{"x":"121.31","y":"435.84"},{"x":"121.38","y":"442.69"},{"x":"121.30","y":"449.51"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"138.40","y":"470.50"},{"x":"136.06","y":"466.12"},{"x":"133.44","y":"461.94"},{"x":"129.81","y":"458.56"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"132.99","y":"499.66"},{"x":"128.45","y":"497.32"},{"x":"127.20","y":"491.86"},{"x":"126.13","y":"486.36"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"124.29","y":"438.62"},{"x":"127.73","y":"441.27"},{"x":"130.62","y":"444.43"},{"x":"131.53","y":"448.70"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"122.05","y":"439.94"},{"x":"131.21","y":"448.17"},{"x":"139.77","y":"457.03"},{"x":"145.00","y":"468.02"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"139.26","y":"487.63"},{"x":"132.71","y":"488.36"},{"x":"129.84","y":"483.07"},{"x":"128.20","y":"476.48"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 6 {"type":"walk-custom","entities":[11751,11753,11754,11892],"targetPositions":[{"x":"129.22","y":"437.18"},{"x":"131.39","y":"439.95"},{"x":"132.08","y":"443.42"},{"x":"131.54","y":"446.96"}],"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} cmd 8 {"type":"gather","entities":[10946,10966,10967,10971,10979,10986,11024,11056,11145,11252,11282,11283,11456,11457,11529,11547,11548,11549,11550,11551,11607,11615,11664,11732,11735,11742,11805,11810,11825,11826,11827,11828,11849,11921,11929,12011,12012,12013,12014,12145,12146,12147,12148,12149,12219,12220,12221,12222,12223,12250,12258,12269,12270,12275,12295,12348,12395,12417,12466],"target":698,"queued":false,"pushFront":false,"formation":"special/formations/null"} end I checked my complete data base and no one else had 3 or more walk-custom commands in one turn. Some have 2 like here .01. I don't see any benefit as it's the same units and only the last command should take effect. As I see it she just tested something weird and dropped it as it's only from 01.12.24 to 03.12.24. I don't care too much to look further. My main take away is just not to get upset when losing to her.
  7. When I first played with Ricci-Curvature she immediately said shes Yekaterina and I didn't knew her or of the ban. After the tip from Feldfeld I looked in to it and found Ricci-Curvature uses cmd 1 {"type":"attack-walk","entities":[188,189 ...],"x":923.1084594726562,"z":780.8538208007812,"targetClasses":{"attack":["Ranged","Cavalry","Infantry"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} (see targets "Ranged","Cavalry","Infantry") This can't be produced by the vanilla gui. Attack-walks that can be produced are cmd 5 {"type":"attack-walk","entities":[287,6315,...],"x":354.727294921875,"z":857.03466796875,"targetClasses":{"attack":["Unit","Structure"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} ("Unit","Structure") or cmd 5 {"type":"attack-walk","entities":[287,6315,...],"x":354.727294921875,"z":857.03466796875,"targetClasses":{"attack":["Unit"]},"queued":false,"pushFront":false,"formation":"special/formations/null"} ("Unit") One can detect this easy by checking for a line that includes attack-walk and not "targetClasses":{"attack":["Unit I played and spectated a lot of games recently. The last replay of Astra- that I have is from 17.11.24. The first game of Ricci-Curvature I have is from 15.11.24 and they were not in one game together (in my records). Only Ricci-Curvature had this method of attack-walk after 01.12.24. If she desires to have a benefit over vanilla players, I don't understand why she don't uses proGUI/quickstart then, because it's a easy way. I didn't have problems myself with her or geriatrix that's worth mentioning. Geriatrix is very hard against cheating and Yekaterina is definitely "testing boundarys" of the game without the consent of others so I can see why they fight so hard in the lobby. I like some ideas of the abstraction mod to reduce lag, but it's hard to trust her. I'd need to triple check the code from her before I run it. And to use multiple accounts to promote ideas is also annoying. E.g. I also share some of the frustration @strat0spheric mentioned and one seems to be in the minority for wanting to have a fair competition. Sometimes it seems some of the players rather have cheaters than noobs, as my skill has dropped hard after 4 years of break. It's a very weird atmosphere here. game_analyzer5.py 2024-12-07_0002.zip
  8. I'm not talking about hardware. Hardware cheats could exist too, like in the video of the lego-mouse. I'm also not talking of lubricated keyboard switches, spring resistance or such. I'm talking about software. If it runs on your mouse it's called firmware. If some software on your OS post processes the key-hold to a key-tap it's also software. You get a advantage here by a piece of software. It's different than a benefit by having a bigger monitor, faster pc or adjusting the cpi value of the mouse. One of this auto clickers is called razor turbo mode. Some games that names the cheating cheating runescape, ea, minecraft The razor users themself in their reddit says its ok (2 users) Not everything need to be explained that it's cheating. If you have a person sitting in the room spectating and telling you game information that's also cheating, although no one specified it somewhere here (afaik). But it might be a idea to create such a site for rules of fair-play.
  9. Here is the diff from which I made the mod for further use attack_view.diff
  10. The games of berhudar look different with no attack-walk commands in such a high ammount. Also the sniping is not so spread out.
  11. Stockfish's games show the similar high ammount of attack-walks mixed in. It seems his clicking frequency is set higher than sanafurs.
  12. Here we see a normal sniping in action. The green units are targeting the red ones in one turn.
  13. Here we can see the sniping fail and giving half of the army the order to attack a field
  14. In this plot one can see sanafur giving attack-walk commands in a similar frequency like the attack commands commands.txt
  15. Here is a mod which colorizes the attacker (green) and the target (red) of the selected player in a replay. It goes OOS, but you can click the warning away. Don't use it in games or as a spectator of live games though. The code is from elexis, I only packed it in a mod. I viewed some games. I the fast sniping of sanafur and Stockfish is done by -the firmware of the mouse -or some software that translates a held key While they hold this clicker-key, the repeated mouse clicks are automated in a high frequency. They can move the mouse meanwhile fast over units that shall be sniped. Depending on the speed of the cursor movement a target can be assigned a different number of attackers. The targets are quite near of each other. The attacking units are random from the army (with big gaps). The sniping is not so sophisticated, like choosing wounded units and assigning correct number of projectiles to take one out, as one would expect from a script. The clicking is done in combination with held ctrl-alt key. Ctrl has the effect that the attacker will attack a unit when clicked on it, but when cursor goes over a spot over the ground the unit gets a attack-walk command and thus attacking the next target. This is not harmful like a walk command which would have been send without the ctrl button. Alt gives the command to only one unit per click and removes it from the selection. When the attacked army is on a field, the attack-work does not work but rather the field gets attacked by a lot of units. You can see in the following plots that sanafur and Stockfish gives a high number of attack-walk commands during sessions of sniping. Not in every game, but usually. So occasionally they can hover over good selectable units. This is a form of cheating and abuse. E.g. in minecraft one can get a benefit by clicking fast, see: https://cpstest.org/kohi-click-test.php attack_viewer.zip
  16. That's annoying. I got matplotlib 3.9.2, so quite new (instead of what they wrote). And for me the other way don't work: AttributeError: 'Legend' object has no attribute 'legendHandles' I don't want to include some checks to execute different code for different versions of matplotlib ... So I agree, if you have a similar issue, replace it yourself, sorry (-.-)
  17. Oh, good I aborted after I heard my fans blow up and tested afterwards in a test directory with only 10 replays. This should be fixed but I only tested it in the test directory again. This can be run on only one case with multiprocess = False and a specified path (good for editing/debugging etc.) Can process a part of your database (first 10% in batches) limit number of processes (is set on 4 for now) delete pngs (good to delete all the pngs named sigle) multiprocess = False # you can specify to handle which part of your db you want process. # E.g. test with [0, 10] and if it works in a reasonable time do [10, 100] next. # in percent process_part_database = [0, 10] parallel_processes = 4 path = "2024-11-13_0009/" # for single game delete_pngs = False game_analyzer.py
  18. Thanks, should all be in the single_game_analyzer.py too. Also I wrote si[N]gle in one chart... Still some to improve but the basis is better now.
  19. This is a new update. Its a version for single games, that's easier to change, adapt, debug etc.. And one with the multiprocessing. For my Pc it didn't run through all games within my limited patience, so I tested it only in a folder with 10 games. It deletes .png files in the folders where it finds a commands.txt, so if you have stored pngs in your replay folder save them elsewhere. But I assume you might ran the old version and want the updates in the folders. Apart from already discussed command-analysis it features Colors are now in game colors Legend moved outside of the plot If you have a metadata.json of the game also: the eco_score of used resource (instead of gathered resources) units trained over time The attached figures are from the first game of the sanafur games that has also zoomed figures on page 2 in this thread. single_game_analyzer.py
  20. This site has some interesting tests: https://www.arealme.com/apm-actions-per-minute-test/en/ But this is a bit too difficult. That record is 733 apm or 12.22 clicks per second or 2.44 clicks per turn Their cps test is nice displayed, but too easy (this should have a world record of 105 cps): https://www.arealme.com/click-speed-test/en/
  21. The highest of sanafur is 58 per turn (0.2 seconds). 58 / 0.2 = 290 clicks per second. The world record is (presumably) 1051 clicks per 10 seconds for clicking on any spot. World record speed per turn would be 1051 / 10 * 0.2 = 21 clicks per turn. But this is not clicking on any spot.
  22. I think it is about using just as many arrows on one target as necessary to take it out. Not more, not less arrows. The queue would only do the command after the prior target died and I thought for a long time that's how most players snipe. I could update the script of yours to also show other commands, like pressing H, sniping with queue etc.. But I'd want to clean up the graphs and code first until I blow it up.
  23. This is the first spike of 10 commands: turn 4273 200 cmd 8 {"type":"attack","entities":[333],"target":8632,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[334],"target":8632,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[335],"target":8632,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[336],"target":8632,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[337],"target":8634,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[6278],"target":8629,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[6354],"target":8629,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[6454],"target":8629,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[6475],"target":8634,"queued":false,"pushFront":false,"allowCapture":false} cmd 8 {"type":"attack","entities":[6592],"target":8634,"queued":false,"pushFront":false,"allowCapture":false} end So the first 4 units attack one target (8632), then comes one attacking 8634, then 3 attacking 8629 and 2 attacking 8634. So even in one turn there is no multiplicator to find.
  24. Unless it's a toggle It doesn't seem really useful to build three cs when you only want one If I'd do, it I'd use a dedicated key with the multiplier to avoid this. One for usual play, the other for sniping. But this explanation does not make sense to me. Here is a zoom to the first burst of the first figure of the sanafur part. The sequence is 10, 6, 4, 8, 4, 8, 4, 7, 13, 8, 5, 8, 5... so the sniping is no multiplication of 2 or (like claimed) 3.
  25. A single attack looks like this in the commands.txt: cmd 8 {"type":"attack","entities":[10681],"target":8109,"queued":false,"pushFront":false,"allowCapture":false,"formation":"special/formations/null"} The one unit with the entity ID 10681 get the command to attack unit 8109, not queued. AFAIK this can be done either selecting the unit and right click on the enemy unit or selecting this unit and other units with higher entity IDs and hold alt right click on the enemy unit A group command looks like this: cmd 6 {"type":"attack","entities":[452,6571,6572],"target":203,"queued":false,"pushFront":false,"allowCapture":false} The units 452 6571 and 6572 get the command to attack the unit 203 at the same time probably with one control group and just right click. this should look something like this: cmd 1 {"type":"attack","entities":[9341,9342],"target":9345,"queued":true,"pushFront":false,"allowCapture":false,"formation":"special/formations/null"} so with "queued":true. In these two plots it should always be not queued as this is the pattern I was looking for. Please check the replay and think what you would do in the situation on the timestamp. Maybe you can replicate it.
×
×
  • Create New...