Boy/Girl option

This adds the boy/girl selection from later generations, using the pret tutorial and a spriteset from Pokemon Anniversary Red. I made some alterations, namely inserting the option later into the speech to be less clunky, and having the Nidorino become a Nidorina if you pick the feminine option.

I decided to make the third name option Seren, a common Welsh name for girls. It means "star", which is really cute! But...most people will probably say it's a Panel de Pon reference, which is cool too.
This commit is contained in:
Llinos Evans 2023-05-13 00:08:39 +01:00
parent 3b16404a50
commit 36baa9e623
28 changed files with 225 additions and 35 deletions

View file

@ -85,6 +85,7 @@ Improved areas
QoL Enhancements
====
- A girl option is now available, featuring the sprite from Pokemon Anniversary Red, which is based on Green's manga and later LGPE appearance (sort of).
- All 151 original Pokemon, plus an additional 100, can be obtained without the use of trading or glitches, including Mew!
- New Pokedex entries for most Pokemon are available, sourced from the original 1996 Pokedex book by Creatures Inc., restoring a ton of old Kanto lore. Thanks to [Dr. Lava and Nob Ogasawara](http://lavacutcontent.com/1996-creatures-pokedex-translation-1/) for their incredible work translating and writing about it!
- Pikachu and Eevee are now starters, featuring fully functional Rival lineups. If you pick Pikachu, he picks Eevee, and if you pick Eevee, he picks Pikachu!
@ -290,6 +291,7 @@ Credits
* FrenchOrange - Reconstructions of various overworld beta sprites.
* Helix Chamber, RacieBeep, loumilouminosus, Orchid, GBCRetro, & catstorm26 - Prototype Pokémon sprites
* Vortiene - Reused a bit of code from their pureRGB hack. Assisted in bug fixes.
* Pigu-A, RevoSucks, walle303 - Contributors to Pokemon Anniversary Red, which we used as reference points for the Girl sprites and the Battle Tent.
* jojobear13 & Mateo - Move deleter & move relearner functionality from Shin Pokered, followed [this guide](https://github.com/jojobear13/shinpokered/blob/master/how%20to%20guides/how%20to%20add%20the%20move%20relearner%26deleter.txt). Tweaks were made to make it compatible with the pokered version we worked off of.
* Rangi - Reused a bit of code from their Red* / Blue* hack to make HMs usable in the overworld!
* wrulfy - Technical advice

View file

@ -5,6 +5,13 @@ DefaultNamesPlayer:
next "JACK"
db "@"
DefaultNamesGirl:
db "NEW NAME"
next "GREEN"
next "LEAF"
next "SEREN"
db "@"
DefaultNamesRival:
db "NEW NAME"
next "BLUE"

View file

@ -4,6 +4,12 @@ DefaultNamesPlayerList:
db "ASH@"
db "JACK@"
DefaultNamesGirlList:
db "NEW NAME@"
db "GREEN@"
db "LEAF@"
db "SEREN@"
DefaultNamesRivalList:
db "NEW NAME@"
db "BLUE@"

View file

@ -1740,7 +1740,7 @@ _OakSpeechText2B::
prompt
_IntroducePlayerText::
text "First, what is"
text "Next, what is"
line "your name?"
prompt
@ -1818,4 +1818,9 @@ _ExplainCutText::
_PromptToCutText::
text "Would you like to"
line "use CUT?"
done
done
_BoyGirlText::
text "Firstly, are you a"
line "boy or a girl?"
done

View file

@ -8,7 +8,7 @@ TwoOptionMenuStrings:
table_width 5, TwoOptionMenuStrings
; width, height, blank line before first menu item?, text pointer
two_option_menu 4, 3, FALSE, .YesNoMenu
two_option_menu 6, 3, FALSE, .NorthWestMenu
two_option_menu 5, 3, FALSE, .BoyGirlMenu
two_option_menu 6, 3, FALSE, .SouthEastMenu
two_option_menu 6, 3, FALSE, .YesNoMenu
two_option_menu 6, 3, FALSE, .NorthEastMenu
@ -25,9 +25,10 @@ TwoOptionMenuStrings:
db "YES"
next "NO@"
.NorthWestMenu:
db "NORTH"
next "WEST@"
; There is probably a better way to word this...
.BoyGirlMenu:
db "BOY"
next "GIRL@"
.SouthEastMenu:
db "SOUTH"

View file

@ -6365,12 +6365,21 @@ SwapPlayerAndEnemyLevels:
LoadPlayerBackPic:
ld a, [wBattleType]
dec a ; is it the old man tutorial?
ld de, RedPicBack
jr nz, .next
ld de, OldManPicBack
.next
ld de, OldManPicBack ; Load the old man back sprite preemptively
ld a, BANK(RedPicBack) ; Default Red back sprite will be used as a means to load in the Old Man back sprite
jr z, .next
ld a, [wPlayerSex] ; do you think a republican will get off to this commit
and a
jr z, .RedBack
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)
ASSERT BANK(RedPicBack) == BANK(OldManPicBack)
.next
ASSERT BANK(GreenPicBack) == BANK(OldManPicBack) ; These two ASSERTs make sure to cover
ASSERT BANK(RedPicBack) == BANK(OldManPicBack) ; both sprite cases
call UncompressSpriteFromDE
predef ScaleSpriteByTwo
ld hl, wShadowOAM

View file

@ -35,12 +35,16 @@ DebugStart:
IF DEF(_DEBUG)
xor a ; PLAYER_PARTY_DATA
ld [wMonDataLocation], a
; Fly anywhere.
dec a ; $ff
ld [wTownVisitedFlag], a
ld [wTownVisitedFlag + 1], a
; This hack was coded by transfems.
ld a, 1
ld [wPlayerSex], a
; Get all badges except Earth Badge.
ld a, ~(1 << BIT_EARTHBADGE)
ld [wObtainedBadges], a

View file

@ -486,6 +486,12 @@ StartMenu_TrainerInfo::
DrawTrainerInfo:
ld de, RedPicFront
lb bc, BANK(RedPicFront), $01
ld a, [wPlayerSex] ; guess what it's genital inspection time
and a
jr z, .AreBoy
ld de, GreenPicFront
lb bc, BANK(GreenPicFront), $01
.AreBoy
predef DisplayPicCenteredOrUpperRight
call DisableLCD
hlcoord 0, 2

View file

@ -183,8 +183,16 @@ HoFMonInfoText:
next "TYPE2/@"
HoFLoadPlayerPics:
ld a, [wPlayerSex] ; sex check
and a ; sex check
jr nz, .GirlStuff1
ld de, RedPicFront
ld a, BANK(RedPicFront)
jr .Routine ; skip the girl stuff and go to main routine
.GirlStuff1
ld de, GreenPicFront
ld a, BANK(GreenPicFront)
.Routine ; resume original routine
call UncompressSpriteFromDE
ld hl, sSpriteBuffer1
ld de, sSpriteBuffer0
@ -192,8 +200,16 @@ HoFLoadPlayerPics:
call CopyData
ld de, vFrontPic
call InterlaceMergeSpriteBuffers
ld a, [wPlayerSex] ; sex check
and a ; maybe the tories are like this too
jr nz, .GirlStuff2
ld de, RedPicBack
ld a, BANK(RedPicBack)
jr .routine2 ; skip the girl stuff and continue original routine if guy
.GirlStuff2
ld de, GreenPicBack
ld a, BANK(GreenPicBack)
.routine2 ; original routine
call UncompressSpriteFromDE
predef ScaleSpriteByTwo
ld de, vBackPic

View file

@ -58,14 +58,36 @@ OakSpeech:
ld a, [wd732]
bit 1, a ; possibly a debug mode bit
jp nz, .skipChoosingNames
call ClearScreen ; clear the screen before resuming normal intro
ld de, ProfOakPic
lb bc, BANK(ProfOakPic), $00
call IntroDisplayPicCenteredOrUpperRight
call FadeInIntroPic
ld hl, OakSpeechText1
call PrintText
ld hl, BoyGirlText ; added to the same file as the other oak text
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
call GBFadeOutToWhite
call ClearScreen
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
.Nidorina
ld a, NIDORINA
ld [wd0b5], a
ld [wcf91], a
call GetMonHeader
hlcoord 6, 4
call LoadFlippedFrontSpriteByMonIndex
call MovePicLeft
ld hl, OakSpeechText2Green
jr .cont
.Nidorino
ld a, NIDORINO
ld [wd0b5], a
ld [wcf91], a
@ -73,12 +95,21 @@ OakSpeech:
hlcoord 6, 4
call LoadFlippedFrontSpriteByMonIndex
call MovePicLeft
ld hl, OakSpeechText2
ld hl, OakSpeechText2Red
jr .cont
.cont
call PrintText
call GBFadeOutToWhite
call ClearScreen
ld de, RedPicFront
lb bc, BANK(RedPicFront), $00
ld a, [wPlayerSex] ; check sex
and a ; check sex
jr z, .NotGreen1
ld de, GreenPicFront
lb bc, BANK(GreenPicFront), $00
.NotGreen1:
call IntroDisplayPicCenteredOrUpperRight
call MovePicLeft
ld hl, IntroducePlayerText
@ -98,6 +129,12 @@ OakSpeech:
call ClearScreen
ld de, RedPicFront
lb bc, BANK(RedPicFront), $00
ld a, [wPlayerSex] ; check sex
and a ; check sex
jr z, .NotGreen2
ld de, GreenPicFront
lb bc, Bank(GreenPicFront), $00
.NotGreen2:
call IntroDisplayPicCenteredOrUpperRight
call GBFadeInFromWhite
ld a, [wd72d]
@ -118,10 +155,17 @@ OakSpeech:
ld de, RedSprite
ld hl, vSprites
lb bc, BANK(RedSprite), $0C
call CopyVideoData
ld de, ShrinkPic1
lb bc, BANK(ShrinkPic1), $00
call IntroDisplayPicCenteredOrUpperRight
ld a, [wPlayerSex] ; check sex
and a ; check sex
jr z, .NotGreen3
ld de,GreenSprite
lb bc, BANK(GreenSprite), $0C
.NotGreen3:
ld hl, vSprites
call CopyVideoData
ld de, ShrinkPic1
lb bc, BANK(ShrinkPic1), $00
call IntroDisplayPicCenteredOrUpperRight
ld c, 4
call DelayFrames
ld de, ShrinkPic2
@ -158,11 +202,16 @@ OakSpeech:
OakSpeechText1:
text_far _OakSpeechText1
text_end
OakSpeechText2:
OakSpeechText2Red: ; this is such a clunky way to do it but the text_asm way caused crashes
text_far _OakSpeechText2A
sound_cry_nidorino
text_far _OakSpeechText2B
text_end
OakSpeechText2Green:
text_far _OakSpeechText2A
sound_cry_nidorina
text_far _OakSpeechText2B
text_end
IntroducePlayerText:
text_far _IntroducePlayerText
text_end
@ -234,3 +283,26 @@ IntroDisplayPicCenteredOrUpperRight:
xor a
ldh [hStartTileID], a
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, 13, 7
ld bc, $80e
ret
DisplayBoyGirlChoice::
ld a, $14
ld [wTextBoxID], a
call DisplayTextBoxID
jp LoadScreenTilesFromBuffer1
BoyGirlText: ; This is new so we had to add a reference to get it to compile
text_far _BoyGirlText
text_end

View file

@ -1,7 +1,10 @@
ChoosePlayerName:
call OakSpeechSlidePicRight
ld de, DefaultNamesPlayer
call DisplayIntroNameTextBox
ld a, [wPlayerSex] ; load sex
and a
jr nz, .AreGirl ; Skip to girl names if you are a girl instead
ld de, DefaultNamesPlayer
call DisplayIntroNameTextBox
ld a, [wCurrentMenuItem]
and a
jr z, .customName
@ -10,6 +13,17 @@ ChoosePlayerName:
ld de, wPlayerName
call OakSpeechSlidePicLeft
jr .done
.AreGirl ; Copy of the boy naming routine, just with girl's names
ld de, DefaultNamesGirl
call DisplayIntroNameTextBox
ld a, [wCurrentMenuItem]
and a
jr z, .customName
ld hl, DefaultNamesGirlList
call GetDefaultName
ld de, wPlayerName
call OakSpeechSlidePicLeft
jr .done ; End of new Girl Names routine
.customName
ld hl, wPlayerName
xor a ; NAME_PLAYER_SCREEN
@ -22,6 +36,12 @@ ChoosePlayerName:
call Delay3
ld de, RedPicFront
ld b, BANK(RedPicFront)
ld a, [wPlayerSex] ; sex check
and a ; yknow it feels like republicans wanting to do penis checking
jr z, .AreBoy3
ld de, GreenPicFront
ld b, BANK(GreenPicFront)
.AreBoy3
call IntroDisplayPicCenteredOrUpperRight
.done
ld hl, YourNameIsText

View file

@ -385,12 +385,29 @@ FishingAnim:
call DelayFrames
ld hl, wd736
set 6, [hl] ; reserve the last 4 OAM entries
ld a, [wPlayerSex] ; sex check
and a ; sex check
jr z, .BoySpriteLoad
ld de, GreenSprite
ld hl, vNPCSprites
ld bc, (BANK(GreenSprite) << 8) + $0c
jr .KeepLoadingSpriteStuff
.BoySpriteLoad
ld de, RedSprite
ld hl, vNPCSprites tile $00
lb bc, BANK(RedSprite), 12
ld hl, vNPCSprites
lb bc, BANK(RedSprite), $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
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
.ContinueRoutine
call LoadAnimSpriteGfx
ld a, [wSpritePlayerStateData1ImageIndex]
ld c, a
@ -493,6 +510,12 @@ RedFishingTiles:
fishing_gfx RedFishingTilesSide, 2, $0a
fishing_gfx RedFishingRodTiles, 3, $fd
GreenFishingTiles:
fishing_gfx GreenFishingTilesFront, 2, $02
fishing_gfx GreenFishingTilesBack, 2, $06
fishing_gfx GreenFishingTilesSide, 2, $0a
fishing_gfx RedFishingRodTiles, 3, $fd
_HandleMidJump::
ld a, [wPlayerJumpingYScreenCoordsIndex]
ld c, a

View file

@ -2,3 +2,6 @@ RedFishingTilesFront: INCBIN "gfx/overworld/red_fish_front.2bpp"
RedFishingTilesBack: INCBIN "gfx/overworld/red_fish_back.2bpp"
RedFishingTilesSide: INCBIN "gfx/overworld/red_fish_side.2bpp"
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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

View file

@ -260,6 +260,7 @@ 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"
OldManPicBack:: INCBIN "gfx/battle/oldmanb.pic"
@ -318,7 +319,6 @@ VileplumePicBack:: INCBIN "gfx/pokemon/back/vileplumeb.pic"
BellsproutPicFront:: INCBIN "gfx/pokemon/front/bellsprout.pic"
BellsproutPicBack:: INCBIN "gfx/pokemon/back/bellsproutb.pic"
SECTION "Pics 6", ROMX
YoungsterPic:: INCBIN "gfx/trainers/youngster.pic"

View file

@ -1,3 +1,4 @@
RedPicFront:: INCBIN "gfx/player/red.pic"
GreenPicFront:: INCBIN "gfx/player/green.pic"
ShrinkPic1:: INCBIN "gfx/player/shrink1.pic"
ShrinkPic2:: INCBIN "gfx/player/shrink2.pic"

BIN
gfx/player/green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 929 B

BIN
gfx/player/greenb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 B

View file

@ -35,6 +35,8 @@ SECTION "NPC Sprites 2", ROMX
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"
BlueSprite:: INCBIN "gfx/sprites/blue.2bpp"
OakSprite:: INCBIN "gfx/sprites/oak.2bpp"
YoungsterSprite:: INCBIN "gfx/sprites/youngster.2bpp"
@ -71,8 +73,6 @@ GameboyKidSprite:: INCBIN "gfx/sprites/gameboy_kid.2bpp"
FairySprite:: INCBIN "gfx/sprites/fairy.2bpp"
AgathaSprite:: INCBIN "gfx/sprites/agatha.2bpp"
BrunoSprite:: INCBIN "gfx/sprites/bruno.2bpp"
LoreleiSprite:: INCBIN "gfx/sprites/lorelei.2bpp"
SeelSprite:: INCBIN "gfx/sprites/seel.2bpp"
SECTION "NPC Sprites 3", ROMX
@ -97,3 +97,5 @@ VoltorbSprite:: INCBIN "gfx/sprites/voltorb.2bpp"
GengarSprite:: INCBIN "gfx/sprites/gengar.2bpp"
MagikarpSprite:: INCBIN "gfx/sprites/magikarp.2bpp"
PoliwagSprite:: INCBIN "gfx/sprites/poliwag.2bpp"
LoreleiSprite:: INCBIN "gfx/sprites/lorelei.2bpp"
SeelSprite:: INCBIN "gfx/sprites/seel.2bpp"

BIN
gfx/sprites/green.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
gfx/sprites/green_bike.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -2027,7 +2027,12 @@ RunMapScript::
LoadWalkingPlayerSpriteGraphics::
ld de, RedSprite
ld hl, vNPCSprites
ld a, [wPlayerSex]
and a
jr z, .AreGuy1
ld de, GreenSprite
.AreGuy1
ld hl,vNPCSprites
jr LoadPlayerSpriteGraphicsCommon
LoadSurfingPlayerSpriteGraphics::
@ -2037,6 +2042,11 @@ LoadSurfingPlayerSpriteGraphics::
LoadBikePlayerSpriteGraphics::
ld de, RedBikeSprite
ld a, [wPlayerSex]
and a
jr z, .AreGuy2
ld de, GreenBikeSprite
.AreGuy2
ld hl, vNPCSprites
LoadPlayerSpriteGraphicsCommon::

View file

@ -520,7 +520,7 @@ TextCommand_SOUND::
jr z, .pokemonCry
cp TX_SOUND_CRY_PIDGEOT
jr z, .pokemonCry
cp TX_SOUND_CRY_DEWGONG
cp TX_SOUND_CRY_NIDORINA
jr z, .pokemonCry
ld a, [hl]
call PlaySound
@ -548,7 +548,7 @@ TextCommandSounds::
db TX_SOUND_DEX_PAGE_ADDED, SFX_DEX_PAGE_ADDED
db TX_SOUND_CRY_NIDORINO, NIDORINO ; used in OakSpeech
db TX_SOUND_CRY_PIDGEOT, PIDGEOT ; used in SaffronCityText12
db TX_SOUND_CRY_DEWGONG, DEWGONG ; unused
db TX_SOUND_CRY_NIDORINA, NIDORINA ; was unused dewgong call
TextCommand_DOTS::
; wait for button press or 30 frames while printing "…"s

View file

@ -137,9 +137,9 @@ MACRO sound_cry_pidgeot
db TX_SOUND_CRY_PIDGEOT
ENDM
const TX_SOUND_CRY_DEWGONG ; $16
MACRO sound_cry_dewgong
db TX_SOUND_CRY_DEWGONG
const TX_SOUND_CRY_NIDORINA ; $16
MACRO sound_cry_nidorina
db TX_SOUND_CRY_NIDORINA
ENDM
const TX_FAR ; $17

View file

@ -356,9 +356,9 @@ INCLUDE "data/moves/animations.asm"
INCLUDE "data/battle_anims/subanimations.asm"
INCLUDE "data/battle_anims/frame_blocks.asm"
INCLUDE "engine/movie/evolution.asm"
INCLUDE "engine/items/tm_prices.asm"
INCLUDE "engine/overworld/elevator.asm"
SECTION "Engine Spillover", ROMX
INCLUDE "engine/menus/item_descriptions.asm"
INCLUDE "engine/menus/item_descriptions.asm"
INCLUDE "engine/items/tm_prices.asm"

View file

@ -1972,7 +1972,10 @@ wd5cd:: db
; terminated with $FF
wMissableObjectList:: ds 16 * 2 + 1
ds 1
wPlayerSex::
; $00 = male
; $01 = female
ds 1
wGameProgressFlags::
wOaksLabCurScript:: db