• 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?".
  • 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.

Red hack: Shin Pokemon Red/Blue/Green/JP builds (Bugfix, AI, and QoL patch)

536
Posts
4
Years
    • Seen today
    Bug report: Graveller learns Headbutt at level 29, should be Harden.

    Updated the patches again. Now pokemon learn-lists can have multiple moves at the same level. The LearnMoveFromLevelUp function will now keep looking for learnable moves until reaching the end of the movelist instead of returning after handling a single move. Graveller learns both Body Slam and Harden at level 29.
     
    536
    Posts
    4
    Years
    • Seen today
    Some other notes I had while playing:
    - The sunbathing blocker Pokemon at Vermillion should probably say something like "It's staring curiously at the S.S Anne" to make it obvious that's the leave condition. When I saw it for the first time it really confused me.
    - I think the Eevee lines are better off using their RB movesets instead of yellow's. Yellow was balanced around the rival's Eevee, so it learns important moves before level 25, making them impossible to get in vanilla. The most egregious example is Jolteon, who because of this can never learn Thundershock.
    - The spaceworld back sprites are placed too far up for some pokemon. Nidoking for example looks awkwardly cut off.

    I'll take these under consideration.

    The spaceworld backs are simply drawn that way, so nothing is getting cut off. But they are beta sprites, so they could probably use a bit of final tweaking.
     
    536
    Posts
    4
    Years
    • Seen today
    Some other notes I had while playing:
    - The sunbathing blocker Pokemon at Vermillion should probably say something like "It's staring curiously at the S.S Anne" to make it obvious that's the leave condition. When I saw it for the first time it really confused me.
    - I think the Eevee lines are better off using their RB movesets instead of yellow's. Yellow was balanced around the rival's Eevee, so it learns important moves before level 25, making them impossible to get in vanilla. The most egregious example is Jolteon, who because of this can never learn Thundershock.
    - The spaceworld back sprites are placed too far up for some pokemon. Nidoking for example looks awkwardly cut off.

    Updated the patches again.

    The eevee family is kind of messy. These four 'mons come out rather different depending on if they're trained in red/blue or in yellow, and the player was always allowed to transfer them back and forth between games for the optimum move pool while levelling. So what I did was blend the two movelists together into something that reasonably resembles what could be attained when a player used trading to get the best out of both red & yellow move lists. It's not super elegant, but the move options are now largely preserved. And the move re-learner helps with any edge cases.

    Text edits have been done. That should keep the player from getting confused about the blocking npc.

    I quickly went through the spaceworld backs and pushed down anything that looked too off. I changed 12 images in total. Nidoking and Electabuzz were the worst offenders.
     
    1
    Posts
    3
    Years
    • Seen Mar 27, 2023
    Hi, I am really loving this hack but I've twice noticed an issue with trainers. I am playing the green version and I'm not sure if it is when I activate the trainer leveling aid (Oak's aid) or the trainer randomized aid (or could be both) but when I battle trainers in Viridian Forest, the trainers don't attack. The ai trainer's turns are just skipped and I attack again. It goes like that throughout the whole battle until I beat them. Is there anything I maybe could do to fix this? Thanks.
     
    536
    Posts
    4
    Years
    • Seen today
    Hi, I am really loving this hack but I've twice noticed an issue with trainers. I am playing the green version and I'm not sure if it is when I activate the trainer leveling aid (Oak's aid) or the trainer randomized aid (or could be both) but when I battle trainers in Viridian Forest, the trainers don't attack. The ai trainer's turns are just skipped and I attack again. It goes like that throughout the whole battle until I beat them. Is there anything I maybe could do to fix this? Thanks.

    It seems that this is caused by neither. It's due to the item clause being in effect.
     
    45
    Posts
    2
    Years
    • Seen May 4, 2024
    I have a question about this hack's vision towards progression changes. I assume certain Cut bushes were removed so the game could be finished without using that HM, but the progression-mandatory bush to the right of Cerulean City prevents that. That one could be replaced by a blocker Pokemon like in Vermillion, but it would render Cut and thus Misty's gym completely optional until you reach the E4. The hack already allows you to defeat Lt Surge before Misty, which isn't possible in glitchless vanilla. Are these kind of modifications intended, or are they just an oversight? If they're an oversight I assume the solution would be to add two flags to remove sunbathing Pokemon: the SS Anne leaving and beating Misty. However that is quite obtuse and will be hard to communicate to new players. If vanilla progression matters above all else, the least painful solution would probably be putting back the bush blocking Lt Surge's gym.

    On the other hand if minor progression changes are allowed, I assume the hack's vision is more liberal: how Pokemon Red/Blue *should* have been like if Gamefreak put more effort into it in 1996. In that case you could argue for more changes, like making the fishing rods available earlier. Vanilla RB makes catching water types extremely difficult, being limited to grinding Magikarp -> Gyarados or using a water stone on your single available Eevee at Celadon. Those are your options until you can wake Snorlax and reach Fuchsia and the Good/Super rods, which is an enormous span of time. Water types are almost as difficult to get as dragons, which I always found ridiculous and isn't reflected by trainer rosters.
     
    536
    Posts
    4
    Years
    • Seen today
    I have a question about this hack's vision towards progression changes. I assume certain Cut bushes were removed so the game could be finished without using that HM, but the progression-mandatory bush to the right of Cerulean City prevents that. That one could be replaced by a blocker Pokemon like in Vermillion, but it would render Cut and thus Misty's gym completely optional until you reach the E4. The hack already allows you to defeat Lt Surge before Misty, which isn't possible in glitchless vanilla. Are these kind of modifications intended, or are they just an oversight? If they're an oversight I assume the solution would be to add two flags to remove sunbathing Pokemon: the SS Anne leaving and beating Misty. However that is quite obtuse and will be hard to communicate to new players. If vanilla progression matters above all else, the least painful solution would probably be putting back the bush blocking Lt Surge's gym.

    On the other hand if minor progression changes are allowed, I assume the hack's vision is more liberal: how Pokemon Red/Blue *should* have been like if Gamefreak put more effort into it in 1996. In that case you could argue for more changes, like making the fishing rods available earlier. Vanilla RB makes catching water types extremely difficult, being limited to grinding Magikarp -> Gyarados or using a water stone on your single available Eevee at Celadon. Those are your options until you can wake Snorlax and reach Fuchsia and the Good/Super rods, which is an enormous span of time. Water types are almost as difficult to get as dragons, which I always found ridiculous and isn't reflected by trainer rosters.

    It was kind of an iterative thing. The original motive was to move the bushes so that Cut is no longer mandatory to have in your team's movepool in order to face Surge and Erika. It's a small detail that no one has ever liked.

    The blocking pokemon was added to fix a continuity error from the vanilla games. By trading over a pokemon with Cut and beating Misty, the entire SS Anne dungeon can be skipped. It never leaves the dock, and its rival battle remains. I added the blocking pokemon to help fix this continuity error. It makes it so the player has to get HM01 from the captain at some point in the game which forces the ship to leave before facing the elite 4. I also made it so the SS Anne rival event disappears after the Pokemon Tower rival fight.

    So no, I'm not a big stickler for progression. In particular because I don't think that attitude is necessary for Gen 1 given how the game gradually becomes more free-form upon reaching Cerulean City.

    I'm open to adjust availability of water pokemon. The master branch already affords wild starters after getting through Mt. Moon, so a Squirtle is attainable early. But the way I would increase availability is to address the near-uselessness of the Old Rod. By default it hooks Magikarp 100% of the time. I see no reason to hold firm against it also hooking Goldeen, Poliwag, and other entry-level water types.
     
    45
    Posts
    2
    Years
    • Seen May 4, 2024
    Entry-level water Pokemon are caught using the Good Rod (they're all level 10), which really should have been the default one. The simplest solution would probably be to swap them around, so the fishing guru in Vermillion gives you the Good Rod, the Route 12 brother gives Super, and the Fuchsia brother the Old Rod as a joke. The Old Rod isn't even useful for catching Magikarp, since the Super Rod also does that.

    This maintains the vanilla rod collection spots. However, IMO vanilla rod placements aren't very good. Route 12 and Fuchsia become available at practically the same time, which is why it's common to find the Super before Good Rod. If it were up to me I'd revamp the locations completely and push them all up earlier. Balance and level-wise there's no problem with getting Good Rod Pokemon even as early as Cerulean. The funny thing is, Cerulean actually has a fisherman NPC (the one Team Rocket digs through), so it would make sense for him to give you a rod in exchange for help. If you allow for map changes you even can fix the route 12 guru by doing something like this:

    r2oP4lC.jpeg


    Using this Snorlax setup gives you access to the Route 12 guru upon reaching Lavender Town. This means you can change the rod progression spots to:

    1) Cerulean
    2) Vermillion
    3) Lavender / Route 12
    4) Fuchsia

    The last spot can be a joke "I'd give you a rod, but I lost it!" or a water stone as a consolation prize. There are many ways to go about it, but I think something like this is best to maintain the identity of each rod.
     
    536
    Posts
    4
    Years
    • Seen today
    The simplest solution would probably be to swap them around, so the fishing guru in Vermillion gives you the Good Rod, the Route 12 brother gives Super, and the Fuchsia brother the Old Rod as a joke. The Old Rod isn't even useful for catching Magikarp, since the Super Rod also does that.

    I'm of a somewhat similar mindset, but I've been experimenting around with some different ideas that I think will help with minimal changes. Here's what I currently have coded.

    The old rod: make it so it is just the good rod but actually "old". I made it so it hooks lvl 5 magikarp half the time as a failure state (it's old and busted). The other half of the time it acts as a good rod (implying it was a good rod when it was new).

    good rod: only catching by goldeen and poliwag is a joke, so I added 6 more Pokémon to its list for a good mix.

    Now a decent slate of water Pokemon can be caught in the interim between exiting mt moon and fighting Misty. It also distinguishes the good rod from the super rod. The super rod 'mon list has 0-4 'mons that are location-based. The good rod has a constant 8-mon list that ignores location. Each one has pros and cons.

    I do like the idea of swapping the good rod and super rod locations and making the fishing house available before getting the pokeflute. Additionally, the old rod is supplanted by the good rod. It should probably be sellable or traded-in for a consolation item.
     
    45
    Posts
    2
    Years
    • Seen May 4, 2024
    What I feel is important is maintaining vanilla Pokemon distributions whenever possible. It's fine to make changes to introduce otherwise unobtainable Pokemon like starters or exclusives, but otherwise the encounter tables a player sees on Serebii remain mostly accurate, which is very user friendly. So getting early access to later rod functions is fine, but effectively creating brand new encounter tables for each route is too big of a change more, IMO.

    Even with early access at Lavendar Town, there's actually no problem with the Route 12 guru just giving you the full Super Rod. The highest level Pokemon it lets you catch is Poliwhirl at 23, which isn't far off the wild encounters at that point. It does render the guru at Fuchsia pointless, but that was already the case in vanilla. You are actually better off ignoring both the Super/Good rods and just going a bit further to Seafoam, where you get the same Pokemon but at far higher levels. That late in the game the Fuchsia guru would have to give you an Ultra Rod to compensate.

    Actually, that's one idea. Introduce an Ultra Rod which gives rare encounters like Lapras, Squirtle, Tentacruel, or Vaporeon. You could even move Lapras from the Safarii zone and make it Ultra Rod exclusive. Then it could go:

    1) Cinnabar -> Old/Good Rod
    2) Vermillion -> Good Rod
    3) Lavender -> Super Rod
    4) Fuchsia -> Ultra Rod
     
    536
    Posts
    4
    Years
    • Seen today
    What I feel is important is maintaining vanilla Pokemon distributions whenever possible. It's fine to make changes to introduce otherwise unobtainable Pokemon like starters or exclusives, but otherwise the encounter tables a player sees on Serebii remain mostly accurate, which is very user friendly. So getting early access to later rod functions is fine, but effectively creating brand new encounter tables for each route is too big of a change more, IMO.

    The old rod and good rod do not have distribution tables. Unlike in later generations, all they do is generate a pre-determined wild battle no matter where you fish. For some reason, Gamefreak only gave route encounter tables to the super rod.

    Here's how it works in vanilla. It's all hardcoded like other items:

    Is the old rod being used?
    If true, generate a battle with a level 5 magikarp.

    Is the good rod being used?
    If true, get a random number between 0 and 4.
    If 2 or 3, then there's no bite.
    If 0, generate a battle with a level 10 goldeen.
    If 1, generate a battle with a level 10 poliwag.

    Looking at the code, it bears all the signs of being a development placeholder. The super rod was clearly fully developed, but the other two were left as-is due to time and/or space constraints. They are more like dummy items that are leftover from an earlier alpha build.
     
    45
    Posts
    2
    Years
    • Seen May 4, 2024
    In that case I'd use the Super Rod distribution table as inspiration/limit for the earlier ones. From Cerulean to Vermillion, the natural spawns are Goldeen + Krabby + Psyduck, then Krabby + Shellder. That's limited enough that you could probably get away with the Old Rod only catching Magikarp + Goldeen (and maybe Krabby?) using static encounters, until you can upgrade to the Good Rod in Vermillion. The Good Rod can then use reduced Super Rod distribution. For example, it could let you catch everything that can spawn so far except Shellder. After getting Cut you can backtrack and get access to Poliwag and the majority of water types in the game.

    The strongest catches could be exclusive to the Super Rod. e.g., Shellder, Dratini, and evolved Pokemon. That gives an incentive to upgrade and backtrack once again to get the rare water types you've missed.
     
    45
    Posts
    2
    Years
    • Seen May 4, 2024
    Fun fact: the issue with certain backsprites being too high up is actually present in vanilla. The default backsprite for Beedrill is elevated just like the spaceworld backsprite for Nidoking. The more you know 🤔.
     
    2
    Posts
    5
    Years
    • Seen Nov 25, 2021
    Hi! I got a question. Is there a code in the disassembly that let's you brute force the rom to work in gb mode? The reason I'm asking is that I'm using an emulator in a DIY device that only recognizes the rom in gbc mode and I want to try it in the monochrome gb mode. Or if all else fails, should I try building the rom without the palettes codes instead?
     
    Last edited:

    Chronosplit

    I play for keeps!
    492
    Posts
    13
    Years
    • Seen May 6, 2024
    Hi! I got a question. Is there a code in the disassembly that let's you brute force the rom to work in gb mode? The reason I'm asking is that I'm using an emulator in a DIY device that only recognizes the rom in gbc mode and I want to try it in the monochrome gb mode. Or if all else fails, should I try building the rom without the palettes codes instead?
    Most emulators will have a way to only boot in GB, whether by changing the device it boots in or by forcing GB mode. It's how we also get those "only compatibile with game boy color" screens in GBC games.
     
    536
    Posts
    4
    Years
    • Seen today
    Hi! I got a question. Is there a code in the disassembly that let's you brute force the rom to work in gb mode? The reason I'm asking is that I'm using an emulator in a DIY device that only recognizes the rom in gbc mode and I want to try it in the monochrome gb mode. Or if all else fails, should I try building the rom without the palettes codes instead?

    As Chronosplit said, the best way to do this is by adjusting the emulator settings to boot in DMG mode rather than GBC mode. But it sounds like this is may not be an option in your case due to limitations of your hardware.

    To answer your question, yes the code can be compiled as DMG roms instead of GBC roms. But I must state that there is nothing in the assembly code that does this. There is a single value in the header portion of every gameboy rom that identifies whether or not the game is a DMG game (gray cartridge), GBC-compatible (black cartridge), or GBC-only (clear cartridge).

    Go into the file called Makefile and scroll all the way down to all the header options for the roms. One set of options on all of them is "-cjsv". The letters tell the compiler to set the following header options:
    - "c" (lowercase) means the game is a GBC game that also works on the DMG.
    - "j" means non-japan region.
    - "s" means the game contains super gameboy enhancements.
    - "v" tells the compiler to validate the rom header and adjust the checksum so that a real gameboy will load it.
    A full list of definitions can be found here: https://rgbds.gbdev.io/docs/v0.3.0/rgbfix.1.pdf
    All you have to do is remove the "c" option from each rom in the Makefile and recompile.

    Alternately, you could try manually editing header with a hex editor.
    The header structure is described here: https://gbdev.io/pandocs/The_Cartridge_Header.html
    The TLDR of this is to first open a shin pokemon rom in a hex editor. Go to address $0143. It will probably have a value of $80. Set it to a value of $00 instead and save your change. Don't worry about the checksum because most emulators won't care about it being valid and will run the game anyway.
     
    2
    Posts
    5
    Years
    • Seen Nov 25, 2021
    Thank you jojobear and chronosplit. I was actually able to make this work just now. What I did is use the gameboy rom analyzer(https://www.romhacking.net/utilities/1343/) unchecked the gbc,sgb, and gb options, and edited the header title to "POKEMON RED0000" to make it 15bits only (16bit make it gbc ive read somewhere). This might be a brute force method and I might use the makefile procedure you used as it seems to be safer.
    Thanks!
     
    Back
    Top