From 36baa9e623f36d5171201a8fb69759d31d71774b Mon Sep 17 00:00:00 2001 From: Llinos Evans <36418502+PlagueVonKarma@users.noreply.github.com> Date: Sat, 13 May 2023 00:08:39 +0100 Subject: [PATCH] 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. --- README.md | 2 + data/player_names.asm | 7 ++ data/player_names_list.asm | 6 ++ data/text/text_2.asm | 9 ++- data/yes_no_menu_strings.asm | 9 +-- engine/battle/core.asm | 19 ++++-- engine/debug/debug_party.asm | 8 ++- engine/menus/start_sub_menus.asm | 6 ++ engine/movie/hall_of_fame.asm | 16 +++++ engine/movie/oak_speech/oak_speech.asm | 84 ++++++++++++++++++++++-- engine/movie/oak_speech/oak_speech2.asm | 24 ++++++- engine/overworld/player_animations.asm | 27 +++++++- gfx/fishing.asm | 3 + gfx/overworld/green_fish_back.png | Bin 0 -> 242 bytes gfx/overworld/green_fish_front.png | Bin 0 -> 309 bytes gfx/overworld/green_fish_side.png | Bin 0 -> 281 bytes gfx/pics.asm | 2 +- gfx/player.asm | 1 + gfx/player/green.png | Bin 0 -> 929 bytes gfx/player/greenb.png | Bin 0 -> 537 bytes gfx/sprites.asm | 6 +- gfx/sprites/green.png | Bin 0 -> 15277 bytes gfx/sprites/green_bike.png | Bin 0 -> 16210 bytes home/overworld.asm | 12 +++- home/text.asm | 4 +- macros/scripts/text.asm | 6 +- main.asm | 4 +- ram/wram.asm | 5 +- 28 files changed, 225 insertions(+), 35 deletions(-) create mode 100644 gfx/overworld/green_fish_back.png create mode 100644 gfx/overworld/green_fish_front.png create mode 100644 gfx/overworld/green_fish_side.png create mode 100644 gfx/player/green.png create mode 100644 gfx/player/greenb.png create mode 100644 gfx/sprites/green.png create mode 100644 gfx/sprites/green_bike.png diff --git a/README.md b/README.md index fc66b36f..793772fc 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/data/player_names.asm b/data/player_names.asm index b1f687b8..3c65c57b 100644 --- a/data/player_names.asm +++ b/data/player_names.asm @@ -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" diff --git a/data/player_names_list.asm b/data/player_names_list.asm index 33336abb..a0ac7579 100644 --- a/data/player_names_list.asm +++ b/data/player_names_list.asm @@ -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@" diff --git a/data/text/text_2.asm b/data/text/text_2.asm index 26aaf6ce..ecc5fc4a 100644 --- a/data/text/text_2.asm +++ b/data/text/text_2.asm @@ -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 \ No newline at end of file + done + +_BoyGirlText:: + text "Firstly, are you a" + line "boy or a girl?" + done diff --git a/data/yes_no_menu_strings.asm b/data/yes_no_menu_strings.asm index 82c3a3a5..bcc3ebc2 100644 --- a/data/yes_no_menu_strings.asm +++ b/data/yes_no_menu_strings.asm @@ -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" diff --git a/engine/battle/core.asm b/engine/battle/core.asm index bb13eb56..ce83e160 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -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 diff --git a/engine/debug/debug_party.asm b/engine/debug/debug_party.asm index 2ddc19cc..067171e4 100644 --- a/engine/debug/debug_party.asm +++ b/engine/debug/debug_party.asm @@ -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 diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 460180a9..e21441db 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -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 diff --git a/engine/movie/hall_of_fame.asm b/engine/movie/hall_of_fame.asm index cfcb9d99..556b777f 100644 --- a/engine/movie/hall_of_fame.asm +++ b/engine/movie/hall_of_fame.asm @@ -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 diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm index 40793dde..aafe8357 100644 --- a/engine/movie/oak_speech/oak_speech.asm +++ b/engine/movie/oak_speech/oak_speech.asm @@ -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 diff --git a/engine/movie/oak_speech/oak_speech2.asm b/engine/movie/oak_speech/oak_speech2.asm index 7288207b..445ed567 100644 --- a/engine/movie/oak_speech/oak_speech2.asm +++ b/engine/movie/oak_speech/oak_speech2.asm @@ -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 diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm index fc383aeb..49f3df99 100644 --- a/engine/overworld/player_animations.asm +++ b/engine/overworld/player_animations.asm @@ -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 diff --git a/gfx/fishing.asm b/gfx/fishing.asm index 0a040262..cfde973a 100644 --- a/gfx/fishing.asm +++ b/gfx/fishing.asm @@ -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" diff --git a/gfx/overworld/green_fish_back.png b/gfx/overworld/green_fish_back.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7f5d32415b9e7d83e27d6264a607d0a9235d3b GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^96&6FdgVpOKqKN&2C{9cQ3WiKmNWh(>Vl zgo}a=3Ovr;$_G5o9N5uwgvZO`a<=Zgee(<4IWjL>PW04dRoZ%O>60B_MNNAQ-%VCm z`EqYATk~6n$t2IFOOHfwVp i5^t&Apj`jP@d?vjYje9+1$BL({S2P2elF{r5}E*%E>H>p literal 0 HcmV?d00001 diff --git a/gfx/overworld/green_fish_front.png b/gfx/overworld/green_fish_front.png new file mode 100644 index 0000000000000000000000000000000000000000..c57e8df37a1e0e9e1258fc9f2d879664a53cfddd GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^96&6FdgVpOKqKnyqJ&tpZSJyQhm|h(>Vg zgoC0j3Op{#w;9VGOqJVH@zjfd+Q!rf<|_`mVGnLDKAj>fcJqH6&mjRL!R)u9PCI5K z_elM4H#@z_o-&CiV4JjMx~M?0OuK?ZrIYayj)X7K2NYR#4~Oo!e#)Zn z`z!CY3c}WKkHmJ>HHpd?(>w|`&+p-HJX;4kre27CBtF%uq`Qf z(^ucsbIu=TeewL`cb4T|S**X_uYD!+>ukK}M1JYZNk>z+D}(~Qz~JfX=d#Wzp$P!A C26T=9 literal 0 HcmV?d00001 diff --git a/gfx/overworld/green_fish_side.png b/gfx/overworld/green_fish_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ca42f5b43d41a2e844d7e93e64eb599ba2dd6397 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^96&6j(Jw?f4g@Ab=# zj}<7ggnK=_oUwN2=i9S6EYpRL6yCj%k)V2P2mc8Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00Cl4M??UK1szBL z000McNliru-vtU6ATHS2_tpRa0~Sd{K~!i%-I$AV;xG(Fq5lXU2_L!Zljbs7kq|#5 z!*XUcv0XXUjbtV5`A^~W#r&+-uO&s``FvjNdcFQLeg|PCih%q5zKk!I%W`F|F)*Kf zB0>a`AuD7Le0UHuMGlu}tvGSJ-IhJG7|LMFx$+NTRwjo8?qyGFh#+HI=)7j1%kC2O zW#$`<#Q7}aCttunvt+w6NYDgk17&Qp$z0i!zeoE&DuX<20+S#KMT`QjMWR!i4jJr$ zttG(4G%g|^W3HOpb-M@4W>}yE0CUEegn$HE(^@uNO-3c! zkf$$q&KghKW@PJ}37;AK{TXctr5*&<;@vgpirGx;8CjHRul8loEl^_{v<>!1tQVO@ z(`%ymFJ-0DvL!22rhDbeK1^RZzWGGc^&V7^B?Ifq@y9d%mRTa31rmtO4nZA>I|8v= z)eu3*mrPG!JS1BIX_Vl)V5{F=GVxg7GNHK|js00PL;n}`)Se-Jr9XdZATR=M^~!8^ z^?Cs2nS`9dn#|e81e&YCWDz2;6c%$i$jPp$t5 zAp*S}VZ~{jMQDkZVAs(;e1pzxG~EITG~$C9u{95-mo9+_BPf|T3fAtM##*XPux-yu z@T=D|TmIOqJ)?B}!Mj(QHMjD6JAQo=q5l{CJWi*-XHAUVc~_CO00000NkvXXu0mjf DL+hXt literal 0 HcmV?d00001 diff --git a/gfx/player/greenb.png b/gfx/player/greenb.png new file mode 100644 index 0000000000000000000000000000000000000000..fd34420bd95b1ac75175c276111f09865b5a356d GIT binary patch literal 537 zcmV+!0_OdRP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf00Cl4M??UK1szBL z000McNliru-vtU6Avr=4Lr?$!0gg#TK~z{r#gz-LgCGz^^`%?XMd~7359w{DBcB1y z>q*Ff0{1c_?fg8Le#qZDhM4C$HQ&ENI0G%Q(L{y}AigY1>MMHIbsaL%EP)r__dWF$ z#kOrjC8-*);((}3=(#mCVxm|AFK+RfU~G-`lp|}PCT_`z3rs-E$X5vv9uY@OCM=OG zJl-+E0@cu;2&{m_^-M8(a#1V+cmv>#X)FU#VNv}Ep=3g^oVnb9k>7%*0mzvEj96jT z^co2L7uXZmKwRHIl*<_q+NL)P%?y;ph2CT4_7b$jEg0w(hsy>KW}Y(8OVxlj2X992 zB(8q1iDm}u35gbol6u~AC2#!(yf{%X)|KNq!v6G(X|=1FHNYZH!^RS|;t{k5#)#gW z$Qs~u5o%fBU1XnX33{<6yt$H@lL0Lr#fr%UjWXmo8PH-DMUD9H!>&_SN_-hm{j9j( z+>X^J`gy=UHSxqT;lm-y>=e}pqHlWdpB<_Gj3b;3*bNv9J!>_)CPMM=_`kUI8jkQ| b1Jm>ZRO{WI%v_n@00000NkvXXu0mjftz+Jl literal 0 HcmV?d00001 diff --git a/gfx/sprites.asm b/gfx/sprites.asm index 4df105ce..487db94d 100644 --- a/gfx/sprites.asm +++ b/gfx/sprites.asm @@ -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" diff --git a/gfx/sprites/green.png b/gfx/sprites/green.png new file mode 100644 index 0000000000000000000000000000000000000000..242b6477964a758ebaeb4194f820aa0e3d3161ef GIT binary patch literal 15277 zcmeI3eNG$xQ-@rp^Z6v%sfl+7$3N^wY2QgD)PDmaRdM zs)Y!$c`JepKLOvj5u{v%Aa{xo1lxxo^Xc8c_|r0=oo-4iU=So|j{W0@ylx9akc0)4 zHs6x3$-oHOAjEZaF)6Gtn1C8V6p0lkoY+8Gc*SHXWmNJ9Pj~WplupUdlWIg7Qwmu| zrB#{9oT^MMQMG}P>-dSPKt%-x5*SDe&Z{u!jSN9P_#e|`#)oK-5D zfs%UCKpHI!@QHo;Ol7o%X3FRZhIDsNI51cfjmAB;&-oe*K8I#3sha=-7gC>2Mq6nj z(QJ~T%gqFtx(VD$l&`zDP$izl8I#H0GvVCH3TgtIy~k;Dl!9}G6yRR56f=oiXtS24 z^(tqTWsM@_rKIp;@+hN@wla$qsJGg))Sg778n=)tP>NE4NGcGEv=Wh{6v4mom`DUA zaVouXXlNZ(QaLV%7!ye_P>@g#Na>veY#kkL!T+Z$uolXrBd`+MY``rl%7B-WsL5EW zKs}9+(p^wk3azKjU|Qhz6{xRf$mJ+9EZxXha3evct5u*uNKrbBAeI1lGP!_ESV9U& zS-e~z#|fE$kR(WCGNPCemy|dlYBaEYTxvBriSd}Qm-^q;E==hkj6gy z?>mH#G~NH=B|_y4&36m-~3KdmNh< z!wLIArXuWnfz&C`F|D3yxt%T>_5UuQGe2aXcnoV9X?)s-a;9>qCQic8B^E1gCX-4* zO|WcpXTq@#@5~C+e&*|`v1{OL9lJE6#X5c|751YH17!fFggfwy73jD&&&W=FzI{3M zxL6Uv0uC2UgEi)Gu_A&6 z94?p!Ys}$dMFa~tTrdsRn8U@22o`X-U>dA3hl>>vEZ}g#G+1K}7b_xIz~O>vu*MuN zRz$FX!v)h|jX7Mbh+qMS3#P#ubGTR$!2%8!OoKJ%aIqqS1spDz25ZdWVnqZCI9xCd z)|kV^iU<~PxL_KrF^7v45iHaa(QDv6IJN%UzLv*RrB{BvYt{1~U1+`+v0~xvm=6o;j}B8o(3CeVRe}<@U>%0G&{>hY} zmDz;{S4;l3tXq~`Te$Cy*&p|}1YG>p{TY|%6<$rg8FqYVPU8X_zIJl@{T-*3Ng>Fd zzpfWm|3)_wrpd?~4xZOmGe26nQ!r<9OSe|~<3|6ZH&Y8vKC-(zQk$hdcd)&$|Mua4mjuN@AFEmyWpCpjD*ot& zcNQR@{Orv3uE79FOT?OI?^|nk)}{NU?>hC6m~`|Ve#yRuRT*>t5b(i?m<>Za=2`O( zN9g2Vo*PWa@D^g!` zGB#}fI@>=x9`oyptNPH92&BHb_U6*WportUCdbCKE~*pQrcbFJnu~T$o%=i8w+HK1 zOFFeTmc?`j9m{EuSGN~czA`v#`e% z9609-W^&T8ng6cS9!P5rV|x2T{Q=C9&cVnTFRQaR-Z5O+t2p$>f+}zm+oEseEz`Q?dzHvJHYF+2$G(fsXmfiwB^5}UmsTh literal 0 HcmV?d00001 diff --git a/gfx/sprites/green_bike.png b/gfx/sprites/green_bike.png new file mode 100644 index 0000000000000000000000000000000000000000..c9dfd47d243c29332796a4ee78bf2c8fe7eb8e2d GIT binary patch literal 16210 zcmeI3e^3)=8pjvu6$_Q~?yyqSYZ~nw+FN$>izI76A_0Om90E09Yh|;$fe6XQ?1q3^ z(OMPJs`%qX4_ma_p-!dFO{*34)KRf;)vCy;=daegDs--%!# zV?vPGFCfVLg$Q!*5%}yx5I2q>Ul$?>QHvnM+0`?Srh~puIgJGzf<*nw`xl06tcyjE z@o(Dl^7(wzWP)Pt2_(&0n1ph>6ZA$9-Gp){NtH0X#KIKW97)oD?mZxt*ytpwS!Kda z&Qzw@W}NL}a%X4dQL{@ZEiIjp9H}cOKma?#lag|Kse>cRlcc`51o-Z4#-tKo7rrD( zs`m~k$v0(7Qdt)xQ6;EQ3YW_yYHfl{rPRt~zm>>wnF5pHm|Tm>WQ0;p$Py*pmozyN zeABsTE0JSJ?;Z|VNz!7TcM=%p@puwEiUihGgvqp8Er!c6xf}&OP_DwkljW#`8|@F$ z6UV@Cl*{JiZLCA$jZ0csH=iVxdIt(z-RrVD0|Pm@ZgzkoR!%xGSptsrC!(o<#_4vI z`ld!x7*opF83)e+ovdG-vzX;su9zKQ$bfsmfk948rohuX z91jWN?+L{)v9!%v(L07L566L&kSB)52f`AB{A}(P*kXOV70TDJu zT*7=HuZRl*B5aDdg!w>T5f=nR*c5RI^MSk~E(nOQDdH0519?SU5D;Ng#3jrJ@`|`1 zAi}1IOPCMj6>&j8giR5bFdxV(;(~w(n<6e@K9E<$1pyH@MO?ysAg_oE0wQdRxP}To4dpQ^Y0A2l9%zARxk~h)b9c<7YZ(W4pVk9joNY5EhapI~G1H*W%g?y<`%|tF&p(}Z_U(t3TQw~iyGH)eyyuq| z`|j6UHylcrJe4{B_%~f&;EvrF&X13N@72Xy=6z2b_)YwQ{rfka9v4pC7$fai>zO-m z-r_ampZhR2yy@IQe!hBN$x*hY%{^fAh#^|$$5=U*VUR&~I zO4R2Z5_hm+*^y)0qSmi}e_4G)WrifXVbabKGo;R#t_g}pn(K%7mF*AEe&4w=Y*o8N5 z)Ye_u+q{oAG)-=~opMUIZViOg7+4EBj!^iDkxN*`^(=!pVFLsSOW3aye`N-TpO89dL(II_Yx3|*4l3gI%tO!WBX^XzU%OQ{ zys%)$^E0z^8}=gZU$^b5Dm<)LS9Ts`I_jFgtA8(>Dg1!g@C&|m{Mx-$yIsc`SDmZ6 zm*Y;mzZy(wRY_du_igKSBe!bTr^VE?7attuV;_Ed&!djhnx@m+Q;AmBk?QS>GOor? ztF3rz!Kd!CC-r8z;fWiwGN#?VxKv{tHg?V8E`2jT`sRY@_VE4N|4{wur0L@}Z5|vE zU%bt11Z<|4y}0bTn{!f@*X_hQGcUHdR+XKY>(RY&Z`sx;ZrIXmC-45OO@DtxPUOm& zo0U0{*Sp$2k?s4(!P`qZQ(hak#eDI*QDX;vs8?OoPCIdE^e$DQdu4rV>{O~MZm4ue z?$^zRrV}epH^~a(U~hu6Q&!f)$ zrT*GC+BQ$Y5&i0nMKflMS=aW#mFDPc?c>IN)Yx9pa`MK+>D!)ZUpixq`d04Xzg8~L qeP*p3D?PIHE$zk$EB^Lv_=0I2f3JNdVV(C)_RO>_L*vB4H~s|~r8FP_ literal 0 HcmV?d00001 diff --git a/home/overworld.asm b/home/overworld.asm index 1493142d..0fcadf75 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -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:: diff --git a/home/text.asm b/home/text.asm index 64d184f9..bd73f49e 100644 --- a/home/text.asm +++ b/home/text.asm @@ -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 diff --git a/macros/scripts/text.asm b/macros/scripts/text.asm index 1e41d87e..bb9458ae 100644 --- a/macros/scripts/text.asm +++ b/macros/scripts/text.asm @@ -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 diff --git a/main.asm b/main.asm index cc7e20b6..033e37d6 100644 --- a/main.asm +++ b/main.asm @@ -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" \ No newline at end of file +INCLUDE "engine/menus/item_descriptions.asm" +INCLUDE "engine/items/tm_prices.asm" diff --git a/ram/wram.asm b/ram/wram.asm index 203baf9a..29fed38a 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -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