diff --git a/README.md b/README.md index e7cd68a3..37b76817 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ This is a ROM Hack of Pokémon Red and Blue, aiming to expand the Kanto region w If playing on an emulator, BGB is strongly recommended for its accuracy and features. Inaccurate emulators, such as VBA and TGB Dual, can experience unintended glitches. This hack is fully playable on official hardware as well. +# For all Pokemon info go [here](https://docs.google.com/spreadsheets/d/1cP8tvoj19__bx08hSG7dOtefVcdaNwZXohVu1RKzjPI/edit?usp=sharing) + New Pokemon ==== The Kanto Expansion Pak's ethos is to add every "Kanto-related" Pokemon to RBY without fundamentally changing the grander metagame. What's defined as "Kanto-related" is a Pokemon that evolves from an existing Kanto Pokemon, made an appearance in a Kanto-based game (LGPE), is a regional variant, or was a Kanto-related Pokemon cut during the development of an official game. @@ -173,7 +175,7 @@ Improved Areas QoL Enhancements ==== -- A feminine character option is now available, featuring the sprite from Pokemon Anniversary Red, which is based on Green's manga appearance. +- Feminine and Androgynous character options are now available, featuring Green's sprite from Pokemon Anniversary Red, which is based on her manga appearance, as well as a custom Nonbinary character named Pink. - To accomodate this, Celadon Gym's trainers use their more neutral text from Crystal. - The protagonist is also referred to in a gender neutral manner. This changes like, 2-3 lines in the whole game. - All 151 original Pokemon, plus an additional 100, can be obtained without the use of trading or glitches, including Mew! @@ -198,6 +200,7 @@ QoL Enhancements - Traded Pokemon ("Outsiders") can now be nicknamed at the Name Rater's House. - HP bar has been doubled in speed, having a 1 frame delay per pixel rather than 2. - The blinking animation when hit by moves like Tackle now repeats 4 instead of 6 times, speeding up battles by a bit while not sacrificing impact. +- The Safari Zone Rest Houses now have PCs in them, so if the box is full, you can still change boxes to continue catching Pokemon. - The Rock in the Safari Zone now only raises the flee chance by 1.5x, rather than 2x, opening up new strategies. - PP symbol is displayed in the battle menu. PP displayed before, it just looks nicer now. Done by changing a straggler Japanese character. - Lorelei, Bruno, and Agatha now play the Gym Leader Battle theme. @@ -421,7 +424,7 @@ RacieBeep sprites: Balumba, Blastyke, Blottle, Buu, Cactormus, Cheep, Coinpur, C Orchid: Luxwan (back), Buu (back) -Zeta_Null: Porygon (front) +Zeta_Null: Porygon (front), All sprites for Pink (Nonbinary player option) Official sprites: Crobat (front, edited by Martha’s Against Humanity), Disturban, Espeon (front, edited by Martha’s Against Humanity), Slowking (front), Steelix (front), Tricules, Umbreon (front, edited by Martha’s Against Humanity) diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm index 569bc05f..78d8ca70 100644 --- a/constants/menu_constants.asm +++ b/constants/menu_constants.asm @@ -20,7 +20,7 @@ DEF PC_ITEM_CAPACITY EQU 50 const MONEY_BOX_TEMPLATE ; $0f const MENU_TEMPLATE_10 ; $10 unused const MON_SPRITE_POPUP ; $11 - const JP_AH_MENU_TEMPLATE ; $12 + const BOY_GIRL_NO ; $12 new for gender non-binary selection const MONEY_BOX ; $13 const TWO_OPTION_MENU ; $14 const BUY_SELL_QUIT_MENU ; $15 diff --git a/data/events/hidden_objects.asm b/data/events/hidden_objects.asm index 865d85dc..31091174 100644 --- a/data/events/hidden_objects.asm +++ b/data/events/hidden_objects.asm @@ -58,6 +58,7 @@ HiddenObjectMaps: db VICTORY_ROAD_2F db BILLS_HOUSE db VIRIDIAN_CITY + db SAFARI_ZONE_CENTER_REST_HOUSE db SAFARI_ZONE_WEST_REST_HOUSE db SAFARI_ZONE_EAST_REST_HOUSE db SAFARI_ZONE_NORTH_REST_HOUSE @@ -153,6 +154,7 @@ HiddenObjectPointers: dw VictoryRoad2HiddenObjects dw BillsHouseHiddenObjects dw ViridianCityHiddenObjects + dw SafariZoneRestHouse1HiddenObjects dw SafariZoneRestHouse2HiddenObjects dw SafariZoneRestHouse3HiddenObjects dw SafariZoneRestHouse4HiddenObjects @@ -535,19 +537,13 @@ ViridianCityHiddenObjects: hidden_object 14, 4, POTION, HiddenItems db -1 ; end +; Moved these to the same slot to save bytes. +SafariZoneRestHouse1HiddenObjects: SafariZoneRestHouse2HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - SafariZoneRestHouse3HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC - db -1 ; end - SafariZoneRestHouse4HiddenObjects: - hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText - hidden_object 13, 3, SPRITE_FACING_UP, OpenPokemonCenterPC + hidden_object 0, 4, SPRITE_FACING_LEFT, PrintBenchGuyText ; still unused + hidden_object 4, 1, SPRITE_FACING_UP, OpenPokemonCenterPC db -1 ; end Route15GateUpstairsHiddenObjects: diff --git a/data/maps/headers/SafariZoneCenterRestHouse.asm b/data/maps/headers/SafariZoneCenterRestHouse.asm index c80abea0..e8880a49 100644 --- a/data/maps/headers/SafariZoneCenterRestHouse.asm +++ b/data/maps/headers/SafariZoneCenterRestHouse.asm @@ -1,2 +1,2 @@ - map_header SafariZoneCenterRestHouse, SAFARI_ZONE_CENTER_REST_HOUSE, GATE, 0 + map_header SafariZoneCenterRestHouse, SAFARI_ZONE_CENTER_REST_HOUSE, HOUSE, 0 end_map_header diff --git a/data/maps/headers/SafariZoneEastRestHouse.asm b/data/maps/headers/SafariZoneEastRestHouse.asm index 94964754..5227a3aa 100644 --- a/data/maps/headers/SafariZoneEastRestHouse.asm +++ b/data/maps/headers/SafariZoneEastRestHouse.asm @@ -1,2 +1,2 @@ - map_header SafariZoneEastRestHouse, SAFARI_ZONE_EAST_REST_HOUSE, GATE, 0 + map_header SafariZoneEastRestHouse, SAFARI_ZONE_EAST_REST_HOUSE, HOUSE, 0 end_map_header diff --git a/data/maps/headers/SafariZoneNorthRestHouse.asm b/data/maps/headers/SafariZoneNorthRestHouse.asm index 7f9d5dbc..f324dd72 100644 --- a/data/maps/headers/SafariZoneNorthRestHouse.asm +++ b/data/maps/headers/SafariZoneNorthRestHouse.asm @@ -1,2 +1,2 @@ - map_header SafariZoneNorthRestHouse, SAFARI_ZONE_NORTH_REST_HOUSE, GATE, 0 + map_header SafariZoneNorthRestHouse, SAFARI_ZONE_NORTH_REST_HOUSE, HOUSE, 0 end_map_header diff --git a/data/maps/headers/SafariZoneWestRestHouse.asm b/data/maps/headers/SafariZoneWestRestHouse.asm index 3d3bef71..4d572b1c 100644 --- a/data/maps/headers/SafariZoneWestRestHouse.asm +++ b/data/maps/headers/SafariZoneWestRestHouse.asm @@ -1,2 +1,2 @@ - map_header SafariZoneWestRestHouse, SAFARI_ZONE_WEST_REST_HOUSE, GATE, 0 + map_header SafariZoneWestRestHouse, SAFARI_ZONE_WEST_REST_HOUSE, HOUSE, 0 end_map_header diff --git a/data/maps/objects/SafariZoneCenterRestHouse.asm b/data/maps/objects/SafariZoneCenterRestHouse.asm index ff48d19c..557b3bbc 100644 --- a/data/maps/objects/SafariZoneCenterRestHouse.asm +++ b/data/maps/objects/SafariZoneCenterRestHouse.asm @@ -8,7 +8,7 @@ SafariZoneCenterRestHouse_Object: def_bg_events def_object_events - object_event 3, 2, SPRITE_GIRL, STAY, DOWN, 1 ; person - object_event 1, 4, SPRITE_SCIENTIST, WALK, UP_DOWN, 2 ; person + object_event 3, 3, SPRITE_GIRL, STAY, LEFT, 1 ; person + object_event 5, 6, SPRITE_SCIENTIST, WALK, UP_DOWN, 2 ; person def_warps_to SAFARI_ZONE_CENTER_REST_HOUSE diff --git a/data/maps/objects/SafariZoneEastRestHouse.asm b/data/maps/objects/SafariZoneEastRestHouse.asm index f79a5cfc..62742229 100644 --- a/data/maps/objects/SafariZoneEastRestHouse.asm +++ b/data/maps/objects/SafariZoneEastRestHouse.asm @@ -8,9 +8,9 @@ SafariZoneEastRestHouse_Object: def_bg_events def_object_events - object_event 2, 3, SPRITE_SCIENTIST, WALK, UP_DOWN, 1 ; person - object_event 0, 2, SPRITE_ROCKER, STAY, NONE, 2 ; person - object_event 5, 2, SPRITE_SILPH_WORKER, STAY, NONE, 3 ; person - object_event 6, 2, SPRITE_SILPH_WORKER, STAY, NONE, 4 ; person + object_event 5, 5, SPRITE_SCIENTIST, WALK, UP_DOWN, 1 ; person + object_event 0, 4, SPRITE_ROCKER, STAY, RIGHT, 2 ; person + object_event 3, 3, SPRITE_SILPH_WORKER, STAY, LEFT, 3 ; person + object_event 3, 4, SPRITE_SILPH_WORKER, STAY, LEFT, 4 ; person def_warps_to SAFARI_ZONE_EAST_REST_HOUSE diff --git a/data/maps/objects/SafariZoneNorthRestHouse.asm b/data/maps/objects/SafariZoneNorthRestHouse.asm index 8fbacd81..7aeaf327 100644 --- a/data/maps/objects/SafariZoneNorthRestHouse.asm +++ b/data/maps/objects/SafariZoneNorthRestHouse.asm @@ -9,7 +9,7 @@ SafariZoneNorthRestHouse_Object: def_object_events object_event 6, 3, SPRITE_SCIENTIST, WALK, LEFT_RIGHT, 1 ; person - object_event 3, 4, SPRITE_SAFARI_ZONE_WORKER, STAY, NONE, 2 ; person + object_event 3, 4, SPRITE_SAFARI_ZONE_WORKER, LEFT, NONE, 2 ; person object_event 1, 5, SPRITE_GENTLEMAN, WALK, UP_DOWN, 3 ; person def_warps_to SAFARI_ZONE_NORTH_REST_HOUSE diff --git a/data/maps/objects/SafariZoneWestRestHouse.asm b/data/maps/objects/SafariZoneWestRestHouse.asm index c63886b7..a5f6bbaf 100644 --- a/data/maps/objects/SafariZoneWestRestHouse.asm +++ b/data/maps/objects/SafariZoneWestRestHouse.asm @@ -8,8 +8,8 @@ SafariZoneWestRestHouse_Object: def_bg_events def_object_events - object_event 4, 4, SPRITE_SCIENTIST, WALK, ANY_DIR, 1 ; person - object_event 0, 2, SPRITE_COOLTRAINER_M, STAY, RIGHT, 2 ; person - object_event 6, 2, SPRITE_ERIKA, STAY, DOWN, 3 ; person + object_event 5, 3, SPRITE_SCIENTIST, WALK, ANY_DIR, 1 ; person + object_event 0, 3, SPRITE_COOLTRAINER_M, STAY, RIGHT, 2 ; person + object_event 3, 4, SPRITE_ERIKA, STAY, LEFT, 3 ; person def_warps_to SAFARI_ZONE_WEST_REST_HOUSE diff --git a/data/player_names.asm b/data/player_names.asm index 6aec50fb..87249c7d 100644 --- a/data/player_names.asm +++ b/data/player_names.asm @@ -11,6 +11,13 @@ DefaultNamesGirl: next "LEAF" next "ELAINE" db "@" + +DefaultNamesEnby: + db "NEW NAME" + next "PINK" + next "QUARTZ" + next "JAY" + db "@" DefaultNamesRival: db "NEW NAME" diff --git a/data/player_names_list.asm b/data/player_names_list.asm index f5c06f6a..d08b1518 100644 --- a/data/player_names_list.asm +++ b/data/player_names_list.asm @@ -9,6 +9,12 @@ DefaultNamesGirlList: db "GREEN@" db "LEAF@" db "ELAINE@" + +DefaultNamesEnbyList: + db "NEW NAME@" + db "PINK@" + db "QUARTZ@" + db "JAY@" DefaultNamesRivalList: db "NEW NAME@" diff --git a/data/text/unused_names.asm b/data/text/unused_names.asm index 349a31cf..7311d001 100644 --- a/data/text/unused_names.asm +++ b/data/text/unused_names.asm @@ -1,22 +1,22 @@ UnusedBadgeNames:: - db "かみなりバッヂ@" ; THUNDER BADGE - db "かいがらバッヂ@" ; SHELL BADGE - db "おじぞうバッヂ@" ; JIZOU BADGE - db "はやぶさバッヂ@" ; FALCON BADGE - db "ひんやりバッヂ@" ; CHILL BADGE - db "なかよしバッヂ@" ; FRIENDSHIP BADGE - db "バラバッヂ@" ; ROSE BADGE - db "ひのたまバッヂ@" ; FIREBALL BADGE - db "ゴールドバッヂ@" ; GOLD BADGE +; db "かみなりバッヂ@" ; THUNDER BADGE +; db "かいがらバッヂ@" ; SHELL BADGE +; db "おじぞうバッヂ@" ; JIZOU BADGE +; db "はやぶさバッヂ@" ; FALCON BADGE +; db "ひんやりバッヂ@" ; CHILL BADGE +; db "なかよしバッヂ@" ; FRIENDSHIP BADGE +; db "バラバッヂ@" ; ROSE BADGE +; db "ひのたまバッヂ@" ; FIREBALL BADGE +; db "ゴールドバッヂ@" ; GOLD BADGE UnusedRankingNames: - db "たまご@" ; EGG - db "ひよこ@" ; CHICK - db "ブロンズ@" ; BRONZE - db "シルバー@" ; SILVER - db "ゴールド@" ; GOLD - db "プチキャプテン@" ; PETIT CAPTAIN - db "キャプテン@" ; CAPTAIN - db "プチマスター@" ; PETIT MASTER - db "マスター@" ; MASTER - db "エクセレント" ; EXCELLENT +; db "たまご@" ; EGG +; db "ひよこ@" ; CHICK +; db "ブロンズ@" ; BRONZE +; db "シルバー@" ; SILVER +; db "ゴールド@" ; GOLD +; db "プチキャプテン@" ; PETIT CAPTAIN +; db "キャプテン@" ; CAPTAIN +; db "プチマスター@" ; PETIT MASTER +; db "マスター@" ; MASTER +; db "エクセレント" ; EXCELLENT diff --git a/data/text_boxes.asm b/data/text_boxes.asm index a5013d1b..35c6eec7 100644 --- a/data/text_boxes.asm +++ b/data/text_boxes.asm @@ -33,7 +33,7 @@ TextBoxTextAndCoordTable: text_box_text SWITCH_STATS_CANCEL_MENU_TEMPLATE, 11, 11, 19, 17, SwitchStatsCancelText, 13, 12 text_box_text BUY_SELL_QUIT_MENU_TEMPLATE, 0, 0, 10, 6, BuySellQuitText, 2, 1 text_box_text MONEY_BOX_TEMPLATE, 11, 0, 19, 2, MoneyText, 13, 0 - text_box_text JP_AH_MENU_TEMPLATE, 7, 6, 11, 10, JapaneseAhText, 8, 8 + text_box_text BOY_GIRL_NO, 12, 6, 19, 12, BoyGirlNoText, 14, 7 text_box_text JP_POKEDEX_MENU_TEMPLATE, 11, 8, 19, 17, JapanesePokedexMenu, 12, 10 BuySellQuitText: @@ -80,8 +80,10 @@ SwitchStatsCancelText: next "STATS" next "CANCEL@" -JapaneseAhText: - db "アッ!@" +BoyGirlNoText: + db "RED" + next "GREEN" + next "PINK@" JapanesePokedexMenu: db "データをみる" diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 24afd5be..b76e0f52 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -6543,12 +6543,18 @@ LoadPlayerBackPic: ld a, [wPlayerSex] ; do you think a republican will get off to this commit and a jr z, .RedBack + cp a, 2 + jr z, .EnbyBack ld de, GreenPicBack ld a, BANK(GreenPicBack) ; Load female back sprite jr .next .RedBack ld de, RedPicBack ; Load default Red back sprite ld a, BANK(RedPicBack) + jr .next +.EnbyBack + ld de, TealPicBack ; Load teal back sprite + ld a, BANK(TealPicBack) .next ASSERT BANK(GreenPicBack) == BANK(OldManPicBack) ; These two ASSERTs make sure to cover ASSERT BANK(RedPicBack) == BANK(OldManPicBack) ; both sprite cases diff --git a/engine/events/diploma.asm b/engine/events/diploma.asm index be211b16..5ca0075d 100644 --- a/engine/events/diploma.asm +++ b/engine/events/diploma.asm @@ -42,10 +42,16 @@ DisplayDiploma:: ld a, [wPlayerSex] and a ; are you playing as Red jr z, .red ; if yes, Red appears on the diploma + ld a, [wPlayerSex] + cp a, 2 + jr z, .pink ; if yes, Pink appears on the diploma jr nz, .green ; if no, Green replaces him .green farcall DrawFPlayerCharacter jr .skip +.pink + farcall DrawNBPlayerCharacter + jr .skip .red farcall DrawPlayerCharacter .skip diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 65f91873..3c8d60e7 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -519,6 +519,10 @@ DrawTrainerInfo: ld a, [wPlayerSex] ; guess what it's genital inspection time and a jr z, .AreBoy + ld de, EnbyPicFront + lb bc, BANK(EnbyPicFront), $01 + cp a, 2 + jr z, .AreBoy ; I'm not updating these names. I'm lazy. Also did you know this was changed to wPlayerGender in one of the other tutorials? ld de, GreenPicFront lb bc, BANK(GreenPicFront), $01 .AreBoy diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm index 556b777f..b20798a3 100644 --- a/engine/movie/hall_of_fame.asm +++ b/engine/movie/hall_of_fame.asm @@ -188,10 +188,16 @@ HoFLoadPlayerPics: jr nz, .GirlStuff1 ld de, RedPicFront ld a, BANK(RedPicFront) - jr .Routine ; skip the girl stuff and go to main routine + jr .Routine ; skip the girl stuff and go to main routine .GirlStuff1 + cp a, 2 + jr z, .TealStuff1 ld de, GreenPicFront ld a, BANK(GreenPicFront) + jr .Routine ; skip the girl stuff and go to main routine +.TealStuff1 + ld de, EnbyPicFront + ld a, BANK(EnbyPicFront) .Routine ; resume original routine call UncompressSpriteFromDE ld hl, sSpriteBuffer1 @@ -207,8 +213,14 @@ HoFLoadPlayerPics: ld a, BANK(RedPicBack) jr .routine2 ; skip the girl stuff and continue original routine if guy .GirlStuff2 + cp a, 2 + jr z, .TealStuff2 ld de, GreenPicBack ld a, BANK(GreenPicBack) + jr .routine2 +.TealStuff2 + ld de, TealPicBack + ld a, BANK(TealPicBack) .routine2 ; original routine call UncompressSpriteFromDE predef ScaleSpriteByTwo diff --git a/engine/movie/intro.asm b/engine/movie/intro.asm index 5aa10808..e5912ed9 100644 --- a/engine/movie/intro.asm +++ b/engine/movie/intro.asm @@ -277,9 +277,9 @@ CopyTileIDsFromList_ZeroBaseTileID: PlayMoveSoundB: ; unused - predef GetMoveSoundB - ld a, b - jp PlaySound +; predef GetMoveSoundB +; ld a, b +; jp PlaySound LoadIntroGraphics: ld hl, FightIntroBackMon diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index f5b4d226..2156dbf2 100644 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -71,7 +71,7 @@ OakSpeech: call PrintText ; show this text call BoyGirlChoice ; added routine at the end of this file ld a, [wCurrentMenuItem] - ld [wPlayerSex], a ; store player's gender. 00 for boy, 01 for girl + ld [wPlayerSex], a ; store player's gender. 00 for boy, 01 for girl, 02 for enby call GBFadeOutToWhite call ClearScreen @@ -80,6 +80,10 @@ OakSpeech: ld a, [wPlayerSex] ; check sex and a ; check sex jr z, .NotGreen0 + ld de, EnbyPicFront + lb bc, BANK(EnbyPicFront), $00 + cp a, 2 + jr z, .NotGreen0 ld de, GreenPicFront lb bc, BANK(GreenPicFront), $00 .NotGreen0 @@ -97,7 +101,9 @@ OakSpeech: ld a, [wPlayerSex] ; Let's change the Nidorins based on the choice. It's really cute and makes use of an unused command sound. and a jr z, .Nidorino - jr nz, .Nidorina + cp a, 2 + jr z, .Nidoreign +; jr nz, .Nidorina .Nidorina ld a, NIDORINA ld [wd0b5], a @@ -117,6 +123,16 @@ OakSpeech: call LoadFlippedFrontSpriteByMonIndex call MovePicLeft ld hl, OakSpeechText2Red + jr .cont +.Nidoreign + ld a, NIDOREIGN + ld [wd0b5], a + ld [wcf91], a + call GetMonHeader + hlcoord 6, 4 + call LoadFlippedFrontSpriteByMonIndex + call MovePicLeft + ld hl, OakSpeechText2Enby .cont call PrintText @@ -124,12 +140,19 @@ OakSpeech: call ClearScreen ld de, RedPicFront lb bc, BANK(RedPicFront), $00 - ld a, [wPlayerSex] ; check sex - and a ; check sex - jr z, .NotGreen1 + ld a, [wPlayerSex] ; load gender + and a ; check gender - and a is equivalent to `cp a, 0` (but faster) + ; if a=0->gender=male, ergo jump to the vanilla part of the code + jr z, .ContinueWithOakIntro1 + cp a, 2 ; check gender: if a=2->gender=enby, jump to the yellow subroutine, otherwise continue below + jp z, .LoadEnbyPicFront1 ld de, GreenPicFront lb bc, BANK(GreenPicFront), $00 -.NotGreen1: + jr .ContinueWithOakIntro1 +.LoadEnbyPicFront1 + ld de, EnbyPicFront + lb bc, BANK(EnbyPicFront), $00 +.ContinueWithOakIntro1: call IntroDisplayPicCenteredOrUpperRight call MovePicLeft ld hl, IntroducePlayerText @@ -152,6 +175,10 @@ OakSpeech: ld a, [wPlayerSex] ; check sex and a ; check sex jr z, .NotGreen2 + ld de, EnbyPicFront + lb bc, BANK(EnbyPicFront), $00 + cp a, 2 + jr z, .NotGreen2 ld de, GreenPicFront lb bc, Bank(GreenPicFront), $00 .NotGreen2: @@ -178,6 +205,10 @@ OakSpeech: ld a, [wPlayerSex] ; check sex and a ; check sex jr z, .NotGreen3 + ld de, TealSprite + lb bc, BANK(TealSprite), $0C + cp a, 2 + jr z, .NotGreen3 ld de,GreenSprite lb bc, BANK(GreenSprite), $0C .NotGreen3: @@ -232,6 +263,11 @@ OakSpeechText2Green: sound_cry_nidorina text_far _OakSpeechText2B text_end +OakSpeechText2Enby: + text_far _OakSpeechText2A + sound_cry_nidoreign + text_far _OakSpeechText2B + text_end IntroducePlayerText: text_far _IntroducePlayerText text_end @@ -305,23 +341,40 @@ IntroDisplayPicCenteredOrUpperRight: predef_jump CopyUncompressedPicToTilemap ; displays boy/girl choice - BoyGirlChoice:: - call SaveScreenTilesToBuffer1 - call InitBoyGirlTextBoxParameters - jr DisplayBoyGirlChoice - - InitBoyGirlTextBoxParameters:: - ld a, $1 ; loads the value for the unused North/West choice, that was changed to say Boy/Girl - ld [wTwoOptionMenuID], a - coord hl, 12, 7 - ld bc, $80d - ret - - DisplayBoyGirlChoice:: - ld a, $14 - ld [wTextBoxID], a - call DisplayTextBoxID - jp LoadScreenTilesFromBuffer1 +BoyGirlChoice:: + call SaveScreenTilesToBuffer1 + jr DisplayBoyGirlNoChoice + +DisplayBoyGirlNoChoice:: + ld a, BOY_GIRL_NO + ld [wTextBoxID], a + call DisplayTextBoxID + ld hl, wTopMenuItemY + ld a, 7 + ld [hli], a ; top menu item Y + ld a, 13 + ld [hli], a ; top menu item X + xor a + ld [hli], a ; current menu item ID + inc hl + ld a, $2 + ld [hli], a ; wMaxMenuItem +; ld a, B_BUTTON | A_BUTTON + ld a, A_BUTTON + ld [hli], a ; wMenuWatchedKeys + xor a + ld [hl], a ; wLastMenuItem + call HandleMenuInput +; bit BIT_B_BUTTON, a +; jr nz, .defaultOption ; if B was pressed, assign enby +; A was pressed + call PlaceUnfilledArrowMenuCursor + ld a, [wCurrentMenuItem] + jp LoadScreenTilesFromBuffer1 +;.defaultOption +; ld a, $02 +; ld [wCurrentMenuItem], a +; jp LoadScreenTilesFromBuffer1 BoyGirlText: ; This is new so we had to add a reference to get it to compile text_far _BoyGirlText diff --git a/engine/movie/oak_speech/oak_speech2.asm b/engine/movie/oak_speech/oak_speech2.asm index 445ed567..7b11e226 100644 --- a/engine/movie/oak_speech/oak_speech2.asm +++ b/engine/movie/oak_speech/oak_speech2.asm @@ -1,6 +1,8 @@ ChoosePlayerName: call OakSpeechSlidePicRight ld a, [wPlayerSex] ; load sex + cp a, 2 + jr z, .AreEnby ; Skip to enby names if you are enby instead and a jr nz, .AreGirl ; Skip to girl names if you are a girl instead ld de, DefaultNamesPlayer @@ -24,6 +26,17 @@ ChoosePlayerName: ld de, wPlayerName call OakSpeechSlidePicLeft jr .done ; End of new Girl Names routine +.AreEnby ; Copy of the boy naming routine, just with enby's names + ld de, DefaultNamesEnby + call DisplayIntroNameTextBox + ld a, [wCurrentMenuItem] + and a + jr z, .customName + ld hl, DefaultNamesEnbyList + call GetDefaultName + ld de, wPlayerName + call OakSpeechSlidePicLeft + jr .done ; End of new Enby Names routine .customName ld hl, wPlayerName xor a ; NAME_PLAYER_SCREEN @@ -39,6 +52,10 @@ ChoosePlayerName: ld a, [wPlayerSex] ; sex check and a ; yknow it feels like republicans wanting to do penis checking jr z, .AreBoy3 + ld de, EnbyPicFront + ld b, BANK(EnbyPicFront) + cp a, 2 + jr z, .AreBoy3 ld de, GreenPicFront ld b, BANK(GreenPicFront) .AreBoy3 diff --git a/engine/movie/title.asm b/engine/movie/title.asm index 1767ca0a..6a97078e 100644 --- a/engine/movie/title.asm +++ b/engine/movie/title.asm @@ -93,10 +93,17 @@ DisplayTitleScreen: jr nz, .pokemonLogoLastTileRowLoop call Random ldh a, [hRandomAdd] - cp 129 + cp 86 jr c, .male + call Random + ldh a, [hRandomAdd] + cp 129 + jr c, .nb call DrawFPlayerCharacter jr .playerskip +.nb + call DrawNBPlayerCharacter + jr .playerskip .male call DrawPlayerCharacter .playerskip @@ -398,6 +405,43 @@ DrawFPlayerCharacter: dec b jr nz, .loop2 ret + +DrawNBPlayerCharacter: + ld hl, NBPlayerCharacterTitleGraphics + ld de, vSprites + ld bc, NBPlayerCharacterTitleGraphicsEnd - NBPlayerCharacterTitleGraphics + ld a, BANK(NBPlayerCharacterTitleGraphics) + call FarCopyData2 + call ClearSprites + xor a + ld [wNBPlayerCharacterOAMTile], a + ld hl, wShadowOAM + lb de, $60, $5a + ld b, 7 +.loop3 + push de + ld c, 5 +.innerLoop3 + ld a, d + ld [hli], a ; Y + ld a, e + ld [hli], a ; X + add 8 + ld e, a + ld a, [wNBPlayerCharacterOAMTile] + ld [hli], a ; tile + inc a + ld [wNBPlayerCharacterOAMTile], a + inc hl + dec c + jr nz, .innerLoop3 + pop de + ld a, 8 + add d + ld d, a + dec b + jr nz, .loop3 + ret ClearBothBGMaps: ld hl, vBGMap0 diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index 9f5f7a19..8ab83361 100644 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -389,6 +389,8 @@ FishingAnim: ld a, [wPlayerSex] ; sex check and a ; sex check jr z, .BoySpriteLoad + cp a, 2 + jr z, .EnbySpriteLoad ld de, GreenSprite ld hl, vNPCSprites ld bc, (BANK(GreenSprite) << 8) + $0c @@ -397,17 +399,28 @@ FishingAnim: ld de, RedSprite ld hl, vNPCSprites lb bc, BANK(RedSprite), $c + jr .KeepLoadingSpriteStuff +.EnbySpriteLoad + ld de, TealSprite + ld hl, vNPCSprites + lb bc, BANK(TealSprite), $c .KeepLoadingSpriteStuff call CopyVideoData ld a, [wPlayerSex] ; ; sex check and a ; ; sex check seriously i feel like a republican here jr z, .BoyTiles ; skip loading Green's stuff if you're Red + cp a, 2 + jr z, .EnbyTiles ld a, $4 ld hl, GreenFishingTiles jr .ContinueRoutine ; go back to main routine after loading Green's stuff .BoyTiles ; alternately, load Red's stuff ld a, $4 ld hl, RedFishingTiles + jr .ContinueRoutine ; go back to main routine after loading Red's stuff +.EnbyTiles ; alternately, load Teal's stuff + ld a, $4 + ld hl, TealFishingTiles .ContinueRoutine call LoadAnimSpriteGfx ld a, [wSpritePlayerStateData1ImageIndex] @@ -516,6 +529,12 @@ GreenFishingTiles: fishing_gfx GreenFishingTilesBack, 2, $06 fishing_gfx GreenFishingTilesSide, 2, $0a fishing_gfx RedFishingRodTiles, 3, $fd + +TealFishingTiles: + fishing_gfx TealFishingTilesFront, 2, $02 + fishing_gfx TealFishingTilesBack, 2, $06 + fishing_gfx TealFishingTilesSide, 2, $0a + fishing_gfx RedFishingRodTiles, 3, $fd _HandleMidJump:: ld a, [wPlayerJumpingYScreenCoordsIndex] diff --git a/gfx/blocksets/house.bst b/gfx/blocksets/house.bst index 7f462f80..0ed306da 100644 Binary files a/gfx/blocksets/house.bst and b/gfx/blocksets/house.bst differ diff --git a/gfx/blocksets/overworld.bst b/gfx/blocksets/overworld.bst index 18ceef97..bc92a0f6 100644 --- a/gfx/blocksets/overworld.bst +++ b/gfx/blocksets/overworld.bst @@ -7,7 +7,7 @@ ()O*+:;<<<<<<<<<<<<<<HI77XY77,,,,,,,,,,,,77779999999999FG99VW# -#,,,,,,,,,,,,,,,,RRRRRRRRRRRRRRRRSS88SSSSSS 88@A@APQPQ@A@APQPQ%& +#,,,,,,,,,,,,,,,,RRRRRRRRRRRRRRRRSS^^SSSSSS 88@A@APQPQ@A@APQPQ%& """ @@ -19,7 +19,7 @@ N"/?"""""  ()""" -O*+*+:;:;*+*+:;:;*+:;*+*+:;:;*+:;*+*+:;:;*+*+:;:;*+:;*+*+:;:;*+:;*+:;*+:;*+:;*+:;9999999999996777##UU####UU######9###@A@APQPQ33332223333TTT3333LSSSZZ\SSSMZZ]!########!## ######## '''''6776777$$$$774$7774##!########!########''''''''$$$$$$$$7'57$533,,,,,,,,,,,,74<<%& +O*+*+:;:;*+*+:;:;*+:;*+*+:;:;*+:;*+*+:;:;*+*+:;:;*+:;*+*+:;:;*+:;*+:;*+:;*+:;*+:;9999999999996777##UU####UU######9###@A@APQPQ33332223333TTT3333LSSSZZ\SSSM__]!########!## ######## '''''6776777$$$$774$7774##!########!########''''''''$$$$$$$$7'57$533,,,,,,,,,,,,74<<%& "N9999999999999999@A-.PQ=>@A,,PQ,,@A@APQPQ,,-.,,=>-.,,=>,,@A@APQPQ,,-.,,=>@A,,PQ,,@A@APQPQ,,@A,,PQ @@ -50,7 +50,7 @@ KKKK KKKBCKJJO -KKKDEKJJO,,,,,,,,,,,,88%&""88""()99999999UUUU11110000000000FG00VW,0,00,0,,0,00,0,0909909009099090 +KKKDEKJJO,,,,,,,,,,,,^^%&""88""()99999999UUUU11110000000000FG00VW,0,00,0,,0,00,0,0909909009099090 KKKK N diff --git a/gfx/fishing.asm b/gfx/fishing.asm index cfde973a..ad5bb5f8 100644 --- a/gfx/fishing.asm +++ b/gfx/fishing.asm @@ -5,3 +5,6 @@ RedFishingRodTiles: INCBIN "gfx/overworld/fishing_rod.2bpp" GreenFishingTilesFront: INCBIN "gfx/overworld/green_fish_front.2bpp" GreenFishingTilesBack: INCBIN "gfx/overworld/green_fish_back.2bpp" GreenFishingTilesSide: INCBIN "gfx/overworld/green_fish_side.2bpp" +TealFishingTilesFront: INCBIN "gfx/overworld/teal_fish_front.2bpp" +TealFishingTilesBack: INCBIN "gfx/overworld/teal_fish_back.2bpp" +TealFishingTilesSide: INCBIN "gfx/overworld/teal_fish_side.2bpp" diff --git a/gfx/overworld/teal_fish_back.png b/gfx/overworld/teal_fish_back.png new file mode 100644 index 00000000..137780c8 Binary files /dev/null and b/gfx/overworld/teal_fish_back.png differ diff --git a/gfx/overworld/teal_fish_front.png b/gfx/overworld/teal_fish_front.png new file mode 100644 index 00000000..200663f4 Binary files /dev/null and b/gfx/overworld/teal_fish_front.png differ diff --git a/gfx/overworld/teal_fish_side.png b/gfx/overworld/teal_fish_side.png new file mode 100644 index 00000000..e487eb8a Binary files /dev/null and b/gfx/overworld/teal_fish_side.png differ diff --git a/gfx/pics.asm b/gfx/pics.asm index db5e343c..f5caa74b 100644 --- a/gfx/pics.asm +++ b/gfx/pics.asm @@ -260,7 +260,8 @@ PidgeottoPicFront:: INCBIN "gfx/pokemon/front/pidgeotto.pic" PidgeottoPicBack:: INCBIN "gfx/pokemon/back/pidgeottob.pic" RedPicBack:: INCBIN "gfx/player/redb.pic" -GreenPicBack:: INCBIN "gfx/player/greenb.pic" +GreenPicBack:: INCBIN "gfx/player/greenb.pic" +TealPicBack:: INCBIN "gfx/player/thirdb.pic" OldManPicBack:: INCBIN "gfx/battle/oldmanb.pic" diff --git a/gfx/player.asm b/gfx/player.asm index f50eb71c..825f7161 100644 --- a/gfx/player.asm +++ b/gfx/player.asm @@ -1,4 +1,5 @@ RedPicFront:: INCBIN "gfx/player/red.pic" GreenPicFront:: INCBIN "gfx/player/green.pic" +EnbyPicFront:: INCBIN "gfx/player/third.pic" ShrinkPic1:: INCBIN "gfx/player/shrink1.pic" ShrinkPic2:: INCBIN "gfx/player/shrink2.pic" diff --git a/gfx/player/third.png b/gfx/player/third.png new file mode 100644 index 00000000..4adcad4d Binary files /dev/null and b/gfx/player/third.png differ diff --git a/gfx/player/thirdb.png b/gfx/player/thirdb.png new file mode 100644 index 00000000..a5dc010f Binary files /dev/null and b/gfx/player/thirdb.png differ diff --git a/gfx/sprites.asm b/gfx/sprites.asm index cc7ea54b..d245534e 100644 --- a/gfx/sprites.asm +++ b/gfx/sprites.asm @@ -37,6 +37,8 @@ RedBikeSprite:: INCBIN "gfx/sprites/red_bike.2bpp" RedSprite:: INCBIN "gfx/sprites/red.2bpp" GreenBikeSprite:: INCBIN "gfx/sprites/green_bike.2bpp" GreenSprite:: INCBIN "gfx/sprites/green.2bpp" +TealBikeSprite:: INCBIN "gfx/sprites/teal_bike.2bpp" +TealSprite:: INCBIN "gfx/sprites/teal.2bpp" BlueSprite:: INCBIN "gfx/sprites/blue.2bpp" OakSprite:: INCBIN "gfx/sprites/oak.2bpp" YoungsterSprite:: INCBIN "gfx/sprites/youngster.2bpp" @@ -66,12 +68,6 @@ ErikaSprite:: INCBIN "gfx/sprites/erika.2bpp" MiddleAgedWomanSprite:: INCBIN "gfx/sprites/middle_aged_woman.2bpp" BrunetteGirlSprite:: INCBIN "gfx/sprites/brunette_girl.2bpp" LanceSprite:: INCBIN "gfx/sprites/lance.2bpp" -MomSprite:: INCBIN "gfx/sprites/mom.2bpp" -BaldingGuySprite:: INCBIN "gfx/sprites/balding_guy.2bpp" -LittleBoySprite:: INCBIN "gfx/sprites/little_boy.2bpp" -GameboyKidSprite:: INCBIN "gfx/sprites/gameboy_kid.2bpp" -FairySprite:: INCBIN "gfx/sprites/fairy.2bpp" -AgathaSprite:: INCBIN "gfx/sprites/agatha.2bpp" SeelSprite:: INCBIN "gfx/sprites/seel.2bpp" ; what a SILLY thing to do. SECTION "NPC Sprites 3", ROMX @@ -98,3 +94,12 @@ MagikarpSprite:: INCBIN "gfx/sprites/magikarp.2bpp" PoliwagSprite:: INCBIN "gfx/sprites/poliwag.2bpp" LoreleiSprite:: INCBIN "gfx/sprites/lorelei.2bpp" BrunoSprite:: INCBIN "gfx/sprites/bruno.2bpp" + +SECTION "NPC Sprites 4", ROMX + +MomSprite:: INCBIN "gfx/sprites/mom.2bpp" +BaldingGuySprite:: INCBIN "gfx/sprites/balding_guy.2bpp" +LittleBoySprite:: INCBIN "gfx/sprites/little_boy.2bpp" +GameboyKidSprite:: INCBIN "gfx/sprites/gameboy_kid.2bpp" +FairySprite:: INCBIN "gfx/sprites/fairy.2bpp" +AgathaSprite:: INCBIN "gfx/sprites/agatha.2bpp" diff --git a/gfx/sprites/teal.png b/gfx/sprites/teal.png new file mode 100644 index 00000000..0bd53f9e Binary files /dev/null and b/gfx/sprites/teal.png differ diff --git a/gfx/sprites/teal_bike.png b/gfx/sprites/teal_bike.png new file mode 100644 index 00000000..d01d819a Binary files /dev/null and b/gfx/sprites/teal_bike.png differ diff --git a/gfx/tilesets/overworld.png b/gfx/tilesets/overworld.png index c7533e40..ee10109d 100644 Binary files a/gfx/tilesets/overworld.png and b/gfx/tilesets/overworld.png differ diff --git a/gfx/title/nbplayer.png b/gfx/title/nbplayer.png new file mode 100644 index 00000000..5e84e14c Binary files /dev/null and b/gfx/title/nbplayer.png differ diff --git a/gfx/trainer_card.asm b/gfx/trainer_card.asm index dc573e2d..9dec2bc0 100644 --- a/gfx/trainer_card.asm +++ b/gfx/trainer_card.asm @@ -9,3 +9,6 @@ BadgeNumbersTileGraphics: INCBIN "gfx/trainer_card/badge_numbers.2bpp" FPlayerCharacterTitleGraphics: INCBIN "gfx/title/fplayer.2bpp" FPlayerCharacterTitleGraphicsEnd: + +NBPlayerCharacterTitleGraphics: INCBIN "gfx/title/nbplayer.2bpp" +NBPlayerCharacterTitleGraphicsEnd: diff --git a/home/overworld.asm b/home/overworld.asm index 2216869b..06f40ec8 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -2038,6 +2038,9 @@ LoadWalkingPlayerSpriteGraphics:: ld a, [wPlayerSex] and a jr z, .AreGuy1 + ld de, TealSprite + cp a, 2 + jr z, .AreGuy1 ld de, GreenSprite .AreGuy1 ld hl,vNPCSprites @@ -2053,6 +2056,9 @@ LoadBikePlayerSpriteGraphics:: ld a, [wPlayerSex] and a jr z, .AreGuy2 + ld de, TealBikeSprite + cp a, 2 + jr z, .AreGuy2 ld de, GreenBikeSprite .AreGuy2 ld hl, vNPCSprites diff --git a/home/text.asm b/home/text.asm index bd73f49e..daf81ed6 100644 --- a/home/text.asm +++ b/home/text.asm @@ -522,6 +522,8 @@ TextCommand_SOUND:: jr z, .pokemonCry cp TX_SOUND_CRY_NIDORINA jr z, .pokemonCry + cp TX_SOUND_CRY_NIDOREIGN + jr z, .pokemonCry ld a, [hl] call PlaySound call WaitForSoundToFinish @@ -542,7 +544,7 @@ TextCommandSounds:: db TX_SOUND_GET_ITEM_1, SFX_GET_ITEM_1 ; actually plays SFX_LEVEL_UP when the battle music engine is loaded db TX_SOUND_CAUGHT_MON, SFX_CAUGHT_MON db TX_SOUND_POKEDEX_RATING, SFX_POKEDEX_RATING ; unused - db TX_SOUND_GET_ITEM_1_DUPLICATE, SFX_GET_ITEM_1 ; unused + db TX_SOUND_CRY_NIDOREIGN, NIDOREIGN ; Was SFX_GET_ITEM_1 duplicate db TX_SOUND_GET_ITEM_2, SFX_GET_ITEM_2 db TX_SOUND_GET_KEY_ITEM, SFX_GET_KEY_ITEM db TX_SOUND_DEX_PAGE_ADDED, SFX_DEX_PAGE_ADDED diff --git a/layout.link b/layout.link index 184bf5d5..e2865163 100644 --- a/layout.link +++ b/layout.link @@ -44,7 +44,7 @@ ROMX $2 ROMX $3 "bank3" ROMX $4 - "NPC Sprites 1" +; "NPC Sprites 1" "Font Graphics" "Battle Engine 1" ROMX $5 diff --git a/macros/scripts/text.asm b/macros/scripts/text.asm index bb9458ae..f999231d 100644 --- a/macros/scripts/text.asm +++ b/macros/scripts/text.asm @@ -102,9 +102,9 @@ MACRO sound_pokedex_rating db TX_SOUND_POKEDEX_RATING ENDM - const TX_SOUND_GET_ITEM_1_DUPLICATE ; $0f -MACRO sound_get_item_1_duplicate - db TX_SOUND_GET_ITEM_1_DUPLICATE + const TX_SOUND_CRY_NIDOREIGN ; $0f +MACRO sound_cry_nidoreign + db TX_SOUND_CRY_NIDOREIGN ENDM const TX_SOUND_GET_ITEM_2 ; $10 diff --git a/maps/SafariZoneCenterRestHouse.blk b/maps/SafariZoneCenterRestHouse.blk index 625b41b6..11643254 100644 Binary files a/maps/SafariZoneCenterRestHouse.blk and b/maps/SafariZoneCenterRestHouse.blk differ diff --git a/maps/SafariZoneEastRestHouse.blk b/maps/SafariZoneEastRestHouse.blk index 625b41b6..9f144c22 100644 Binary files a/maps/SafariZoneEastRestHouse.blk and b/maps/SafariZoneEastRestHouse.blk differ diff --git a/maps/SafariZoneNorthRestHouse.blk b/maps/SafariZoneNorthRestHouse.blk index 625b41b6..2683df7b 100644 Binary files a/maps/SafariZoneNorthRestHouse.blk and b/maps/SafariZoneNorthRestHouse.blk differ diff --git a/maps/SafariZoneSecretHouse.blk b/maps/SafariZoneSecretHouse.blk index d5dbe9e1..cd0dbdfb 100644 --- a/maps/SafariZoneSecretHouse.blk +++ b/maps/SafariZoneSecretHouse.blk @@ -1 +1 @@ -  \ No newline at end of file +  \ No newline at end of file diff --git a/maps/SafariZoneWestRestHouse.blk b/maps/SafariZoneWestRestHouse.blk index 625b41b6..11643254 100644 Binary files a/maps/SafariZoneWestRestHouse.blk and b/maps/SafariZoneWestRestHouse.blk differ diff --git a/ram/wram.asm b/ram/wram.asm index 321eb92d..449eb1ef 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -868,6 +868,7 @@ wWhichBadge:: wTitleMonSpecies:: wPlayerCharacterOAMTile:: wFPlayerCharacterOAMTile:: +wNBPlayerCharacterOAMTile:: ; the number of small stars OAM entries to move down wMoveDownSmallStarsOAMCount:: wChargeMoveNum:: @@ -1993,6 +1994,7 @@ wMissableObjectList:: ds 16 * 2 + 1 wPlayerSex:: ; $00 = male ; $01 = female + ; $02 = enby ds 1 wGameProgressFlags:: diff --git a/text/SafariZoneGate.asm b/text/SafariZoneGate.asm index 6cfeb17c..57afe554 100644 --- a/text/SafariZoneGate.asm +++ b/text/SafariZoneGate.asm @@ -84,11 +84,11 @@ _SafariZoneEntranceText_753eb:: cont "BALLs, it's game" cont "over for you!" - para "Before you go," - line "open an unused" - cont "#MON BOX so" - cont "there's room for" - cont "new #MON!" + para "It's ok if the" + line "#MON BOX is" + cont "full: Go to a" + cont "REST HOUSE and" + cont "switch!" done _SafariZoneEntranceText_753f0::