Jump to content

agentx

Community Members
  • Posts

    276
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by agentx

  1. > "Can I have <NUMBER> <RESOURCE>?"

    > "Help me attack <PLAYER>?"

    > "Help me!"

    > "Get off my land!"

    That's a great start to define a human-bot communication protocol. I think implementation is step 2. If the protocol is well thought out all I need to know as a player is which bot understands which commands. This even may go a step further as RTS games all share a vocabulary with entries like: units, area, resources, buildings, time, etc.

    I'm still looking for an idea to talk about a specific location. Coordinates, North-South all hardly work.

  2. There are currently two interesting debates going on at HackerNews about JS libs providing functions faster than native JS functions. The trick is to not implement all edge cases the standard expects. E. g. if you loop over an array and know it has no holes you can drop that check. Now at http://jsperf.com/fast-vs-lodash a test case appeared showing fast.js vs. lowdash.js vs. native giving me very mixed results with FF 29 and FF later.

    A few of the test cases shouldn't be used at all if one wants to go very fast, like forEach vs a simple while loop. But on the other hand fast.js has an indexOf which is surprisingly 15 times faster than the native. Since I tend to implement number crunching parts of a program in small, optimized and inline-able functions, I found some results an eye-opener. And it made clear the JS pathfinder has room for optimizations.

    Yves, if you read this, it might be a good idea to stick a while longer with SM29.

    • Like 1
  3. > This isn't about who's right or wrong, this is about discussing how to make 0 AD a good game.

    Full agreement. However balance is based on numbers. And I'd prefer discussing how to achieve better numbers, without making loopholes somewhere else.

    You seem to have a different game experience than me. Example: switching from Aegis to Petra was chocking to me, before I could look around there were towers and fortresses all over the place. And I was like @#$%. So I took some time, changed my tactics and still win. Actually now I feel like a better player, because my repertoire of tactics is much better and it was refreshing, too. Just by switching the AI it was a completely different game. That tells me something about the richness of 0AD. I don't want to miss that and I think towers are great just the way they are, as long as they do not start moving around.

    And logically, you can't expect to have only one master tactic to blew all opponents from the map. At least not in a game where players have incomplete information. The clue is to have a tactic the opponent doesn't expect. At the end this is not chess.

  4. I think, balance is one of the most important content the game provides. An unbalanced game can completely destroy game experience. However discussing this has a subjective component: If player lacks a specific tactic the game can just appear unbalanced. And of course any opponent aware of missing tactics exploits that. Therefore a discussion can only be fruitful if everything is on the table and known to everybody participating.

    So, IMHO, the real question is: How could balance be presented by numbers so that imbalance gets visible in an objective way?

    • Like 1
  5. > Players should use a standing army to do their military work, not buildings. see screen shot.

    Well, military work also includes claiming and guarding territory. I mean, isn't that the whole purpose of arming - to secure or expand your soil? In this sense a tower is just a strong military unit which doesn't run away on attack. Build some siege and level them.

    • Like 1
  6. The launcher can now deal with xdotool on Linux. xdotool can move windows, sends keystrokes and mouse clicks, works quite reliable. Also I found glc allows to capture OpenGL windows. Launcher.py is now at github. Here a video showing why this toolchain was needed. It shows Hannibal launching two miner groups and a scout. At tick #10 it switches to SimRate 20.

    It took some time to make the video caps running, so here the script to save anybody else interested some headache:

    ## launch 0 A.D. per python script with autostart captureglc-capture --start --fps=30 --resize=1.0 --disable-audio --out=pyro.glc ./launcher.py## convert captured byte stream into mp4glc-play pyro.glc -o - -y 1 | avconv  -i -  -an -y pyro.mp4## remove 15 secs with black frames at startavconv -i pyro.mp4 -codec copy -ss 15 -y pyro01.mp4## move mp4 header from end to start for better streamingqt-faststart pyro01.mp4 pyro02.mp4## checkmplayer pyro02.mp4
    • Like 3
  7. No, it's not for game testing, it's for bot testing. I need a possibility to tryout different strategies and don't have the time to actually play them interactively. Imagine it as a very little step towards introducing bots based on Monte Carlo methods or genetic algorithms. There is of course some overlapping - no offense meant here.

    Engine.SetSimRate(20), anyone?

  8. Wow, without that recursive stuff the planner is down to 0.16 msecs and there is still some room for improvement. That teaches me something about JavaScript. Now I can really go and make it search for the best male/female ratio to achieve city phase fast by checking all possible alternatives or whatever optimization problem come up.

    Achievement unlocked!

    grr, profiler error.

  9. Here is a Python 0AD launcher which intercepts stdout lines and reacts to certain command. The commands start with hash bang space '#! '. They can be placed everywhere (I think) within JS code.

    Example:

    print("#! terminate"); // terminates 0AD

    Currently it works with Python 2.6.7 (Ubuntu 14.04 default) and gnome-terminal and probably a lot of other configurations. So far it understands 3 commands:

    print("#! write Full/File/Path") // opens a file to redirect outputprint("#! close")                // closes this fileprint("#! terminate")            // terminates 0ADprint("#! clear");               // clears terminal, not yet working

    It's already in use to export the triple store as JSON file. Next steps will be output to multiple files and overwrite files within a bot directory e.g. to relaunch with a different config and somehow marry it with the charts mod.

    Most pressing question now is: How can I call 'Engine.SetSimRate(20)' from JS or the launcher?

    I'm not exactly an expert in system programming with Python, but the links of the copy&pasted code are included. Feel free to propose more commands, I'll check everything.

    launcher.py.zip

  10. > Maybe your object can also be send, if it's not too big.

    Great idea! 120 dots * 12 metrics * 64bit jsnumbers * x players = 92k max + whatever makes it an object. All needed is convincing players to install it and allow sending data. Well, it would improve the bots a lot and it opens door to visualize individual learning curves or something similar.

  11. I think, there should be a method to find out these numbers upfront by reasoning or stochastically and backed by stats. Otherwise each player simply proposes numbers based on his very own experience and tactics leading to endless discussions or a GUI to enter your favorites. What would be an approach to have an objective indicator?

    PS: Did I mention there is a ticket proposing headless testing to get numbers like this?

    PPS: Any useful data collected at the lobby?

  12. I think indexes like "defense strength" and "attack strength" are a bit opinionated, although I understand the use case. It might happen a player looses despite the fact the opponent had only half of the strength. Let's say this first set of charts is about building a working economy. Making the charts revealing why a game was lost requires more and probably should take balances into account. What might work as a first approach is relative health, reminding the player not to send half dead warriors into battle and accumulated attack strength separated by infantry and cavalry.

    Is there somewhere a doc explaining the math of hitpoints, pierce, crush, hack, etc.

×
×
  • Create New...