Beta Testing, Day in and Day out (Patreon)
Content
ok so we all know about our inactivity bugs, they're hecko damaging to gameplay but because of that we're pretty to the much guaran- to the -teed to notice them. what is less difficult to notice is cases where the AI is just lol fax u to a single move because of a bug that makes it never want to use the move ever
but 4chanately, someone posted a report about such a case, and it turned out to be a moldgine. so they've got this here Psywave move, right? and they were like "the AI probably should've used psywave here cuz it'd do objectively more damage" and marcello was like nu-uh and the guy was like uh-huh and marcello was like "o shit fam u rite, actually psywave is busted and so is night shade" because that's definitely how he talks
so then along comes this ame-type creature peelin' through the bug reports because it's better than playing card games with her mom's friends, and she's like wats goin on in this thread and sees that psywave is busted
now lemme tell you about psywave
because i dont know shit about psywave,
and if i dont know shit about psywave
probably most people don't know shit about psywave
the people in the thread didnt know shit about psywave until they looked the shit about psywave up
and frankly same
okay so psywave does variable damage and we know that or i knew that but what i didnt know was that the damage was based on level so at first i was like wait why would night shade be bugged but then i was like oh since they both base on level
so i stroll up to the Sizzlin Script and ask the bartender if he's seen either of these moves. he finishes polishing his wineglass, slowly turns around, and takes a look at the picture i'm holding. his brow furrows, and then softens, and he nods toward a door in the back of the building. he gives me a furtive look and then returns back to his work.
cautious of what hooliganry i might find behind the door, i quietly moved through the drunken crowd, toward the back wall. the door clicked and gently swung open with a sullen creak, revealing a dark wooden staircase down into the depths.
i knew what awaited me. i'd been here before, once, when i was investigating a Bullet Seed shoot out. in the basement of the Script, there's a little, shall, soiree, that goes on. happens every time the AI wanna check their moves' documents. it's full of--not the most savory characters. they're moves who can't be measured by society's common standard. moves like wring out, and eruption, who's power changes at the drop of a hat-- or like sonic boom and dragon rage who don't play by the day to day rules of damage calculation. there's multi-hits and magnitude, beat up and spit up, all those folks who can't keep their heads on straight.
this is the BetterBaseDamage Basement.
the method of the basement is the place for the script to put all these folks while they work out their issues. then once they've figured out who they are this week, they report back to the Greater Code Initiative, who then figures out what they need to do. it's almost dystopian-- but it works. usually.
i slip in against the wall. my guy is in a corner near the front, sitting at a table with ten of these other hooligans. i see Night Shade right next to him. but something's wrong. those two aren't talking at all. are they all right?
i pull up a chair next to Psywave and give him a tap on the shoulder. i introduce myself. i ask him how he's been lately, what his damage rolls are like, and if he cares about type effectiveness these days. he seems normal enough as he answers. i even get him to correctly tell me what level the attacker using him is. he seems-- almost normal. but then what gives? why can't the Greater Code Initiative get in touch with him?
i ask his buddy night shade the same questions. same answers-- line for line. it makes sense. psywave is different from night shade in that it does 0.5 - 1.5 times the level's damage, but they're the same in that the way to estimate the base damage for both of them is just by asking for the level itself. Marcello must've come here, talked to them, and realized the same thing. if one is having trouble, they both are. you can tell it from their faces.
they know their own answers, but the Greater Code Initiative doesn't. was it a problem with their reporting method? just to be sure i ran a few tests on the scene of the crime. no matter how correct their answers were, they just didn't make it through. suddenly i heard a crash behind me-- i turned around and what happened next horrified even me: i got bored of trying to make this metaphor story work
okAY so basically what i was trying to see is where the result of how much damage we should actually expect from the move was getting lost between BetterBaseDamage and the debuglog's initial score value (which is supposed to reflect the base damage but super duper was not doing that for these moves)
BetterBaseDamage is used in two places. the first is just before the accuracy check where it's stored in a variable and that variable isn't used at all so why are we still even asking for betterbasedamage there i don't know but i asked marcello and he said it was fine even though i'm p r e t t y sure it's not fine but it's also not hurting anything so i guess it's fine. but really it's doing absolutely nothing. so we can cross that off our list-- it did something in old AI code but we gutted that part so lol
but because of that i was worried that BetterBaseDamage wasn't getting through at all for everything in it-- like maybe the other call to it was conditioned off for moves with static BP or something like that. i went up to check, and there was nothing like that that would prevent the call-- but it certainly acted like it. the weird part is since that was being called properly, it just wasn't parsing through RoughDamage, which by the way is like a million miles long so fml, for these specific moves. well, great, i thought, and resigned to just debuglogging the entire gotdamn thing top to bottom until i found the issue
which i did immediately because it happened to be at the top.
real kind of it that way.
y'see, in that method there's the actual call to get the base damage, and then it gets the attack, and then the defense, and then it slams them all together in damage calculation.
but you know, most of that isn't relevant for moves like psywave and night shade since they do a fixed amount of damage with no regard to defense or offense. there's a lot of moves like that. in fact, there's a list of them right here in the code:
- move.function==0x6A || # SonicBoom
- move.function==0x6B || # Dragon Rage
- move.function==0x6C || # Super Fang
- move.function==0x6D || # Night Shade
- move.function==0x6E || # Endeavor
- move.function==0x6F || # Psywave
- move.function==0x70 || # OHKO
- move.function==0x71 || # Counter
- move.function==0x72 || # Mirror Coat
- move.function==0x73 || # Metal Burst
- move.function==0xE1 # Final Gambit
oh.
in my story these were going to be the other guys at psywave's table, and i'd realize they were also all broken. but zzzz. look, there was foreshadowing guys, i swear
but yes, so the method knows that all of these moves don't use normal damage calculation so all it has to do is get the base damage and send them right on home with it because the base damage is also the final damage
the problem was, it was sending them home before it got the base damage, rather than right after. super simple error to fix. not really sure how it happened in the first place. might've been an oversight on marcello's part since he rewrote the whole RoughDamage method but also could have been some structural shenanigans on essentials' part who cares the point is i found it and reversed the order
and because of one lonely psywave report
fixed eleven moves
thanks dude
defective ame, out.