everything is cancelled (not really, but aaaa) (Patreon)
Content
so we've made more various AI improvements since the last time i posted which i'd love to list out and post for you
but we're not doing that today?
why? you might ask? with your sweet, shining, smiling soul? full of wonder, bliss, innocence, and sugarplum-colored sunshine?
it's because essentials FUCKING sucks
and so does everything else.
you see, my sweet, dear, pure friends, I noticed something recently.
and anyone who's been around for the development of this game long enough would be utterly un-surprised to find out that it all started with one single, perpetually-awful move:
sucker punch.
i noticed recently, when a jolteon was talking to a honchkrow, that this honchkrow wasn't terribly smart. in its priority check for sucker punch, it thought that it was faster than a jolteon.
it also still thought that it was faster than that jolteon even when it was paralyzed.
it was wrong. and died.
(actually it still killed the jolteon, but like, in other incarnations it died.)
then, some handful of days later, i noticed that some other poor pokemon thought it was faster than a salamence that had already dragon danced.
it was also wrong. and also died.
and then yesterday, since we had flipped the trigger for testing that means we're recording AI logs all the time, i realized that in a surprise plot twist, the issue was not actually just with sucker punch. sucker punch did nothing wrong.
in fact, sucker punch showed me the truth.
and the truth was that
in all of the entire debug log from like six hours of testing
the AI never once thought it was slower than the player.
it was also also wrong.
but instead, i died.
so basically today we learned that the conditional that checks to see whether the AI pokemon is faster than the player pokemon is entirely broken.
the reason for this is was a bracketting issue with an XOR check that nobody noticed because the syntax looks like garbage to the human brain.
but there was another reason that we didn't think to check it more closely
and that's that was because it was copied right from base essentials
that's right kids :)
the AI speed check was broken the whole time :)
in reborn, after rewriting the AI :)
in reborn, before rewriting the AI :)
in rejuvenation :)
in every essentials game ever, probably. :)
:) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :) :)
so we fixed it. it's easy to fix. just add brackets. or remove the XOR. or both, if you're really angry.
and normally this would be an easy fix.
except.
this conditional is not just in one place as a result of our AI rewrite.
it was in a grand total of, oh, probably, over 200 locations.
:)
so, it's been fun for marcello to fix
so here's a vague list of all the places this speed check is used, that should now be a bit smarter since they don't just always assume the AI is faster:
- priority scoring, primarily. it didn't value priority moves since it thought it would outspeed anyway.
- sleep moves
- all paralysis moves
- all flinch moves
- hurricane and thunder (for hitting fly)
- safeguard
- psycho shift
- all set up moves
- all speed stat reducing moves
- super power
- close combat
- v-create
- hammer arm
- heart swap
- power trick
- pain split
- tailwind
- mimic
- conversion(2)
- camouflage
- sketch
- reflect type
- counter
- mirror coat
- metal burst
- reflect
- light screen
- all never-miss moves
- protect (with speed boost)
- me first
- torment
- disable
- taunt
- heal block
- encore
- all two-turn attacks
- all semi-invulnerable attacks (and attacking player pokemon with them)
- roost, and all other recover moves
- endure
- roar, dragon tail, whirlind, etc
- u-turn/volt switch
- curse
- substitute
- sucker punch, naturally
- all protect-variant moves
- parting shot
- sticky web
- fell stinger
- rototiller
- electrify
- hyperspace hole/fury
- aurora veil
- plasma fists
- determing roles like sweeper, wall, etc
- water spout/eruption
- reversal
- helping hand
- mirror move
- copycat
- rollout
- bide
- rest
- draining moves + dream eater
- heal pulse/floral healing
- covet
- trick
- bug bite
- spite
- spit up/swallow
- follow me
- smack down
- ion deluge
- powder
- clanging scales
- core enforcer
- pollen puff
- shell trap
- speed swap
- spotlight
- instruct
- final gambit
- healing wish/lunar dance
- grudge
- destiny bond (including being cautious of attacking bonded pokemon
- toxic thread
- bestow
- moves that hit partners
- deciding which pokemon to switch in or out (...)
- analytic
- moxie
- prankster
- galewings
- protean
...okay
so realistically i probably could've just said 'almost every move in the game and then some'
but i had to type this out to make a point
and that point is:
fffffffffffffffffffffuq
because you might be thinking something like great, now the AI will be that much smarter!
which in the long run, is true, and is why it's absolutely worth fixing all this
but the problem is in the short term, for two reasons:
- first, the fact that we didn't know this has been busted since the start of eternity means that all of the moves until this point have basically been balanced around the mon always being faster, with the expectation of it applying to slower cases
so as an example, recover is one set of affected moves. for a while, the AI wasn't using recover enough, so increased the scores that make it use it. however, if you're slower you have to use recover more (pre-emptively) since you have to anticipate the damage you'll take both this turn and next.
so since that move has been balanced around always being faster, when you get the boost from being slower, it has the possibility to just be way too high and make it so you never don't use recover.
for example.
so a lot of moves are probably going to need tweaking now. - the second, and more serious reason is that because this has always been an issue, there are entire parts of the code that have just been unleashed into the world for the first time. the code was never getting to them before, but that means we wouldn't know if there were errors in them before
which means, everyone's favorite:
inaction errors
there's no guarantee, but this untested code has the potential to mean a fucktonne of inaction errors
and gosh do i love those
with a burning, firey, smoldering, hell-forged venom.
so i'm
worried.
everything is broken and possibly needs to be re-tested again
so good thing we're in testing phase as is,
but, ah, i can sum up my feelings on it in one word:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa