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

Are there any ROM Hacks that incorporate the Nuzlocke Challenge as a central theme?

2
Posts
11
Years
  • Seen Apr 4, 2013
I think this is a very interesting idea to set in stone, so that the player can't deviate from the rules or have to waste time releasing each pokemon.
 

Agastya

Grinding failed. Item Grind level dropped by 3.
73
Posts
14
Years
  • Age 33
  • Seen Mar 19, 2023
there have been a few hacks in sideshow that have 'enforced' fainted = dead. they use some wizardry and force pokemon in your party to disappear at the end of battle if they have the faint status. they don't actually prevent you from capturing more than the first pokemon you see on a route though, since there's so many wimp clauses that prevent you from having an army of rattatas.

i don't remember the links to them, but there's silver(?) and fr off the top of my head. i believe they're "silver nuzlocke edition" and "fire red roguelike" but i'm probably wrong about the second one.
i want to say there's a gen 1 version as well, but don't quote me on that.
 
5,256
Posts
16
Years
Using JPAN's Hacked FireRed Engine, you could make it so that fainted Pokémon essentially die. Perhaps, each time you go the Pokémon Center to heal your Pokémon the following happens:

Code:
#dynamic 0x800000

//---------------
#org @start
lock
faceplayer
call @snippet1
release
end

[B]//---------------
#org @snippet1
msgbox @string1 MSG_KEEPOPEN //"Welcome to our POKéMON CENTER!\pPl..."
closeonkeypress
setvar 0x8004 0x0 [color=red]// This will first check the Pokémon in the 1st Slot of the Player's party.[/color]
goto @snippet2

//---------------
#org @snippet2
compare 0x8004 0x6  [color=red]// If the script is going to check the (non-existent) 7th slot, instead go to @snippet3.[/color]
if 0x1 goto @snippet3
special2 LASTRESULT 0x65  [color=red]// Otherwise, check the HP of the Pokémon in the current slot.[/color]
compare LASTRESULT 0x0  [color=red]// If the HP is equal to 0...[/color]
if 0x1 call @snippet4  [color=red]// ...then call @snippet4[/color]
addvar 0x8004 0x1  [color=red]// Move onto the next slot...[/color]
goto @snippet2  [color=red]// ...and repeat the process.[/color]

//---------------
#org @snippet3
compare 0x8005 0x1 
if 0x0 call @snippet5 [color=red]// If a Pokémon hasn't been erased, then call @snippet5.[/color]
goto @snippet6 [color=red]// Go to @snippet6[/color]

//---------------
#org @snippet4
special 0x62 [color=red]// Erase the party Pokémon in the current slot.[/color]
setvar 0x8005 0x1 [color=red]// Tell the script that at least one Pokémon has been erased.[/color]
return [color=red]// Go back to @snippet2.[/color]

//---------------
#org @snippet5
msgbox @string2 MSG_FACE //"Oh, you don't have any fainted Pok..." [color=red]// Display a congratulatory message for not sucking at keeping your Pokémon alive.[/color]
return [color=red]// Go back to @snippet3, essentially to go to @snippet6, which is just the normal Pokémon Center script.[/color]
[/B]

//---------------
#org @snippet6
special 0x187
compare LASTRESULT 0x2
if 0x1 goto @snippet7
preparemsg @string3 //"Now, would you like me to\nheal yo..."
waitmsg
multichoice 0x13 0x8 0x0 0x2
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if 0x1 goto @snippet8
compare 0x8000 0x1
if 0x1 goto @snippet9
compare 0x8000 0x7F
if 0x1 goto @snippet9
end

//---------------
#org @snippet7
release
end

//---------------
#org @snippet8
cmdc3 0xF
preparemsg @string4 //"Okay, I'll take your POKéMON for a..."
waitmsg
call @snippet10
special 0x169
goto @snippet11

//---------------
#org @snippet9
msgbox @string5 MSG_KEEPOPEN //"We hope to see you again!"
return

//---------------
#org @snippet10
applymovement LASTTALKED @move1
waitmovement 0x0
doanimation 0x19
checkanimation 0x19
applymovement LASTTALKED @move2
waitmovement 0x0
special 0x0
return

//---------------
#org @snippet11
special2 LASTRESULT 0x1B1
compare LASTRESULT 0x0
if 0x1 goto @snippet12
special2 LASTRESULT 0x183
copyvar 0x8008 LASTRESULT
compare 0x8008 0x0
if 0x1 goto @snippet12
compare 0x8008 0x1
if 0x1 goto @snippet13
end

