-
Posts
8072 -
Joined
-
Last visited
-
Days Won
493
Content Type
Profiles
Pokédex
Portal
Technical Documentation
Pages
Tutorials
Forums
Events
Downloads
Gallery
Blogs
Everything posted by Kaphotics
-
Refer to our event database, which lists that event as having its hidden ability. Pretty sure Serebii's site is wrong as bulbapedia also lists it as having its hidden ability.
-
And then when you trade it back to Colo/XD, it will show "MONTE L". I don't think it's absolutely necessary to add edge case handling for this. Colo did not have a legality check of this caliber. Maybe I can do something about it... edit: done, should be Legal now https://github.com/kwsch/PKHeX/commit/93af3e61b7fc12f9d010c7071279107841505359
-
Gen 3 (pk3) through Gen5 have a max OT Name length of 7
-
PKHeX's frame detection isn't perfect yet, hence the flagging as fishy if it can't positively verify it. haven't touched it for 10 months: https://github.com/kwsch/PKHeX/commit/3d7b2a2b29664428d53d8ef4e337f35e172a1eae#diff-0b0337837f9d5dc29e00fdcd5c73d009R50 probably not going to take another look at it for a while
-
Neat fact I'll see what I can add rule-wise; I assume this also applies to the fullwidth numbers on the non-latin keyboards. edit: added! thanks for bringing this up
- 1 reply
-
- 2
-
-
I'm not going to spend my time curating the list of possible characters. It doesn't require knowledge of PKHeX or the language it's programmed in. Software programs cannot be fed an image or guidelines; things have to be explicit. The program does not have futuristic artificial intelligence to comprehend a nonspecific input, thus requires a human to manually give it the precise list of available characters.
-
Likely working as intended; you probably don't have any relearn moves set, which doesn't match a bred pkm but instead the gift eevee egg which doesn't have the hidden ability.
-
Needs to be more explicit than "x language allows for latin characters"; instead needs to be literally a list of every single character (abcdefghijklmnopqrstuvwxyzetc) list for every single language/generation
-
Sure I'll add something. But you'll have to give me the precise list of allowed characters for every single language, with separate tables for each generation.
-
If the box storage wasn't already enabled, PKHeX won't enable it automatically. Nobody has figured out how to turn it on.
-
Was originally added as met location 104 https://github.com/kwsch/PKHeX/commit/afde4514e283acb88c89b9f9c19c7d5138d7ce6e#diff-83a32d69355a64376bc77bd07e338a33R446 I have another save file that uses met location 110 (like this one) so I assume it was originally a copypaste assumption from Sudowoodo. Done, changed by: https://github.com/kwsch/PKHeX/commit/03a05364abeb000ca4cea345631a8fa6396ad7ea
-
-
Party stats are not saved when stored in the box; the game tries to save as much space as possible. IVs are 5 bits each (2^5, 0-31). Can't go any higher. EVs are 8 bits each (2^8, 0-255). Recent games prevent them from increasing past 252. Typing is determined by the ROM's Personal data. You'd have to edit the ROM instead of the save file.
-
Offset for FRLG should be Block1+0xEE0, not Block2+0x000 PKHeX's current setup for gen3 saves doesn't work for split-chunk operations, so don't expect it to work for flags >1280 (read the recent commit message). I need to figure out how to rework some logic... Edit: fixed with some workaround, should be all good now
-
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
-
@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).
-
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.
-
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.
-
"Complete" needs to be checked, since you've completed training. It's what the legality message is hinting at.
-
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)
-
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.
-
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.
-
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); } }