Jump to content

elexis

WFG Retired
  • Posts

    3.644
  • Joined

  • Days Won

    59

Posts posted by elexis

  1. 45 minutes ago, ramtzok1 said:

    1.Wouldn't the second condition be always true? what is the first inital value of lastReadTime anyway?

    Quote

    var g_LastMTime = 0

    ....
    if (Engine.FileExist(..)))

    {

      let mTime = Engine.GetFileMTime(..);

      if (mTime != g_LastMTime)

      {

         ...

        // File marked as processed:

         g_LastMTime = m_Time;

         }

    }

    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.)

  2. 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.

  3. 2 hours ago, (-_-) said:

    People working on their free time is the norm of OpenSource projects

    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:

    Quote

    On a open source project, the code mess is visible so (you can't hide it) and (just produce something that 'works' at time t).

    On a open source project, the code mess is visible so you can't (hide it and just produce something that 'works' at time t).

    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).

  4. 20 minutes ago, Loki1950 said:

    getting the maintainer to update it is against general Debian policy for there stable release

    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.

    Spoiler
    Quote

    At any given time, there is one stable release of Debian, which has the support of the Debian security team. When a new stable version is released, the security team will usually cover the previous version for a year or so, while they also cover the new/current version. Only stable is recommended for production use.

    There are also two main development repositories unstable and testing which are continually updated during the development of the next stable release. The latest packages arrive in unstable (which always has the codename "Sid"). Packages are automatically copied from unstable to testing when they meet criteria such as lack of release-critical bugs, and dependencies being satisfied by other packages in testing.

     

    https://wiki.debian.org/Teams/Security

    Quote

    Task description

    The security team evaluates security threats, and produces updated packages for our stable and old-stable releases, and release these packages through security.debian.org together with an advisory mail.

    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?

    • Thanks 1
  5. 14 hours ago, (-_-) said:

    (It really doesnt matter even if the reasoning was the name js being one character shorter. We are stuck with it.)

    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. :glare:

    14 hours ago, nani said:

    @elexis all your links are private or redirect to play0ad.com

    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.)

  6. 1 hour ago, stanislas69 said:

    I'm falling a bit short of arguments

    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.)

    On 3/11/2004 at 6:17 AM, Zeusthor said:

    (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.)

    • Like 1
    • Thanks 1
  7. 1 hour ago, wowgetoffyourcellphone said:

    errno = 12 (Not enough memory)

    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.

  8. > 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..

  9. 4 hours ago, WhiteTreePaladin said:

    I've asked elexis to check the relevant meetings if possible

    It was meeting #19: on January 17th 2004

    1 minute ago, GunChleoc said:

    Those are internal posts :(

    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.

    • Like 2
  10. 53 minutes ago, nani said:

    But those functions with deprecated code are very handy for repetitive placers like mines, stone, food

    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.)

    49 minutes ago, nani said:

    Tested once.

    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):

    Quote

    createArea(

        new MapAreaPlacer(),

        new TerrainPainter("purple"),

        yourMountainTopConstraints);

     

    createArea(

        new MapAreaPlacer(),

        new TerrainPainter("green"),

        new SlopeConstraint(0, 2));

    (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.)

    1 hour ago, nani said:

    The map in the image is large size. 

    Guess I need to compile the game (want to know the playable area vs. gamesetup player intent area).

    • Like 1
    • Thanks 1
  11. 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.

    • Like 4
  12. 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?

    17 hours ago, nani said:

    screenshot0002.thumb.png.71d8ff5ca2ba3fd7b7bcdd70db8da0f3.png

    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.

    • Like 2
  13. 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.

    • Like 2
  14. 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.)

    • Like 2
  15. 1 hour ago, (-_-) said:

    Give me one reason why the already established party should actually do anything about someone else’s problem

    Absent problem description results in ambiguosity. So I can only reply with variables instead of values:

    1 hour ago, (-_-) said:

    Give me one reason why anyone (should|would|might) actually do anything about anything

    • 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.

    1 hour ago, (-_-) said:

    Give me one reason why the already established party should actually do anything about someone else’s problem

    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):

    Quote

    In economics, a good is said to be rivalrous or rival if its consumption by one consumer prevents simultaneous consumption by other consumers,[1] or if consumption by one party reduces the ability of another party to consume it. A good is considered non-rivalrous or non-rival if, for any level of production, the cost of providing it to a marginal (additional) individual is zero

    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:

    5 hours ago, (-_-) said:

    Maybe when the circumstances change. Don't know. 

    5 hours ago, stanislas69 said:

    Would you mind to elaborate on the circumstances you'd like to see changing ?

    2 hours ago, (-_-) said:

    Give me one reason why the already established party should actually do anything about someone else’s problem

    The context provides more possibilities of interpretation.

    So I can speculate four possible explanations as to what you could have meant with that sentence:

    1. Not your obligation to explain yourself to Stan.
    2. Noone can force WFG to review patches, and that's bad.
    3. Not the number of contributions is the problem, but the way people talk and account for each other when they (ever) operate.
    4. Fork AD should compete with Wildfire Games.

    Consider Gricean maxims: https://en.wikipedia.org/wiki/Cooperative_principle

    Quote

    Maxim of quality

    Do not say that for which you lack adequate evidence.[4]

    Maxim of quantity

    Make your contribution as informative as is required (for the current purposes of the exchange).

    Maxim of manner

    1. Avoid obscurity of expression.
    2. Avoid ambiguity.
    3. Be brief (avoid unnecessary prolixity).
    4. Be orderly.

    (Note to self: we need this in the community guidelines)

    The inability to understand the question means I have to disagree with:

    2 hours ago, (-_-) said:

    Sounds like common sense

    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.

    2 hours ago, (-_-) said:

    it took a while for me to realize that it is infact the same situation

    I guess you mean realize as in becoming aware, but the etymology offers a second interpretation:

    Quote

    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.

    3 hours ago, (-_-) said:

    To get back on topic, no I dont have any intentions in that patch. Nor any other too to be honest.

    The question was:

    6 hours ago, stanislas69 said:

    Would you mind to elaborate on the circumstances you'd like to see changing ? 

    6 hours ago, (-_-) said:

    Maybe when the circumstances change

    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.

    6 hours ago, Sundiata said:

    346336506_PandorasBox.thumb.jpg.2e2b18b05ca68fceeae6001cafafb001.jpg

     

    Software development is also "a process that once begun generates many complicated problems". Wiktionary defines a problem as:

    Quote
    1. A difficulty that has to be resolved or dealt with.
    2. A question to be answered, schoolwork exercise.
    3. A puzzling circumstance.

    That a problem is complicated doesn't mean that a simple solution doesn't exist.

    Wikipedia characterizes Pandoras box as:

    Quote

    In modern times an idiom has grown from it meaning "Any source of great and unexpected troubles",[2] or alternatively "A present which seems valuable but which in reality is a curse".[3]

    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.

    7 hours ago, stanislas69 said:

    I would need this to trigger, doing some chaos ground corruption

    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.

    • Like 1
  16. 10 minutes ago, ramtzok1 said:

    GetAIs it's looking for every json file in the directory

    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

    Quote

            vfs::ForEachFile(g_VFS, L"simulation/ai/", Callback, (uintptr_t)this, L"data.json", vfs::DIR_RECURSIVE <- NOT);

    or similar.

  17. Very good! Some possible enhancements:
    Irregularities help break up patterns

    • changing the placer:
      • one of those two center placers was more irregular than the other (but also slower)
    • additional painting, see attached screenshot

    Possible feature:

    • Purple = paths through the forest. (Might be unfeasible with the current tileclasses / grid resolution. The paths might remove too much area from the forest.)

    volcanic_islands.png

    General procedure to making a great map even greater:

    • Inspiration::
      • Open up a websearch for images and look for pictures of nature in the area you want to portray.
    • Find all actors
      • Start atlas, generate a map, set the filter to display all actors, go through the entire list and pick every actor that somehow fits to the map
    • Find all textures:
      • Browse through all textures of all biomes and see what could be used. For example for MultiPainters (making texture patterns more complex).
    • Test environment settings:
      • Enable all graphics settings, start atlas, generate a map, browse through the few skysets, water shapes, make sure fog isn't annoying.

    Mapgen-Performance:

    • Doing a logger call after every statement minimizes later effort to locate possible bottlenecks. That output was logged to mainlog.html?

    Ingame-Performance:

    • Make sure the trees aren't too dense, too many of them are bad for both rendering and simulation performance.

    Title and Description:

    • 0 A.D. should contain only maps related to that specific geography and time.
    • Can find authentic locations by doing a websearch or asking forum users. I suppose it's a fictive area of greece, do they have volcanic islands at india? Apparently so:https://en.wikipedia.org/wiki/List_of_volcanoes_in_India.
    • Maps outside of or agnostic of historic and geographic context may be tolerable or justifiable on a per-case basis. But we want to create a product that is directed towards this timeframe and geographic frame of 0 A.D.. So it is, and must be considered a systematic mistake to first create the map and then doing the research on the context. If context turns out to be a wrong idea, then the entire work might have been wasted (at least if the objective was to have it in vanilla). Keep this in mind as soon as you get the idea for a map the very first time, and especially before you spend a lot of time on the code.

    On promotional screenshots:

    • Take promotional screenshots with all graphics settings enabled.
    • In case this won't turn out to be a bandwidth issue, promotional screenshots can be taken using the 6400*4800 resolution bmp screenshot hotkey, and convert it to a 90% quality JPEG (10mb). (see https://play0ad.com/new-release-0-a-d-alpha-23-ken-wood/ for example)

    (Disclaimer: Not a request for changes, not a recommendation, but the bare information on the conclusions I have come to after lessons learnt from mistakes and success of random maps, free to redistribute and modify under the same terms.)

    • Like 2
×
×
  • Create New...