//---------------
#org @snippet12
preparemsg @string6 //"Thank you for waiting.\nWe've rest..."
waitmsg
applymovement LASTTALKED @move3
waitmovement 0x0
msgbox @string5 MSG_KEEPOPEN //"We hope to see you again!"
return

//---------------
#org @snippet13
checkflag 0x842
if 0x1 goto @snippet12
msgbox @string6 MSG_KEEPOPEN //"Thank you for waiting.\nWe've rest..."
setflag 0x842
preparemsg @string7 //"It appears as if [buffer1] is play..."
waitmsg
applymovement LASTTALKED @move3
waitmovement 0x0
msgbox @string5 MSG_KEEPOPEN //"We hope to see you again!"
return


//---------
// Strings
//---------
[B]#org @string1
= Welcome to our POKéMON CENTER!\pPlease hand over any fainted\nPOKéMON you have.\pIt's the POKéMON LEAGUE's new\npolicy that any fainted POKéMON\lare to be permanently confiscated.

#org @string2
= Oh, you don't have any fainted Pokémon?\nThat's great!

#org @string3
= Now, would you like me to\nheal your POKéMON back to\lperfect health?[/B]

#org @string4
= Okay, I'll take your POKéMON for a\nfew seconds.

#org @string5
= We hope to see you again!

#org @string6
= Thank you for waiting.\nWe've restored your POKéMON to\lfull health.

#org @string7
= It appears as if [buffer1] is playing\nright now.\lGo for it!


//-----------
// Movements
//-----------
#org @move1
#raw 0x2F //Face Left (Delayed)
#raw 0xFE //End of Movements

#org @move2
#raw 0x2D //Face Down (Delayed)
#raw 0xFE //End of Movements

#org @move3
#raw 0x5B //mov5B
#raw 0x1A //Delay3
#raw 0xFE //End of Movements

Bolded text are changes I've made to the original Pokémon Center script.

That will erase each fainted Pokémon in the player's party when they go to heal their Pokémon at the Pokémon Center. Then you just need to get rid of all of the Revives, Max Revives and Revival Herbs (or, if you're really lazy, just change their effects in Item Manager to do nothing) in the game, and that will be that.

I'm not too sure about the rest of the rules, but this is progress at least.
 
Last edited:

Agastya

Grinding failed. Item Grind level dropped by 3.
73
Posts
14
Years
  • Age 33
  • Seen Mar 19, 2023
that will not stop people from healing fainted pokemon by putting them in pc storage and instantly withdrawing them
 
5,256
Posts
16
Years
Maybe a similar thing could be added when the Player boots up the PC? I'm not sure where that script is located but it doesn't seem too implausible. You could also maybe apply the Pokémon-removing part of that script to each map as a level script using the "05 On entering map/on menu close" level script, but that would probably result in lag. Idk.

Either way, this isn't that good anyway because most people don't nuzlocke FireRed, at least in my experience, it tends to be Emerald/Plat/HG/B/B2, and maybe things like Volt White or Blaze Black.
 
1,772
Posts
15
Years
I'm pretty sure Miksy made a hack of a second gen game with some Nuzlocke rules in place...

Sure enough:
http://www.pokecommunity.com/showthread.php?t=282684

Basically he just made it so fainted Pokémon are permanently removed from the party. I think it'd be significantly more difficult to permit players to ONLY be able to catch the first Pokémon they encounter in each Route, to say the very least. But this hack is certainly a good part of the way there.
 

miksy91

Dark Energy is back in action! ;)
1,480
Posts
15
Years
Well, I was about to contribute writing about my hack there but gira got first in my place :D

But anyway, that hack I made is basically made to remove all the pokemon in party that have 0 HP, each time a map is loaded. It also has the battle endings changed so that when you would normally "black out", a "game over music" is played and the text box will keep displaying text string "GAME OVER!!!" and the script continues by calling an infinite loop (so that the player can't do a thing).

But although it's a bit different, it somewhat sticks to the rules.

I think it'd be significantly more difficult to permit players to ONLY be able to catch the first Pokémon they encounter in each Route, to say the very least. But this hack is certainly a good part of the way there.
This shouldn't be so bad either, but the coding would have to be modified so that it loads data from a "have you caught a pokemon in this route already?" table everytime the player is about to throw a pokeball. If a bit of the area the player is on is set in this table, it could for example load the same code that is used in the game when trying to catch Ghost or some trainer's pokemon.

This would totally require finding enough space in ram for fitting in such table first though.
 
Last edited:
Back
Top