summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authori0brendan0 <19826742+i0brendan0@users.noreply.github.com>2018-06-04 14:50:50 -0500
committeri0brendan0 <19826742+i0brendan0@users.noreply.github.com>2018-06-04 14:50:50 -0500
commitbedd06282b463693e9d6a66e784e6c3f21aa0810 (patch)
tree2aae5c695be016666954e6ed5100c8b6c381cff9
parentdac4d9f1e957e877a08d8b9fad2d407bb40a2a7e (diff)
Revert a8995cb36010f950a0a5d1bfea79b32d52e688cb...dac4d9f1e957e877a08d8b9fad2d407bb40a2a7e on Add a new Fairy type
-rw-r--r--Add-a-new-Fairy-type.md170
1 files changed, 168 insertions, 2 deletions
diff --git a/Add-a-new-Fairy-type.md b/Add-a-new-Fairy-type.md
index e751156..0f5fcd7 100644
--- a/Add-a-new-Fairy-type.md
+++ b/Add-a-new-Fairy-type.md
@@ -1,4 +1,4 @@
-This tutorial is for how to add a new type for Pokémon or moves. As an example, we'll add the Fairy type introduced in Gen 6.
+This tutorial is for how to add a new type for Pokémon or moves. As an example, we'll add the Fairy type from Gen 7.
## Contents
@@ -30,4 +30,170 @@ Edit [constants/type_constants.asm](../blob/master/constants/type_constants.asm)
const DARK
+ const FAIRY
TYPES_END EQU const_value
-``` \ No newline at end of file
+```
+
+(If you're using an old version of pokecrystal where the `EGG_FAIRY` egg group constant was still called `FAIRY`, you'll have to name the type something different, like `FAIRY_T` or `FAERIE`.)
+
+
+## 2. Give the type a name
+
+Edit [data/types/names.asm](../blob/master/data/types/names.asm):
+
+```diff
+ TypeNames: ; 5097b
+ ; entries correspond to types (see constants/type_constants.asm)
+ dw Normal
+ ...
+ dw Dark
++ dw Fairy
+
+ Normal: db "NORMAL@"
+ ...
+ Dark: db "DARK@"
++Fairy: db "FAIRY@"
+```
+
+
+## 3. List the type matchups
+
+Edit [data/types/type_matchups.asm](../blob/master/data/types/type_matchups.asm):
+
+```diff
+ TypeMatchups: ; 34bb1
+ ; attacker, defender, *=
+ db NORMAL, ROCK, NOT_VERY_EFFECTIVE
+ db NORMAL, STEEL, NOT_VERY_EFFECTIVE
+ ...
++ db FIGHTING, FAIRY, NOT_VERY_EFFECTIVE
++ db POISON, FAIRY, SUPER_EFFECTIVE
++ db BUG, FAIRY, NOT_VERY_EFFECTIVE
++ db DRAGON, FAIRY, NO_EFFECT
++ db DARK, FAIRY, NOT_VERY_EFFECTIVE
++ db STEEL, FAIRY, SUPER_EFFECTIVE
++ db FAIRY, POISON, NOT_VERY_EFFECTIVE
++ db FAIRY, DRAGON, SUPER_EFFECTIVE
++ db FAIRY, DARK, SUPER_EFFECTIVE
++ db FAIRY, STEEL, NOT_VERY_EFFECTIVE
+
+ db -2 ; end (with Foresight)
+
+ ; Foresight removes Ghost's immunities.
+ db NORMAL, GHOST, NO_EFFECT
+ db FIGHTING, GHOST, NO_EFFECT
+
+ db -1 ; end
+```
+
+
+## 4. Make it searchable in the Pokédex
+
+These tables are used for the Pokédex's type search feature.
+
+Edit [data/types/search_types.asm](../blob/master/data/types/search_types.asm):
+
+```diff
+ PokedexTypeSearchConversionTable: ; 410f6
+ ; entries correspond with PokedexTypeSearchStrings (see data/types/search_strings.asm)
+ db NORMAL
+ ...
+ db STEEL
++ db FAIRY
+ ; 41107
+```
+
+Edit [data/types/search_strings.asm](../blob/master/data/types/search_strings.asm):
+
+```diff
+ PokedexTypeSearchStrings: ; 40fe4
+ ; entries correspond with PokedexTypeSearchConversionTable (see data/types/search_types.asm)
+ db " ---- @"
+ db " NORMAL @"
+ ...
+ db " STEEL @"
++ db " FAIRY @"
+ ; 41086
+```
+
+
+## 5. Update Pokémon types
+
+Edit the type entries in [data/pokemon/base_stats/](../blob/master/data/pokemon/base_stats/):
+
+- [azumarill.asm](../blob/master/data/pokemon/base_stats/azumarill.asm): `WATER, WATER` → `WATER, FAIRY`
+- [clefable.asm](../blob/master/data/pokemon/base_stats/clefable.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [clefairy.asm](../blob/master/data/pokemon/base_stats/clefairy.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [cleffa.asm](../blob/master/data/pokemon/base_stats/cleffa.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [granbull.asm](../blob/master/data/pokemon/base_stats/granbull.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [igglybuff.asm](../blob/master/data/pokemon/base_stats/igglybuff.asm): `NORMAL, NORMAL` → `NORMAL, FAIRY`
+- [jigglypuff.asm](../blob/master/data/pokemon/base_stats/jigglypuff.asm): `NORMAL, NORMAL` → `NORMAL, FAIRY`
+- [marill.asm](../blob/master/data/pokemon/base_stats/marill.asm): `WATER, WATER` → `WATER, FAIRY`
+- [mr__mime.asm](../blob/master/data/pokemon/base_stats/mr__mime.asm): `PSYCHIC, PSYCHIC` → `PSYCHIC, FAIRY`
+- [snubbull.asm](../blob/master/data/pokemon/base_stats/snubbull.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [togepi.asm](../blob/master/data/pokemon/base_stats/togepi.asm): `NORMAL, NORMAL` → `FAIRY, FAIRY`
+- [togetic.asm](../blob/master/data/pokemon/base_stats/togetic.asm): `NORMAL, FLYING` → `FAIRY, FLYING`
+- [wigglytuff.asm](../blob/master/data/pokemon/base_stats/wigglytuff.asm): `NORMAL, NORMAL` → `NORMAL, FAIRY`
+
+
+## 6. Update move types
+
+Edit the type columns in [data/moves/moves.asm](../blob/master/data/moves/moves.asm):
+
+- `CHARM`: `NORMAL` → `FAIRY`
+- `SWEET_KISS`: `NORMAL` → `FAIRY`
+- `MOONLIGHT`: `NORMAL` → `FAIRY`
+
+
+## 7. Change `POLKADOT_BOW` to boost Fairy moves
+
+At this point we're technically done: all the canon aspects of the Fairy type are implemented. (If you want to add new Fairy-type Pokémon or moves, check out different tutorials.) But there's no held type-boosting item for it, and Gen 2 happens to have the unavailable `POLKADOT_BOW` item that boosts Normal moves like `PINK_BOW`, so let's change it to boost Fairy moves instead.
+
+Edit [data/types/type_boost_items.asm](../blob/master/data/types/type_boost_items.asm):
+
+```diff
+ TypeBoostItems: ; 35703
+- db HELD_NORMAL_BOOST, NORMAL ; PINK_BOW/POLKADOT_BOW
++ db HELD_NORMAL_BOOST, NORMAL ; PINK_BOW
+ ...
+ db HELD_STEEL_BOOST, STEEL ; METAL_COAT
++ db HELD_FAIRY_BOOST, FAIRY ; POLKADOT_BOW
+ db -1
+ ; 35726
+```
+
+But we still need to define `HELD_FAIRY_BOOST` and apply it to `POLKADOT_BOW`. So edit [constants/item_data_constants.asm](../blob/master/constants/item_data_constants.asm):
+
+```diff
+ const_value set 50
+ const HELD_NORMAL_BOOST
+ ...
+ const HELD_STEEL_BOOST
++ const HELD_FAIRY_BOOST
+```
+
+And [data/items/attributes.asm](../blob/master/data/items/attributes.asm):
+
+```diff
+ ItemAttributes: ; 67c1
+ ; entries correspond to constants/item_constants.asm
+ ...
+ ; POLKADOT_BOW
+- item_attribute 100, HELD_NORMAL_BOOST, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
++ item_attribute 100, HELD_FAIRY_BOOST, 10, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
+```
+
+And lastly, [data/items/descriptions.asm](../blob/master/data/items/descriptions.asm):
+
+```diff
+ PolkadotBowDesc:
+- db "Powers up normal-"
++ db "Powers up fairy-"
+ next "type moves. (HOLD)@"
+```
+
+*Now* we're done!
+
+![Screenshot](screenshots/fairy-type.png)
+
+If you're just varying the original Crystal game, note that you can get three Pink Bows (one from Tuscany on Tuesdays, one from Mary after clearing Team Rocket from Radio Tower, and one from Picnicker Tiffany if you get her phone number), so one of those can be replaced with a Fairy-boosting Polkadot Bow.
+
+You'll also need damaging Fairy moves like Moonblast and Dazzling Gleam, so look up how to add those in the new move tutorial.