Jump to content


WFG Programming Team
  • Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by elexis

  1. (The rejoined player has g_Farms empty, so when the water rises, the non-rejoined players have that field removed but the rejoined player doesn't? Should be fixable by having g_Farms = GetEntitiesByClassor something. Or if it it's a Trigger property then it's serialized)
  2. What problem? When chosing which settings? Crash upon generation? Too many trees?
  3. Using the same reference in both cases should be a bit safer than Date.now(). The file modification time of the file changes everytime the file is modified. Not sure if the AI VFS transports that properly. If it does, why would the condition always be true? The filemodificationtime will be unix timestamp I guess, so I suppose everytimestamp before right now would work, most simply 0. (One could also start with undefined and extend the condition to test for undefined if one wants to treat the first read specially) (File I/O as a dynamic interface to the AI is a bit weird, an HTTP server would be an alternative that is probably not less weird. Creating an ML algorithm inside JS would also be a possibility, but would prevent reuse of existing ML tools.) (I guess it's not crucial to process every file written, otherwise there might be hypothetical concurrency problems.)
  4. That happens when registering or logging in? (I once added and later unintentionally reverted a login doubleclick protection.) StopXmppClient is called from JS somewhere.
  5. The time column provides useful information for observers (to select games to observe that have either just started or have reached the wartime), and for players that wait for other players to finish their game. Format in hh:mm is a bit more common and easier to understand. Since the game duration is a bit verbose, it would have to remain optional in vanilla. Horizontal scrollbar for COList wouldn't hurt. If there is purpose to show an information, then there would also be purpose for a filter of that information? It just doesn't fit in, that's why there is no dropdown I guess.
  6. One could test by compiling 0 A.D./Pyrogenesis against a newer version of gloox, or one with that patch. Doesn't take much more time than regular 0ad debugging.
  7. There are three norms that come to my mind: for-profit organizations (Google Android is also Apache / GPL licensed), volunteer organizations and non-profit organizations (Blender and GNU/FSF for example). The "not" / word grouping was ambiguous: You probably meant the second variant (i.e. revealing the code reveals issues and thus one can't just produce something that works; rather than revealing the code implying that one can not produce more than something that works).
  8. If we hide the code we can create better software?
  9. Is that policy written somewhere? alpha 23b is the stable of the two... https://wiki.debian.org/DebianReleases speaks about the Security team and a workflow. https://wiki.debian.org/Teams/Security Alpha 23b was a stability release for alpha 23 and adds a security feature that avoids impersonation in the multiplayer lobby rP21877. It's not against the policy if it's within the policy, right?
  10. The presentation linked in the first post makes 0 A.D. really appear like it needs systematic renovation. I suspect JS isn't so bad (my experience was overall quite good), but perhaps the data-oriented design could help fix many bottlenecks, the GetEntityState one for example. Something big is needed, either somewhere or everywhere. Yes, they're internal links, at least now. I posted them to answers Stans request for material for his presentation, he has access to these links. (The links are also broken by various server migrations and forum updates throughout the last 15 years, but can still be translated to modern URLs.)
  11. See this post for the exact URL, path is oldfiles/users/code/resources/meetings/170104-ProgrammingMeetingLog.txt. (Otherwise there are forum topics with plenty of information on the topic. First try, then try harder, then ask others which have limited time.)
  12. Did you check these links? One can open them by replacing the topic ID of current forum URLs. (Even if the decision was based on one mans discretion, then there are still arguments posted for that language, I guess all over the place.) (For a presentation that should explain why JS instead of other scripting languages is used, one might also compare the 2004 decisions against the 2019 reality of scripting languages (whatever that may be) and check whether it was a good choice or one worthy of improvement.)
  13. Mapsize? Number of players? Number of units? AI players? Any mod? 16GB memory doesn't mean that all 16GB can be used (other programs using memory too, memory fragmentation, possibly the 4GB+ patch not working, ...). If it happens often, you can open the task manager and manually track how much memory is consumed by which process.
  14. > C++ to C# Unity converting > new Entety system in Unity Are you saying you want to convert 0AD from C++ to C# in order to achieve what these people did with C# jobs, unity, and a data oriented entity component system? Any starting lecture for 0ad is at https://trac.wildfiregames.com/wiki/BuildInstructions and http://trac.wildfiregames.com/wiki/GettingStartedProgrammers. See all of the libraries that Pyrogenesis uses, one would have to replace or otherwise compensate for all of them..
  15. It was meeting #19: on January 17th 2004 We're currently trying to release some more meeting contents, because it important information on 0ad development as demonstrated by this thread. But it's not easy, since the people involved should be contacted where possible.The link to Avivs post that smiley dug out contains quotations from https://wildfiregames.com/forum/index.php?/topic/712-look-at-javascript/&do=findComment&comment=7389, so at least there is something. Perhaps we can can publish a bit more, maybe this meeting, but I can't decide that alone.
  16. Why are they handy? Because they have 2-3 less arguments than createObjectGroups and thus benefit from information hiding? I think that would be a fallacy, because the hidden hardcoded magic numbers are not universally true for all maps but may vary a lot. So hiding these values only makes it harder to determine if the values are appropriate. (The other aspect is that the name "createMines", "createFood", "createForests" are nice to read, than 3 times "createObjectGroups", but that doesn't imply that this label has to be present in the name of the called function. Above every createObjectGroups statement should be one logger call that stores this information.) One can obtain this information for all tiles in one picture by painting the constraints in very noticeable colors (and possibly not placing any entities): (We should put such practices into a Wiki Random Map Guideline, but one has to be in the rmgen rabbithole to recall all of these practices.) Guess I need to compile the game (want to know the playable area vs. gamesetup player intent area).
  17. The question is whether the purposes of the two IRC chat rooms are the same as the purpose of the chat room requested. I'm familiar with the purpose of #0ad-dev, but not sure about #0ad yet. If there is a much bigger crowd joining an existing or new room (especially players) may require additional moderation. So the question is, what exactly do intend to use the Discord room for? Voice chat? Organizing matches? Discussing features and balancing? Chatting during the game? One might also consider bridging the multiplayer lobby with Discord if the purposes lie more within the lobby chat than the IRC chat. There must be a clear purpose analysis so that we can deliver what is wanted and adapt the circumstances to achieve these purposes.
  18. Map area: "maxRadius": () => fractionToTiles(0.5 * 0.65), 0.10 -> 0.1 new ClumpPlacer(diskArea(volcano.maxRadius * 0.3), 0.10, 0.005, Infinity, volcano.position), -> If you move these constants to the top, then you'll get an overview of where the different areas begin, so makes it easy to change things in retrospect. For example: widthVolcano = 20% widthForest = 20% widthBeach = 10% widthCoral = 10% widthWater = 40% As I don't have the exact numbers (one could also count with a wireframe mode enabled view), I can't tell exactly how much area is usable, but I suspect that if we look at only one dimension (line from center to radius), it's somewhere like 20% volcano, 30% land, 20% water that is used for naval warfare and 30% water that is never moved to unless someone wants to hide the last woman. But since the area is square, the outer 20% of water span much more maparea than the inner 20% (volcano) of that line. Basically I presume that naval battle will occur approximately only within the area of corrals, and the rest will not be played so much. What mapsize is that screenshot? Large? The shape of the volcano is very appealing. Impassable entities: I suspect units won't be able to chop the trees at the top of the volcano. If that's actually the case, or if you don't know and don't shy away from adding protection, you can add a SlopeConstraint to filter to steep terrain. You can place visualactors instead of entities on the impassable terrain if visually needed or useful. Deprecated functions: Notice createDecoration, createMines rely on a defect, deprecated function. The broken function can only be fixed if all maps don't rely on the defect anymore to achieve the desired entity distribution. Fixing the defect means having to do the entity distribution for all maps with calls to these functions from scratch again. So new maps shouldn't introduce calls to these functions: #4695. Other than that, some of these functions (IIRC createFood, createMines,...) are not much more than an alias to createObjectGroups with (hidden and hardcoded, sometimes undesirable) values. So I came to the conclusion that these aliases bring more harm than good and should be removed in favor of calling createObjectGroups directly (#4989). I can only assume that these functions were made for the purposes of either fabricating maps at the cost of waiving artistic freedom and consideration or based on the false, or at least not universally true presumption that entities are placed the same way on all maps.
  19. https://trac.wildfiregames.com/wiki/SimulationArchitecture https://trac.wildfiregames.com/wiki/Entity https://trac.wildfiregames.com/wiki/SimulationRequirements Edit: The performance they get is amazing. Even with logarithmic cost data structures, level-of-detail variants and the well maintained unity renderer I have trouble explaining myself how they can run this scene on a mobile phone.
  20. The forests end a bit abruptly, the grass transition wasn't so bad. I suspect there should be rocks, cliff actors and little bumps at the beaches? Also suspecting that the map has too much area of water. At least the outer circle of the island won't be of much relevance (unless there are some attractions like islands or valuable resources) and thus players would never travel there. Then one can use more of the map for the island. (Other than the purpose maximization of the tiles, there is also the expectation of playable map area from other maps. "Normal" mapsize is large on one kind of map and too small of the other kind of map.)
  21. Absent problem description results in ambiguosity. So I can only reply with variables instead of values: WFG is a volunteer organization, community contributors are volunteers too. Volunteers are by definition not obliged to do anything. Volunteers are motivated by a common interest. The purpose of the organization is to further free software for public benefit. Terms of Service and Policies can be enforced by removing the user from the service Given that WFG doesn't have any mandatory contribution clauses, there is no obligation, only voluntearism. The "establishment" in that sentence changes the meaning of the entire sentence. I suppose you mean Wildfire Games with "the already established party"? Does establishment mean the server infrastructure, the playerbase, the 20 years of development history, a market position? The qualifier "already established party" implies that there is at least one party that is attempting to become "established". Wildfire Games operates under non-profit principles, which includes the non-rivalry principle: https://en.wikipedia.org/wiki/Rivalry_(economics): WFG chose copyleft licenses, publication of as much helpful information as possible, development in the public instead of in darkness, involvement of the community (general public) operating for the community (public benefit) where possible. In the third revision of the interpretation of this sentence, the sentence is compared against the context: The context provides more possibilities of interpretation. So I can speculate four possible explanations as to what you could have meant with that sentence: Not your obligation to explain yourself to Stan. Noone can force WFG to review patches, and that's bad. Not the number of contributions is the problem, but the way people talk and account for each other when they (ever) operate. Fork AD should compete with Wildfire Games. Consider Gricean maxims: https://en.wikipedia.org/wiki/Cooperative_principle (Note to self: we need this in the community guidelines) The inability to understand the question means I have to disagree with: If I learnt something in the last two decades whether it's software development, public history or communication, is that a statement is only as qualified as the evidence backing it up ( specifically in theoretic computer science how to phrase problems and deduce a proof for everything from the bottom up). Presumption of self-evidence implies absence of investigation of alternatives and discovery of missing pieces of evidence. I guess you mean realize as in becoming aware, but the etymology offers a second interpretation: To leave on the more positive note: Still not sure if these circumstances just describe lack of proper reviews and commits. But the statement as is provides a space where people can construct positive ideas into. The question was: If it was an answer to Stans question, then it would mean that your intention to work on anything 0 A.D. related is the circumstance that might change in the future. If it's not your intention that is the circumstance that requires change for future contributions to become hypothetical, isn't it 'the already established party' that requires change? I have expressed three specific circumstances that need change for me to come to terms with development, so I concede that there are many circumstances that impact a volunteers contribution rate that are not elaborated on within few minutes. Software development is also "a process that once begun generates many complicated problems". Wiktionary defines a problem as: That a problem is complicated doesn't mean that a simple solution doesn't exist. Wikipedia characterizes Pandoras box as: Do users subject to Pandoras Box know that it's a pandoras box in advance? Doesn't that make it expected trouble? Or does that sentence mean that there is an expectation of great trouble but we just don't know in which way it is going to turn out troublesome? If discussion partners are constructive and share a common objective, such as conveying information, creating different ambiance, or futhering free software, then discussions are constructive and furthering this goal, not a curse. If the discussion partners are not constructive, then they help by revealing themselves as not interested in the objective of the organization. Thus it is not a curse either. I think the terrain can't be modified too often, especially animations will likely be impossible with terrain changes but would be done with visual actors. But the feature will still be very useful, give rise to new map experiences, as one can construct some more or less sophisticated artistic and gameplay integration of a singular or gradual / periodical terrain changes.
  22. (I guess it's linked to achieving the objective of patches)
  23. Shet, I've come across this problem before too! It should only look for data.json! This vfs::ForEachFile(g_VFS, L"simulation/ai/", Callback, (uintptr_t)this, L"*.json", vfs::DIR_RECURSIVE); should be or similar.
  • Create New...