Skip to content

A New Evolution Item

RainbowMetalPigeon edited this page Mar 17, 2023 · 14 revisions

How To Add A New Evolution Item

This tutorial will go over how to add a new normal item. As an example, we'll be adding the metal_coat.

Contents

  1. Define a ITEM Constant
  2. Give the ITEM a Name
  3. Give the ITEM a Price
  4. Give the ITEM a effect
  5. Lets give the ITEM the effect to use in Menu
  6. Define if the ITEM is a KEY ITEM

1. Define a ITEM Constant

Edit constants/item_constants.asm:

	const_def
	const MASTER_BALL   ; $01
	const ULTRA_BALL    ; $02
	const GREAT_BALL    ; $03
	...
	const MAX_ELIXER    ; $53
+	const METAL_COAT    ; $62
DEF NUM_ITEMS EQU const_value - 1

2. Give The ITEM a Name

Edit data/items/names.asm:

ItemNames:
	list_start ItemNames
	li "MASTER BALL"
	li "ULTRA BALL"
	...
	li "MAX ELIXER"
+	li "METAL COAT"
	assert_list_length NUM_ITEMS

3. Give the ITEM a Price

Edit data/items/prices.asm:

ItemPrices:
	bcd3 0     ; MASTER_BALL
	bcd3 1200  ; ULTRA_BALL
	...
	bcd3 0     ; MAX_ELIXER
+	bcd3 2100  ; METAL_COAT
	assert_table_length NUM_ITEMS

4. Give the ITEM a effect

Edit engine/items/item_effects.asm:

UseItem_:
	ld a, 1
	ld [wActionResultOrTookBattleTurn], a ; initialise to success value
	...
ItemUsePtrTable:
	dw ItemUseBall       ; MASTER_BALL
	dw ItemUseBall       ; ULTRA_BALL
	...
	dw ItemUsePPRestore  ; MAX_ELIXER
+	dw ItemUseEvoStone   ; METAL_COAT

ItemUseBall:

5. Lets give the ITEM the effect to use in Menu

Edit data/items/use_party.asm:

; items which bring up the party menu when used
UsableItems_PartyMenu:
	db MOON_STONE
	db ANTIDOTE
	...
	db MAX_ELIXER
+	db METAL_COAT
	db -1 ; end

6. Define if the ITEM is a KEY ITEM

Edit data/items/key_items.asm:

KeyItemFlags:
	bit_array KeyItemFlags
	dbit FALSE ; MASTER_BALL
	dbit FALSE ; ULTRA_BALL
	...
	dbit TRUE  ; SILPH_SCOPE
	...
	dbit FALSE ; MAX_ELIXER
+	dbit FALSE ; METAL_COAT
	end_bit_array NUM_ITEMS

And that's it! You've added a new evolution ITEM into the game.