hm, I definitely seem to have two types of messages. Some take "no time" to execute because they're logical, and some take time to execute as animations and maybe later on sounds
A charges up for 50ms, creates a bullet, the bullet takes 100ms to travel, explodes on contact for 50 ms, a death animation that lasts 200ms, a heal animation for some more
and so a message queue could be used for animation separately to take it out of the mushy game code that spams everyone everything, and if some animations are compatible (e.g. two people firing at different targets) they can be played together
and so I could have units generate proper animations instead of animating "themselves", like "animation(UNIT_INTERCEPTOR_DEATH, 200ms, unit.x, unit.y)
The game won't have 600 units on screen at 100fps each, and won't be on canvas, and won't have this architecture. I appreciate everything but I won't optimise something that's on its way out
@AlexMitan cool. Something you can instead have is objects subscribing to "I want damage events to red" or whatever, and being put in a list, then when a message is broadcast about damage events to red, only those objects are given the message.
Is optimisation of this project actually desirable or was it a throwaway? How far are you planning on going with it?
@doppelgreener Yeah, that's fair. I logged the "team kills" thing just to prove the flexibility of total broadcast: death messages get processed by the world, which takes the sender's parent, the fleet, and adds to its score
@doppelgreener I'm moving that simulation to SVG, and as soon as it runs decently I'm going to figure out the message architecture a bit deeper, if I need to. The canvas thing is a one-day throwaway
Under more reasonable parameters, 100 units max per side
@FreezePhoenix SVG also features "leaving things alone unless they need to be changed" and "timed animations instead of hand-interpolating attributes I barely know how to work with". Plus, d3 is magic
@AlexMitan Bit of both. Some people including me find it a little bit brain-bendy at first. First you'll want to know about promises because async/await uses them behind the scenes. Then maybe this guide will be helpful.
Remember that board game I kept trying to design that slowed down a lot because I couldn't find a way to make really elegant and test fast? I'm iterating through making a web game based on it.. roughly
But now I'm more.. learning the fundamentals of all of this
@AlexMitan I can't remember if I ever got your email, but hit me up at dukezhou108@gmail sometime if you think of it. (definitely would like to keep in touch)
It was probably a mistake to release when we did, before we were ready, but we got some good feedback and will start addressing some of the immediate issues in the upcoming release ~September. (Right now it's the problem of "too hard for some player, too easy for some players" ;)
But we likely won't have a fully "ready for primetime" version until the end of the year, best case
but I'm happy because we'll be implementing an initial "goodness" evaluation function for the AI, which should improve strength significantly
and, once we get our server working again, we should be able to do cross-platform PvP for any system we ultimately run on.
We're avoiding NNs for now because we want the AIs to be able to function on lowest-common-denominator, non-networked mobile devices. So it's strictly a "strategy ladder" model for now, entirely based on heuristics ("GOFAI";).
and both play styles work, but there are certain characteristics to the mechanics that you can't get around, in particular, regional stability states (stability, epistability, metastability)
NN is the no-brainer for pure strength of play, but I'm fairly certain it won't be required to beat the strongest human players. Where I see NNs being interesting in this project is the personalization (as you've noted) and AI vs. AI in higher dimensional games, not suitable for human play
we also definitely want a string of "dumb AIs" where strategy is easily discernible
i might be wrong, but it will be interesting to find out!
@DukeZhou Also, the main point of the game is to work on a friendly coding interface kind of like Warcraft 3's to turn unit micromanagement into scripting
imagine that in an RTS you had units with triggers like "fire at most wounded enemy" or "when wounded, go behind squad" or "when on low health, go to nearest healer"
API for customizing the AI is definitely in the pipe-line, but our dev schedule is glacial atm. We're really interested in leveraging this for education, and what I hope for is that kids from middle-school on up will eventually be designing their own AIs to play, but ML and GOFAI
yup. imo it's still valid when approaching from an Algorithmic Combinatorial Game Theory perspective, and I think [M] is the strongest game for that, because all game states and outcomes are naturally ratios, and Sudoku itself led to difficulty classification in regard to puzzles in general
I was trying to get some of the math people to help me do a proof on a mirroring partial-solution for the even-order game grids 2x2(2x2), 4x4(4x4) etc., and then someone asked a question about the impartial Sudoku game and a PhD demonstrated the solution via "Infinite Sudoku"
(best part is, he didn't figure out the solution--his 11 year old daughter did--he just subsequently demonstrated the proof;)
what really gets me excited at present is how to distinguish between "weak stability" (regional polarity cannot be flipped with a single placement) vs. "strong stability" (regional polarity cannot be flipped with any number of placements) and how to efficiently gauge the latter
how to "attack up the resolution chain" (metastability)
how to determine when the game collapses into a tractable state so that perfect play can be achieved (does the AI agree to early resolution? Only if the outcome can no longer be affected.)
Where I see an advantage is, this generalize approach doesn't require re-training for every variation of the game mechanics and board topology. See Chaos Functions, "historical map generation"