• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[Battle] Any way to remove critical hits

79
Posts
9
Years
    • Seen Apr 1, 2023
    I'm trying to remove critical hits, specifically from emerald, is there any way to do it? I haven't been able to find any info on this. Any help is appreciated!
     
    31
    Posts
    6
    Years
  • Well, there's the CH table on this post: https://www.pokecommunity.com/showthread.php?p=8495151#post8495151

    It looks like the divider for Critical Hit chance (ex: 0x10 = 16, which means 1/16 for no CH modifiers). Maybe if you put 0xFF, you can make it 1/256, but I'm not sure. That's not 0, but 0,4% is nice.

    __________

    There's also this routine that changes CH to 1.5x. Maybe you can use it to change it to 1, but probably it won't remove other effects from a Critical Hits (such as ignoring defensive status changes).

    https://www.pokecommunity.com/showthread.php?p=8497631#post8497631
     
    79
    Posts
    9
    Years
    • Seen Apr 1, 2023
    Well, there's the CH table on this post: https://www.pokecommunity.com/showthread.php?p=8495151#post8495151

    It looks like the divider for Critical Hit chance (ex: 0x10 = 16, which means 1/16 for no CH modifiers). Maybe if you put 0xFF, you can make it 1/256, but I'm not sure. That's not 0, but 0,4% is nice.

    So I tried changing just 10 to FF and nothing seemed to change so I changed {10 00 08 00 02 00 01 00 01 00} to {FF 00 FF 00 FF 00 FF 00 01 00} and it seemed to do the trick. I was testing by spamming slash, didnt try focus energy but I might if I start playing and I see crits too often.

    I no absolutely know nothing about editing so I have no idea how to do any of the routine stuff, I dont even know what I changed and why it works lol but it does lol. Thanks for the help!
     
    31
    Posts
    6
    Years
  • You're welcome! Actually, changing only the first value was expected to not work on your tests, because you were using Slash, which has a +1 CH modifier ^^

    I recommend you to change that last 01 to FF as well, otherwise things like Farfetch'd + Stick + Dire Hit + Slash will always crit (100% to +4). Take a look at the table on Bulbapedia: https://bulbapedia.bulbagarden.net/wiki/Critical_hit

    ___

    Btw, I'm not great with routines as well xD
     

    Manekimoney

    Banned
    169
    Posts
    6
    Years
    • Seen Jan 18, 2024
    While 1/256 fix is neat, it makes the same meme as "Gen 1 miss". It is rare, but since it's so unanticipated, it's a bummer when it happens from your opponent's side.

    I wish there was a way to completely remove crits, at least for the first stage of the table.
     
    1,403
    Posts
    10
    Years
    • Seen Apr 29, 2024
    Just patch the function to increment the instruction pointer and set the multiplier to 1 instead of doing what it currently does. i.e.:
    Code:
    static void Cmd_critcalc(void)
    {
      gCritMultiplier = 1;
      gBattlescriptCurrInstr++;
    }
    I know you're probably asking about binary, but fortunately you could just compile this and inject it into your ROM and repoint the command in the battle script table. Or even just work out where the original code is (the pokeemerald.map file will tell you the offset if you make the function non-static) and replace the first non-push instruction with a branch directly to the gCritMultiplier = 1; line.

    EDIT: Also, instead of 1/256, looks like the table contains u16s so you could have a 1/65536 chance. But obviously that's not removing them.
     

    Manekimoney

    Banned
    169
    Posts
    6
    Years
    • Seen Jan 18, 2024
    Just patch the function to increment the instruction pointer and set the multiplier to 1 instead of doing what it currently does. i.e.:
    Code:
    static void Cmd_critcalc(void)
    {
      gCritMultiplier = 1;
      gBattlescriptCurrInstr++;
    }
    I know you're probably asking about binary, but fortunately you could just compile this and inject it into your ROM and repoint the command in the battle script table. Or even just work out where the original code is (the pokeemerald.map file will tell you the offset if you make the function non-static) and replace the first non-push instruction with a branch directly to the gCritMultiplier = 1; line.

    EDIT: Also, instead of 1/256, looks like the table contains u16s so you could have a 1/65536 chance. But obviously that's not removing them.

    Some of these might be beyond my skill level. I'm pretty shaky when it comes to messing with decomp, but I will try. If nothing else works, I will definitely at least do the 1/65536 change.
     
    Back
    Top