diff --git a/README.md b/README.md index c72a6be..069bd5a 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,29 @@ Implimented a check for the route encounter data to be changed depending on flag Also can add additional trainers in with this flag as well probably. Would just depend on memory size but need to find that out. +## Current issues on this branch + +``` +/mnt/d/codingpokemon/pokemon-red-definitive$ make + +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +rgblink -p 0x00 -d -m pokered.map -n pokered.sym -l layout.link -o pokered.gbc audio_red.o home_red.o main_red.o maps_red.o ram_red.o text_red.o gfx/pics_red.o gfx/sprites_red.o gfx/tilesets_red.o +error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(9): Requested BANK() of symbol "LoadWildData", which was not found +error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(8): Unknown symbol "LoadWildData" +error: main.asm(55) -> engine/overworld/wild_mons.asm(99) -> data/wild/e4_grass_water.asm(3): Unknown symbol "ViridianForestWildMonsE4" +Linking failed with 3 errors +make: *** [Makefile:151: pokered.gbc] Error 1 +``` + ## Please support the original project this was forked from. This is a disassembly of Pokémon Red and Blue. diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index e898a23..b2126e7 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -102,3 +102,4 @@ DEF NUM_GROWTH_RATES EQU const_value DEF NUM_WILDMONS EQU 10 DEF WILDDATA_LENGTH EQU 1 + NUM_WILDMONS * 2 DEF WILDDATA_LENGTH_POKEDEX EQU 1 + NUM_WILDMONS * 2 +DEF WILDDATA_LENGTH_E4 EQU 1 + NUM_WILDMONS * 2 diff --git a/data/wild/e4_grass_water.asm b/data/wild/e4_grass_water.asm new file mode 100644 index 0000000..b0ca6f7 --- /dev/null +++ b/data/wild/e4_grass_water.asm @@ -0,0 +1,11 @@ +E4BeatenWildDataPointers: + table_width 2, E4BeatenWildDataPointers + dw ViridianForestWildMonsE4 ; ViridianForest + assert_table_lengthPD 1 ; Set NUM_MAPS to 1 for one map + dw -1 ; end + + +INCLUDE "data/wild/maps/ViridianForeste4.asm" + + +; macros/end_grass_wildmonse4 NUM_MAPS*2, "ViridianForeste4.asm" diff --git a/data/wild/grass_water.asm b/data/wild/grass_water.asm index a09fdce..dced370 100644 --- a/data/wild/grass_water.asm +++ b/data/wild/grass_water.asm @@ -321,3 +321,32 @@ INCLUDE "data/wild/maps/VictoryRoad2F.asm" INCLUDE "data/wild/maps/VictoryRoad3F.asm" INCLUDE "data/wild/maps/VictoryRoad1F.asm" INCLUDE "data/wild/maps/DiglettsCave.asm" + + +; WildDataPointers: +; table_width 2, WildDataPointers +; dw Route1WildMons ; ROUTE_1 +; dw Route2WildMons ; ROUTE_2 +; dw Route3WildMons ; ROUTE_3 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route1.asm" +; INCLUDE "data/wild/maps/Route2.asm" +; INCLUDE "data/wild/maps/Route3.asm" + +; E4BeatenWildDataPointers: +; table_width 2, E4BeatenWildDataPointers +; dw Route1WildMonsE4 ; ROUTE_1 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route1e4.asm" + +; PokedexWildDataPointers: +; table_width 2, PokedexWildDataPointers +; dw Route3WildMonsPD ; ROUTE_3 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route3pd.asm" \ No newline at end of file diff --git a/data/wild/maps/ViridianForeste4.asm b/data/wild/maps/ViridianForeste4.asm new file mode 100644 index 0000000..2944807 --- /dev/null +++ b/data/wild/maps/ViridianForeste4.asm @@ -0,0 +1,28 @@ +ViridianForestWildMonsE4: + def_grass_wildmonse4 8 ; encounter rate +IF DEF(_RED) + db 4, WEEDLE + db 5, KAKUNA + db 10, BEEDRILL + db 5, WEEDLE + db 4, KAKUNA + db 6, KAKUNA + db 4, METAPOD + db 3, CATERPIE +ENDC +IF DEF(_BLUE) + db 4, CATERPIE + db 5, METAPOD + db 10, BUTTERFREE + db 5, CATERPIE + db 4, METAPOD + db 6, METAPOD + db 4, KAKUNA + db 3, WEEDLE +ENDC + db 5, PIKACHU + db 5, BULBASAUR + end_grass_wildmonse4 + + def_water_wildmonse4 0 ; encounter rate + end_water_wildmonse4 diff --git a/data/wild/pokedex_grass_water.asm b/data/wild/pokedex_grass_water.asm index e73baf0..7e50fa1 100644 --- a/data/wild/pokedex_grass_water.asm +++ b/data/wild/pokedex_grass_water.asm @@ -1,265 +1,7 @@ PokedexWildDataPointers: table_width 2, PokedexWildDataPointers - dw NothingWildMons ; PALLET_TOWN - dw NothingWildMons ; VIRIDIAN_CITY - dw NothingWildMons ; PEWTER_CITY - dw NothingWildMons ; CERULEAN_CITY - dw NothingWildMons ; LAVENDER_TOWN - dw NothingWildMons ; VERMILION_CITY - dw NothingWildMons ; CELADON_CITY - dw NothingWildMons ; FUCHSIA_CITY - dw NothingWildMons ; CINNABAR_ISLAND - dw NothingWildMons ; INDIGO_PLATEAU - dw NothingWildMons ; SAFFRON_CITY - dw NothingWildMons ; unused - dw Route1WildMonsPD ; ROUTE_1 - dw Route2WildMons ; ROUTE_2 - dw Route3WildMons ; ROUTE_3 - dw Route4WildMons ; ROUTE_4 - dw Route5WildMons ; ROUTE_5 - dw Route6WildMons ; ROUTE_6 - dw Route7WildMons ; ROUTE_7 - dw Route8WildMons ; ROUTE_8 - dw Route9WildMons ; ROUTE_9 - dw Route10WildMons ; ROUTE_10 - dw Route11WildMons ; ROUTE_11 - dw Route12WildMons ; ROUTE_12 - dw Route13WildMons ; ROUTE_13 - dw Route14WildMons ; ROUTE_14 - dw Route15WildMons ; ROUTE_15 - dw Route16WildMons ; ROUTE_16 - dw Route17WildMons ; ROUTE_17 - dw Route18WildMons ; ROUTE_18 - dw SeaRoutesWildMons ; ROUTE_19 - dw SeaRoutesWildMons ; ROUTE_20 - dw Route21WildMons ; ROUTE_21 - dw Route22WildMons ; ROUTE_22 - dw Route23WildMons ; ROUTE_23 - dw Route24WildMons ; ROUTE_24 - dw Route25WildMons ; ROUTE_25 - dw NothingWildMons ; REDS_HOUSE_1F - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw ViridianForestWildMons ; ViridianForest - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw MtMoon1FWildMons - dw MtMoonB1FWildMons - dw MtMoonB2FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnel1FWildMons - dw PowerPlantWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw VictoryRoad1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonTower1FWildMons - dw PokemonTower2FWildMons - dw PokemonTower3FWildMons - dw PokemonTower4FWildMons - dw PokemonTower5FWildMons - dw PokemonTower6FWildMons - dw PokemonTower7FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslandsB1FWildMons - dw SeafoamIslandsB2FWildMons - dw SeafoamIslandsB3FWildMons - dw SeafoamIslandsB4FWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslands1FWildMons - dw NothingWildMons - dw VictoryRoad2FWildMons - dw NothingWildMons - dw NothingWildMons - dw DiglettsCaveWildMons - dw VictoryRoad3FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion2FWildMons - dw PokemonMansion3FWildMons - dw PokemonMansionB1FWildMons - dw SafariZoneEastWildMons - dw SafariZoneNorthWildMons - dw SafariZoneWestWildMons - dw SafariZoneCenterWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw CeruleanCave2FWildMons - dw CeruleanCaveB1FWildMons - dw CeruleanCave1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnelB1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - assert_table_lengthPD NUM_MAPS + dw Route1WildMonsPD ; ViridianForest + assert_table_lengthPD 1 ; Set NUM_MAPS to 1 for one map dw -1 ; end -; wild pokemon data is divided into two parts. -; first part: pokemon found in grass -; second part: pokemon found while surfing -; each part goes as follows: - ; if first byte == 0, then - ; no wild pokemon on this map - ; if first byte != 0, then - ; first byte is encounter rate - ; followed by 20 bytes: - ; level, species (ten times) - INCLUDE "data/wild/maps/Route1pokedex.asm" diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 407b0c2..66e6f54 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -518,7 +518,7 @@ ItemUseBall: ld hl, ItemUseBallText05 call PrintText -; Add the caught Pokémon to the Pokédex. +; Add the caught Pokémon to the Pokédex. ; // TODO adding pokemon to the pokedex, is it possible to see what pokemon is caught and set flags predef IndexToPokedex ld a, [wd11e] dec a diff --git a/engine/overworld/wild_mons.asm b/engine/overworld/wild_mons.asm index 14e6bc1..d5fab6e 100644 --- a/engine/overworld/wild_mons.asm +++ b/engine/overworld/wild_mons.asm @@ -2,56 +2,101 @@ LoadWildData:: ; Check if the player has obtained the diploma ; CheckEvent EVENT_DIPLOMA_OBTAINED ; jr nz, .DiplomaObtained + ; Check if the player has beaten the Elite 4 + CheckEvent HS_CERULEAN_CAVE_GUY + jr nz, .E4Beaten ; Check if the player has obtained the Pokedex CheckEvent EVENT_GOT_POKEDEX jr nz, .PokedexObtained ; If neither diploma nor Pokedex have been obtained, load from the regular pointer list ld hl, WildDataPointers - jr .LoadWildData + jp .LoadWildData ; .DiplomaObtained: ; ; If the diploma has been obtained, load from the special pointer list ; ld hl, DiplomaWildDataPointers -; jr .LoadWildData +; jp .LoadWildData + +.E4Beaten: + ; If the Elite 4 have been beaten, load from the special pointer list + ld hl, E4BeatenWildDataPointers + jp .LoadWildData .PokedexObtained: ; If the Pokedex has been obtained, load from the special Pokedex pointer list ld hl, PokedexWildDataPointers - ; No need for a jr instruction here since the next label will be .LoadWildData .LoadWildData: - ld a, [wCurMap] ; Load the current map ID - - ; get wild data for current map - ld c, a ; Copy the current map ID to the c register - ld b, 0 ; Clear the b register - add hl, bc ; Offset the hl register by twice the current map ID (because each pointer is 2 bytes) - add hl, bc ; (we do this twice because there's no 'multiply by 2' instruction) - ld a, [hli] ; Load the first byte of the pointer at hl into a and increment hl - ld h, [hl] ; Load the second byte of the pointer into h - ld l, a ; Load the first byte of the pointer into l (hl now points to wild data for current map) - ld a, [hli] ; Load the encounter rate from the wild data into a - ld [wGrassRate], a ; Store the encounter rate - and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) - jr z, .NoGrassData ; If the encounter rate is 0 (there's no grass data), skip to the water data - push hl ; Save the current address for later - ld de, wGrassMons ; Load the address of the grass encounter table - ld bc, $14 ; The size of the grass encounter table is 20 (0x14) - call CopyData ; Copy the grass encounter data to the table - pop hl ; Restore the address of the wild data - ld bc, $14 ; Offset hl by the size of the grass encounter table - add hl, bc ; Add the offset to hl -.NoGrassData - ld a, [hli] ; Load the water encounter rate from the wild data into a - ld [wWaterRate], a ; Store the encounter rate - and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) - ret z ; If the encounter rate is 0 (there's no water data), return - ld de, wWaterMons ; Load the address of the water encounter table - ld bc, $14 ; The size of the water encounter table is 20 (0x14) - jp CopyData ; Copy the water encounter data to the table (and return) + ld a, [wCurMap] ; Load the current map ID + + ; Check if the current map ID is in the pointer table + call CheckRouteInTable + jp z, .NoWildData ; Jump to .NoWildData if route not found + + ; Get wild data for the current map + ld c, a ; Copy the current map ID to the c register + ld b, 0 ; Clear the b register + add hl, bc ; Offset the hl register by twice the current map ID (because each pointer is 2 bytes) + add hl, bc ; (we do this twice because there's no 'multiply by 2' instruction) + ld a, [hli] ; Load the first byte of the pointer at hl into a and increment hl + ld h, [hl] ; Load the second byte of the pointer into h + ld l, a ; Load the first byte of the pointer into l (hl now points to wild data for current map) + ld a, [hli] ; Load the encounter rate from the wild data into a + ld [wGrassRate], a ; Store the encounter rate + and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) + jp z, .NoGrassData ; If the encounter rate is 0 (there's no grass data), skip to the water data + push hl ; Save the current address for later + ld de, wGrassMons ; Load the address of the grass encounter table + ld bc, $14 ; The size of the grass encounter table is 20 (0x14) + call CopyData ; Copy the grass encounter data to the table + pop hl ; Restore the address of the wild data + ld bc, $14 ; Offset hl by the size of the grass encounter table + add hl, bc ; Add the offset to hl + +.NoGrassData: + ld a, [hli] ; Load the water encounter rate from the wild data into a + ld [wWaterRate], a ; Store the encounter rate + and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) + jp z, .NoWildData ; If the encounter rate is 0 (there's no water data), jump to .NoWildData + ld de, wWaterMons ; Load the address of the water encounter table + ld bc, $14 ; The size of the water encounter table is 20 (0x14) + +.CopyData: + ld a, [hli] ; Load the data from hl into a and increment hl + ld [de], a ; Store the data in de + inc de ; Increment de + dec bc ; Decrement bc + jp nz, .CopyData ; Repeat until bc reaches zero + +.NoWildData: + ret + +CheckRouteInTable: + ld hl, WildDataPointers ; Load the base address of the pointer table + ld a, [wCurMap] ; Load the current map ID into register b + + ; Iterate over the map IDs in the pointer table + ld de, FIRST_ROUTE_MAP ; Load the address of the first route map ID + ld c, 0 ; Initialize a counter variable + +.CheckNextMap: + ld a, [de] ; Load the map ID from memory + cp b ; Compare with the current map ID + ret z ; Return if equal (route found) + inc de ; Increment to the next map ID + inc c ; Increment the counter variable + + ; Check if all maps have been checked (reached the end of the table) + cp NUM_MAPS ; Compare with the total number of maps + jp nz, .CheckNextMap ; Jump to CheckNextMap if not all maps have been checked + + xor a ; Set A to zero (route not found) + ret ; Return + INCLUDE "data/wild/grass_water.asm" INCLUDE "data/wild/pokedex_grass_water.asm" +INCLUDE "data/wild/e4_grass_water.asm" ; INCLUDE "data/wild/diploma_grass_water.asm" @@ -95,3 +140,4 @@ INCLUDE "data/wild/pokedex_grass_water.asm" ; ld de, wWaterMons ; otherwise, load surfing data ; ld bc, $14 ; jp CopyData + diff --git a/macros/asserts.asm b/macros/asserts.asm index 01efe64..efd1908 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -22,6 +22,12 @@ MACRO assert_table_lengthPD "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" ENDM +MACRO assert_table_lengthE4 + DEF x = \1 + ASSERT x * CURRENT_TABLE_WIDTH == @ - {CURRENT_TABLE_START}, \ + "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" +ENDM + MACRO list_start DEF list_index = 0 IF _NARG == 1 @@ -185,3 +191,39 @@ MACRO end_water_wildmonspokedex "def_water_wildmonspokedex {d:CURRENT_WATER_WILDMONS_RATE_POKEDEX}: expected {d:WILDDATA_LENGTH_POKEDEX} bytes" ENDC ENDM + +MACRO def_grass_wildmonse4 +;\1: encounter rate + DEF CURRENT_GRASS_WILDMONS_RATE_E4 = \1 + REDEF CURRENT_GRASS_WILDMONS_LABEL_E4 EQUS "._def_grass_wildmonse4_\1" +{CURRENT_GRASS_WILDMONS_LABEL_E4}: + db \1 +ENDM + +MACRO end_grass_wildmonse4 + IF CURRENT_GRASS_WILDMONS_RATE_E4 == 0 + ASSERT 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL_E4}, \ + "def_grass_wildmonse4 {d:CURRENT_GRASS_WILDMONS_RATE_E4}: expected 1 byte" + ELSE + ASSERT WILDDATA_LENGTH_E4 == @ - {CURRENT_GRASS_WILDMONS_LABEL_E4}, \ + "def_grass_wildmonse4 {d:CURRENT_GRASS_WILDMONS_RATE_E4}: expected {d:WILDDATA_LENGTH_E4} bytes" + ENDC +ENDM + +MACRO def_water_wildmonse4 +;\1: encounter rate + DEF CURRENT_WATER_WILDMONS_RATE_E4 = \1 + REDEF CURRENT_WATER_WILDMONS_LABEL_E4 EQUS "._def_water_wildmonse4_\1" +{CURRENT_WATER_WILDMONS_LABEL_E4}: + db \1 +ENDM + +MACRO end_water_wildmonse4 + IF CURRENT_WATER_WILDMONS_RATE_E4 == 0 + ASSERT 1 == @ - {CURRENT_WATER_WILDMONS_LABEL_E4}, \ + "def_water_wildmonse4 {d:CURRENT_WATER_WILDMONS_RATE_E4}: expected 1 byte" + ELSE + ASSERT WILDDATA_LENGTH_E4 == @ - {CURRENT_WATER_WILDMONS_LABEL_E4}, \ + "def_water_wildmonse4 {d:CURRENT_WATER_WILDMONS_RATE_E4}: expected {d:WILDDATA_LENGTH_E4} bytes" + ENDC +ENDM diff --git a/text/CeruleanCaveB1F.asm b/text/CeruleanCaveB1F.asm index 3758e12..cf6e336 100644 --- a/text/CeruleanCaveB1F.asm +++ b/text/CeruleanCaveB1F.asm @@ -6,6 +6,28 @@ _MewtwoBattleText:: ; I see now that the circumstances of one's birth are irrelevant; it is what you do with the gift of life that determines who you are. +; Humans may have created me... ...but they will never enslave me. This cannot be my destiny! + +; l was not born a Pokémon! l was created. + +; My creators have used and betrayed me. + +; So l stand alone. + +; Who am l? + +; What is my true reason for being? + +; l will find my own purpose. + +; And purge this planet of all who oppose me. + +; Human and Pokémon alike. + +; The world will heed my warning. + +; The reign of Mewtwo will soon begin. + ; BrunosRoomTrainerHeader0: ; trainer EVENT_BEAT_BRUNOS_ROOM_TRAINER_0, 0, BrunoBeforeBattleText, BrunoEndBattleText, BrunoAfterBattleText ; db -1 ; end @@ -22,3 +44,9 @@ _MewtwoBattleText:: ; line "Go face your next" ; cont "challenge!" ; done + +; _MewtwoBattleText:: +; para "I wasn't born a" +; line "#MON, I was" +; cont "created can" +; cont "become stronger!" \ No newline at end of file