Commit graph

836 commits

Author SHA1 Message Date
Kurt
2c8e0bc8f7 Add automatic byteswap 2020-09-30 22:46:07 -07:00
Kurt
ee207a3fda Revise Stadium savefile logic to read from boxes
Add a helper to spit out teams
Alias hard-coded numbers to something to easy names.
Make them exportable, update checksums for box data
2020-09-30 18:00:25 -07:00
Kurt
af357587f9 Add Pocket Monsters Stadium support
https://projectpokemon.org/home/forums/topic/38108-gen-1-pokemon-stadium-save-file-structure/

untested, need to find a save file somewhere??
2020-09-30 12:45:41 -07:00
Kurt
769d5d8689 Allow SaveFile constructor to specify exportable state
Useful for partially-supported savefiles that can't be exported yet (Stadium)
2020-09-30 12:44:50 -07:00
Kurt
22f37910f0 Remove unnecessary single-member interfaces 2020-09-27 18:19:28 -07:00
Kurt
fb4734472b Add notation for language-specific save types 2020-09-26 13:30:17 -07:00
Kurt
a34434f7cb Make pkm.Data a readonly field rather than property 2020-09-26 12:09:02 -07:00
Kurt
82afefa335 Make GP1 expose IEncounterable for metadata
Make the main loader handle IEncounterable objects
2020-09-26 11:33:21 -07:00
Kurt
6243135f28 Minor clean
Move Home8 location to Locations.cs for documentation
Move FestaFacility to correct folder
Remove unnecessary public modifier on interface method
Pass the program's Version to any loaded plugins, if they wanted to check compatibility...?
2020-09-25 23:55:31 -07:00
Kurt
efc17a1271 Add interface for revised savefile types (patches)
SWSH is the first common savefile type that has different revisions after official patches. We want to indicate in the Program Title which revision we're currently editing, because people still are not editing latest-format saves and complaining y no urshifu.

Use short descriptions to indicate revision (Base, IoA, CT), rather than magic numbers (v0/v1) or 1.X or 1.X.Y+, because GameFreak can't follow semver rules.

