Jump to content

bb_

WFG Programming Team
  • Posts

    281
  • Joined

  • Last visited

  • Days Won

    3

bb_ last won the day on December 18 2020

bb_ had the most liked content!

1 Follower

About bb_

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

bb_'s Achievements

Duplicarius

Duplicarius (4/14)

  • Helpful Rare

Recent Badges

243

Reputation

  1. I won't argue on what is the definition of "cheating", but I would like to leave a comment on the "real solution" proposed. Having a system with a single host computing everything and sending out the data would be a great simplification of the code and indeed solve some of the cheating issues. It definitely would make our work as programmers a lot easier (no more cross platform out of sync, no more deserialization bugs etc.). However, there is one particular good reason why we (and every similar game too) go through all the hassle of a lockstep networking model (i.e. simultaneous computation of the simState in all the clients): A single host computation system will not work practically. The problem lies into the fact that the bandwidth of an internet connection is limited. (An old article on the topic is here: https://www.gamedeveloper.com/programming/1500-archers-on-a-28-8-network-programming-in-age-of-empires-and-beyond) In a single host computation system, the host will have to send (a large portion of) the gamestate to every client multiple times per second. The data of the gamestate is required to show the player what (s)he is supposed to see (units in its vision). This needs to be updated with a good frequency so that the player can respond accordingly. Currently we have turns of 200ms, so that means a frequency of 5 per second (in the past in 0 A.D. we used turns of 500ms, which wasn't ideal, but sure one can tweak a bit here). A gamestate can have a size of several MB's. I just tested: a new game on the acropolis map is already 500kB, so having a big map with 8 players in late game will be like 5MB. This means we need to be sending 25MB to every client per second. With 8 players and some observers, this will easily be a few hundred MB per second. Even on 1Gbit/s fiber class connections you won't be able to do this (1Gbit/s usually gives just over 100 MB/s). This issue prevents any MP game from running stably, so it really is not a practical solution. Even if one would have sufficient bandwidth, there is also the issue of latency. A message send over the internet takes time to arrive at the other end. Currently one a player can give a command based directly on the current turn in the simstate. The command then has to travel to the host and then back to all clients for it to be executed. So basically one needs to send stuff twice over the internet. If one has a single host computation system, the player sending a command is actually already lagging behind (since the simstate has been send from the host to him). Then secondly, the player gives a command, which is send to the host, and lastly the host sends a new simstate to the client. So in total 3 times things have been send over the internet. Meaning that the latency of commands is increased by 50% (and probably more since the package sizes have increased too). Also a single host computation system is filling one hole with another: since the host will now have full control of the simstate, and no one is controlling it, (s)he can change it. So such a system makes it possible to cheat the simstate for the host. Creating an (imo) even bigger problem than the information leak problem in a lockstep networking model. Surely one can come up with "solutions" like dedicated (trusted) servers, but then one runs into the question: who will maintain and pay for those servers? In all it boils down to the quote, quoted above too: While technically it certainly is possible to design a system without information leaks, such a system is nonviable to produce a playable game.
  2. Dear members of the treasury committee, Following FOSDEM 2025 in February, see the report:report2025.pdf, and with your approval, I would like to distribute the funds accordingly. From FOSDEM 2020 I still had E125.25 in my possession. At FOSDEM 2025, we raised E396.10 in the cash donation box meaning I have E521.35 to distribute. Seeing the expenses in the report, I propose to send E224.10 myself and E104.50 to @Itms. The remaining E192.75 should be send to SPI (or used for other means). Receipt of the costs can obviously be provided in PM. We are looking forward to reading your reply and we are happy to answer any additional question you might have. bb, on behalf of the attendees. report2025.pdf
  3. Just a wild guess: delete your cache. Most likely ~/.cache/0ad
  4. 0 A.D. will be present at this years' FOSDEM event in Brussels, Belgium. We will have a stand run by team members. You can come by to say hi to the developers and maybe pick up some goodies. We are happy to meet community members at the stand! What is FOSDEM? FOSDEM is the "Free Open-Source Developers European Meeting" held every year in Brussels in the first weekend of February. It is a weekend long conference with stands, lightning talks and more than a thousand lectures. For more information about the event see https://fosdem.org/2025/. Where is FOSDEM? FOSDEM is held at the Solbosch Campus of the ULB university in Brussels, Belgium. See https://fosdem.org/2025/practical/transportation/ the address. When is FOSDEM? FOSDEM is held in the weekend of 1 and 2 February 2025. Where can we find 0 A.D. at FOSDEM? Our stand will be in the K-building at ground level throughout the weekend. Who will be present from 0 A.D.? Stan, Itms, Phosit, vladislav, plumo and bb will be there.
  5. It won't cause an OOS. Random numbers are all over the simulation and they do no harm in OOS'es. This due to the simple fact that it are all pseudo-random numbers. Basically, there is a set list of numbers, which is randomly created at the start of the match and agreed by all clients, used for all the random numbers generated in game.(The first call of a random function will give the first entry on the list and so on) So all clients will have the same random number at each instant a random number is asked for. Also see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random You can check your commands.txt which has the random seed in the header. That is how replays keep in sync too.
  6. I think the most important things are the required features listed in the first post. I do would like to add two: - Be loggable on a wilfy server (the actual chat being hosted elsewhere). Like we have with irclogs. (Probably this is possible with most solutions anyways) - Joinable with a little threshold as possible (no account, web based etc.) IRC is fine with me. I have use zulip too for some uni stuff. Works rather well!! Especially like the way how one can use TeX code there. Don't know about the logability and the need for accounts (but one can figure out). A Matrix with some IRC bridge or the like could be an option too. Have no experience with XMPP apart from the MP lobby.
  7. Probably see my inline comment: https://code.wildfiregames.com/D5227#inline-101992
  8. Hi and welcome Baelish !! You are already in the right place to share your map. Just attach it to your post here on the forums. The map (I presume it is a scenario/skirmish type map) consists of two files. one .xml and on .pmp. Maybe https://trac.wildfiregames.com/wiki/GameDataPaths will help you locate the two files. Just zip them and attach them. In order to use them in MP all players should download the map and place it in their local maps directory. The map should then show up in the gamesetup and you can use it. Out of interest: how did you create the contours of the map? Did you use a hightmap of some kind? In that case, what is the source of your hightmap?
  9. There seems to be a bunch of errors before this one. These are about missing templates. Probably not too relevant, but doesn't harm fixing. I suspect you did add the `simulation/data/civs/Adrestia.json` file? What is the value of `Code` you put in? What is the value of `g_Players[g_ViewedPlayer].civ`? You can get that by adding a `warn(uneval(g_Players[g_ViewedPlayer].civ))' just prior to the codeline the error comes from. Also there might be more errors too (which don't seem to fit in the screen). No worries: you can find all errors in the logs (see https://trac.wildfiregames.com/wiki/GameDataPaths where to find them).
  10. It has been so good having you around @Stan. Feeling bad now I wasn't there much for the last 2 years almost. Meeting at FOSDEM and staying at your place on @Imarok and my crazy cycling trip has been a pleasure especially. Going to miss you certainly, but all the best. And be sure to be welcome around any time.
  11. As @Freagarachsaid committing the art makes arcanists' live easier (and as a consequence mine too). The art was made by Lion Kanzen (see the ticket).
  12. Wait for the autobuild tomorrow morning, or revert to rP26521.
  13. Don't particularly like the new default cursor. The old one could have been a weapon-head too, but one could sell it as a pointer too, making it a very universally used icon. The new one is a weapon however you look at it. I don't want a weapon on my screen when selecting a tree!! Besides that: the new cursor is way oversized. Making it feel very clunky too work with. The same comment applies to the new attack cursor (the image is fine there, just make it smaller). I would propose to restore the old default cursor and use the new default for attack-walk instead (that red line is not making things prettier).
  14. For the record, this happens since https://code.wildfiregames.com/rP26393.
×
×
  • Create New...