• 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?".
  • Please note that users with less than 6 posts will have their threads/posts go to the approval queue if it has links or messages. This counts edits made to threads/posts after they were already approved and is intentional anti-spam behavior that is unfortunately necessary. Once you reach 6 posts, this will no longer occur.
  • 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.

Crystal hack: Pokémon Polished Crystal (update 2.2.0)

FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    I was messing with Natures yesterday and I think it wouldn't be too hard to implement. However, I'm not sure if I'm picking the best method to randomize nature. Currently, my implementation uses the Attack+Defense DV byte mod 25. I intend to look into what this results in and potentially swap/xor the byte beforehand to give more sensical values for higher DVs (things like, ensuring that 15 Attack DV is certain to give all possible +Attack natures, and vice versa for Defense), but is there a better way I can do this?

    The way the implementation is done atm also means that 6 natures appear 11 times, the other 19 appear 10, but I think this is a minor issue myself.

    Also, if I did this, and used this method, I think using the other DV byte for Abilities would make the most sense, to avoid them interfering with each other.

    EDIT: https://sprunge.us/FhHQ
    Seems like 15Def gets access to all Defense natures except for Impish, while 15Atk does get all Attack natures. Good enough for me
     
    Last edited:

    Deokishisu

    Mr. Magius
  • 990
    Posts
    18
    Years
    Rangi,

    Awesome work. This is hands down the best hack I've ever played. Incredibly nostalgic, thorough, and most importantly fun.

    Couple more things I noticed playing the game: When trying to catch Mew or Celebi (or any pokemon with the move transform), if that pokemon uses transform in battle, regardless of what pokemon it transforms into, you receive a Ditto in your PC. I noticed this when I was battling Celebi. It transformed into the flying Pikachu from my team, I caught it, and when I went to get Celebi a Ditto had taken its place.

    Are you playing an older version? On my 2.0.something playthrough, I forced my wild Mew to Transform into a Magikarp for an easy catch. It was still a Mew when I took it out of my PC later.
     
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Awesome work. This is hands down the best hack I've ever played. Incredibly nostalgic, thorough, and most importantly fun.

    Good to hear that, thanks!

    When trying to catch Mew or Celebi (or any pokemon with the move transform), if that pokemon uses transform in battle, regardless of what pokemon it transforms into, you receive a Ditto in your PC. I noticed this when I was battling Celebi. It transformed into the flying Pikachu from my team, I caught it, and when I went to get Celebi a Ditto had taken its place.

    Mew is the only other Pokémon that actually learns Transform, and I special-cased it to be captured properly. I guess Celebi's Metronome turned into Transform; I've fixed that so it's impossible.

    In regards to the battle tower, can you buff up the rewards? So far I've done four run throughs in a row without losing and have received three different kinds of mail and a couple of full heals. Can you give out better items like additional leftovers or a lucky egg to boost the exp received?

    Mail and Full Heals? You should be receiving five of a random vitamin (HP Up, Protein, Iron, Carbos, Calcium)...

    (I know that's not the most interesting reward, in future I may implement a point system where you can trade points for more items.)

    After you complete the rematch, the next battle is Red, and then Green. Their pokemon's levels are way higher than what the level curve provides. The game naturally got my team to the lower to mid 80s in level, not nearly enough to battle Red or Green. Therefore, is there any way you can add more gameplay after beating the elite four for the second time?

    Yeah, that's on purpose. As the final challenges, they're meant to require preparation. If you barely managed to defeat the Elite 4, then you're not ready to battle the real champions.

    To prepare, you can keep battling the Elite 4, visit the Fighting Dojo and rematch the Gym Leaders, or grind against the wild Pokémon in Mt. Silver. There are also the legendary Pokémon to catch; Seafoam Islands, Cinnabar Volcano, and Cerulean Cave all have pretty high-leveled Pokémon, though not as high as Mt. Silver.

    I was messing with Natures yesterday and I think it wouldn't be too hard to implement. However, I'm not sure if I'm picking the best method to randomize nature. Currently, my implementation uses the Attack+Defense DV byte mod 25. I intend to look into what this results in and potentially swap/xor the byte beforehand to give more sensical values for higher DVs (things like, ensuring that 15 Attack DV is certain to give all possible +Attack natures, and vice versa for Defense), but is there a better way I can do this?

    The way the implementation is done atm also means that 6 natures appear 11 times, the other 19 appear 10, but I think this is a minor issue myself.

    Cool, you're working on Natures? I eventually wanted to add another byte of Pokémon data, with five bits for Nature, one for gender, one for shiny, and one extra (maybe to toggle between two possible Abilities). Cons: this would break old saves, and would require a lot of testing to make sure things like the PC and Day-Care aren't broken.

    I was also considering replacing one of the Poké Seer's CaughtData bytes, but now that they're used for the fourth stats page I'd rather not give them up. (Even though the caught level is limited to 0–63.)

    (Actually, long-term plans, FroggestSpirit is starting to rewrite the whole data structure, including 2-byte IDs, separate Sp.Atk and Sp.Def DVs, and new-style EVs that take up less space than old stat experience.)

    I like the idea of mapping DVs to Natures so that they're paired beneficially. You could look at the min and max DVs and pick whichever Nature lowers and raises those stats, with neutral Natures for ties.

    Or if you go with some kind of xor+mod strategy: using 5 bits to pick from 25 Natures has a remainder of 7, but using 7 bits to pick from 25×5 Natures has a remainder of 3. Maybe xor the DVs together, ignore the high bit, shuffle the bits if it helps (simplest would be to swap the nibbles with "swap"), and divide by 5 for a 0–24 Nature ID (if you get 25 from one of those three remainders, just call it Quirky).

    Thank you very much for helping to develop this game, by the way. I'm glad that other programmers are interested in it. And you clearly put effort into the small details, and test well enough that I can merge a pull request and it "just works".
     
    Last edited:

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    Good to hear that, thanks!



    Mew is the only other Pokémon that actually learns Transform, and I special-cased it to be captured properly. I guess Celebi's Metronome turned into Transform; I've fixed that so it's impossible.



    Mail and Full Heals? You should be receiving five of a random vitamin (HP Up, Protein, Iron, Carbos, Calcium)...

    (I know that's not the most interesting reward, in future I may implement a point system where you can trade points for more items.)



    Yeah, that's on purpose. As the final challenges, they're meant to require preparation. If you barely managed to defeat the Elite 4, then you're not ready to battle the real champions.

    To prepare, you can keep battling the Elite 4, visit the Fighting Dojo and rematch the Gym Leaders, or grind against the wild Pokémon in Mt. Silver. There are also the legendary Pokémon to catch; Seafoam Islands, Cinnabar Volcano, and Cerulean Cave all have pretty high-leveled Pokémon, though not as high as Mt. Silver.



    Cool, you're working on Natures? I eventually wanted to add another byte of Pokémon data, with five bits for Nature, one for gender, one for shiny, and one extra (maybe to toggle between two possible Abilities). Cons: this would break old saves, and would require a lot of testing to make sure things like the PC and Day-Care aren't broken.

    I like the idea of mapping DVs to Natures so that they're paired beneficially. You could look at the min and max DVs and pick whichever Nature lowers and raises those stats, with neutral Natures for ties.

    Or if you go with some kind of xor+mod strategy: using 5 bits to pick from 25 Natures has a remainder of 7, but using 7 bits to pick from 25×5 Natures has a remainder of 3. Maybe xor the DVs together, ignore the high bit, and divide by 5 for a 0–24 Nature ID (if you get 25 from one of those three remainders, just call it Quirky).

    Thank you very much for helping to develop this game, by the way. I'm glad that other programmers are interested in it. And you clearly put effort into the small details, and test well enough that I can merge a pull request and it "just works".

    Abilities (without involving Hidden Abilities) can be implemented pretty simple without giving up major freedom:
    * Use the Spc+Spe DV
    * Xor the high and the low bits
    * Use ability 1 if the result is even, 2 if odd (or vice versa).

    This means that 15/15 gives one Ability while you can use both 14/15 and 15/14 for the other one.

    The best would, in the end, be to use seperate bytes. While there is an unused byte in the data structure (that can be saved to one of the PP bytes in the storage system since the unused byte is part of the non-PC data), I think you're better off freeing up 5 of the EV bytes, using the 3gen+ EV system. This also allows you to arbitrary select different forms with a byte that isn't used for abilities/natures/etc, and also allows implementing HA properly (HAs with only a single byte wouldn't work with your mentioned approach since it would require 9 bits). You *could* also do this without breaking saves, allthough it would potentially be a bit awkward. All you have to do is to rely on a certain byte being something it can't possibly be (under normal circumstances) and rely on that to re-compute the structure, ensuring that it ends up being consistent with how it would be with "old" computations to not suddenly have non-Shinies be Shiny or vice versa, etc.

    EDIT: As for Transform, couldn't you just check the "nickname" of the Pokémon and revert it based on that?

    EDIT2: I took a look at the revised structure.
    * You don't need 16 bits for Pokémon or Items, 10 should be sufficient.
    * With this in mind, you can use the upper 6 bits in the Pokémon bytes to do Formes
    * And the upper 6 bits in the item bytes to do Natures (5 bits) + Gender (1 bit)
    * You can use the 2 upper bits in the IV bytes to do Ability, including Hidden Abilities
    * You can use one of the upper 3 bits in EXP to do Shininess.
    * You are still left with 2 bits without sacrificing any data for Pokérus.

    I believe that species has a redundant byte somewhere (IIRC there are 2 species bytes, they are always the same with the exception of Eggs, this is where "hybrids" come from. You can free up one of them for whatever and use a bit in the IV bitfield for IsEgg (moving HAs somewhere else, perhaps to EXP), making it consistent with how 3gen stores it.

    Also, people are mentioning removing animations to free up space. Isn't Crystal actually 1/4 the space of the max size of a GBC cartridge? From what I've heard, maxing it fully needs you to sacrifice RTC (not good), but simply doubling it doesn't.
     
    Last edited:
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Interesting ideas for editing the Pokémon data structure. I do think such radical changes should wait for a save-breaking 3.0 update, though. That allows more freedom to move things around in memory, and avoids weird hacks to interpret data according to an old format. And any changes meant to accomodate Abilities would wait for 3.0 anyway because implementing Abilities is a huge undertaking given all their diverse effects.

    Generally it's easier to use separate bytes for separate things, even if some of the bits are unused. That way you don't have to mask and shift things everywhere. For Pokémon and held item IDs in particular, I think it would be best to have two-byte IDs everywhere. (Not that I was planning to do that for Polished Crystal in the foreseeable future anyway. I'd feel obligated to use all that space, and would rather be limited to 253 Pokémon than start implementing a significant chunk of 721+.)

    For Natures, here's what could be a good system, that only relies on DVs and allows the player to have very good stats along with any Nature:

    • The DV bytes look like this: AAAADDDD EEEECCCC
    • Concatenate their low bits into one byte: AADDEECC
    • Divide by 10 to get a Nature ID from 0 to 24. If you get 25 (which only happens with 6 of the 256 possible bytes) convert it to whichever ID is Quirky.

    Forced shiny Pokémon like Red Gyarados have DVs of FB DF; I'd design the ID→Nature mapping so that this goes to Quirky as well. (It's a neutral Nature, and I just like the name.)

    Regarding Transform: reverse-mapping a name string to an ID would be pretty cumbersome. Metronome can't turn into Transform in the official games anyway, so now the only Pokémon that can use Transform really are Ditto and Mew, and Mew is already handled specially.

    Edit:

    Isn't Crystal actually 1/4 the space of the max size of a GBC cartridge? From what I've heard, maxing it fully needs you to sacrifice RTC (not good), but simply doubling it doesn't.

    Crystal is 2 MB; so is Polished Crystal. Anything larger uses MBC5, which can't access the clock.
     

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    Ah, I was just going to mod the Atk+Def DV by 25, since I looked through what it gave and there are very few things it doesn't give optimally (Mainly that you end up having to sacrifice minor Def/Atk for maximum Speed really -- otherwise, you pretty much get everything). See (redacted, see below for an update)
    Do you still prefer what you suggested?

    EDIT: Shiny Gyarados (and other forced-shinies) would, with FB, get Lonely. This is above-average but not perfect. If I were to shift the last 6 natures (the ones that appear a 11th time) up by 2, it would give Adamant, which is great for Gyarados but would potentially screw other guranteed-shinies over. It would also significantly worsen Impish's 15/15 to a 15/13 (and Adamant from 15/13 to 15/11). Not worth it I think.

    EDIT2: Bold reduces Atk. I could remap it to Impish so that Impish is 15/15. Bold doesn't end up much worse -- it still gets 1/14, and since it reduces Atk, it doesn't really need a good attack DV. That fixes all issues I think. That leaves:

    Notable natures: Atk/Def
    Adamant (+Atk -SpA): 15/13
    Jolly (+Spe -SpA): 14/14
    Modest (+SpA -Atk): 0/15 -- doesn't really need Atk anyway
    Timid (+Spe -Atk): 6/14
    Bold (+Def -Atk): 1/14
    Impish (+Def -SpA): 15/15
    Calm (+SpD -Atk): 5/15
    Careful (+SpD -SpA): 13/15

    or, see https://sprunge.us/fFjg
     
    Last edited:
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Ah, I was just going to mod the Atk+Def DV by 25, since I looked through what it gave and there are very few things it doesn't give optimally (Mainly that you end up having to sacrifice minor Def/Atk for maximum Speed really -- otherwise, you pretty much get everything). See https://sprunge.us/FhHQ
    Do you still prefer what you suggested?

    If you factor out the "mod 25" part into its own routine, it'll be easy to experiment with and edit. Ideally all 25 pairs of (Atk, Def) DVs with both in the 11−15 range would map to a unique Nature.

    Atk can be 1–5, 6–10, or 11–15; so can Def. Given that Atk is in one of those ranges and so is Def, there are 25 pairs mapping to 25 Natures. But also, one or both of them can be 0: that's another 31 cases, which map to the 25 Natures again plus 6 remainder. I realize this could get fairly complicated, but the important thing is to have working Natures assigned to Pokémon and affecting stats. The distribution can be played around with afterwards.

    I'm imagining something like this as the final DV→Nature mapping:

    Pokémon Polished Crystal (update 2.2.0)


    Regarding presentation, it would fit neatly under the OT name:

    Pokémon Polished Crystal (update 2.2.0)


    And the affected stats could have + and − after their names.

    For reference, here's how "mod 25" distributes them:

    Pokémon Polished Crystal (update 2.2.0)
     
    Last edited:

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    Yeah, I did factor out the actual nature calculation to its own function. Mostly to allow one to easily change it later if desired (e.g. if, say, the data structure changed).
    11-15/15 and 15/11-15 already maps to unique natures -- this wasn't deliberate, but a side effect of how I did it.
    See the "Notable natures" table for natures that 95%+ of competitively viable mons use. Nothing on that list ends up worse than 13 in any DV that matters.

    EDIT: Ah, interesting approach @ your lookup table. It would significantly complicate the Nature calculation, though. Do you still think it would be worth it?
    For comparisions' sake, these are the optimal values for the "Notable natures" list, between mod 25 and lookup table:

    Notable natures: Atk/Def (mod 25), Atk/Def (lookup table)
    Adamant (+Atk -SpA): 15/13, 11/14
    Jolly (+Spe -SpA): 14/14, 13/14
    Modest (+SpA -Atk): 0/15, 14/11
    Timid (+Spe -Atk): 6/14, 15/11
    Bold (+Def -Atk): 1/14, 12/11
    Impish (+Def -SpA): 15/15, 12/14 -- mod 25 special cases this one to replace Bold's 15/15 with Impish
    Calm (+SpD -Atk): 5/15, 15/11
    Careful (+SpD -SpA): 13/15, 15/13

    So... assuming no additional special casing once the results are computed, the outcomes are actually *worse*.

    In case it wasn't clear, the order of the Natures are Atk, Def, Spe, SpA, SpD in the order +Atk-Atk +Atk-Def +Atk-Spe +Atk-SpD (...). This also simplifies the calculations for what stat to increase or decrease since no giant lookup table is required.

    And yeah, I was already going to show Nature in the blue status page, like so:

    Nature/
    Bold

    Actually, the fact that mod 25 ends up giving such good pairs wasn't deliberate (except for the Bold/Impish change), it just happened to be a happy coincidence.
     
    Last edited:
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Do you have an arbitrary assignment of Natures to the 25 IDs, or are you deriving the affected stats from the ID? Because if it's arbitrary, just say 25=Adamant, 5=Modest, etc, for the most competitive outcome. (Also, I'd like to experiment with using the low bits of all four DVs, instead of the whole Atk+Def DV, kind of like how the HP DV is calculated.)

    A lookup table is probably not worth the trouble, but I think that layout could be mostly done with a formula. A complicated one, but it would still take up less space than a 256-entry table.
     

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    Do you have an arbitrary assignment of Natures to the 25 IDs, or are you deriving the affected stats from the ID? Because if it's arbitrary, just say 25=Adamant, 5=Modest, etc, for the most competitive outcome. (Also, I'd like to experiment with using the low bits of all four DVs, instead of the whole Atk+Def DV, kind of like how the HP DV is calculated.)

    A lookup table is probably not worth the trouble, but I think that layout could be mostly done with a formula. A complicated one, but it would still take up less space than a 256-entry table.

    The assignments are done in such a way to optimize calculating what stat is increased and decreased. E.g. 1=Hardy, 2=Lonely, 3=Brave, 4=Adamant, 5=Naughty, 6=Bold, 7=Docile, 8=Relaxed, 9=Impish, 10=Lax, 11=Timid, 12=Hasty, 13=Serious, 14=Jolly, 15=Naive, 16=Modest, 17=Mild, 18=Quiet, 19=Bashful, 20=Rash, 21=Calm, 22=Gentle, 23=Sassy, 24=Careful, 25=Quirky.

    This is the current code (probably several issues in it atm, I'm not super experienced in GB ASM programming): https://sprunge.us/YIHc

    The issue with using the Spc/Spe DV are twofold:
    1: It means you are messing with Speed. You always want max Speed. Speed is by far the most important stat.
    2: While in later generations, messing with SpA usually isn't too bad unless you actually rely on SpA, the fact that the Spc maps to *both* SpA and SpD means you sacrifice 2 stats for each decreased DV here.

    That is why I deliberately use the Atk/Def DV only and leave Spc/Spe alone. Otherwise, I would have constructed the result in such a way that the lower bit in all 4 DVs map to unique Natures, so that 14/14/14/14, 14/14/14/15, 14/14/15/14, etc, all give good Natures.
     
    Last edited:
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    The assignments are done in such a way to optimize calculating what stat is increased and decreased. E.g. 1=Hardy, 2=Lonely, 3=Brave, 4=Adamant, 5=Naughty, 6=Bold, 7=Docile, 8=Relaxed, 9=Impish, 10=Lax, 11=Timid, 12=Hasty, 13=Serious, 14=Jolly, 15=Naive, 16=Modest, 17=Mild, 18=Quiet, 19=Bashful, 20=Rash, 21=Calm, 22=Gentle, 23=Sassy, 24=Careful, 25=Quirky.

    This is the current code (probably several issues in it atm, I'm not super experienced in GB ASM programming): https://sprunge.us/YIHc

    The issue with using the Spc/Spe DV are twofold:
    1: It means you are messing with Speed. You always want max Speed. Speed is by far the most important stat.
    2: While in later generations, messing with SpA usually isn't too bad unless you actually rely on SpA, the fact that the Spc maps to *both* SpA and SpD means you sacrifice 2 stats for each decreased DV here.

    That is why I deliberately use the Atk/Def DV only and leave Spc/Spe alone. Otherwise, I would have constructed the result in such a way that the lower bit in all 4 DVs map to unique Natures, so that 14/14/14/14, 14/14/14/15, 14/14/15/14, etc, all give good Natures.

    Nice! That's an elegant way to get the affected stats.

    I think that combining all the DVs' low bits still has an advantage, though. Here's the algorithm in pseudocode:

    Code:
    ; get low bits of each dv
    atk_lo ← AtkDV & 3
    def_lo ← DefDV & 3
    spe_lo ← SpeDV & 3
    spc_lo ← SpcDV & 3
    ; concatenate low bits
    ; x = (atk_lo << 6) | (def_lo << 4) | (spe_lo << 2) | spc_lo
    x_hi ← (atk_lo << 2) | def_lo
    x_lo ← (spe_lo << 2) | spc_lo
    ; simple case
    if (x_hi ≠ 15 and x_lo ≠ 15) {
    	NatureID ← x_hi × 5 + x_lo
    }
    ; edge cases
    ; plenty of flexibility here for optimizing particular natures
    else if (x_hi = 15) {
    	NatureId ← x_lo
    }
    else if (x_lo ≤ 8) {
    	NatureID ← x_hi + 16
    }
    else {
    	NatureID ← x_hi − 9
    }

    And here's the equivalent lookup table:

    Pokémon Polished Crystal (update 2.2.0)


    For all the important Natures, there's a possible DV combo with at least 14 Speed and probably 15, that also has 14 or 15 for the raised stat:

    • (Format: Atk/Def/Spe/Spc)
    • Adamant = 4 (+Atk −SpA): 15/15/13/12 or 15/13/15/15
    • Jolly = 14 (+Spe −SpA): 15/15/15/14
    • Modest = 16 (+SpA −Atk): 12/12/15/15 or 15/13/14/15
    • Timid = 11 (+Spe −Atk): 15/15/14/15
    • Bold = 6 (+Def −Atk): 15/15/13/14 or 14/15/14/15
    • Impish = 9 (+Def −SpA): 15/15/14/13
    • Calm = 21 (+SpD −Atk): 13/13/15/15 or 15/14/14/15
    • Careful = 24 (+SpD −SpA): 14/12/15/15 or 15/14/15/14

    The worst case there is Timid, which boosts Speed but can only have a 14 Speed DV instead of 15. And handling those edge cases differently might be able to fix that without harming the other important ones.

    Edit: On second thought, the "Atk/Def mod 25" table has some good possibilities too. I would just special-case 15/15 and 7/15 to neutral natures so that the NPC trainers with those DVs will be versatile (bosses have max DVs by default, except females have 7 Attack to get female Pokémon), and special-case 14/15 to Impish instead of 15/15. I'd be satisfied with either method in Polished Crystal, and yours is certainly easier to implement.
     
    Last edited:

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    Your nature DV list is off -- my nature list began from 1, while you have taken the numbers as if they started at 0. Sorry, that was probably my fault.

    I fixed your list:
    • (Format: Atk/Def/Spe/Spc)
    • Adamant = 3 (+Atk −SpA): 15/15/12/15 or 15/12/15/15
    • Jolly = 13 (+Spe −SpA): 15/15/15/13
    • Modest = 15 (+SpA −Atk): 15/15/15/15
    • Timid = 10 (+Spe −Atk): 15/15/14/14
    • Bold = 5 (+Def −Atk): 15/15/15/14
    • Impish = 8 (+Def −SpA): 15/15/14/12
    • Calm = 20 (+SpD −Atk): 13/12/15/15 or 15/14/13/15
    • Careful = 23 (+SpD −SpA): 13/15/15/15 or 15/14/15/13

    With the above table, Shinies are Serious (15/12/13/15).

    One could special case the 15/15/15/12 (which is 12=Serious, so neutral) to 8 (Impish) and 15/15/15/14 to Timid.
     
    Last edited:
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Your nature DV list is off -- my nature list began from 1, while you have taken the numbers as if they started at 0. Sorry, that was probably my fault.

    I fixed your list:
    • (Format: Atk/Def/Spe/Spc)
    • Adamant = 3 (+Atk −SpA): 15/15/12/15 or 15/13/15/15
    • Jolly = 13 (+Spe −SpA): 15/15/15/13
    • Modest = 15 (+SpA −Atk): 15/15/15/15
    • Timid = 10 (+Spe −Atk): 15/15/14/14
    • Bold = 5 (+Def −Atk): 15/15/15/14
    • Impish = 8 (+Def −SpA): 15/15/14/12
    • Calm = 20 (+SpD −Atk): 13/12/15/15 or 15/14/13/15
    • Careful = 23 (+SpD −SpA): 13/15/15/15 or 15/14/15/13

    Thanks. It's my fault, I was using 1-based IDs earlier and switched to 0-based for simpler math.

    So Timid is still the worst case there, a +Speed Nature with 14 Speed DV instead of 15. Could be worse. Still, your current method is simpler and gives good results anyway. Might as well stick with it, and eventually maybe switch to a more modern data structure.

    With the above table, Shinies are Serious (15/12/13/15).

    Shinies are very serious. :P And that's pretty good, a neutral nature for them.
     

    FIQ

  • 251
    Posts
    11
    Years
    • Seen Sep 15, 2022
    OK, since you were happy with my former (mod 25) method, I settled on that.

    Final results (what I intend it to be at least, I still need to fix the code): https://sprunge.us/OfJS

    Also I clearly can't count, with FDBF FBDF (15/1311/1113/15), shinies would be Naughty Jolly in your table (Lonely in mine).

    This leaves the following oddities with nature distribution:

    Quirky: 11/255
    Naive: 9/255
    Impish: 11/255
    Hardy: 11/255
    Lonely: 11/255
    Adamant: 11/255
    Naughty: 11/255
    Serious: 11/255
    The rest: 10/255

    Which is good enough for me. Technically one could replace one of the excess with a Naive in the 15/10-15 range, but meh, not neccessary IMO.
     
    Last edited:
  • 47
    Posts
    7
    Years
    • Seen Mar 13, 2024
    Is the only way to obtain a Mamoswine to breed a Swinub/Piloswine with a compatible mon that knows AncientPower?

    Also, I don't know if this is an oversight but you can re-trade mons that you got from a WT (which is excellent for rare items farming).

    I'm waiting to get an AP Swinub and Celebi to complete the dex and the game! :D

    Excellent work so far!
     
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    Is the only way to obtain a Mamoswine to breed a Swinub/Piloswine with a compatible mon that knows AncientPower?

    Piloswine learns AncientPower at level 1, like in X/Y/OR/AS, so you can use the Move Relearner too.

    Also, I don't know if this is an oversight but you can re-trade mons that you got from a WT (which is excellent for rare items farming).

    That's normal. Farming for good Pokémon/items is not really what I wanted to encourage, but it's also technically possible with real Wonder Trade, and per-day limits on it are just too arbitrary.
     
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    With help from FredrIQ, Polished Crystal will now have natures!

    Pokémon Polished Crystal (update 2.2.0)


    Since personality values don't exist in GSC, natures are determined from the Attack and Defense DVs (kind of like Hidden Power's type).

    Generally you can find a good combination of DVs and nature: Adamant (+Atk −SpA) with 15 Attack and 13 Defense, Modest (+SpA −Atk) with 0 Attack and 15 Defense, etc.
     
    Last edited:

    Mag-Mar

    50% Saved Steps
  • 27
    Posts
    8
    Years
    Rangi!

    Do you intend to implement some XP cap like our friend did on Pokemon Pyrite?

    [*]EXPERIENCE GAIN: The changes in the experience mechanics have been mainly applied to encourage training a full team of Pokemon over training just one or two Pokemon. The experience formula has been modified to make the experience gain increase by multiplying the original experience with the result of player's Pokemon level / enemy's level (*). The other main change consists on a badge-sensitive experience cap, that prevents your Pokemon from growing up past certain levels depending on the amount of badges collected.

    That's a great way to make the game more 'playable'. What do you think?
     
  • 755
    Posts
    7
    Years
    • NY
    • Seen Oct 9, 2023
    i lost my save when i update 1.2 for 2.1

    Yes, it said that 2.0 is not compatible with save files from version 1.

    Do you intend to implement some XP cap like our friend did on Pokemon Pyrite?

    I am considering a Gen V–style experience system, weighted by the "player's Pokemon level / enemy's level" ratio, but a hard limit on experience is too arbitrary. It's great for a difficulty hack to force people to use strategy, but this is supposed to be a more typical Pokémon game, so you can grind to victory if you really want to.
     
    Back
    Top