go away ranch platinum update, i might handle you another time
2020-09-25 23:41:20 -07:00
Kurt
2b7e06e217 Refactoring
Extract some logic, suppress some compiler messages
2020-09-18 22:11:13 -07:00
Egzon
4b1a9a89da
Add support for reading and editing Underground Items (#2987)
Adds a sub-editor with localized support for editing Underground Items.
2020-09-13 14:55:50 -07:00
Kurt
507c913451
Invert early return bool for sav1stadium recognition
oops
2020-09-10 11:24:16 -07:00
Kurt
741fbd5296 Add stadium sav readonly support of registered teams
no checksum logic performed, just a WIP preview
2020-09-09 22:44:46 -07:00
Kurt
01fb233e48 Minor tweaks
Extract some interfaces
Suppress some warning messages with commented reasons if appropriate
2020-09-09 12:47:24 -07:00
Kurt
5d3bc289b6 seal hunting
Mark things as sealed as they shouldn't be inherited from or overriden in a derived class.
2020-09-07 13:51:13 -07:00
Kurt
9191f023a3 Minor clean
Nullability annotations and some logic simplification
2020-09-06 11:24:54 -07:00
Kurt
1114b97c4b Fix bool value naming for gen8 block editor
Was previously showing RaidArmor for pre-Armor saves, as the reference of a zero-length array was the same as the bools. Just sanity check since all block chunks have length.
2020-09-06 11:21:23 -07:00
Kurt
cf9e5ec37f Minor refactoring
Change Ability array to IReadOnlyList, add method to check ability index in personal data
Suppress some message warnings
Change EvolutionChain short-circuit for VC to jump from gen6 directly down to gen2. There aren't any notradeback 1 situations, so a notradeback1 will always start with g=1, so no need for the other if-continue.

Simplify pk5 conversion
2020-09-06 10:53:13 -07:00
Kurt
c2ec4d55e4 Minor clean
Add some xmldoc, remove some empty lines, move some small logic pieces to a better spot
2020-09-03 14:28:51 -07:00
Kurt
b03a5f2818 Fix pika beach score reading
fix reads as little endian instead of big endian
fix truncation if editor value from byte => ushort
Closes #2976
2020-09-01 16:05:52 -07:00
Kurt
b5677758be Change default TID/SID for gen7+ 2020-08-30 17:54:58 -07:00
Kurt
6e409f288e Use version on clone so that we don't have to detect again
Matches gen1/gen3 clone
2020-08-29 23:39:14 -07:00
Kurt
890f3375c9 Misc clean 2020-08-18 15:39:45 -07:00
Kurt
f35d8b2d4b Remove unnecessary logic
return/frustration not present in these games; no need to check this
2020-08-18 14:45:36 -07:00
Kurt
e012b42c9c Update SAV7b.cs 2020-08-18 10:35:59 -07:00
Kurt
c7eda4f901 Update SAV7b.cs 2020-08-18 09:15:29 -07:00
CanoeHope
1e6858c349
Add misc Restricted Sparring related Block Data (#2971)
The game also stores the Gender ID, Form ID, Encryption Constant, and Alcremie Sweet ID per block for each PKM's slot.

As for Sweet ID it is stored for all Types. However, since you obviously can't use Alcremie in non-Fairy Sparring they go unused. (They are the Int32 blocks you'll notice with a -1 value.)
2020-08-15 12:10:52 -07:00
Kurt
541c9761df Minor clean
Make flag indexes immutable
Rename some properties for clarity
2020-08-14 20:23:54 -07:00
Kurt
1df2bd444a Remove unused using 2020-08-09 20:02:06 -07:00
Kurt
32f2703339 Fix entire-box swaps by using correct lengths
Add SIZE_BOXSLOT and update usages
Make SIZE_STORED protected like SIZE_PARTY

probably need to redesign how slot metadata is presented within the savefile...
Closes #2961 ty @Kermalis !
2020-08-07 16:16:10 -07:00
Kurt
ad6728fb5c Minor tweaks
Check egg encounter for state rather than re-deriving some properties on the fly
Only check memories if memories are exposed
Remove debug assert (not always true?)
2020-08-04 22:56:55 -07:00
Kurt
02b4343827 Update SAV3XD.cs 2020-08-02 08:25:04 -07:00
Kurt
ff95c734a2 Don't set strategymemo back
Closes #2956
if someone wants to tidy up XD support later, feel free to uncomment and get it working reliably :P
2020-08-01 09:28:35 -07:00
Regnum
9e40fa132f
Improved Pokewalker Editing (#2958)
* Added PokeWalker Courses, Watts, and Steps editing

* Use util method for getting bitflags

* Keep old cheat method

Change signature so that the default value passed is to unlock all; can pass 0 instead to lock all

* Pass reference to derived sav4-type object

Wev'e already type-tested once, capture the reference and pass it into the appropriate load/save methods.

* Add control anchoring for window resizing

Also widen the labels for localization (longer strings possibly)
2020-08-01 09:20:13 -07:00
Kurt
b7211000b0 Split Country/Region/ConsoleRegion from ITrainerInfo
Only present in mainline gen6/7 game pairs, so it's not wise to have it for all games
2020-07-31 13:53:42 -07:00
Kurt
8a51bd7f28 Don't modify strategy memo
Can't correlate the structure to the data it's reading, so don't modify the values until someone figures out how the data is stored & how it should be manipulated.
Closes #2941
2020-07-29 13:37:17 -07:00
Kurt
4909256414 Split shadow info entry to separate files
#2941
add IV fields
2020-07-29 13:36:33 -07:00
Kurt
15996f2a52 Fix indexof call when short
int within short[] = no
short within short[] = yes
Closes #2955
2020-07-28 19:47:11 -07:00
Kurt
a6a3c6eaaa Refactoring
change some expressions for better perf/readability
2020-07-19 17:48:45 -05:00
Kurt
e4092e64df Relocate gen3 ereader berry logic 2020-07-18 22:51:55 -05:00
Kurt
a21bb09c37 Perserve & Display Favorite flag for items
Also clamp give all for TMs to 1 instead of whatever the giveall value is, like for prior games' HMs

reuse the "free space" bool; no real benefit in increasing the amount of abstraction (even though that's my current urge for legality)
2020-07-18 20:15:41 -05:00
CanoeHope
455a787ee4
Add MomSkin to League Card (#2936) 2020-07-11 09:22:19 -05:00
CanoeHope
8027fe30b9
Add ArmorDex complete League Card marker (#2935)
Should work even if you don't have the Expansion Pass. Of course you need the latest update.
2020-07-10 07:42:44 -05:00
CanoeHope
0dc4166e67
Add new SWSH blocks (#2918)
For anybody interested in this League Card block structure: https://pastebin.com/1gkyHe9Q

Also correct the game version record block location.
2020-07-02 21:28:04 -05:00
Kurt
afdd40bcee Check counter rollover the opposite way
FFFF and 0000 -> prefer 0000
FFFF and 0001 -> prefer 0001
...
FFFF and FFFE -> prefer FFFF

they shouldn't be desync'd (incremental); only the uninitialized case is important to handle.
2020-07-02 17:44:03 -05:00
Kurt
9da5263a52 Handle DLC1 records
Accessible in block editor, not as the usual trainer records.

Closes #2913 , ty @CanoeHope!

Co-Authored-By: canoehope <canoehope@users.noreply.github.com>
2020-06-30 23:00:48 -05:00
Kurt
0198179133 Add fixed raid news content
no change in species/form from the crownite ore one afaik; common for both games???

fix type of rigel encount so it shows up in block editor, with correct name (ty matt)
2020-06-29 21:10:12 -05:00
Kurt
fec91e4878 Revert "Show new trainer records"
This reverts commit 19ff1f584a.
2020-06-28 13:44:26 -05:00
Kurt
993673f0de Minor clean
no functional change
2020-06-27 23:36:53 -05:00
Kurt
a7ba178005 Remove unreachable/const logic
Earlier compares result in some logic being unnecessary

The Gen7 level up move compare was actually an oversight, so it's a worthwhile fix :)
2020-06-27 22:44:14 -05:00
Kurt
19ff1f584a Show new trainer records
#2913
2020-06-27 13:48:45 -05:00
Kurt
105d8f415d Remove unnecessary abstraction/leftovers
SCBlock doesn't have an absolute index; it was only used for tagging in dumps. Offset and Length weren't used.

Removing these 2 ints from the SCBlock object reduces alloc req by 8 bytes each; if we have 2,500 blocks in a save file, this reduces the memory footprint of a sav by 20KB. Nice side effect :D

Remove block dump comment from accessor; new logic in Meta8 for dumping DLC sizes does the same logic with less hassle.
2020-06-27 13:38:21 -05:00
Kurt
93f4bf1977 Add normal_encount_rigel block label
Closes #2899
2020-06-27 13:27:35 -05:00
CanoeHope
5b8d1cb681
Added IoA Restricted Sparring Blocks (#2900)
If you edit in a number of 5 or greater as one of your streaks you'll get a crown mark next to that type in-game, and doing it for all should allow for you to get Mustard's uniform when you talk to the receptionist.
2020-06-23 12:02:33 -05:00
Kurt
a2d9f06350 Differentiate AbilityType from AbilityNumber
invert ability index favoring so that the first ability index is most favored

ability num:
-1=>0/1/2
0=>0/1,
1=>0
2 =>1
4=>2

Ability Type:
0,1,2=>0,1,2
3=>0/1
4=>0/1/2

Should probably get rid of AbilityNumber definition usage but it's so entwined in the trade/static definitions...
2020-06-22 22:01:42 -05:00
Kurt
4a5abab51f Fix raid dump syntax
Closes #2896
2020-06-22 21:28:02 -05:00
Matt
ed7d32f9bb
Fix Gigantamax1 get/set in Zukan8 (#2897)
Bit 0, not bit 1.
2020-06-22 13:06:25 -05:00
CanoeHope
3dcf24dade
New SWSH Block Data (#2890)
* New SWSH Block Data

Found these pretty useful blocks for IoA. I'll maybe look into Restricted Sparring data in the next week or so if no one else does by then.
2020-06-20 21:50:50 -05:00
Kurt
b53a29a0af Add flag for urshifu-1 gmax pokedex
ty @sora10pls
2020-06-20 20:00:35 -05:00
Kurt
1ab7c916ce Clear mega slowbro seen 2020-06-20 14:31:47 -05:00
Kurt
3e21924adc Document some save sizes 2020-06-20 12:08:51 -05:00
NPC-C83H
64be77f46c
Update legal raid counts (#2878) 2020-06-20 08:16:36 -05:00
Kurt
808ca8f307 Add a temp size that isn't 100% dlc sized
dunno what RoC did but it exists?
2020-06-19 19:58:56 -05:00
Kurt
36dd5ece21 Initial Isle of Armor support
Co-Authored-By: sciresm <sciresm@users.noreply.github.com>
Co-Authored-By: Matt <sora10pls@users.noreply.github.com>
Co-Authored-By: Archit Date <architdate@gmail.com>
2020-06-19 18:51:15 -05:00
Kurt
2cdb5d26db Clean up some method signatures
rename things to be a little more consistent in naming conventions
2020-06-16 21:46:22 -05:00
Kurt
97d8bcebfe Only check Korean if game isn't recognized as Crystal
https://projectpokemon.org/home/forums/topic/57203-pkhex-error-crystal-save-dont-load/
2020-05-31 09:18:45 -07:00
Kurt
51a4001ce6
Update RaidSpawnList8.cs 2020-05-29 11:20:28 -07:00
Kurt
7f1039d155
Update RaidSpawnList8.cs 2020-05-29 11:19:49 -07:00
Matt
4d47e4ab83
Pretty up GP1 summary/filename (#2846) 2020-05-29 11:13:49 -07:00
Kurt
afa368823e Minor clean
handle some compiler messages
2020-05-26 16:59:47 -07:00
Kurt
043ba3b6f0 Add ability to sideload key names 2020-05-26 15:58:48 -07:00
Kurt
46b443903d Fix SM dex form fetch for spewpa
Closes #2826

It doesn't find it in the SM table, but didn't return -1
rework logic flow to return when found, rather than after loop finishes.

Also fix display off-by-1 since we're not using zero indexing for our entry numbers.

Thanks @Ammako !
2020-05-24 20:42:45 -07:00
Kurt
9619306a8f Update BattleTree7.cs 2020-05-24 18:42:08 -07:00
Kurt
09cbe47240 Add battle tree scout edits
Closes #2833
2020-05-24 18:31:52 -07:00
Kurt
053eef2767 Add encount block
Closes #2840 -- access via Block Editor "Encount"
Tons of undecipherable junk in the roamer struct; looks like a mishmash of past gen code repurposed for their pseudo-stationary|roamer encounter.

ORAS has the same structure (same size/block), but the roamer portion isn't used
2020-05-24 17:31:10 -07:00
Kurt
8ce4f64239 Move files to their correct location 2020-05-24 17:11:39 -07:00
Kurt
bbe1cf3ee1 Fix gen6 gamesync ID read 2020-05-24 17:10:55 -07:00
Kurt
64428539bd Fix sav4 active block detect
Closes #2697 ty @Ammako !

lazy slice check has flaws; just compare the major/minor counters in the save footer and check the uninitialized cases

nobody is gonna save the game 2^32 times, but check for the overflow case too!
first ff'd is preferred when the second is ff'd-1!
2020-05-23 22:17:03 -07:00
Kurt
460062a07c add generic sav block editor 2020-04-26 16:23:06 -07:00
Kurt
6cce57d505 Add configsave to accessor
xy battle background makes up the other 5 bits; good to know!

reorder enum to match comments in properties (switch=0)
2020-04-26 15:17:58 -07:00
Kurt
ca48b4e617 Fix nick set
Closes #2817
2020-04-25 17:18:04 -07:00
Kurt
cc3681c41d Update SAV6AO.cs 2020-04-16 16:38:01 -07:00
Kurt
d6171669e4 Add swsh box wallpapers
Co-Authored-By: Matt <sora10pls@users.noreply.github.com>
2020-04-16 14:50:41 -07:00
Kurt
47819a87c4 Update SaveBlockAccessor8SWSH.cs 2020-04-16 14:21:11 -07:00
Kurt
70e7c01896 Add more block-key settings
Co-Authored-By: Matt <sora10pls@users.noreply.github.com>
2020-04-16 13:37:48 -07:00
Kurt
3100471299 Strip out some unnecessary logic
notnull => no need to check for null manually
2020-04-16 12:58:48 -07:00
Kurt
66dddc9101 Clean up some method parameters 2020-04-14 10:59:36 -07:00
Kurt
546412e410 Rename class/method name 2020-04-14 10:59:16 -07:00
Kurt
ee1cfa8912 Hanle some compiler messages 2020-04-14 10:52:19 -07:00
Kurt
8936c58417 Skip setdex/modify on box sort 2020-04-14 10:46:21 -07:00
Kurt
33bdacebe8 Minor tweaks
Handle some compiler/extension suggestions
2020-04-12 16:07:59 -07:00
Kurt
0ada4cbd77 Remove some unnecessary null checks 2020-04-12 13:20:40 -07:00
Kurt
270d984130 Minor clean
Remove unnecessary null checks
Mark some methods with nullable type
2020-04-04 19:30:50 -07:00
Kurt
d65338557e Add hp stat 2020-03-24 11:44:54 -07:00
CanoeHope
df09868470
Add another SWSH block (#2793)
Nothing special. Just found it and figured why not add it.
2020-03-19 11:38:17 -07:00
Kurt
287a2ac5c5 Rework handling of bk4 constructor
Can't really detect if it's shuffled or not; just assume it's always unshuffled unless it originates from a save file read. Probably not a perfect solution, but achieves better results.

https://projectpokemon.org/home/forums/topic/56217-error-in-archive-bk4/
2020-03-18 23:34:53 -07:00
Kermalis
face69d469
Fix Emerald decorations (#2788) 2020-03-18 00:25:02 -07:00
Kurt
429a3b1a08 Expose decoration list for editing
Closes #2785 , not making a GUI for this (someone else can do it)

Moves RTC3 to the appropriate folder
2020-03-17 12:14:01 -07:00
Kurt
1c6b99185d Ignore bits above the first 3
Some save files use bits 3-7?
2020-03-15 11:11:55 -07:00