Jump to content

Kaphotics

Helpful Member
  • Posts

    7843
  • Joined

  • Last visited

  • Days Won

    451

Everything posted by Kaphotics

  1. The savefile chunks aren't separate, they're just chopped up when saving to the cartridge, and verified in pieces (checksums). block0 = trainer data block1|block2|block3|block4 = savedata stuff block5+ = storage
  2. @theSLAYER : it could be that PKHeX is reading from the wrong offset. https://github.com/kwsch/PKHeX/commit/ee57bc49f066bb6c477df39f2db7aea5f209198c Was added over a year ago; the real 'offset' isn't Block2+0; it's likely Block1+0xE??. Need to get the alignment right. The disassembly of firered's large block doesn't have nearly as much documentation as RS/E (flags, vars).
  3. Nothing made them 'become' illegal. They were illegal to begin with -- PKHeX adds new checks every so often. The legality check has flagged them as follows: Invalid: Incorrectly transferred from previous generation. If you look at the source code, that message is saved as "LTransferBad", which is referenced in one check.
  4. The error message contains details on what went wrong. System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Nick\AppData\Local\Temp\380 - Latias - 43D47CF38197.pk7'. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) Likely your antivirus is preventing PKHeX from creating temporary files, which are used for facilitating drag/drop.
  5. "Complete" needs to be checked, since you've completed training. It's what the legality message is hinting at.
  6. Manual selection is already implemented; hold control when importing to bring up the selection. Version detection isn't perfect for Gen3; PKHeX uses Bulbapedia's detection method which isn't correct. https://bulbapedia.bulbagarden.net/wiki/Save_data_structure_in_Generation_III#Game_Code https://github.com/kwsch/PKHeX/blob/668b8611d51e0e0b28240508026b4c0ae1f1ce33/PKHeX.Core/Saves/Util/SaveUtil.cs#L230-L249 The ROM disassembly indicates that this offset isn't game code: https://github.com/pret/pokeruby/blob/51ecf10029f84dd5423cd59582d01eaee9140c0e/include/global.h#L822-L844 In the future it'd be nice to have a more foolproof detection, but for now, just override if it's incorrectly detected. (edit: future versions of pkhex will have improved detection logic for RS<->E differentiation)
  7. There's no way to modify the Catch Rate byte unless you trade it to Gen2. If the Catch Rate value does not match any of the possible encounter species, it's not valid (it can't ever be changed). Since the value is different, it was modified, hence flagged.
  8. DebutGeneration only uses species ID and compares it against the maximums for each generation. It doesn't pay attention to the current AltForm value. The current behavior is simple, adding in consideration for forms will greatly increase the complexity required.
  9. Per the source code, the "Lips" value is two bits (0-3), however, if invalid values cause the game to panic and reset, there's nothing the Save Editor can do to avoid that: public class Fashion6Female : TrainerFashion6 { public Fashion6Female(byte[] data, int offset) : base(data, offset) { } public uint Version { get => GetBits(data0, 0, 3); set => data0 = SetBits(data0, 0, 3, value); } public uint Model { get => GetBits(data0, 3, 3); set => data0 = SetBits(data0, 3, 3, value); } public uint Skin { get => GetBits(data0, 6, 2); set => data0 = SetBits(data0, 6, 2, value); } public uint HairColor{ get => GetBits(data0, 8, 3); set => data0 = SetBits(data0, 8, 3, value); } public uint Hat { get => GetBits(data0, 11, 6); set => data0 = SetBits(data0, 11, 6, value); } public uint Front { get => GetBits(data0, 17, 3); set => data0 = SetBits(data0, 17, 3, value); } public uint Hair { get => GetBits(data0, 20, 4); set => data0 = SetBits(data0, 20, 4, value); } public uint Face { get => GetBits(data0, 24, 3); set => data0 = SetBits(data0, 24, 3, value); } public uint Arms { get => GetBits(data0, 27, 2); set => data0 = SetBits(data0, 27, 2, value); } public uint _0 { get => GetBits(data0, 29, 2); set => data0 = SetBits(data0, 29, 2, value); } public uint Unused0 { get => GetBits(data0, 31, 1); set => data0 = SetBits(data0, 31, 1, value); } public uint Top { get => GetBits(data1, 0, 6); set => data1 = SetBits(data1, 0, 6, value); } public uint Legs { get => GetBits(data1, 6, 7); set => data1 = SetBits(data1, 6, 7, value); } public uint OnePiece { get => GetBits(data1, 13, 4); set => data1 = SetBits(data1, 13, 4, value); } public uint Socks { get => GetBits(data1, 17, 5); set => data1 = SetBits(data1, 17, 5, value); } public uint Shoes { get => GetBits(data1, 22, 6); set => data1 = SetBits(data1, 22, 6, value); } public uint _1 { get => GetBits(data1, 28, 2); set => data1 = SetBits(data1, 28, 2, value); } public uint Unused1 { get => GetBits(data1, 30, 2); set => data1 = SetBits(data1, 30, 2, value); } public uint Bag { get => GetBits(data2, 0, 5); set => data2 = SetBits(data2, 0, 5, value); } public uint AHat { get => GetBits(data2, 5, 5); set => data2 = SetBits(data2, 5, 5, value); } public bool Contacts { get => GetBits(data2, 10, 1) == 1; set => data2 = SetBits(data2, 10, 1, value ? 1u : 0); } public uint Mascara { get => GetBits(data2, 11, 2); set => data2 = SetBits(data2, 11, 2, value); } public uint EyeShadow { get => GetBits(data2, 13, 2); set => data2 = SetBits(data2, 13, 2, value); } public uint Cheek { get => GetBits(data2, 15, 2); set => data2 = SetBits(data2, 15, 2, value); } public uint Lips { get => GetBits(data2, 17, 2); set => data2 = SetBits(data2, 17, 2, value); } public uint ColorContacts { get => GetBits(data2, 19, 3); set => data2 = SetBits(data2, 19, 3, value); } public uint ColorMascara { get => GetBits(data2, 22, 3); set => data2 = SetBits(data2, 22, 3, value); } public uint ColorEyeshadow{ get => GetBits(data2, 25, 3); set => data2 = SetBits(data2, 25, 3, value); } public uint ColorCheek { get => GetBits(data2, 28, 3); set => data2 = SetBits(data2, 28, 3, value); } public uint Unused2 { get => GetBits(data2, 31, 1); set => data2 = SetBits(data2, 31, 1, value); } }
  10. thanks, fixed in latest commit https://github.com/kwsch/PKHeX/commit/0de49c915ac90936928849a479682a937de508a8
  11. Thanks for reporting, fixed in latest commit https://github.com/kwsch/PKHeX/commit/e77247e6526fd9abb1c81160b02d5c40bb7f2fef I've updated the .exe that is posted with the fix.
  12. Ingame trades have a different catch rate than the species' default catch rate. https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/Legality/Encounters/Data/Encounters1.cs#L166-L170 new EncounterTradeCatchRate { Species = 075, Level = 16, Catch_Rate = 45, EvolveOnTrade = true, Version = GameVersion.RBY }, // Graveler - Evolve Kadabra new EncounterTradeCatchRate { Species = 067, Level = 16, Catch_Rate = 180, EvolveOnTrade = true, Version = GameVersion.RBY }, // Machoke - Wild Cubone Program is working as intended.
  13. You likely randomized the starter selection screen and the static gift encounters to have different values.
  14. Shouldn't be an issue on the latest commits, previously fixed: https://github.com/kwsch/PKHeX/commit/1750c69b01508e32281d9ddccd0ed9eda4d8dd66
  15. Pay attention to the program title, it indicates the version of the save file. You've likely used a cheat code which breaks the detection, which results in PKHeX assuming it to be RS (Ruby Sapphire).
  16. Because some are legal, and some are not. Certain encounters have certain PID restrictions (ie a Starter / Stationary encounter must be Method 1) while wild encounters can be Method 1/2/4. The method-1 only encounters are generated fast enough on actual hardware, but the emulator does not generate the pkm fast enough and gets interrupted, resulting in method 2 & 4. Wild encounters need to wait for a valid PID (nature/gender) which can also be interrupted by the screen needing to refresh.
  17. Some emulators do not faithfully emulate the CPU timings present on the console, resulting in different PIDIVs sometimes. The PKM are not legal as they cannot be encountered on legitimate hardware. PKHeX is working correctly.
  18. Re-dump the ROM content and start over, the data the program is trying to read is not valid. You can always copy over individual modified garcs, assuming they are from the same game and aren't corrupt.
  19. Read the comment section. He screwed up the tutorial steps. There are pages and pages of ppl asking the same thing about personal stats / etc not working, when every error message contains "3DS Randomizer Pack"; please read previous pages!
  20. Kaphotics

    bug in last update

    Has to be uppercase; decapitalization on non-nicknamed species didn't come until later generations.
  21. Kaphotics

    bug in last update

    Can't transfer held items via pokebank Old Amber is unobtainable in all Gen7 games, thus you can't ever revive Old Amber into Aerodactyl. Just because the encounter is obtainable doesn't mean the conditions are legal!
  22. Kaphotics

    bug in last update

    You can't revive Old Amber in SM/USUM.
  23. Should now import fine on latest commits
  24. Should be fixed on latest commit https://github.com/kwsch/PKHeX/commit/1fe304e78f6578c32f5b4d782ca3022e6ec23225
  25. Please post examples
×
×
  • Create New...