You are not logged in.
I've put this as reference in this location that could be reached quickly by newbies without searching in the disassembly project.
This will be handy also when I'll post my Item Hacking tutorial here in this section.
This is the list of items in Red\Blue\Yellow (and Green) sort by his index number:
MASTER BALL $01 ULTRA BALL $02 GREAT BALL $03 POKE BALL $04 TOWN MAP $05 BICYCLE $06 SURFBOARD $07 ; Unused and glitchy, it corrupts the Hall Of Fame data. SAFARI BALL $08 POKEDEX $09 MOON STONE $0A ANTIDOTE $0B BURN HEAL $0C ICE HEAL $0D AWAKENING $0E PARLYZ HEAL $0F FULL RESTORE $10 MAX POTION $11 HYPER POTION $12 SUPER POTION $13 POTION $14 BOULDERBADGE $15 ; unused, used only for Badge List in Cerulean House. CASCADEBADGE $16 ; unused, used only for Badge List in Cerulean House. THUNDERBADGE $17 ; unused, used only for Badge List in Cerulean House. RAINBOWBADGE $18 ; unused, used only for Badge List in Cerulean House. SOULBADGE $19 ; unused, used only for Badge List in Cerulean House. MARSHBADGE $1A ; unused, used only for Badge List in Cerulean House. VOLCANOBADGE $1B ; unused, used only for Badge List in Cerulean House. EARTHBADGE $1C ; unused, used only for Badge List in Cerulean House. ESCAPE ROPE $1D REPEL $1E OLD AMBER $1F FIRE STONE $20 THUNDER STONE $21 WATER STONE $22 HP UP $23 PROTEIN $24 IRON $25 CARBOS $26 CALCIUM $27 RARE CANDY $28 DOME FOSSIL $29 HELIX FOSSIL $2A SECRET KEY $2B ;????? $2C ; Supposed to be a Key Item then removed. BIKE VOUCHER $2D X ACCURACY $2E LEAF STONE $2F CARD KEY $30 NUGGET $31 ;FAKE PP UP $32 ; It has no use. POKE DOLL $33 FULL HEAL $34 REVIVE $35 MAX REVIVE $36 GUARD SPEC $37 SUPER REPEL $38 MAX REPEL $39 DIRE HIT $3A COIN $3B ; It has no use, replaced by Casino Coins in Coin Case. FRESH WATER $3C SODA POP $3D LEMONADE $3E S S TICKET $3F GOLD TEETH $40 X ATTACK $41 X DEFEND $42 X SPEED $43 X SPECIAL $44 COIN CASE $45 OAKS PARCEL $46 ITEMFINDER $47 SILPH SCOPE $48 POKE FLUTE $49 LIFT KEY $4A EXP ALL $4B OLD ROD $4C GOOD ROD $4D SUPER ROD $4E PP UP $4F ETHER $50 MAX ETHER $51 ELIXER $52 MAX ELIXER $53 ; After $53 There are glitchy items used only for the Elevators ; such as 1F, 8F, etc. ; Most of those items are glitchy and corrupts the game. ; ;--------- ; ; HM\TM Items List. ;Begins with HM 01 with index number $C4. ; HM 01 $C4 HM 02 $C5 HM 03 $C6 HM 04 $C7 HM 05 $C8 TM 01 $C9 TM 02 $CA TM 03 $CB TM 04 $CC TM 05 $CD TM 06 $CE TM 07 $CF TM 08 $D0 TM 09 $D1 TM 10 $D2 TM 11 $D3 TM 12 $D4 TM 13 $D5 TM 14 $D6 TM 15 $D7 TM 16 $D8 TM 17 $D9 TM 18 $DA TM 19 $DB TM 20 $DC TM 21 $DD TM 22 $DE TM 23 $DF TM 24 $E0 TM 25 $E1 TM 26 $E2 TM 27 $E3 TM 28 $E4 TM 29 $E5 TM 30 $E6 TM 31 $E7 TM 32 $E8 TM 33 $E9 TM 34 $EA TM 35 $EB TM 36 $EC TM 37 $ED TM 38 $EE TM 39 $EF TM 40 $F0 TM 41 $F1 TM 42 $F2 TM 43 $F3 TM 44 $F4 TM 45 $F5 TM 46 $F6 TM 47 $F7 TM 48 $F8 TM 49 $F9 TM 50 $FA ; ;end of Item Data.
Well, here's this new Hacking Tutorial made by me and meant for newbie hackers which wish to hack the R\B Item Datas with HexEditing since there are no Programs (or at least, not known yet) for Generation 1 that are able to do so much changes.
In R\B (and also Y & G) Item data are split in 3 parts: Item Names, Item Use and Item Prices.
Here is everything that you need:
*0: (ESSENTIAL): Your ROM, a decent Hex Editor and a decent brain;
*1: The reference of the Item List by Index Number: http://hax.iimarck.us/topic/3934/
*2: A lot of time;
*3: A lot of patience;
*4: A lot of Ginger Soda to contrast de-hydratation as consequence of hacking;
*5: Follow the following 3 (or 4) steps accurately:
STEP 01: HACK ITEM NAMES
The table that contains Item Names it's located at 0x472B (01:472B).
If you want use a larger name you'll have to move the names after that a few bytes after and then insert the new name replacing an old one.
Keep in mind that the max allowed number of characters for an item name is 12.
Don't forget also that if you have too much space you'll have to repoint the table.
In that case, pointers are located at:
This was taken from the disassembly project:
ItemNames: ; 472b (1:472b) db "MASTER BALL@" db "ULTRA BALL@" db "GREAT BALL@" db "POKÃ© BALL@" db "TOWN MAP@" db "BICYCLE@" db "?????@" db "SAFARI BALL@" db "POKÃ©DEX@" db "MOON STONE@" db "ANTIDOTE@" db "BURN HEAL@" db "ICE HEAL@" db "AWAKENING@" db "PARLYZ HEAL@" db "FULL RESTORE@" db "MAX POTION@" db "HYPER POTION@" db "SUPER POTION@" db "POTION@" db "BOULDERBADGE@" db "CASCADEBADGE@" db "THUNDERBADGE@" db "RAINBOWBADGE@" db "SOULBADGE@" db "MARSHBADGE@" db "VOLCANOBADGE@" db "EARTHBADGE@" db "ESCAPE ROPE@" db "REPEL@" db "OLD AMBER@" db "FIRE STONE@" db "THUNDERSTONE@" db "WATER STONE@" db "HP UP@" db "PROTEIN@" db "IRON@" db "CARBOS@" db "CALCIUM@" db "RARE CANDY@" db "DOME FOSSIL@" db "HELIX FOSSIL@" db "SECRET KEY@" db "?????@" db "BIKE VOUCHER@" db "X ACCURACY@" db "LEAF STONE@" db "CARD KEY@" db "NUGGET@" db "PP UP@" db "POKÃ© DOLL@" db "FULL HEAL@" db "REVIVE@" db "MAX REVIVE@" db "GUARD SPEC.@" db "SUPER REPEL@" db "MAX REPEL@" db "DIRE HIT@" db "COIN@" db "FRESH WATER@" db "SODA POP@" db "LEMONADE@" db "S.S.TICKET@" db "GOLD TEETH@" db "X ATTACK@" db "X DEFEND@" db "X SPEED@" db "X SPECIAL@" db "COIN CASE@" db "OAK's PARCEL@" db "ITEMFINDER@" db "SILPH SCOPE@" db "POKÃ© FLUTE@" db "LIFT KEY@" db "EXP.ALL@" db "OLD ROD@" db "GOOD ROD@" db "SUPER ROD@" db "PP UP@" db "ETHER@" db "MAX ETHER@" db "ELIXER@" db "MAX ELIXER@" db "B2F@" db "B1F@" db "1F@" db "2F@" db "3F@" db "4F@" db "5F@" db "6F@" db "7F@" db "8F@" db "9F@" db "10F@" db "11F@" db "B4F@" UnusedNames: ; 4a92 (1:4a92)
The unused Names are in garbled format and I actually don't know if those are used in other versions of the game or not such as the Japanese one.
STEP 02: HACK ITEM PRICE
There are already programs for changing item prices, but what programs don't do yet is change those information even if tose were repointed XP.
Actually you could repoint the table so, in case you need new prices for items you added, you could add new prices.
If you want repoint this stuff, keep in mind that pointers are located at:
The Table itself of Item Prices is originally located at 0x4608 (01:4608).
Each 3 bytes a price is indicated.
example: UltraBall price: $00,$12,$00.
This happens simply because Hexadecimal values in a single byte could cover a range of 00-FF (0 - 255) but prices are often higher than 255.
Anyway, keep attention because in this case the bytes are written in a decimal-like format, so if an item costs "1200" then its bytes will be " 00, 12, 00" so watch out!
STEP 03: HACK ITEM USE
Now the most important part of data: Item Use Data.
There's a table located at 0xD5E1 (03:55E1) which contains a list of pointers for Item Usage.
Each item has 1 pointer (formed by 2 bytes in little endian order) which points to a particular routine in the same bank.
This means that, if for some reasons you moved one of those previously then you'll have to repoint each item associated to its usage.
This comes from the Disassembly Project:
ItemUsePtrTable: ; d5e1 (3:55e1) dw ItemUseBall ; MASTER_BALL dw ItemUseBall ; ULTRA_BALL dw ItemUseBall ; GREAT_BALL dw ItemUseBall ; POKE_BALL dw ItemUseTownMap ; TOWN_MAP dw ItemUseBicycle ; BICYCLE dw ItemUseSurfboard ; out-of-battle Surf effect dw ItemUseBall ; SAFARI_BALL dw ItemUsePokedex ; POKEDEX dw ItemUseEvoStone ; MOON_STONE dw ItemUseMedicine ; ANTIDOTE dw ItemUseMedicine ; BURN_HEAL dw ItemUseMedicine ; ICE_HEAL dw ItemUseMedicine ; AWAKENING dw ItemUseMedicine ; PARLYZ_HEAL dw ItemUseMedicine ; FULL_RESTORE dw ItemUseMedicine ; MAX_POTION dw ItemUseMedicine ; HYPER_POTION dw ItemUseMedicine ; SUPER_POTION dw ItemUseMedicine ; POTION dw ItemUseBait ; BOULDERBADGE dw ItemUseRock ; CASCADEBADGE dw UnusableItem ; THUNDERBADGE dw UnusableItem ; RAINBOWBADGE dw UnusableItem ; SOULBADGE dw UnusableItem ; MARSHBADGE dw UnusableItem ; VOLCANOBADGE dw UnusableItem ; EARTHBADGE dw ItemUseEscapeRope ; ESCAPE_ROPE dw ItemUseRepel ; REPEL dw UnusableItem ; OLD_AMBER dw ItemUseEvoStone ; FIRE_STONE dw ItemUseEvoStone ; THUNDER_STONE dw ItemUseEvoStone ; WATER_STONE dw ItemUseVitamin ; HP_UP dw ItemUseVitamin ; PROTEIN dw ItemUseVitamin ; IRON dw ItemUseVitamin ; CARBOS dw ItemUseVitamin ; CALCIUM dw ItemUseVitamin ; RARE_CANDY dw UnusableItem ; DOME_FOSSIL dw UnusableItem ; HELIX_FOSSIL dw UnusableItem ; SECRET_KEY dw UnusableItem dw UnusableItem ; BIKE_VOUCHER dw ItemUseXAccuracy ; X_ACCURACY dw ItemUseEvoStone ; LEAF_STONE dw ItemUseCardKey ; CARD_KEY dw UnusableItem ; NUGGET dw UnusableItem ; ??? PP_UP dw ItemUsePokedoll ; POKE_DOLL dw ItemUseMedicine ; FULL_HEAL dw ItemUseMedicine ; REVIVE dw ItemUseMedicine ; MAX_REVIVE dw ItemUseGuardSpec ; GUARD_SPEC_ dw ItemUseSuperRepel ; SUPER_REPL dw ItemUseMaxRepel ; MAX_REPEL dw ItemUseDireHit ; DIRE_HIT dw UnusableItem ; COIN dw ItemUseMedicine ; FRESH_WATER dw ItemUseMedicine ; SODA_POP dw ItemUseMedicine ; LEMONADE dw UnusableItem ; S_S__TICKET dw UnusableItem ; GOLD_TEETH dw ItemUseXStat ; X_ATTACK dw ItemUseXStat ; X_DEFEND dw ItemUseXStat ; X_SPEED dw ItemUseXStat ; X_SPECIAL dw ItemUseCoinCase ; COIN_CASE dw ItemUseOaksParcel ; OAKS_PARCEL dw ItemUseItemfinder ; ITEMFINDER dw UnusableItem ; SILPH_SCOPE dw ItemUsePokeflute ; POKE_FLUTE dw UnusableItem ; LIFT_KEY dw UnusableItem ; EXP__ALL dw OldRodCode ; OLD_ROD dw GoodRodCode ; GOOD_ROD dw SuperRodCode ; SUPER_ROD dw ItemUsePPUp ; PP_UP (real one) dw ItemUsePPRestore ; ETHER dw ItemUsePPRestore ; MAX_ETHER dw ItemUsePPRestore ; ELIXER dw ItemUsePPRestore ; MAX_ELIXER
If you want change the use of an item simply change its pointer to the adress of another asm code.
This means that actually you might be able to create some new codes and then adress the item usage to this new code being, infact, to create items with new usages (as I did previously in some of my hacks).
STEP 04: OPTIONAL
Aka: Last additional part for Items which use is meant for the Party Menu:
There's a table for that kind of issue, it's located at 0x13434 (04:7434)
Probabilly you need to repoint it in free space if you added evolution items (or even new healing items).
Unfortunately I don't know exactly the adress of the pointer since personally I haven't yet hacked those part of data (as for 11-17-2013, I'll change it for sure).
Anyway fortunately there's only 1 pointer which is located many adresses earlier before 0x1342a (04:742a).
db MOON_STONE db ANTIDOTE db BURN_HEAL db ICE_HEAL db AWAKENING db PARLYZ_HEAL db FULL_RESTORE db MAX_POTION db HYPER_POTION db SUPER_POTION db POTION db FIRE_STONE db THUNDER_STONE db WATER_STONE db HP_UP db PROTEIN db IRON db CARBOS db CALCIUM db RARE_CANDY db LEAF_STONE db FULL_HEAL db REVIVE db MAX_REVIVE db FRESH_WATER db SODA_POP db LEMONADE db X_ATTACK db X_DEFEND db X_SPEED db X_SPECIAL db PP_UP db ETHER db MAX_ETHER db ELIXER db MAX_ELIXER db $ff
And there's another table (Optional) if you eventually added new Key Items which use is meant for the outside:
Those are items which close the item menu when used.
UsableItems_CloseMenu: ; 13459 (4:7459) db ESCAPE_ROPE db ITEMFINDER db POKE_FLUTE db OLD_ROD db GOOD_ROD db SUPER_ROD db $ff
If you're looking further to build your ultimate Red\Blue hack and eventually create the ultimate tool for lazy hackers, this thread is a must for you.
*2Marck and Co. for the awesome Red Disassembly documents and stuff;
*Me (80C) for the holy patience of writing this huge tutorial;
*Gamefreak for stuff;
*End of list XP
Good work, 80C. Looks very informative.
Good work, 80C. Looks very informative.
This tutorial worked also for me in the last part - I mean part 4, the optional one, so I could confirme it works.
Anyway I forgot (again) where was that pointer, anyway next time when I'll have the necessarily material time I'll post it for sure.
Also, this tutorial is more updated than KBM's tutorial on Item Hacking (which was really old).
No problem ;)
I'm still going over some materials, but I wanted to see if there were any updates or notes for this I'm not seeing elsewhere.
I have successfully hacked in some items, one being an evolution stone, that functions just fine. It isn't tracking quantity however. Has anyone run across items not adding up in inventory, and is there something in particular to set?
Pokemon: Project Neo A Pokemon hack 15 years in the making...
This has to do with KeyItemBitField:
You should add one more byte to this table to define the new item as being not a key item, since key items to not have quantity.
Thank you gentlemen (?), I wasn't doing anything with KeyItems so I skipped over reading up on that.
Should work out to replace the line "ld bc,15" with "ld bc, NUM_ITEMS+7/8", as had been suggested about the Pokemon yes? (NUM_ITEMS being a new constant)
Last edited by daMoose52 (2014-12-15 23:34:09)
Pokemon: Project Neo A Pokemon hack 15 years in the making...