Skeetendo

’Cause all games were better on the GBC

You are not logged in.

#1 2013-11-17 15:14:50

80C
Banned
Registered: 2013-03-16
Post 1,191/1,257

[R\B] Item Hacking Tutorial

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.

I left this forum.

Offline

#2 2013-11-17 16:03:11

80C
Banned
Registered: 2013-03-16
Post 1,192/1,257

Re: [R\B] Item Hacking Tutorial

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:
*0x39CB
*0x39c14

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:
*39C2C

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.

--------------------------
CREDITS:

*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


I left this forum.

Offline

#3 2013-11-18 05:36:05

Hat
Member
Registered: 2013-02-04
Post 61/118

Re: [R\B] Item Hacking Tutorial

Good work, 80C. Looks very informative.

Offline

#4 2013-11-19 21:24:42

80C
Banned
Registered: 2013-03-16
Post 1,198/1,257

Re: [R\B] Item Hacking Tutorial

Hat wrote:

Good work, 80C. Looks very informative.

Thank you!
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).


I left this forum.

Offline

#5 2013-11-21 12:38:02

Hat
Member
Registered: 2013-02-04
Post 64/118

Re: [R\B] Item Hacking Tutorial

80C wrote:

Thank you!

No problem ;)

Offline

#6 2014-12-15 04:20:33

daMoose52
Member
Registered: 2014-11-14
Post 11/108
Website

Re: [R\B] Item Hacking Tutorial

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

Offline

#7 2014-12-15 16:17:30

Danny-E 33
Administrator
Registered: 2012-06-09
Post 827/1,119

Re: [R\B] Item Hacking Tutorial

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.

Offline

#8 2014-12-15 20:00:30

comet
Member
Registered: 2012-04-09
Post 493/679

Re: [R\B] Item Hacking Tutorial

You'll also want to change how KeyItemBitField is read by IsKeyItem_ if you add more than 32 items.

Offline

#9 2014-12-15 23:14:01

daMoose52
Member
Registered: 2014-11-14
Post 12/108
Website

Re: [R\B] Item Hacking Tutorial

Ahhhh!
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...

Offline

Board footer

Powered by FluxBB