dude if you expect a game team to lay out the exact ins and outs of how their AI works then i got news for you.
of course they just give a basic overview. Of course all they say is its random weights. of course thats all they say. firstly most coding and technical stuff would go over most peoples head, secondly it is information that only they need to know.
yes things have changed on our end, but that does not mean the AI coding has changed. if the dev environment has changed and then unless the code is updated the end result can change and that is what has happened.
the game was written 8 years ago. the AI was developed with much less advanced coding on an older engine than what can be done now. as things have progressed and the code has not been updated and does not run as it should anymore. IF they had have been updating and tweaking AI over the years they could have kept it consistent. but without updating the code to suit the changing environment around it, it no longer functions properly.
i don't care about your masters degree, just as you probably don't care about the fact i do coding.
you or i can both speculate how they do things and neither of us is probably correct.
the only thing for certain is that the game was written on old tech and has not been updated. so all the timings would have become out of sync. resulting in unintended erratic behaviour.
you can change the interactions between the champ and the AI without changing the AI itself.
AI code is written to be maluable and subject to input and then interpreted. the AI code itself is standalone subset in the program that does not get changed.
the end result of changing parameters in the champs results in varied AI performance from one champ to the next, but at not point is the actual AI code being changed.
its like if you get a car, put a big powerful engine in it, and then you sit there and make changes to the ECU mapping, you can tweak the car for many different results but at no point are you actually changing the engine. the performance is different and you can have different profiles set for different drivers. like the Hellcat and its black key and red key. at no point is the engine changed but the performance is different due to different data being input then interpreted differently.
you are clearly missing what i am saying.
i can write a program that does calculations. and then i can input it with different data sets and tweak it and modify it and get different results and "manipulate it however i want" but at no point do i need change the code that does the calculations. the calculations stay sealed in their own little box. never changed. different results obtained by feeding different data in.
dude if you expect a game team to lay out the exact ins and outs of how their AI works then i got news for you.
of course they just give a basic overview. Of course all they say is its random weights. of course thats all they say. firstly most coding and technical stuff would go over most peoples head, secondly it is information that only they need to know.
yes things have changed on our end, but that does not mean the AI coding has changed. if the dev environment has changed and then unless the code is updated the end result can change and that is what has happened.
the game was written 8 years ago. the AI was developed with much less advanced coding on an older engine than what can be done now. as things have progressed and the code has not been updated and does not run as it should anymore. IF they had have been updating and tweaking AI over the years they could have kept it consistent. but without updating the code to suit the changing environment around it, it no longer functions properly.
i don't care about your masters degree, just as you probably don't care about the fact i do coding.
you or i can both speculate how they do things and neither of us is probably correct.
the only thing for certain is that the game was written on old tech and has not been updated. so all the timings would have become out of sync. resulting in unintended erratic behaviour.
I literally proved in this discussion that you can tease out more information if you point out holes in their logic. Jax literally created a comment to elaborate on the flaw I pointed out. This kills the entire notion of vagueness you’re referring to. I didn’t ask (or need) to see their code to showcase why the statements in their post were misleading. I could prove as much using only the information they provided and comparing it to the observed patterns we see.
You “do coding”? Do you mean you’re a programmer? That has almost nothing to do with being able to grasp the concepts at play here. Programming is an expressive tool not the fundamental understanding of the math at play. It would help if you actually knew about inheritance, for example, as it would show you immediately why your interpretation about AI manipulation is wrong, but what makes me question you isn't your background, but how many errors you make in your argumentation. You don't know enough about the subject to understand the important distinctions and that comes down to taking the time to learn it. This is on the level of a mathematician trying to explain how infinite series can still converge to real values and someone looking back at you wagging a finger going “nu-uh, theres an infinite number so it must be infinite, also I know about LATEX”.
I don't need to speculate. I worked solely off of what was provided in the post to arrive at contradictions with the game. Thats the difference between you and I
you can change the interactions between the champ and the AI without changing the AI itself.
AI code is written to be maluable and subject to input and then interpreted. the AI code itself is standalone subset in the program that does not get changed.
the end result of changing parameters in the champs results in varied AI performance from one champ to the next, but at not point is the actual AI code being changed.
its like if you get a car, put a big powerful engine in it, and then you sit there and make changes to the ECU mapping, you can tweak the car for many different results but at no point are you actually changing the engine. the performance is different and you can have different profiles set for different drivers. like the Hellcat and its black key and red key. at no point is the engine changed but the performance is different due to different data being input then interpreted differently.
you are clearly missing what i am saying.
i can write a program that does calculations. and then i can input it with different data sets and tweak it and modify it and get different results and "manipulate it however i want" but at no point do i need change the code that does the calculations. the calculations stay sealed in their own little box. never changed. different results obtained by feeding different data in.
The engine sure, but the CAR. Yes. You have changed the CAR. The AI is built upon a set of functions and weights. You can change the weights, functions or both. If you only change the weights the functions are the same, but the AI is different. The AI is the CAR not the engine
Jax, buddy, you have in the original post, that the weights themselves are “randomly generated”. Can you explain what that statement means if you are now implying that those weights are NOT in fact randomly generated?
So much for being on vacation.
The phrase was “randomly weighted actions” not “randomly generated weights.” This is a completely inconsequential side track, but the phrase “randomly weighted action” is a common term of art in games design and in fact in lay-discussions of games in general. It commonly lacks the semantically more proper hyphenation of “randomly-weighted action” which means the actions are both randomly generated and weighted, not that the actions are determined by randomly weighted generators.
All the discussion starting from that misconception heads off into completely irrelevant territory.
As a further aside, champion crystals have also been described in the past as randomly-weighted, but of course no one assumes the crystal weights are randomly generated.
Jax, buddy, you have in the original post, that the weights themselves are “randomly generated”. Can you explain what that statement means if you are now implying that those weights are NOT in fact randomly generated?
So much for being on vacation.
The phrase was “randomly weighted actions” not “randomly generated weights.” This is a completely inconsequential side track, but the phrase “randomly weighted action” is a common term of art in games design and in fact in lay-discussions of games in general. It commonly lacks the semantically more proper hyphenation of “randomly-weighted action” which means the actions are both randomly generated and weighted, not that the actions are determined by randomly weighted generators.
All the discussion starting from that misconception heads off into completely irrelevant territory.
As a further aside, champion crystals have also been described in the past as randomly-weighted, but of course no one assumes the crystal weights are randomly generated.
Im sorry DNA but that’s on the borderline of disingenuous. “Randomly weighted action” is synonymous with “randomly-weighted action” and both imply generation of the weights themselves. I think what you meant to say was that what should have been written is: “random, weighted actions” where both “random” and “weighted” now refer to the actions. Randomly is literally an adverb, no? How could this possibly refer to “actions”- a noun?
Randomly weighted actions means the weights are randomized. This is just a fact of syntax at this point. If they go back and correct this we can move on from this point of discussion, but that’s only the first half of issues I have with this post
If they described their crystals as randomly weighted I would have said the same thing. Link me the post and Ill point out the flaw there too.
So, we can argue the semantics of language until the cows come home. Or, we can all accept that there are multiple ways of interpreting most of written English - it lacks tone and nuance.
But. I did explain and clarify. It may not align with your interpretation, but it is what the intention was when writing the doc.
dude if you expect a game team to lay out the exact ins and outs of how their AI works then i got news for you.
of course they just give a basic overview. Of course all they say is its random weights. of course thats all they say. firstly most coding and technical stuff would go over most peoples head, secondly it is information that only they need to know.
yes things have changed on our end, but that does not mean the AI coding has changed. if the dev environment has changed and then unless the code is updated the end result can change and that is what has happened.
the game was written 8 years ago. the AI was developed with much less advanced coding on an older engine than what can be done now. as things have progressed and the code has not been updated and does not run as it should anymore. IF they had have been updating and tweaking AI over the years they could have kept it consistent. but without updating the code to suit the changing environment around it, it no longer functions properly.
i don't care about your masters degree, just as you probably don't care about the fact i do coding.
you or i can both speculate how they do things and neither of us is probably correct.
the only thing for certain is that the game was written on old tech and has not been updated. so all the timings would have become out of sync. resulting in unintended erratic behaviour.
I literally proved in this discussion that you can tease out more information if you point out holes in their logic. Jax literally created a comment to elaborate on the flaw I pointed out. This kills the entire notion of vagueness you’re referring to. I didn’t ask (or need) to see their code to showcase why the statements in their post were misleading. I could prove as much using only the information they provided and comparing it to the observed patterns we see.
You “do coding”? Do you mean you’re a programmer? That has almost nothing to do with being able to grasp the concepts at play here. Programming is an expressive tool not the fundamental understanding of the math at play. It would help if you actually knew about inheritance, for example, as it would show you immediately why your interpretation about AI manipulation is wrong, but what makes me question you isn't your background, but how many errors you make in your argumentation. You don't know enough about the subject to understand the important distinctions and that comes down to taking the time to learn it. This is on the level of a mathematician trying to explain how infinite series can still converge to real values and someone looking back at you wagging a finger going “nu-uh, theres an infinite number so it must be infinite, also I know about LATEX”.
I don't need to speculate. I worked solely off of what was provided in the post to arrive at contradictions with the game. Thats the difference between you and I
dude we are talking about the code. the separation of code.
i am not trying to talk about the exact calculations of randomness used. i would not know. but we gotta all accept and understand that random doesn't need to equal fully 100% random. random can be random within any set of parameters and with different input data controlling the seed and parameters. without any confinement fully random would be horrible. thats literally all i have been getting at.
AI being a subset of the game code and a champ being the subset of the game code.
the fact the champ code interacts with the AI code but does not actually change it.
think of the AI code as one book and the champ code as another book. the AI code is written and contained in its book and remains the same. the champ code has points and references that interact with that AI code feed it data, call on its functions but do not at any point change it.
you are getting confused with different data being fed into the AI and then the results being interpreted differently as changing the AI. it may be as you say "manipulating" the AI but it is in no way changing the AI. the AI remains unchanged. the result you get comes across to us as whatever playstyle based on the data and results but the AI code itself is never changed and remains the same for every champion.
Jax, buddy, you have in the original post, that the weights themselves are “randomly generated”. Can you explain what that statement means if you are now implying that those weights are NOT in fact randomly generated?
So much for being on vacation.
The phrase was “randomly weighted actions” not “randomly generated weights.” This is a completely inconsequential side track, but the phrase “randomly weighted action” is a common term of art in games design and in fact in lay-discussions of games in general. It commonly lacks the semantically more proper hyphenation of “randomly-weighted action” which means the actions are both randomly generated and weighted, not that the actions are determined by randomly weighted generators.
All the discussion starting from that misconception heads off into completely irrelevant territory.
As a further aside, champion crystals have also been described in the past as randomly-weighted, but of course no one assumes the crystal weights are randomly generated.
Im sorry DNA but that’s on the borderline of disingenuous. “Randomly weighted action” is synonymous with “randomly-weighted action” and both imply generation of the weights themselves. I think what you meant to say was that what should have been written is: “random, weighted actions” where both “random” and “weighted” now refer to the actions. Randomly is literally an adverb, no? How could this possibly refer to “actions”- a noun?
Randomly weighted actions means the weights are randomized. This is just a fact of syntax at this point. If they go back and correct this we can move on from this point of discussion, but that’s only the first half of issues I have with this post
If they described their crystals as randomly weighted I would have said the same thing. Link me the post and Ill point out the flaw there too.
If your interest is winning the OED pedantic award, you’re on the right track. But I’m explaining to you how these phrases are commonly used in the context of gaming, and dev diaries and transparency announcements are there for the people looking for communication, which is a two way street. They are not there to provide fodder for the gotcha crowd. If you’re not willing to meet the devs half way when they try to explain something to you, you’re not the target audience for this post. The devs are not going to be taking English lessons from you as part of their explaining technical issues.
dude if you expect a game team to lay out the exact ins and outs of how their AI works then i got news for you.
of course they just give a basic overview. Of course all they say is its random weights. of course thats all they say. firstly most coding and technical stuff would go over most peoples head, secondly it is information that only they need to know.
yes things have changed on our end, but that does not mean the AI coding has changed. if the dev environment has changed and then unless the code is updated the end result can change and that is what has happened.
the game was written 8 years ago. the AI was developed with much less advanced coding on an older engine than what can be done now. as things have progressed and the code has not been updated and does not run as it should anymore. IF they had have been updating and tweaking AI over the years they could have kept it consistent. but without updating the code to suit the changing environment around it, it no longer functions properly.
i don't care about your masters degree, just as you probably don't care about the fact i do coding.
you or i can both speculate how they do things and neither of us is probably correct.
the only thing for certain is that the game was written on old tech and has not been updated. so all the timings would have become out of sync. resulting in unintended erratic behaviour.
I literally proved in this discussion that you can tease out more information if you point out holes in their logic. Jax literally created a comment to elaborate on the flaw I pointed out. This kills the entire notion of vagueness you’re referring to. I didn’t ask (or need) to see their code to showcase why the statements in their post were misleading. I could prove as much using only the information they provided and comparing it to the observed patterns we see.
You “do coding”? Do you mean you’re a programmer? That has almost nothing to do with being able to grasp the concepts at play here. Programming is an expressive tool not the fundamental understanding of the math at play. It would help if you actually knew about inheritance, for example, as it would show you immediately why your interpretation about AI manipulation is wrong, but what makes me question you isn't your background, but how many errors you make in your argumentation. You don't know enough about the subject to understand the important distinctions and that comes down to taking the time to learn it. This is on the level of a mathematician trying to explain how infinite series can still converge to real values and someone looking back at you wagging a finger going “nu-uh, theres an infinite number so it must be infinite, also I know about LATEX”.
I don't need to speculate. I worked solely off of what was provided in the post to arrive at contradictions with the game. Thats the difference between you and I
The thing about this entire line of debate that I’m not sure if it is funny or sad is that how AI works in games like this is a relatively common knowledge thing in game design. There is really only two fundamental ways you can do this for a fighting game like this one. You can use adaptive feedback state engines or you can use random weighted action trees or state engines (possibly with the degenerate single state). Given the context and relative complexity of the space, I cannot think of another way to actually do this practically. The moment Kabam said the AI doesn’t learn, that reduced the number of possibilities to one.
I think anyone with the courage to nit pick all of this without a trace of humility should at least know this.
whatever can be done about the parry mid combo, heavy parry, dex fail, parry when punishing routine specials, expertly reparrying mid combo, failure to throw specials, back to back random power gain SP3, refusal to throw specials when multiple taunts are on etc... I'm all in.
the interactions in this game are just so suspect it's hard to go into any content (especially Battlegrounds) with any clear plan that won't ultimately prove useless because of how unknown Ai behavior is. it could be this or that and often never what you expect "should" happen.
i am not trying to talk about the exact calculations of randomness used. i would not know. but we gotta all accept and understand that random doesn't need to equal fully 100% random. random can be random within any set of parameters and with different input data controlling the seed and parameters. without any confinement fully random would be horrible. thats literally all i have been getting at.
A common decision that AI entities make in games with combat is whether to use melee attacks or not. It would be nonsensical to swing at targets out of range, so the AI usually implements decision trees with a range input. It might look something like
if ActionRoll > AttackThreshold then: ——> if range <= Melee then MeleeAttack ——> if range > Melee then RangeAttack
Range changes the AI decisions but doesn’t directly change the random weights of the system in this case. But we could decide that we want to give the AI the option to use ranged attacks even when in melee range, say ten percent of the time. In that case we might have:
if ActionRoll > AttackThreshold then: ——> if range <= Melee then: ——>——> if AttackChoice < 0.1 RangedAttack ——>——> if AttackChoice >= 0.1 MeleeAttack ——> if range > Melee then RangeAttack
But, and I’m going to skip some math here, this requires two random rolls. Random rolls are computationally expensive. So with some math we “flatten” this tree (often in tool chains that convert trees to flat implementations to make life easier on designers) to say:
if ActionRoll > AttackThreshold then: ——> if range <= Melee then: ——>——> if ActionRoll < M RangedAttack ——>——> if ActionRoll >= M MeleeAttack ——> if range > Melee then RangeAttack
Where M is calculated from the AttackThreshold. In fact with extra math magic you can eliminate the if…then range check and collapse it all into a decision matrix where range is an extra weighted parameter.
Communicating all of this without getting into an implementation lesson involving random generation, decision trees, optimization, and some math would be a lot to undertake on top of explaining the nature of the issue the announcement covers, which is essentially that *before* you can deplorably hunt down AI issues you have to be able to reliably reproduce them, and when some of the randomness of the behavior is happening in the game engine itself that means they cannot reliably replicate all behaviors. So rather than trying to address AI issues in the current system, they decided to rewrite it to eliminate this reproducibility problem first.
They aren’t saying that this extra bit of randomness was *causing* the issues people were seeing. Just that it made analyzing AI behavior more complicated. Randomness is not the direct cause of the vast majority of reported AI related issues. Rather, randomness makes such reports more difficult to fully backtrack. Did something happen because it was intended to happen directly, or did it happen because of an emergent behavior of the system that wasn’t originally intended directly.
An example of an emergent behavior AI glitch might be the combo braking behaviors some of us have seen. The AI randomly chooses when to attack - it obviously doesn’t attack predictably. But it is possible that there was always the potential for the AI to combo break, and the AI simply never chose to do so in the past because the timing never lined up. In other words, the AI never rolled its dice at the right time to slip into that tiny combo breaking window. But changes to the game elsewhere could subtly alter that timing so that even though the code is the same and the randomness is the same, the result is different. The AI rolls the same dice with the same weightings, but now it is rolling them at just the right time to make an action that is ordinarily impossible, possible.
I’m not saying that is happening, of course. I don’t have that specific information. However, I am offering it as an explanation for how the intricacies of the implementation can cause subtle problems to happen, that would require a much more reliably reproducible AI engine to proper diagnose. Finding or ruling out that sort of interaction is why you’d want to take the actions Kabam is describing in rewriting the AI to eliminate the non-reproducible elements of the implementation.
At this point, just skimming thru the continued arguments, and something stuck out.
(Besides for discussion about whether weighted actions can still have their outcomes considered to be random, if they were weighted)
Is now a little snippet (and of course, I’m sure I’m taking this out of context), but that the weighted'ness itself should also be random ??
Think Jax should have just closed this off from further argument.
I disagree cause it's been interesting seeing this comments from people that know about the subject, this last message from @DNA3000 actually shed some light in my head about the AI and it's so good to finally have this thread being talked about it, since in the past miike simply said ''we never change the AI'' and thread is closed As long as the thread continue to be respectful, no need to close it down
(Besides for discussion about whether weighted actions can still have their outcomes considered to be random, if they were weighted)
This seems to be a common misconception, that “weighted” somehow conflicts with “random.” There’s an entire field of study involving weighted random distributions that covers this.
One place you see weighted random distributions in relatively commonplace situations is in pen and paper roleplaying games. Sometimes you roll 1d12, and sometimes you roll 2d6. 2d6 is a weighted random distribution that differs from 1d12. Every option from 1 to 12 is equally likely on 1d12. But every possibility is not equally likely with 2d6. You’re more likely to roll 7 than 2 or 12, and 1 is impossible. That distribution is weighted towards the middle numbers, but almost no one stops to consider whether 1d12 is random but 2d6 is not.
The study of random distributions is one of those things that sounds tame, like linear algebra, and turns out to be a monster. The monster even has a name: it’s the central limit theorem. It sounds simple and easy, until you actually read what it says.
At this point, just skimming thru the continued arguments, and something stuck out.
(Besides for discussion about whether weighted actions can still have their outcomes considered to be random, if they were weighted)
Is now a little snippet (and of course, I’m sure I’m taking this out of context), but that the weighted'ness itself should also be random ??
Think Jax should have just closed this off from further argument.
I disagree cause it's been interesting seeing this comments from people that know about the subject, this last message from @DNA3000 actually shed some light in my head about the AI and it's so good to finally have this thread being talked about it, since in the past miike simply said ''we never change the AI'' and thread is closed As long as the thread continue to be respectful, no need to close it down
yep he perfectly stated some of what i have been trying to say all along.
i am not trying to talk about the exact calculations of randomness used. i would not know. but we gotta all accept and understand that random doesn't need to equal fully 100% random. random can be random within any set of parameters and with different input data controlling the seed and parameters. without any confinement fully random would be horrible. thats literally all i have been getting at.
A common decision that AI entities make in games with combat is whether to use melee attacks or not. It would be nonsensical to swing at targets out of range, so the AI usually implements decision trees with a range input. It might look something like
if ActionRoll > AttackThreshold then: ——> if range <= Melee then MeleeAttack ——> if range > Melee then RangeAttack
Range changes the AI decisions but doesn’t directly change the random weights of the system in this case. But we could decide that we want to give the AI the option to use ranged attacks even when in melee range, say ten percent of the time. In that case we might have:
if ActionRoll > AttackThreshold then: ——> if range <= Melee then: ——>——> if AttackChoice < 0.1 RangedAttack ——>——> if AttackChoice >= 0.1 MeleeAttack ——> if range > Melee then RangeAttack
But, and I’m going to skip some math here, this requires two random rolls. Random rolls are computationally expensive. So with some math we “flatten” this tree (often in tool chains that convert trees to flat implementations to make life easier on designers) to say:
if ActionRoll > AttackThreshold then: ——> if range <= Melee then: ——>——> if ActionRoll < M RangedAttack ——>——> if ActionRoll >= M MeleeAttack ——> if range > Melee then RangeAttack
Where M is calculated from the AttackThreshold. In fact with extra math magic you can eliminate the if…then range check and collapse it all into a decision matrix where range is an extra weighted parameter.
Communicating all of this without getting into an implementation lesson involving random generation, decision trees, optimization, and some math would be a lot to undertake on top of explaining the nature of the issue the announcement covers, which is essentially that *before* you can deplorably hunt down AI issues you have to be able to reliably reproduce them, and when some of the randomness of the behavior is happening in the game engine itself that means they cannot reliably replicate all behaviors. So rather than trying to address AI issues in the current system, they decided to rewrite it to eliminate this reproducibility problem first.
They aren’t saying that this extra bit of randomness was *causing* the issues people were seeing. Just that it made analyzing AI behavior more complicated. Randomness is not the direct cause of the vast majority of reported AI related issues. Rather, randomness makes such reports more difficult to fully backtrack. Did something happen because it was intended to happen directly, or did it happen because of an emergent behavior of the system that wasn’t originally intended directly.
An example of an emergent behavior AI glitch might be the combo braking behaviors some of us have seen. The AI randomly chooses when to attack - it obviously doesn’t attack predictably. But it is possible that there was always the potential for the AI to combo break, and the AI simply never chose to do so in the past because the timing never lined up. In other words, the AI never rolled its dice at the right time to slip into that tiny combo breaking window. But changes to the game elsewhere could subtly alter that timing so that even though the code is the same and the randomness is the same, the result is different. The AI rolls the same dice with the same weightings, but now it is rolling them at just the right time to make an action that is ordinarily impossible, possible.
I’m not saying that is happening, of course. I don’t have that specific information. However, I am offering it as an explanation for how the intricacies of the implementation can cause subtle problems to happen, that would require a much more reliably reproducible AI engine to proper diagnose. Finding or ruling out that sort of interaction is why you’d want to take the actions Kabam is describing in rewriting the AI to eliminate the non-reproducible elements of the implementation.
i believe the biggest issue in the AI getting worse and worse is the simple fact that they have not changed AI. and that they need to. the game engines and device specs have all changed around the game which would have big impacts on what is possible and especially timings. so where something previously never had enough time to make an action occur an action can now occur. it appears to the player as AI has changed when infcat it is the fact AI has never changed but due to other factors there are now opportunities that it never had before. maybe previously it needed .5ms to be able to respond with an attack where as now all it needs is .2ms for example. the only way to solve this is to adjust all the timings in the AI essentially rewriting it. which is why it is great they have decided to redo the AI and therefore can bring it up to speed and hopefully make it run within the proper parameters that it was designed to almost 10 years ago.
while at it, can you please standardize opponent wake up time? (you did that back then with parry against large champions which used to push your attacker further back)
champions like Guilly 2099, old storm post buff.. the list goes on, but this is what I can remember atm these champions instant stand up, and if you knock them down and immediately dash forward you will get intercepted no matter what, unlike the rest of the champions.
while at it, can you please standardize opponent wake up time? (you did that back then with parry against large champions which used to push your attacker further back)
champions like Guilly 2099, old storm post buff.. the list goes on, but this is what I can remember atm these champions instant stand up, and if you knock them down and immediately dash forward you will get intercepted no matter what, unlike the rest of the champions.
There’s been a lot of discussion in the community about our AI recently, so we wanted to take this opportunity to shed some light on how our AI system works and what we’ve been working on behind the scenes. We hope this post will provide transparency, insight and an understanding of the situation and how our team is handling AI issues.
Current State of AI
Our AI works on a years-old system of randomly weighted actions. The AI looks at its current state, looks at all the actions it could perform, and then randomly rolls to decide which action it will take. This is not a learning AI, it is simply rolling dice.
There’s some advantages to this system - you don’t want a fighting game to be perfectly predictable after all. However, it also means that the AI can sometimes be frustrating to play against when the RNG ends up working against you. Our goal has always been to maintain a fair and challenging AI system.
Why does it feel different now?
To be clear, we haven’t been actively changing the game’s AI code; we are not using it as a tool to annoy Summoners or to drive item usage. However, the Contest also isn’t the same game it was years ago either. Our game is a complicated web of interactions. The increasing complexity of Champion kits, Nodes, a number of engine upgrades, etc. all add up but result in us operating without a clear history of “AI changes” we can look into when Summoners raise frustrations about the AI.
Tech Improvements Incoming
The engineering team has been working behind the scenes to address these concerns for a long time.
One of the things we discovered while digging into the input issues and standing up our fight replay tech was that some of the replays we were getting back weren’t always consistent. Digging into this more, we found that some of the AI randomness was occurring in the game engine layer, in code we didn’t write, can’t change, and doesn’t yield the same results every time.
Our first step is moving the randomness that’s currently happening on the engine layer over to our own code, so we can get 100% consistent fight replays. The goal here is that the game should play the same as it does now, but we’ll be able to more consistently reproduce player reported issues. From there we’ll be able to better investigate the things that are frustrating Summoners and make fixes where we deem necessary. Ultimately, this will give us more control over our systems and will allow us to help improve the Summoner experience moving forward.
Making changes to the AI can be a precarious process; Summoners have grown accustomed to elements of the AI and rely on strategies to counter them. We are trying to avoid invalidating existing Summoner strategies by making small incremental changes.
Intentions, Timeline and Expectations
You will encounter our new AI system in November. We are confident that we have successfully recreated the current system and that this transition will be relatively seamless.
To reiterate, the goal at this stage is for you all to experience no discernible changes. By transitioning over to this new system, we will have more thorough control in identifying, replicating and triaging potential bugs in the AI system.
How confident are we? We enabled the new AI system on the CCP Beta Server for a week before telling them. Sneaky, sneaky. The intention was to see if there were any noticeable or noteworthy changes they encountered - essentially, did it feel any different? After discussions with the CCP, we are confident that we are ready to implement this system game-wide.
I was playing on someone’s else’s (android ) to find the difference on how dose low end device feel while playing from my iPhone 12 , when I play my opponents are aggressive and respond very differently then of his , why is that ? Why this partiality ?
There’s been a lot of discussion in the community about our AI recently, so we wanted to take this opportunity to shed some light on how our AI system works and what we’ve been working on behind the scenes. We hope this post will provide transparency, insight and an understanding of the situation and how our team is handling AI issues.
Current State of AI
Our AI works on a years-old system of randomly weighted actions. The AI looks at its current state, looks at all the actions it could perform, and then randomly rolls to decide which action it will take. This is not a learning AI, it is simply rolling dice.
There’s some advantages to this system - you don’t want a fighting game to be perfectly predictable after all. However, it also means that the AI can sometimes be frustrating to play against when the RNG ends up working against you. Our goal has always been to maintain a fair and challenging AI system.
Why does it feel different now?
To be clear, we haven’t been actively changing the game’s AI code; we are not using it as a tool to annoy Summoners or to drive item usage. However, the Contest also isn’t the same game it was years ago either. Our game is a complicated web of interactions. The increasing complexity of Champion kits, Nodes, a number of engine upgrades, etc. all add up but result in us operating without a clear history of “AI changes” we can look into when Summoners raise frustrations about the AI.
Tech Improvements Incoming
The engineering team has been working behind the scenes to address these concerns for a long time.
One of the things we discovered while digging into the input issues and standing up our fight replay tech was that some of the replays we were getting back weren’t always consistent. Digging into this more, we found that some of the AI randomness was occurring in the game engine layer, in code we didn’t write, can’t change, and doesn’t yield the same results every time.
Our first step is moving the randomness that’s currently happening on the engine layer over to our own code, so we can get 100% consistent fight replays. The goal here is that the game should play the same as it does now, but we’ll be able to more consistently reproduce player reported issues. From there we’ll be able to better investigate the things that are frustrating Summoners and make fixes where we deem necessary. Ultimately, this will give us more control over our systems and will allow us to help improve the Summoner experience moving forward.
Making changes to the AI can be a precarious process; Summoners have grown accustomed to elements of the AI and rely on strategies to counter them. We are trying to avoid invalidating existing Summoner strategies by making small incremental changes.
Intentions, Timeline and Expectations
You will encounter our new AI system in November. We are confident that we have successfully recreated the current system and that this transition will be relatively seamless.
To reiterate, the goal at this stage is for you all to experience no discernible changes. By transitioning over to this new system, we will have more thorough control in identifying, replicating and triaging potential bugs in the AI system.
How confident are we? We enabled the new AI system on the CCP Beta Server for a week before telling them. Sneaky, sneaky. The intention was to see if there were any noticeable or noteworthy changes they encountered - essentially, did it feel any different? After discussions with the CCP, we are confident that we are ready to implement this system game-wide.
I was playing on someone’s else’s (android ) to find the difference on how dose low end device feel while playing from my iPhone 12 , when I play my opponents are aggressive and respond very differently then of his , why is that ? Why this partiality ?
faster device allows faster responses for the AI. makes sense perfectly if they have not coded hard limits in place on the timing. and also shows why timing has become quicker and more tight for the AI over the years as devices have gotten faster but the game code has not evolved. timing is exceedingly important factor
The character profiles either add more dice, weigh the dice towards certain actions or both.
This explains why Chavez and Mysterio spam heavy. They have more dice and there's a rule that says if one lands on heavy it trumps all others (save perhaps some conditional rules) or their die have more "heavy" results, or both.
Nodes do the same thing. Conditional Formatting further weighs dice towards certain actions.
This also explains why Mordo and Hyperion turtle - they are weighted towards certain actions when conditions are met.
These dice are all still rolled and are random. It's random by definition because the result isn't known. But that doesn't mean they're all equal to each other and that certain outcomes aren't weighted more/less than others.
Kabam has said that the unity engine which they don't control has been changed and it has it's own sets of conditions and rolls that impact the game further but can't be replicated from their (Kabam's) end. So, that too isn't disingenuous. Kabam doesn't change the unity engine. They can't.
People have been complaining for years about the AI and inputs and game mechanics, Kabam finally responds with some pretty deep detail and now everyone is complaining about language and whether or not you believe the response Kabam gave.
Randomly weighted actions means the weights are randomized. This is just a fact of syntax at this point. If they go back and correct this we can move on from this point of discussion, but that’s only the first half of issues I have with this post.
You're the one being disingenuous here. You're clearly an intelligent person who knows what they're talking about, so clearly you can also read between the lines. Kabam isn't going to make the initial post a fully detailed explanation about the nuances that will go over most of our heads when the fact remains the same.
Yes, the nuances are slightly different. There's a distinction between: "Every AI has the exact same dice and their rolls are all identically random." and "There is a base profile but each character does have individual weights which modify the dice. So it's still a random roll, but they're not all identical to each other and many are weighted in different favours."
I get it, I really do, I have a very similar gripe with their potions post and some phrasing that was used in there - but me trying to get Kabam into some "gotcha!" moment isn't going to change anything. So congratulations, you're being pedantic to the point of irrelevance - because the fact of the matter is the same, it's a roll and Kabam no longer has control over all the variables. It's being changed. You're upset they used a laman's broad stroke explanation because you see a variance in the detail provided. Again, you're smart enough to read between the lines and understand that it likely wasn't a malicious omission. It wasn't done to "pull one over" on us. It's further detail that wasn't added because for the vast majority of us, it doesn't change the conversation.
Comments
of course they just give a basic overview.
Of course all they say is its random weights.
of course thats all they say.
firstly most coding and technical stuff would go over most peoples head, secondly it is information that only they need to know.
yes things have changed on our end, but that does not mean the AI coding has changed.
if the dev environment has changed and then unless the code is updated the end result can change and that is what has happened.
the game was written 8 years ago.
the AI was developed with much less advanced coding on an older engine than what can be done now.
as things have progressed and the code has not been updated and does not run as it should anymore.
IF they had have been updating and tweaking AI over the years they could have kept it consistent.
but without updating the code to suit the changing environment around it, it no longer functions properly.
i don't care about your masters degree, just as you probably don't care about the fact i do coding.
you or i can both speculate how they do things and neither of us is probably correct.
the only thing for certain is that the game was written on old tech and has not been updated. so all the timings would have become out of sync. resulting in unintended erratic behaviour.
AI code is written to be maluable and subject to input and then interpreted.
the AI code itself is standalone subset in the program that does not get changed.
the end result of changing parameters in the champs results in varied AI performance from one champ to the next, but at not point is the actual AI code being changed.
its like if you get a car,
put a big powerful engine in it,
and then you sit there and make changes to the ECU mapping, you can tweak the car for many different results but at no point are you actually changing the engine.
the performance is different and you can have different profiles set for different drivers.
like the Hellcat and its black key and red key.
at no point is the engine changed but the performance is different due to different data being input then interpreted differently.
you are clearly missing what i am saying.
i can write a program that does calculations.
and then i can input it with different data sets and tweak it and modify it and get different results and "manipulate it however i want" but at no point do i need change the code that does the calculations.
the calculations stay sealed in their own little box. never changed. different results obtained by feeding different data in.
You “do coding”? Do you mean you’re a programmer? That has almost nothing to do with being able to grasp the concepts at play here. Programming is an expressive tool not the fundamental understanding of the math at play. It would help if you actually knew about inheritance, for example, as it would show you immediately why your interpretation about AI manipulation is wrong, but what makes me question you isn't your background, but how many errors you make in your argumentation. You don't know enough about the subject to understand the important distinctions and that comes down to taking the time to learn it. This is on the level of a mathematician trying to explain how infinite series can still converge to real values and someone looking back at you wagging a finger going “nu-uh, theres an infinite number so it must be infinite, also I know about LATEX”.
I don't need to speculate. I worked solely off of what was provided in the post to arrive at contradictions with the game. Thats the difference between you and I
The phrase was “randomly weighted actions” not “randomly generated weights.” This is a completely inconsequential side track, but the phrase “randomly weighted action” is a common term of art in games design and in fact in lay-discussions of games in general. It commonly lacks the semantically more proper hyphenation of “randomly-weighted action” which means the actions are both randomly generated and weighted, not that the actions are determined by randomly weighted generators.
All the discussion starting from that misconception heads off into completely irrelevant territory.
As a further aside, champion crystals have also been described in the past as randomly-weighted, but of course no one assumes the crystal weights are randomly generated.
Randomly weighted actions means the weights are randomized. This is just a fact of syntax at this point. If they go back and correct this we can move on from this point of discussion, but that’s only the first half of issues I have with this post
If they described their crystals as randomly weighted I would have said the same thing. Link me the post and Ill point out the flaw there too.
So, we can argue the semantics of language until the cows come home.
Or, we can all accept that there are multiple ways of interpreting most of written English - it lacks tone and nuance.
But. I did explain and clarify. It may not align with your interpretation, but it is what the intention was when writing the doc.
the separation of code.
i am not trying to talk about the exact calculations of randomness used. i would not know. but we gotta all accept and understand that random doesn't need to equal fully 100% random.
random can be random within any set of parameters and with different input data controlling the seed and parameters.
without any confinement fully random would be horrible.
thats literally all i have been getting at.
AI being a subset of the game code and a champ being the subset of the game code.
the fact the champ code interacts with the AI code but does not actually change it.
think of the AI code as one book and the champ code as another book.
the AI code is written and contained in its book and remains the same.
the champ code has points and references that interact with that AI code feed it data, call on its functions but do not at any point change it.
you are getting confused with different data being fed into the AI and then the results being interpreted differently as changing the AI.
it may be as you say "manipulating" the AI but it is in no way changing the AI.
the AI remains unchanged.
the result you get comes across to us as whatever playstyle based on the data and results but the AI code itself is never changed and remains the same for every champion.
I think anyone with the courage to nit pick all of this without a trace of humility should at least know this.
the interactions in this game are just so suspect it's hard to go into any content (especially Battlegrounds) with any clear plan that won't ultimately prove useless because of how unknown Ai behavior is. it could be this or that and often never what you expect "should" happen.
if ActionRoll > AttackThreshold then:
——> if range <= Melee then MeleeAttack
——> if range > Melee then RangeAttack
Range changes the AI decisions but doesn’t directly change the random weights of the system in this case. But we could decide that we want to give the AI the option to use ranged attacks even when in melee range, say ten percent of the time. In that case we might have:
if ActionRoll > AttackThreshold then:
——> if range <= Melee then:
——>——> if AttackChoice < 0.1 RangedAttack
——>——> if AttackChoice >= 0.1 MeleeAttack
——> if range > Melee then RangeAttack
But, and I’m going to skip some math here, this requires two random rolls. Random rolls are computationally expensive. So with some math we “flatten” this tree (often in tool chains that convert trees to flat implementations to make life easier on designers) to say:
if ActionRoll > AttackThreshold then:
——> if range <= Melee then:
——>——> if ActionRoll < M RangedAttack
——>——> if ActionRoll >= M MeleeAttack
——> if range > Melee then RangeAttack
Where M is calculated from the AttackThreshold. In fact with extra math magic you can eliminate the if…then range check and collapse it all into a decision matrix where range is an extra weighted parameter.
Communicating all of this without getting into an implementation lesson involving random generation, decision trees, optimization, and some math would be a lot to undertake on top of explaining the nature of the issue the announcement covers, which is essentially that *before* you can deplorably hunt down AI issues you have to be able to reliably reproduce them, and when some of the randomness of the behavior is happening in the game engine itself that means they cannot reliably replicate all behaviors. So rather than trying to address AI issues in the current system, they decided to rewrite it to eliminate this reproducibility problem first.
They aren’t saying that this extra bit of randomness was *causing* the issues people were seeing. Just that it made analyzing AI behavior more complicated. Randomness is not the direct cause of the vast majority of reported AI related issues. Rather, randomness makes such reports more difficult to fully backtrack. Did something happen because it was intended to happen directly, or did it happen because of an emergent behavior of the system that wasn’t originally intended directly.
An example of an emergent behavior AI glitch might be the combo braking behaviors some of us have seen. The AI randomly chooses when to attack - it obviously doesn’t attack predictably. But it is possible that there was always the potential for the AI to combo break, and the AI simply never chose to do so in the past because the timing never lined up. In other words, the AI never rolled its dice at the right time to slip into that tiny combo breaking window. But changes to the game elsewhere could subtly alter that timing so that even though the code is the same and the randomness is the same, the result is different. The AI rolls the same dice with the same weightings, but now it is rolling them at just the right time to make an action that is ordinarily impossible, possible.
I’m not saying that is happening, of course. I don’t have that specific information. However, I am offering it as an explanation for how the intricacies of the implementation can cause subtle problems to happen, that would require a much more reliably reproducible AI engine to proper diagnose. Finding or ruling out that sort of interaction is why you’d want to take the actions Kabam is describing in rewriting the AI to eliminate the non-reproducible elements of the implementation.
(Besides for discussion about whether weighted actions can still have their outcomes considered to be random, if they were weighted)
Is now a little snippet (and of course, I’m sure I’m taking this out of context), but that the weighted'ness itself should also be random ??
Think Jax should have just closed this off from further argument.
As long as the thread continue to be respectful, no need to close it down
One place you see weighted random distributions in relatively commonplace situations is in pen and paper roleplaying games. Sometimes you roll 1d12, and sometimes you roll 2d6. 2d6 is a weighted random distribution that differs from 1d12. Every option from 1 to 12 is equally likely on 1d12. But every possibility is not equally likely with 2d6. You’re more likely to roll 7 than 2 or 12, and 1 is impossible. That distribution is weighted towards the middle numbers, but almost no one stops to consider whether 1d12 is random but 2d6 is not.
The study of random distributions is one of those things that sounds tame, like linear algebra, and turns out to be a monster. The monster even has a name: it’s the central limit theorem. It sounds simple and easy, until you actually read what it says.
and that they need to.
the game engines and device specs have all changed around the game which would have big impacts on what is possible and especially timings.
so where something previously never had enough time to make an action occur an action can now occur.
it appears to the player as AI has changed when infcat it is the fact AI has never changed but due to other factors there are now opportunities that it never had before.
maybe previously it needed .5ms to be able to respond with an attack where as now all it needs is .2ms for example.
the only way to solve this is to adjust all the timings in the AI essentially rewriting it.
which is why it is great they have decided to redo the AI and therefore can bring it up to speed and hopefully make it run within the proper parameters that it was designed to almost 10 years ago.
champions like Guilly 2099, old storm post buff.. the list goes on, but this is what I can remember atm
these champions instant stand up, and if you knock them down and immediately dash forward you will get intercepted no matter what, unlike the rest of the champions.
makes sense perfectly if they have not coded hard limits in place on the timing.
and also shows why timing has become quicker and more tight for the AI over the years as devices have gotten faster but the game code has not evolved.
timing is exceedingly important factor
The character profiles either add more dice, weigh the dice towards certain actions or both.
- This explains why Chavez and Mysterio spam heavy. They have more dice and there's a rule that says if one lands on heavy it trumps all others (save perhaps some conditional rules) or their die have more "heavy" results, or both.
Nodes do the same thing.Conditional Formatting further weighs dice towards certain actions.
- This also explains why Mordo and Hyperion turtle - they are weighted towards certain actions when conditions are met.
These dice are all still rolled and are random. It's random by definition because the result isn't known. But that doesn't mean they're all equal to each other and that certain outcomes aren't weighted more/less than others.Kabam has said that the unity engine which they don't control has been changed and it has it's own sets of conditions and rolls that impact the game further but can't be replicated from their (Kabam's) end. So, that too isn't disingenuous. Kabam doesn't change the unity engine. They can't.
People have been complaining for years about the AI and inputs and game mechanics, Kabam finally responds with some pretty deep detail and now everyone is complaining about language and whether or not you believe the response Kabam gave. You're the one being disingenuous here. You're clearly an intelligent person who knows what they're talking about, so clearly you can also read between the lines. Kabam isn't going to make the initial post a fully detailed explanation about the nuances that will go over most of our heads when the fact remains the same.
Yes, the nuances are slightly different.
There's a distinction between: "Every AI has the exact same dice and their rolls are all identically random." and "There is a base profile but each character does have individual weights which modify the dice. So it's still a random roll, but they're not all identical to each other and many are weighted in different favours."
I get it, I really do, I have a very similar gripe with their potions post and some phrasing that was used in there - but me trying to get Kabam into some "gotcha!" moment isn't going to change anything. So congratulations, you're being pedantic to the point of irrelevance - because the fact of the matter is the same, it's a roll and Kabam no longer has control over all the variables. It's being changed. You're upset they used a laman's broad stroke explanation because you see a variance in the detail provided. Again, you're smart enough to read between the lines and understand that it likely wasn't a malicious omission. It wasn't done to "pull one over" on us. It's further detail that wasn't added because for the vast majority of us, it doesn't change the conversation.