Jump to content


New Member
  • Content Count

  • Joined

  • Last visited

Posts posted by End45

  1. On 2/11/2020 at 10:58 PM, Reimu_needs_$$$ said:

    So I have been attempting to implement new personal items to the game's database, and thus far I had the following issues:

    • These items, which replace unused, empty slots, do not have any effect. In the .xml corresponding to the items' data, I have managed only to introduce their sprite, descriptions, coin value and type.
    • You cannot even mix them in Croagunk's Swap Shop, game does not recognize them (f. ex. Rowlet Wing and Rowlet Card are the 1 star rarity items, but you cannot get Rowlet Tag, the 2 star rarity one). I managed to get the items, however, by clearing Zero Isle Center.

    After reading this I went ahead and did some research on the effects of exclusive items. I expected them to be hardcoded and basically impossible to edit, but turns out they are not! You can change the effects of exclusve items or add new ones with some hex editing.
    Here's what I found out:

    There is a table inside arm9.bin that goes from 0x98568 to 0x98CD9 which contains one entry for every exclusive item in the game, including the last 48 dummy items at the end of the list. Each entry has 2 bytes:

    •     The first one is the ID of the effect the item has, which ranges from 0 to 0x80 (Both included, 0 means no effect)
    •     The second one is used to address the stat buffs table (see below). 0 means the item does not buff any stats.

    I guess you replaced some of the unused items, so to give them an effect you just need to go to the part of the table corresponding to the unused entries (It starts at 0x98c80, every entry is 00 00 from that point on) and change the values there for each item.
    This is the list of effects: (I have checked only some of the random chances, but it seems that they are always the same for similar effects)


    1: Immunity to paralysis
    2: Immunity to confusion
    3: Immunity to infatuation
    4: Immunity to freeze
    5: Immunity to critical hits
    6: Reduces damage from Selfdestruct and Explosion by 50%
    7: Reduces damage from any explosion by 50%
    8: Immunity to move sealing
    9: Immunity to damage from the weather
    a: Immunity to sleep
    b: Chance to cause poison, paralysis or sleep after being attacked (30%)
    c : Chance to cause poison after being attacked (30%)
    d: Chance to leave foe asleep after being attacked
    e: Chance to cause a nightmare after being attacked (30%)
    f: Chance to cause a burn after being attacked
    10: Chance to cause paralysis after being attacked
    11: Chance to cause confusion after being attacked (30%)
    12: Chance to cause infatuation after being attacked
    13: Chance to cause freeze after being attacked
    14: Chance to cause shadow hold after being attacked
    15: Chance to cause constriction after being attacked
    16: Chance to cause cringe after being attacked
    17: Chance to cause blindness after being attacked (30%)
    18: Chance to seal the move used by foe after being attacked
    19: Chance to obtain invisibility after being attacked (30%)
    1a: Chance to increase movement speed after being attacked
    1b: Chance of being teleported after being attacked if the attack left the pokemon on low HP (50%)
    1c: Chance to cause perish song after being attacked (30%)
    1d: Chance of reducing foe's speed after being attacked
    1e: Reduces damage taken from physical attacks by 50%. Doesn't stack with reflect.
    1f: Reduces damage taken from special attacks by 50%. Doesn't stack with light screen.
    20: Allows countering physical and regular attacks (Full damage, always happens)
    21: Chance to return moves that cause status conditions to foe (60%)
    22: Chance to prevent fainting, leaving the pokemon with 1HP instead (50%)
    23: Allows countering physical and regular attacks (25% of the damage, always happens)
    24: Increases the range of thrown items (Thorns and similar won't stop until they hit something)
    25: Chance to return a move to the attacker (20%)
    26: Immunity to stat reductions
    27: Changes the pokemon's type to one that is resistant to the type of the last move that hit it
    28: Protects against status problems under clear weather
    29: Protects against status problems under sunny weather
    2a: Protects against status problems under sandstorm weather
    2b: Protects against status problems under cloudy weather
    2c: Protects against status problems under rainy weather
    2d: Protects against status problems under hail weather
    2e: Protects against status problems under foggy weather
    2f: Increases movement speed under clear weather
    30: Increases movement speed under sunny weather
    31: Increases movement speed under sandstorm weather
    32: Increases movement speed under cloudy weather
    33: Increases movement speed under rainy weather
    34: Increases movement speed under hail weather
    35: Increases movement speed under foggy weather
    36: Increases attack speed under clear weather
    37: Increases attack speed under sunny weather
    38: (Most likely increases attack speed under sandstorm weather, untested)
    39: (Most likely increases attack speed under cloudy weather, untested)
    3a: Increases attack speed under rainy weather
    3b: Increases attack speed under hail weather
    3c: (Most likely increases attack speed under foggy weather, untested)
    3d: Increases evasiveness by 2 levels under clear weather
    3e: Increases evasiveness by 2 levels under sunny weather
    3f: (Most likely increases evasiveness by 2 levels under sandstorm weather, untested)
    40: Increases evasiveness by 2 levels under cloudy weather
    41: Increases evasiveness by 2 levels under rainy weather
    42: (Most likely increases evasiveness by 2 levels under hail weather, untested)
    43: Increases evasiveness by 2 levels under foggy weather
    44: The pokemon's attacks ignore reflect and lightscreen
    45: Increases damage dealt against ghost type pokemon with normal and fighting type moves
    46: Increases damage dealt against dark type pokemon with normal and psychic type moves
    47: All of the pokemon's moves recover 1 PP when entering a new floor
    48: The pokemon recovers all of its HP when entering a new floor
    49: Increases natural HP regeneration speed
    4a: Max PP + 2
    4b: Max PP + 4
    4c: Max HP + 10
    4d: Max HP + 20
    4e: Max HP + 30
    4f: Increases received EXP
    50: The pokemon receives EXP when taking damage
    51: Chance to recover PP when getting hit by an attack (30%)
    52: Chance of not consuming PP when using an attack (10%)
    53: Prevents thrown items from hitting the pokemon
    54: Returns items thrown against the pokemon
    55: Extends the effects of the Pokémon's moves from itself to the whole team
    56: Increased chest drop chance
    57: Doubles the amount of recovered HP when using HP-draining moves
    58: Boosts the abilty Pressure, causing enemies to consume more PP when attacking
    59: Immunity to status changes
    5a: Reduction of damage taken from moves by 50%
    5b: Increase of damage dealt with moves by 50%
    5c: If an ally is poisoned, the pokemon absorbs the status to heal HP
    5d: Recover HP when eating berries or apples
    5e: Increased chance of a keckleon shop appearing in a dungeon (Base chance increased by 19%)
    5f: Increased chance of hidden stairs appearing in a dungeon (Base chance increased by 19%)
    60: Allows using items and moves without damaging allies
    61: Increased chance of activation of Pickup
    62: Increased chance of defeated foes dropping money
    63: (?)
    64: HP recovers faster while on water
    65: Stepping on water heals status problems
    66: Fire-type moves used against the pokemon will always miss
    67: Water-type moves used against the pokemon will always miss
    68: Grass-type moves used against the pokemon will always miss
    69: Electric-type moves used against the pokemon will always miss
    6a: Fighting-type moves used against the pokemon will always miss
    6b: Ground-type moves used against the pokemon will always miss
    6c: Flying-type moves used against the pokemon will always miss
    6d: Psychic-type moves used against the pokemon will always miss
    6e: Ghost-type moves used against the pokemon will always miss
    6f: Dragon-type moves used against the pokemon will always miss
    70: Dark-type moves used against the pokemon will always miss
    71: Steel-type moves used against the pokemon will always miss
    72: The pokemon absorbs fire-type moves and heals HP
    73: The pokemon absorbs water-type moves and heals HP
    74: The pokemon absorbs grass-type moves and heals HP
    75: The pokemon absorbs electric-type moves and heals HP
    76: The pokemon absorbs ice-type moves and heals HP
    77: The pokemon absorbs fighting-type moves and heals HP
    78: The pokemon absorbs ground-type moves and heals HP
    79: The pokemon absorbs flying-type moves and heals HP
    7a: The pokemon absorbs psychic-type moves and heals HP
    7b: The pokemon absorbs bug-type moves and heals HP
    7c: The pokemon absorbs rock-type moves and heals HP
    7d: The pokemon absorbs ghost-type moves and heals HP
    7e: The pokemon absorbs dragon-type moves and heals HP
    7f: The pokemon absorbs dark-type moves and heals HP
    80: The pokemon absorbs steel-type moves and heals HP

    The stat buffs table starts at 0x9852C and ends at 0x98567, right before the effect table. It has 15 entries, each one is 4 bytes long.
    Each of the 4 bytes indicates how much each stat is buffed by the item (Order: Atk, Def, SpAtk, SpDef)
    For example, if an exclusive item has its second byte on the effect table set to 3, the buffs granted by it can be found at 0x9852C+4*3 = 0x98538 = [10, 0, 10, 0]. An item with this value would increase attack and special attack by 10.

    So if you want an item to just give a stat boost you would need to set its first byte on the effect table to 0 and the second one to 1-14, depending on the stats you want to increase. Keep in mind that you can't change the values on the stat buffs table without affecting every other item which uses the same entry there.

    Getting the items to show up in Croagunk's swap is going to be trickier though. If you look at the list you will see that all the items that follow the *, *, **, *** pattern are together between position 506 and 1013. The game only checks if you have the required items to create higher rarity ones within that range, that's why yours don't appear on the list.
    Fixing that would require to write a rom hack that changed the behaviour of the code that does those checks and then create a patch to apply the changes on the rom.

    • Like 1
    • Speechless 1

  2. How odd. If you remove every single ??? in the strings the game should not be able to get that value from anywhere. That must mean that your changes are not being applied (So I guess that if you change any other string unrelated to Rowlet it won't update ingame either, right?)

    I don't use sky editor myself, I use ndstool and statsutil with some .bat files and do the process manually. Also I have an european rom, but I doubt any of that will make a difference, the process is basically the same (Extract rom, run statsutil to export, open "romstats/game_strings/English.txt", change some lines, save, run statsutil again to import and rebuild the rom)

    If you want to try the manual way yourself, psy_commando wrote a post some time ago with a tutorial in images and a download to the tools:


  3. Does that appear inside dungeons too? I have changed the name of a pokemon before without any problems (I haven't tried the personality test, but the species name is updated inside dungeons and in Chimeco's assembly).

    I have checked and I changed the name both in the strings file and inside the pokemon entry.

    And if that still doesn't work you could try to replace more of the ???? in the strings file with Rowlet until you find the one that is being used for the quiz.

  4. 14 hours ago, Reimu_needs_$$$ said:

    While StatsUtil does save almost all edits (typing, moves learnt per level, size, weight, base stats, etc), it is not the case for the species name, category, and most important of all, stat growths, a problem already reported by two other users:

    iirc if you want to change anything related with names you have to edit the the strings file, not the pokemon data.

    As for the stat growths problem, looks like StatsUtil shifts them up one pokemon entry. I changed Bulbasaur's attack to +100 at level 2 and it was Ivysaur who had over 100 Atk at level 30. So you should try changing the growths of the previous pokemon on the list and see if it works that way.

  5. Hello!
    So I have been messing around with the assembly code in explorers of sky for a while now. I saw this and thought it would be interesting to try to find the code that prevents partners of the same type as you from appearing in the list.
    And I managed to find the exact instruction that has to be removed (turned into a NOP instruction) to make it happen.

    I tested it with an european rom of EoS, but it should work for any other version since the code is probably the same.

    To change it yourself, open the rom in a hex editor and search for this sequence: 000195e7 000088e1 000019e1 0700001a 002094e5 701392e5
    There should be only one match in the whole rom (0x001e0000 in my european version). Now you just need to replace 0700001a with 0000a0e1, save and try it out.
    Tell me if it works for you!

    Fun fact: You can even pick the same pokemon as player and partner


    • Like 1
    • Thanks 1

  6. The one that controls taunted status is Unk17, I've tested it.

    And i'm not sure about Unk16, it totally looks like it determines if a move can be used on a frozen target but I have also tested it and it's not that, you can't use tri attack on a frozen pokemon. Also Sacred fire is the only damage-dealing fire type move that has Unk16 = 1, and it affects frozen targets anyway.

    Edit: Unk11 is the max amount of times you can power up a move using Ginseng

  7. So I have been following this thread for a while and I have finally decided to register here and post something.
    First of all, thanks to Zerea for the move data spreadsheet, I've been trying to figure out the meaning of the unknown values for some time, and the data has been really useful to me.
    Now I will share my findings:

    Bitfield 2 Controls the way enemies use moves. It works the same way as bitfield 1: If a move has a value of 48, enemies will use it if there's a party member in the same room.
    You can try and give a value of 48 to some move like Tackle, enemies will try to hit you from far away (and obviously fail)
    For some reason certain moves have different values for bitfield 1 and 2 when they should be the same, for example Discharge has Bitfield 1 = 48 and Bitfield 2 = 64. Although it is a move which hits all enemies in the room, other pokemon will only try to attack you with it if you are up to 2 tiles away from them.

    Enemies (and I guess allies too) use the Unk6 value of a move as some sort of "weight". The larger this number is, the greater is the chance of a pokemon using it. A large value here means enemies will use the move constantly, and setting this to 0 causes pokemon not to use that specific move at all.

    Unk7 is that other accuracy value you were talking about. If the move misses due to this second accuracy, a different message appears (I think it's 'the move missed X' instead of 'the move failed to impact X')

    Unk10 is the number of times a move hits. 0 means it hits a random amount of times.

    Unk13 = 1 means the move is affected by Magic Coat

    Unk14 = 1 means the move is affected by Snatch

    If a move has an Unk15 value of 1, it can't be used under the muzzled status (caused by a silence orb). That's why biting moves all have Unk15 = 1

    Unk17 = 1 means the move can be used while taunted

    Unk19 controls the message that comes up when the move is used. A value of 0 means default message, 1 would be the next string in the game ('Oh no! (Pokemon) chose (move)!') 2 = Regular attack message, and so on

    Orb-effect moves are easy to test, I just make a quicksave in a dungeon, edit the save file and add those moves to the team leader or the enemies:

    Famish: Decerases by 10 points the belly of all enemies in the room. Enemies/party members will act the same way as if they had eaten a hunger seed once they get affected 10 times by this move.
    Observer: Foe-Seal orb.
    Possess: Probably has something to do with the 'Possess Orb' from Mystery Dungeon 1. Using the move does nothing.
    Searchlight: Has the same effect as the luminous orb.
    Siesta: Same effect as the slumber orb.


    I hope that helped. Sorry if I made any grammar mistakes, English is not my first language.


    PS: @psy_commando, the sprite editor crashes for me every time I try to import/export sprite palletes (no matter if I save/load it as .txt or .pal). I don't have a github account to open an issue so I post it here.

    • Like 2
  • Create New...