From b3a3e2790694f6d10cf6e35d34e6f087c6de16da Mon Sep 17 00:00:00 2001 From: Zeta_Null Date: Mon, 11 Sep 2023 11:26:46 -0400 Subject: [PATCH] Initial giant enby Commit - Changed name lists - Made Overworld pink palette into purple palette - Changed gender selection options - Added Topaz's graphics (Enby Trainer) - Changed more or less every gender check in the game to account for enby option - Changed out Morty's palette on the trainer card to a more purple one to facilitate Topaz's graphics KNOWN ISSUES / THINGS TO CHANGE - Topaz's sprite does not currently render correctly on town map (check if this is a map issue or if it occasionally will pop up elsewhere as well) - Bag Palette is still green like the tutorial made it. Might change it to yellow or something later on. --- Makefile | 4 + constants/engine_flags.asm | 2 - constants/event_flags.asm | 2 +- constants/misc_constants.asm | 1 + constants/script_constants.asm | 1 + constants/sprite_anim_constants.asm | 8 ++ constants/sprite_constants.asm | 2 + constants/trainer_constants.asm | 1 + constants/wram_constants.asm | 3 - data/events/engine_flags.asm | 2 - data/player_names.asm | 28 ++++- data/sprite_anims/framesets.asm | 16 +++ data/sprite_anims/oam.asm | 18 ++++ data/sprite_anims/sequences.asm | 4 + data/sprites/player_sprites.asm | 8 ++ data/sprites/sprites.asm | 2 + data/text/common_2.asm | 4 +- data/trainers/palettes.asm | 6 +- engine/battle/core.asm | 9 +- engine/events/fishing_gfx.asm | 8 +- engine/events/magnet_train.asm | 5 +- engine/gfx/cgb_layouts.asm | 71 ++++++++---- engine/gfx/color.asm | 9 ++ engine/gfx/player_gfx.asm | 107 +++++++++++++------ engine/items/pack.asm | 9 +- engine/items/pack_kris.asm | 21 ++++ engine/menus/init_gender.asm | 5 +- engine/menus/intro_menu.asm | 22 ++-- engine/menus/naming_screen.asm | 9 ++ engine/overworld/overworld.asm | 5 +- engine/overworld/player_object.asm | 5 +- engine/pokegear/pokegear.asm | 19 +++- engine/pokemon/caught_data.asm | 9 +- engine/pokemon/stats_screen.asm | 28 ++--- gfx/overworld/enby_fish.png | Bin 0 -> 467 bytes gfx/pack/pack_nb.pal | 29 +++++ gfx/pack/pack_nb.png | Bin 0 -> 1113 bytes gfx/player/enby.png | Bin 0 -> 910 bytes gfx/player/enby_back.png | Bin 0 -> 1037 bytes gfx/player/topaz.pal | 2 + gfx/pokegear/pokegear_nb.pal | 31 ++++++ gfx/sprites.asm | 6 ++ gfx/sprites/enby.png | Bin 0 -> 846 bytes gfx/sprites/enby_bike.png | Bin 0 -> 947 bytes gfx/stats/party_menu_ob.pal | 32 +++--- gfx/trainer_card/enby_card.png | Bin 0 -> 880 bytes home/text.asm | 2 +- layout.link | 2 +- main.asm | 5 +- maps/CopycatsHouse2F.asm | 69 +++++++++--- maps/DanceTheater.asm | 19 +++- maps/FastShipCabins_SE_SSE_CaptainsCabin.asm | 23 +++- maps/Pokecenter2F.asm | 28 +++-- maps/Route37.asm | 17 +-- mobile/mobile_12.asm | 2 +- mobile/mobile_22.asm | 4 +- ram/wram.asm | 6 +- 57 files changed, 553 insertions(+), 177 deletions(-) create mode 100644 gfx/overworld/enby_fish.png create mode 100644 gfx/pack/pack_nb.pal create mode 100644 gfx/pack/pack_nb.png create mode 100644 gfx/player/enby.png create mode 100644 gfx/player/enby_back.png create mode 100644 gfx/player/topaz.pal create mode 100644 gfx/pokegear/pokegear_nb.pal create mode 100644 gfx/sprites/enby.png create mode 100644 gfx/sprites/enby_bike.png create mode 100644 gfx/trainer_card/enby_card.png diff --git a/Makefile b/Makefile index 41c1931..6384a59 100644 --- a/Makefile +++ b/Makefile @@ -219,13 +219,17 @@ gfx/player/chris.2bpp: rgbgfx += -Z gfx/player/chris_back.2bpp: rgbgfx += -Z gfx/player/kris.2bpp: rgbgfx += -Z gfx/player/kris_back.2bpp: rgbgfx += -Z +gfx/player/enby.2bpp: rgbgfx += -Z +gfx/player/enby_back.2bpp: rgbgfx += -Z gfx/trainer_card/chris_card.2bpp: rgbgfx += -Z gfx/trainer_card/kris_card.2bpp: rgbgfx += -Z +gfx/trainer_card/enby_card.2bpp: rgbgfx += -Z gfx/trainer_card/leaders.2bpp: tools/gfx += --trim-whitespace gfx/overworld/chris_fish.2bpp: tools/gfx += --trim-whitespace gfx/overworld/kris_fish.2bpp: tools/gfx += --trim-whitespace +gfx/overworld/enby_fish.2bpp: tools/gfx += --trim-whitespace gfx/sprites/big_onix.2bpp: tools/gfx += --remove-whitespace --remove-xflip diff --git a/constants/engine_flags.asm b/constants/engine_flags.asm index bc029d5..862fd0d 100644 --- a/constants/engine_flags.asm +++ b/constants/engine_flags.asm @@ -117,8 +117,6 @@ const ENGINE_GOLDENROD_DEPT_STORE_SALE_IS_ON ; wGameTimerPaused const ENGINE_62 -; wPlayerGender - const ENGINE_PLAYER_IS_FEMALE ; wCelebiEvent const ENGINE_FOREST_IS_RESTLESS ; wDailyRematchFlags diff --git a/constants/event_flags.asm b/constants/event_flags.asm index 1a17bad..039f521 100644 --- a/constants/event_flags.asm +++ b/constants/event_flags.asm @@ -1229,7 +1229,7 @@ const EVENT_COPYCAT_2 const EVENT_GOLDENROD_SALE_OFF const EVENT_GOLDENROD_SALE_ON - const_skip ; unused in Crystal + const EVENT_COPYCAT_3 const EVENT_ILEX_FOREST_APPRENTICE const EVENT_ILEX_FOREST_CHARCOAL_MASTER const EVENT_CHARCOAL_KILN_FARFETCH_D diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index b909d57..c4aa207 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -5,6 +5,7 @@ DEF TRUE EQU 1 ; genders DEF MALE EQU 0 DEF FEMALE EQU 1 +DEF ENBY EQU 2 ; FlagAction arguments (see home/flag.asm) const_def diff --git a/constants/script_constants.asm b/constants/script_constants.asm index 634cae2..35a776c 100644 --- a/constants/script_constants.asm +++ b/constants/script_constants.asm @@ -73,6 +73,7 @@ DEF STRING_BUFFER_LENGTH EQU 19 const VAR_BUENASPASSWORD ; 19 const VAR_KENJI_BREAK ; 1a const VAR_DEXUNCAUGHT ; 1b + const VAR_PLAYERGENDER ; 1c DEF NUM_VARS EQU const_value ; variable action types diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm index bc8d3b1..dafe493 100644 --- a/constants/sprite_anim_constants.asm +++ b/constants/sprite_anim_constants.asm @@ -80,6 +80,8 @@ DEF NUM_SPRITEANIMDICT_ENTRIES EQU 10 const SPRITE_ANIM_INDEX_INTRO_UNOWN_F ; 2a const SPRITE_ANIM_INDEX_INTRO_SUICUNE_AWAY ; 2b const SPRITE_ANIM_INDEX_CELEBI ; 2c + const SPRITE_ANIM_INDEX_PURPLE_WALK ; 2d + const SPRITE_ANIM_INDEX_MAGNET_TRAIN_PURPLE ; 2e DEF NUM_SPRITE_ANIM_INDEXES EQU const_value ; DoAnimFrame.Jumptable indexes (see engine/gfx/sprite_anims.asm) @@ -189,6 +191,8 @@ DEF NUM_SPRITE_ANIM_SEQS EQU const_value const SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F ; 3f const SPRITE_ANIM_FRAMESET_CELEBI_LEFT ; 40 const SPRITE_ANIM_FRAMESET_CELEBI_RIGHT ; 41 + const SPRITE_ANIM_FRAMESET_PURPLE_WALK ; 42 + const SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_PURPLE ; 43 DEF NUM_SPRITE_ANIM_FRAMESETS EQU const_value ; SpriteAnimOAMData indexes (see data/sprite_anims/oam.asm) @@ -333,4 +337,8 @@ DEF NUM_SPRITE_ANIM_FRAMESETS EQU const_value const SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_9 ; 89 const SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_10 ; 8a const SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_11 ; 8b + const SPRITE_ANIM_OAMSET_PURPLE_WALK_1 ; 8c + const SPRITE_ANIM_OAMSET_PURPLE_WALK_2 ; 8d + const SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_1 ; 8e + const SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_2 ; 8f DEF NUM_SPRITE_ANIM_OAMSETS EQU const_value diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm index 1181285..e301f23 100644 --- a/constants/sprite_constants.asm +++ b/constants/sprite_constants.asm @@ -104,6 +104,8 @@ const SPRITE_ENTEI ; 64 const SPRITE_RAIKOU ; 65 const SPRITE_STANDING_YOUNGSTER ; 66 + const SPRITE_ENBY ; 67 + const SPRITE_ENBY_BIKE ; 68 DEF NUM_OVERWORLD_SPRITES EQU const_value - 1 ; SpriteMons indexes (see data/sprites/sprite_mons.asm) diff --git a/constants/trainer_constants.asm b/constants/trainer_constants.asm index a56ab82..edbabef 100644 --- a/constants/trainer_constants.asm +++ b/constants/trainer_constants.asm @@ -703,4 +703,5 @@ DEF KRIS EQU __trainer_class__ trainerclass MYSTICALMAN ; 43 const EUSINE +DEF TOPAZ EQU __trainer_class__ DEF NUM_TRAINER_CLASSES EQU __trainer_class__ - 1 diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index 9a80a8c..86cf4c3 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -145,9 +145,6 @@ DEF PLAYERSPRITESETUP_CUSTOM_FACING_F EQU 5 DEF PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F EQU 6 DEF PLAYERSPRITESETUP_RESET_ACTION_F EQU 7 -; wPlayerGender:: -DEF PLAYERGENDER_FEMALE_F EQU 0 - ; wMapStatus:: const_def const MAPSTATUS_START ; 0 diff --git a/data/events/engine_flags.asm b/data/events/engine_flags.asm index e579a82..851f1b0 100644 --- a/data/events/engine_flags.asm +++ b/data/events/engine_flags.asm @@ -128,8 +128,6 @@ EngineFlags: engine_flag wGameTimerPaused, GAME_TIMER_MOBILE_F - engine_flag wPlayerGender, PLAYERGENDER_FEMALE_F - engine_flag wCelebiEvent, CELEBIEVENT_FOREST_IS_RESTLESS_F ; rematches diff --git a/data/player_names.asm b/data/player_names.asm index 0faadf1..39bff5d 100644 --- a/data/player_names.asm +++ b/data/player_names.asm @@ -10,10 +10,10 @@ ChrisNameMenuHeader: db 5 ; items db "NEW NAME@" MalePlayerNameArray: + db "ETHAN@" + db "GOLD@" db "CHRIS@" - db "MAT@" - db "ALLAN@" - db "JON@" + db "JIMMY@" db 2 ; title indent db " NAME @" ; title @@ -30,8 +30,28 @@ KrisNameMenuHeader: db "NEW NAME@" FemalePlayerNameArray: db "KRIS@" + db "MARINA@" db "AMANDA@" - db "JUANA@" db "JODI@" db 2 ; title indent db " NAME @" ; title + +EnbyNameMenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 10, TEXTBOX_Y - 1 + dw .OtherNames + db 1 ; ???? + db 0 ; default option + +.OtherNames: + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B ; flags + db 5 ; items + db "NEW NAME@" +EnbyPlayerNameArray: + db "TOPAZ@" + db "SAM@" + db "CRYS@" + db "RAY@" + db 2 ; displacement + db " NAME @" ; title + \ No newline at end of file diff --git a/data/sprite_anims/framesets.asm b/data/sprite_anims/framesets.asm index 115d82d..250288b 100644 --- a/data/sprite_anims/framesets.asm +++ b/data/sprite_anims/framesets.asm @@ -67,6 +67,8 @@ SpriteAnimFrameData: dw .Frameset_IntroUnownF dw .Frameset_CelebiLeft dw .Frameset_CelebiRight + dw .Frameset_PurpleWalk + dw .Frameset_MagnetTrainPurple assert_table_length NUM_SPRITE_ANIM_FRAMESETS .Frameset_00: @@ -497,3 +499,17 @@ SpriteAnimFrameData: oamframe SPRITE_ANIM_OAMSET_CELEBI_1, 8, OAM_X_FLIP oamframe SPRITE_ANIM_OAMSET_CELEBI_2, 8, OAM_X_FLIP oamend + +.Frameset_PurpleWalk: + oamframe SPRITE_ANIM_OAMSET_PURPLE_WALK_1, 8 + oamframe SPRITE_ANIM_OAMSET_PURPLE_WALK_2, 8 + oamframe SPRITE_ANIM_OAMSET_PURPLE_WALK_1, 8 + oamframe SPRITE_ANIM_OAMSET_PURPLE_WALK_2, 8, OAM_X_FLIP + oamrestart + +.Frameset_MagnetTrainPurple: + oamframe SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_1, 8 + oamframe SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_2, 8 + oamframe SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_1, 8 + oamframe SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_2, 8, OAM_X_FLIP + oamrestart diff --git a/data/sprite_anims/oam.asm b/data/sprite_anims/oam.asm index e7099b0..1600b71 100644 --- a/data/sprite_anims/oam.asm +++ b/data/sprite_anims/oam.asm @@ -147,6 +147,10 @@ SpriteAnimOAMData: spriteanimoam $08, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_9 spriteanimoam $04, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_10 spriteanimoam $00, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_11 + spriteanimoam $00, .OAMData_PurpleWalk ; SPRITE_ANIM_OAMSET_PURPLE_WALK_1 + spriteanimoam $04, .OAMData_PurpleWalk ; SPRITE_ANIM_OAMSET_PURPLE_WALK_2 + spriteanimoam $00, .OAMData_MagnetTrainPurple ; SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_1 + spriteanimoam $04, .OAMData_MagnetTrainPurple ; SPRITE_ANIM_OAMSET_MAGNET_TRAIN_PURPLE_2 assert_table_length NUM_SPRITE_ANIM_OAMSETS .OAMData_1x1_Palette0: @@ -1133,3 +1137,17 @@ SpriteAnimOAMData: dbsprite -1, 0, 4, 0, $51, 1 dbsprite 0, 0, 4, 0, $52, 1 dbsprite 1, 0, 4, 0, $53, 1 + +.OAMData_PurpleWalk: + db 4 + dbsprite -1, 0, -1, 0, $00, PAL_OW_PURPLE + dbsprite -1, 0, 0, 0, $01, PAL_OW_PURPLE + dbsprite 0, 0, -1, 0, $02, PAL_OW_PURPLE + dbsprite 0, 0, 0, 0, $03, PAL_OW_PURPLE + +.OAMData_MagnetTrainPurple: + db 4 + dbsprite -1, 0, -1, 0, $00, PAL_OW_PURPLE | PRIORITY + dbsprite -1, 0, 0, 0, $01, PAL_OW_PURPLE | PRIORITY + dbsprite 0, 0, -1, 0, $02, PAL_OW_PURPLE | PRIORITY + dbsprite 0, 0, 0, 0, $03, PAL_OW_PURPLE | PRIORITY diff --git a/data/sprite_anims/sequences.asm b/data/sprite_anims/sequences.asm index c41e96c..fafa0df 100644 --- a/data/sprite_anims/sequences.asm +++ b/data/sprite_anims/sequences.asm @@ -92,4 +92,8 @@ SpriteAnimSeqData: db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_AWAY, SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY, SPRITE_ANIM_DICT_DEFAULT ; SPRITE_ANIM_INDEX_CELEBI db SPRITE_ANIM_FRAMESET_CELEBI_LEFT, SPRITE_ANIM_SEQ_NULL, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_INDEX_PURPLE_WALK + db SPRITE_ANIM_FRAMESET_PURPLE_WALK, SPRITE_ANIM_SEQ_NULL, SPRITE_ANIM_DICT_DEFAULT +; SPRITE_ANIM_INDEX_MAGNET_TRAIN_PURPLE + db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_PURPLE, SPRITE_ANIM_SEQ_NULL, SPRITE_ANIM_DICT_DEFAULT assert_table_length NUM_SPRITE_ANIM_INDEXES diff --git a/data/sprites/player_sprites.asm b/data/sprites/player_sprites.asm index 89eb6e8..f442ede 100644 --- a/data/sprites/player_sprites.asm +++ b/data/sprites/player_sprites.asm @@ -11,3 +11,11 @@ KrisStateSprites: db PLAYER_SURF, SPRITE_SURF db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU db -1 ; end + +EnbyStateSprites: + db PLAYER_NORMAL, SPRITE_ENBY + db PLAYER_BIKE, SPRITE_ENBY_BIKE + db PLAYER_SURF, SPRITE_SURF + db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU + db -1 ; end + \ No newline at end of file diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm index 25281c2..c75fe02 100644 --- a/data/sprites/sprites.asm +++ b/data/sprites/sprites.asm @@ -109,4 +109,6 @@ OverworldSprites: overworld_sprite EnteiSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED overworld_sprite RaikouSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED overworld_sprite StandingYoungsterSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BLUE + overworld_sprite EnbySpriteGFX, 12, WALKING_SPRITE, PAL_OW_PURPLE + overworld_sprite EnbyBikeSpriteGFX, 12, WALKING_SPRITE, PAL_OW_PURPLE assert_table_length NUM_OVERWORLD_SPRITES diff --git a/data/text/common_2.asm b/data/text/common_2.asm index 5399a87..22810ff 100644 --- a/data/text/common_2.asm +++ b/data/text/common_2.asm @@ -663,8 +663,8 @@ _YouCantUseItInABattleText:: prompt _AreYouABoyOrAreYouAGirlText:: - text "Are you a boy?" - line "Or are you a girl?" + text "Please choose your" + line "gender." done Text_BattleEffectActivate:: diff --git a/data/trainers/palettes.asm b/data/trainers/palettes.asm index 3429996..d61b8c9 100644 --- a/data/trainers/palettes.asm +++ b/data/trainers/palettes.asm @@ -12,6 +12,7 @@ KrisPalette: ; Kris shares Falkner's palette INCBIN "gfx/trainers/falkner.gbcpal", middle_colors INCBIN "gfx/trainers/whitney.gbcpal", middle_colors INCBIN "gfx/trainers/bugsy.gbcpal", middle_colors +;EnbyPalette: INCBIN "gfx/trainers/morty.gbcpal", middle_colors INCBIN "gfx/trainers/pryce.gbcpal", middle_colors INCBIN "gfx/trainers/jasmine.gbcpal", middle_colors @@ -77,4 +78,7 @@ INCBIN "gfx/trainers/officer.gbcpal", middle_colors INCBIN "gfx/trainers/grunt_f.gbcpal", middle_colors INCBIN "gfx/trainers/mysticalman.gbcpal", middle_colors - assert_table_length NUM_TRAINER_CLASSES + 1 +EnbyPalette: +INCLUDE "gfx/player/topaz.pal" + + assert_table_length NUM_TRAINER_CLASSES + 2 diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 4b49d14..a781300 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -9079,9 +9079,16 @@ GetTrainerBackpic: bit PLAYERSPRITESETUP_FEMALE_TO_MALE_F, a jr nz, .Chris ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .Chris + dec a ; FEMALE + jr z, .Kris +; It's nonbinary. + farcall GetEnbyBackpic + ret + +.Kris: ; It's a girl. farcall GetKrisBackpic ret diff --git a/engine/events/fishing_gfx.asm b/engine/events/fishing_gfx.asm index e8878b6..cb88ba1 100644 --- a/engine/events/fishing_gfx.asm +++ b/engine/events/fishing_gfx.asm @@ -6,9 +6,12 @@ LoadFishingGFX: ld de, FishingGFX ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_gender ld de, KrisFishingGFX + dec a ; FEMALE + jr z, .got_gender + ld de, EnbyFishingGFX .got_gender ld hl, vTiles0 tile $02 @@ -40,3 +43,6 @@ INCBIN "gfx/overworld/chris_fish.2bpp" KrisFishingGFX: INCBIN "gfx/overworld/kris_fish.2bpp" + +EnbyFishingGFX: +INCBIN "gfx/overworld/enby_fish.2bpp" diff --git a/engine/events/magnet_train.asm b/engine/events/magnet_train.asm index 43b1d71..49aafee 100644 --- a/engine/events/magnet_train.asm +++ b/engine/events/magnet_train.asm @@ -298,9 +298,12 @@ MagnetTrain_Jumptable: ld a, BANK(wPlayerGender) ldh [rSVBK], a ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_gender ld b, SPRITE_ANIM_INDEX_MAGNET_TRAIN_BLUE + dec a ; FEMALE + jr z, .got_gender + ld b, SPRITE_ANIM_INDEX_MAGNET_TRAIN_PURPLE .got_gender pop af ldh [rSVBK], a diff --git a/engine/gfx/cgb_layouts.asm b/engine/gfx/cgb_layouts.asm index 4af157c..f76a5bc 100644 --- a/engine/gfx/cgb_layouts.asm +++ b/engine/gfx/cgb_layouts.asm @@ -177,9 +177,12 @@ InitPartyMenuBGPal0: _CGB_PokegearPals: ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .male ld hl, FemalePokegearPals + dec a ; FEMALE + jr z, .got_pals + ld hl, EnbyPokegearPals jr .got_pals .male @@ -628,7 +631,7 @@ _CGB_TrainerCard: ld a, WHITNEY call GetTrainerPalettePointer call LoadPalette_White_Col1_Col2_Black - ld a, MORTY + ld a, TOPAZ ;MORTY call GetTrainerPalettePointer call LoadPalette_White_Col1_Col2_Black ld a, CHUCK @@ -644,14 +647,21 @@ _CGB_TrainerCard: call GetPredefPal call LoadHLPaletteIntoDE - ; fill screen with opposite-gender palette for the card border + ; fill screen with gender-based palette for the card border hlcoord 0, 0, wAttrmap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT ld a, [wPlayerGender] and a - ld a, $1 ; kris - jr z, .got_gender - ld a, $0 ; chris + jr z, .male + dec a + jr z, .female + ld a, $6 ; dark magenta for enby + jr .got_gender +.male + ld a, $1 ; blue for chris + jr .got_gender +.female + ld a, $0 ; red for kris .got_gender call ByteFill ; fill trainer sprite area with same-gender palette @@ -659,14 +669,18 @@ _CGB_TrainerCard: lb bc, 7, 5 ld a, [wPlayerGender] and a + jr z, .male2 + dec a + jr z, .female2 + ld a, $4 ; enby + jr .got_gender2 + .male2 ld a, $0 ; chris - jr z, .got_gender2 + jr .got_gender2 + .female2 ld a, $1 ; kris .got_gender2 call FillBoxCGB - ; top-right corner still uses the border's palette - hlcoord 18, 1, wAttrmap - ld [hl], $1 hlcoord 2, 11, wAttrmap lb bc, 2, 4 ld a, $1 ; falkner @@ -695,22 +709,24 @@ _CGB_TrainerCard: lb bc, 2, 4 ld a, $7 ; pryce call FillBoxCGB - ; clair uses kris's palette - ld a, [wPlayerGender] - and a - push af - jr z, .got_gender3 hlcoord 14, 14, wAttrmap lb bc, 2, 4 - ld a, $1 + ld a, $1 ; clair call FillBoxCGB + ; top-right corner still uses the border's palette + ld a, [wPlayerGender] + and a + jr z, .male3 + dec a + jr z, .female3 + ld a, $6 ; dark magenta for enby + jr .got_gender3 +.male3 + ld a, $1 ; blue for chris + jr .got_gender3 +.female3 + ld a, $0 ; red for kris .got_gender3 - pop af - ld c, $0 - jr nz, .got_gender4 - inc c -.got_gender4 - ld a, c hlcoord 18, 1, wAttrmap ld [hl], a call ApplyAttrmap @@ -772,9 +788,15 @@ _CGB_PackPals: jr z, .tutorial_male ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .tutorial_male + dec a ; FEMALE + jr z, .tutorial_female + ld hl, .EnbyPackPals + jr .got_gender + +.tutorial_female ld hl, .KrisPackPals jr .got_gender @@ -819,6 +841,9 @@ INCLUDE "gfx/pack/pack.pal" .KrisPackPals: INCLUDE "gfx/pack/pack_f.pal" +.EnbyPackPals: +INCLUDE "gfx/pack/pack_nb.pal" + _CGB_Pokepic: call _CGB_MapPals ld de, SCREEN_WIDTH diff --git a/engine/gfx/color.asm b/engine/gfx/color.asm index 933d163..2102973 100644 --- a/engine/gfx/color.asm +++ b/engine/gfx/color.asm @@ -689,6 +689,12 @@ GetPlayerOrMonPalettePointer: ld a, [wPlayerGender] and a jr z, .male + dec a + jr z, .female + ld hl, EnbyPalette + ret + +.female ld hl, KrisPalette ret @@ -1332,6 +1338,9 @@ INCLUDE "gfx/pokegear/pokegear.pal" FemalePokegearPals: INCLUDE "gfx/pokegear/pokegear_f.pal" +EnbyPokegearPals: +INCLUDE "gfx/pokegear/pokegear_nb.pal" + BetaPokerPals: INCLUDE "gfx/beta_poker/beta_poker.pal" diff --git a/engine/gfx/player_gfx.asm b/engine/gfx/player_gfx.asm index ca53a64..442f822 100644 --- a/engine/gfx/player_gfx.asm +++ b/engine/gfx/player_gfx.asm @@ -1,14 +1,14 @@ -BetaLoadPlayerTrainerClass: ; unreferenced - ld c, CAL - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .got_class - ld c, KAREN ; not KRIS? -.got_class - ld a, c - ld [wTrainerClass], a - ret - +;BetaLoadPlayerTrainerClass: ; unreferenced +; ld c, CAL +; ld a, [wPlayerGender] +; bit PLAYERGENDER_FEMALE_F, a +; jr z, .got_class +; ld c, KAREN ; not KRIS? +;.got_class +; ld a, c +; ld [wTrainerClass], a +; ret +; MovePlayerPicRight: hlcoord 6, 4 ld de, 1 @@ -57,9 +57,12 @@ MovePlayerPic: ShowPlayerNamingChoices: ld hl, ChrisNameMenuHeader ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_header ld hl, KrisNameMenuHeader + dec a ; FEMALE + jr z, .got_header + ld hl, EnbyNameMenuHeader .got_header call LoadMenuHeader call VerticalMenu @@ -71,34 +74,45 @@ ShowPlayerNamingChoices: INCLUDE "data/player_names.asm" -GetPlayerNameArray: ; unreferenced - ld hl, wPlayerName - ld de, MalePlayerNameArray - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .got_array - ld de, FemalePlayerNameArray -.got_array - call InitName - ret - +;GetPlayerNameArray: ; unreferenced +; ld hl, wPlayerName +; ld de, MalePlayerNameArray +; ld a, [wPlayerGender] +; bit PLAYERGENDER_FEMALE_F, a +; jr z, .got_array +; ld de, FemalePlayerNameArray +;.got_array +; call InitName +; ret +; GetPlayerIcon: ld de, ChrisSpriteGFX ld b, BANK(ChrisSpriteGFX) ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_gfx +; Female ld de, KrisSpriteGFX ld b, BANK(KrisSpriteGFX) + + dec a ; FEMALE + jr z, .got_gfx +; Enby + ld de, EnbySpriteGFX + ld b, BANK(EnbySpriteGFX) + .got_gfx ret GetCardPic: ld hl, ChrisCardPic ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_pic ld hl, KrisCardPic + dec a ; FEMALE + jr z, .got_pic + ld hl, EnbyCardPic .got_pic ld de, vTiles2 tile $00 ld bc, $23 tiles @@ -117,14 +131,19 @@ INCBIN "gfx/trainer_card/chris_card.2bpp" KrisCardPic: INCBIN "gfx/trainer_card/kris_card.2bpp" +EnbyCardPic: +INCBIN "gfx/trainer_card/enby_card.2bpp" + TrainerCardGFX: INCBIN "gfx/trainer_card/trainer_card.2bpp" GetPlayerBackpic: ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, GetChrisBackpic - call GetKrisBackpic + dec a ; FEMALE + jp z, GetKrisBackpic + call GetEnbyBackpic ret GetChrisBackpic: @@ -143,9 +162,12 @@ HOF_LoadTrainerFrontpic: ; Get class ld e, CHRIS ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_class ld e, KRIS + dec a ; FEMALE + jr z, .got_class + ld e, TOPAZ .got_class ld a, e ld [wTrainerClass], a @@ -153,9 +175,13 @@ HOF_LoadTrainerFrontpic: ; Load pic ld de, ChrisPic ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_pic ld de, KrisPic + dec a ; FEMALE + jr z, .got_pic + ld de, EnbyPic + .got_pic ld hl, vTiles2 ld b, BANK(ChrisPic) ; aka BANK(KrisPic) @@ -173,9 +199,12 @@ DrawIntroPlayerPic: ; Get class ld e, CHRIS ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_class ld e, KRIS + dec a ; FEMALE + jr z, .got_class + ld e, TOPAZ .got_class ld a, e ld [wTrainerClass], a @@ -183,9 +212,12 @@ DrawIntroPlayerPic: ; Load pic ld de, ChrisPic ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_pic ld de, KrisPic + dec a ; FEMALE + jr z, .got_pic + ld de, EnbyPic .got_pic ld hl, vTiles2 ld b, BANK(ChrisPic) ; aka BANK(KrisPic) @@ -206,6 +238,9 @@ INCBIN "gfx/player/chris.2bpp" KrisPic: INCBIN "gfx/player/kris.2bpp" +EnbyPic: +INCBIN "gfx/player/enby.2bpp" + GetKrisBackpic: ; Kris's backpic is uncompressed. ld de, KrisBackpic @@ -216,3 +251,13 @@ GetKrisBackpic: KrisBackpic: INCBIN "gfx/player/kris_back.2bpp" + +GetEnbyBackpic: + ld de, EnbyBackpic + ld hl, vTiles2 tile $31 + lb bc, BANK(EnbyBackpic), 7 * 7 ; dimensions + call Get2bpp + ret + +EnbyBackpic: +INCBIN "gfx/player/enby_back.2bpp" diff --git a/engine/items/pack.asm b/engine/items/pack.asm index 4a4b694..626cfe4 100644 --- a/engine/items/pack.asm +++ b/engine/items/pack.asm @@ -1216,8 +1216,13 @@ DrawPackGFX: cp BATTLETYPE_TUTORIAL jr z, .male_dude ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr nz, .female + and a ; MALE + jr z, .male_dude + dec a ; FEMALE + jr z, .female + farcall DrawEnbyPackGFX + ret + .male_dude ld hl, PackGFXPointers add hl, de diff --git a/engine/items/pack_kris.asm b/engine/items/pack_kris.asm index 1a169ea..7ab24f4 100644 --- a/engine/items/pack_kris.asm +++ b/engine/items/pack_kris.asm @@ -18,3 +18,24 @@ PackFGFXPointers: PackFGFX: INCBIN "gfx/pack/pack_f.2bpp" + +DrawEnbyPackGFX: + ld hl, PackNBGFXPointers + add hl, de + add hl, de + ld a, [hli] + ld e, a + ld d, [hl] + ld hl, vTiles2 tile $50 + lb bc, BANK(PackNBGFX), 15 + call Request2bpp + ret + +PackNBGFXPointers: + dw PackNBGFX + (15 tiles) * 1 ; ITEM_POCKET + dw PackNBGFX + (15 tiles) * 3 ; BALL_POCKET + dw PackNBGFX + (15 tiles) * 0 ; KEY_ITEM_POCKET + dw PackNBGFX + (15 tiles) * 2 ; TM_HM_POCKET + +PackNBGFX: +INCBIN "gfx/pack/pack_nb.2bpp" diff --git a/engine/menus/init_gender.asm b/engine/menus/init_gender.asm index 4bf8cc2..7c7f7a7 100644 --- a/engine/menus/init_gender.asm +++ b/engine/menus/init_gender.asm @@ -42,15 +42,16 @@ InitGender: .MenuHeader: db MENU_BACKUP_TILES ; flags - menu_coords 6, 4, 12, 9 + menu_coords 6, 3, 12, 10 dw .MenuData db 1 ; default option .MenuData: db STATICMENU_CURSOR | STATICMENU_WRAP | STATICMENU_DISABLE_B ; flags - db 2 ; items + db 3 ; items db "Boy@" db "Girl@" + db "Enby@" AreYouABoyOrAreYouAGirlText: text_far _AreYouABoyOrAreYouAGirlText diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm index 6917ae4..d324aec 100644 --- a/engine/menus/intro_menu.asm +++ b/engine/menus/intro_menu.asm @@ -797,17 +797,22 @@ NamePlayer: ld hl, wPlayerName ld de, .Chris ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .Male + and a ; MALE + jr z, .GotName ld de, .Kris -.Male: + dec a ; FEMALE + jr z, .GotName + ld de, .Topaz +.GotName: call InitName ret .Chris: - db "CHRIS@@@@@@" + db "ETHAN@@@@@@" .Kris: db "KRIS@@@@@@@" +.Topaz: + db "TOPAZ@@@@@@" GSShowPlayerNamingChoices: ; unreferenced call LoadMenuHeader @@ -962,10 +967,13 @@ Intro_PlacePlayerSprite: ld b, PAL_OW_RED ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .male + and a ; MALE + jr z, .okay ld b, PAL_OW_BLUE -.male + dec a ; FEMALE + jr z, .okay + ld b, PAL_OW_PURPLE +.okay ld a, b ld [hli], a ; attributes diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm index 9cfe33d..5e4c7e2 100644 --- a/engine/menus/naming_screen.asm +++ b/engine/menus/naming_screen.asm @@ -216,7 +216,16 @@ NamingScreen: cp LOW(KrisSpriteGFX) jr nz, .not_kris ld b, SPRITE_ANIM_INDEX_BLUE_WALK + jr .not_enby .not_kris + ld a, d + cp HIGH(EnbySpriteGFX) + jr nz, .not_enby + ld a, e + cp LOW(EnbySpriteGFX) + jr nz, .not_enby + ld b, SPRITE_ANIM_INDEX_PURPLE_WALK +.not_enby ld a, b depixel 4, 4, 4, 0 call InitSpriteAnimStruct diff --git a/engine/overworld/overworld.asm b/engine/overworld/overworld.asm index 5c02818..e5a6e1c 100644 --- a/engine/overworld/overworld.asm +++ b/engine/overworld/overworld.asm @@ -59,9 +59,12 @@ GetPlayerSprite: bit PLAYERSPRITESETUP_FEMALE_TO_MALE_F, a jr nz, .go ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .go ld hl, KrisStateSprites + dec a ; FEMALE + jr z, .go + ld hl, EnbyStateSprites .go ld a, [wPlayerState] diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index dec66f6..1f1b557 100644 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -34,9 +34,12 @@ SpawnPlayer: bit PLAYERSPRITESETUP_FEMALE_TO_MALE_F, a jr nz, .ok ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .ok ln e, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT + dec a ; FEMALE + jr z, .ok + ln e, PAL_NPC_PURPLE, OBJECTTYPE_SCRIPT .ok ld [hl], e diff --git a/engine/pokegear/pokegear.asm b/engine/pokegear/pokegear.asm index 32e6a05..eaf93a4 100644 --- a/engine/pokegear/pokegear.asm +++ b/engine/pokegear/pokegear.asm @@ -657,9 +657,12 @@ PokegearMap_InitPlayerIcon: depixel 0, 0 ld b, SPRITE_ANIM_INDEX_RED_WALK ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_gender ld b, SPRITE_ANIM_INDEX_BLUE_WALK + dec a ; FEMALE + jr z, .got_gender + ld b, SPRITE_ANIM_INDEX_PURPLE_WALK .got_gender ld a, b call InitSpriteAnimStruct @@ -2537,10 +2540,13 @@ Pokedex_GetArea: push bc ld c, PAL_OW_RED ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .male + and a ; MALE + jr z, .got_gender inc c ; PAL_OW_BLUE -.male + dec a ; FEMALE + jr z, .got_gender + ld c, PAL_OW_PURPLE +.got_gender ld a, c ld [hli], a ; attributes pop bc @@ -2750,9 +2756,12 @@ TownMapPlayerIcon: depixel 0, 0 ld b, SPRITE_ANIM_INDEX_RED_WALK ; Male ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a + and a ; MALE jr z, .got_gender ld b, SPRITE_ANIM_INDEX_BLUE_WALK ; Female + dec a ; FEMALE + jr z, .got_gender + ld b, SPRITE_ANIM_INDEX_PURPLE_WALK ; Enby .got_gender ld a, b call InitSpriteAnimStruct diff --git a/engine/pokemon/caught_data.asm b/engine/pokemon/caught_data.asm index 4589eac..f801769 100644 --- a/engine/pokemon/caught_data.asm +++ b/engine/pokemon/caught_data.asm @@ -192,9 +192,12 @@ SetBoxmonOrEggmonCaughtData: .NotPokecenter2F: call GetWorldMapLocation ld b, a - ld a, [wPlayerGender] - rrca ; shift bit 0 (PLAYERGENDER_FEMALE_F) to bit 7 (CAUGHT_GENDER_MASK) - or b + ld a, [wPlayerGender] ; Vestigial, get rid of this later. + dec a ; FEMALE + ld a, b + jr nz, .not_female + or CAUGHT_GENDER_MASK +.not_female ld [hl], a ret diff --git a/engine/pokemon/stats_screen.asm b/engine/pokemon/stats_screen.asm index 4fcc64d..4d41aa9 100644 --- a/engine/pokemon/stats_screen.asm +++ b/engine/pokemon/stats_screen.asm @@ -801,20 +801,20 @@ LoadBluePage: call CopyNickname farcall CorrectNickErrors hlcoord 2, 13 - call PlaceString - ld a, [wTempMonCaughtGender] - and a - jr z, .done - cp $7f - jr z, .done - and CAUGHT_GENDER_MASK - ld a, "♂" - jr z, .got_gender - ld a, "♀" -.got_gender - hlcoord 9, 13 - ld [hl], a -.done + call PlaceString ; Goodbye OT Gender display, you'd cause more of a problem than you're worth +; ld a, [wTempMonCaughtGender] +; and a +; jr z, .done +; cp $7f +; jr z, .done +; and CAUGHT_GENDER_MASK +; ld a, "♂" +; jr z, .got_gender +; ld a, "♀" +;.got_gender +; hlcoord 9, 13 +; ld [hl], a +;.done ret .OTNamePointers: diff --git a/gfx/overworld/enby_fish.png b/gfx/overworld/enby_fish.png new file mode 100644 index 0000000000000000000000000000000000000000..58a1df18abca69bbc9a211853de8f5cc8b975750 GIT binary patch literal 467 zcmV;^0WAKBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0cc4?K~zXf-IVQe zgdhw>VV|*XpRw9!to4AG#u#v&{nsYTe>mEQa z1K-5b1A$&tzlN<{gl9(jwgkVnbW4ENsK6%5Jz&BMHrm>$yBC?J;`6XknET_hL|-JHwt3{S!TSfHi8a}oeVeD~FLPbdJssgW~u z1t8~4llN6!dtMTdW3+X63LueQoJ)a0f`v>9zXLr&0i3rlvYr2k_e=0m6n$Bi z-7=mUztNxV3c~U{WWf4W%GW68JC2oe-#Y*R002ov JPDHLkV1m+_&3ga< literal 0 HcmV?d00001 diff --git a/gfx/pack/pack_nb.pal b/gfx/pack/pack_nb.pal new file mode 100644 index 0000000..2d49a95 --- /dev/null +++ b/gfx/pack/pack_nb.pal @@ -0,0 +1,29 @@ + RGB 31, 31, 31 + RGB 12, 24, 01 + RGB 05, 16, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 12, 24, 01 + RGB 05, 16, 00 + RGB 00, 00, 00 + + RGB 31, 31, 11 + RGB 12, 24, 01 + RGB 05, 16, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 12, 24, 01 + RGB 05, 16, 00 + RGB 31, 00, 00 + + RGB 31, 31, 31 + RGB 12, 24, 01 + RGB 31, 00, 00 + RGB 00, 00, 00 + + RGB 31, 31, 31 + RGB 07, 19, 07 + RGB 07, 19, 07 + RGB 00, 00, 00 diff --git a/gfx/pack/pack_nb.png b/gfx/pack/pack_nb.png new file mode 100644 index 0000000000000000000000000000000000000000..c75ba720e424bb7eba171bc035c6f7f29e768ca5 GIT binary patch literal 1113 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-D!3HGrzZ&EKDVB6cUq=Rpjs4tz5?O(K&H|6f zVg?4jBOuH;Rhv(mfr0tAr;B4qhV#=&-hEFDc$}aAbARdmE#h&a=;45_H|ts(>lg%I zpLhMovycC}wFT=plP&4*Ucb)vT%99*rFz-oc1ODKfaSEssR4zj%db34GbrJDlleku zj>c>o&-V{RZd|@F&+_}{@Tk<=4_-aITK6Hjx$o|*)kC01uRP3={4`VKNul{`=UQZs7Ifc9I(oLHKzw7GYlw0uiLzexIjgH6j z&TdTIki6jX<%f&eCWdQ9-rJZHFunLqUs3OCsdOF5BSAW4>=xlyA9IIp;r(=I`O&*p z+KW>sOt;Z}bLsBS!sZp_zrU=tk%Ic~Yji)dEsWF(V z`f-`+daEU-4OWkfOzh>m_)-hcd@?`XxLo4Mn|g2>ZYbV(c&~Fqu?~9;FM1kI{Pp>- ZxOr@#M%Mb%z@mYH!PC{xWt~$(69AMn7HI$g literal 0 HcmV?d00001 diff --git a/gfx/player/enby.png b/gfx/player/enby.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1ee4c862a94922ff9f36b0d32567d048f9957b GIT binary patch literal 910 zcmV;919AL`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf10zX9K~!i%-Ixn< z;~)@3?cC8mq&d$?SQLg|poB#cLSodm%C(5~ zkRja&SV2D?k6H_aMR8oSAT76D*c?Qh1nFA)Yld&X2XP@z^<6|-Qd9?r#B7PvUKDa( zDeJ_x2S@3NAc>+zNEE3t;NF*(6qSQ5VL%%t3Xy1@x1i0DuBRQ8ILP88TJ2f@?z1p0 zhMOh7MI~+&bZ*0~6(a2d6{J!TvRi^a^p~>|NpYknoZf@^FpzUhOIu7)iH|5{B@&zh zPdi8;3MMB|t9HM$sbBu5qid z{vFInU=|?paZz-yc0*W|B?4oxz zIy?kADFN4-skx@kMbBr@d`Gc6s8yGXd3vQCF3!CAtc%M|QKepF@1Am`=n{c)4o_n_`DDjru21uC)$6DGF@E#cw)|A45zYOV2}K#V)oG44FVmM zAYWHC%FRN53fCI50^6)HKnaLMF_}@@SuC^W;CjK1M9`KO#er?v2v9*D5eQrDN3aSk z$9k=Qr9g-xTg(V>r>T9(Mgh(Ubh~I5xE0`*LqA^Ni~whvF8f^SvDFSUeP&tqxiq5n z<2zCutRgMopbMrWy|xY-mE13mrFMj86*v;6fK^7g#DU#G${wM;;=;NI%Y3!w(}z9O zDnLIKD5C%Syi(uOl$Y3$b3K<@=sC5Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf1ENVpK~!i%&6rDa z;y@5YZDJOjjveec9Xr@@I(B2dHp!%l{z^d1i|CMq`jc5z-C_CrcDw!kTFCKuOxMfh zlCCh#cfb1#oBMS!r_(8k-tYIRZMWOhKE2{xB9jy8bG|C>7~V7NUxxg zzO5`|_khH+h(9}{qL-k#YkT1-15tbliGH{E7G0Y-M*rOq@!r794CG4Xe*jITeNfDR zmq;w9R(Y*~=#K=kT0#=<>8#Zz@6?un_)%u3(3%p;i7pwiXSS%GVB0lyd@(Li8p!*gn1D>{MW`w2UBO?{CiASd-M-tY1h|E(fg5zCcPiQ6aXz;GeG&!Uvuc{r38=h7`U5AZ4&utddK}VQL#_#tA5@;zSlF2 zxoO<%osU(MhFQN-XEold@tiZFciy+uw6L0l`#bNWb-3rMXZ86r-6W<$nL&#`Gia>$9ST)AUiFz?{aJ zqo%+Y&hxL%3HTg+IjIiZ_$+erNcM}oDLNi$8Phbay(KaY8*I}QWH8TjFrL@m;s}}o zA%oA)A6*~ZnQXcmY^C7DHC+mNdAt3r&&Wf`vbG*F959I!y@VJk&g&f1lZdgRF1ddU zDkvbvn#X4M9N=g%nw#{DA%(Ljg=VD*>>sb6<+aZrZqArbL9#~Z10P^~bQfu6d`YT#=Wush12#YJX)3JRuo&SnZn zbSZ!)*wSoUeO_y!DG;ti3$r;f=#C4v9BTec-vj1!Cz^XLb_4H29K%E3Nfce_qz)u+ z52e%Xf+jg>{(mq-Dh35I=1Gfc;`n=NKx9BkmI8B1w{w8ky?>-xafhP}@(xlEjg>;_ zjNmtZmExC3qzV8PUJLKH=!LY1o`S$I8ds_gBg)m7XU1U>#SnRAvj%55R6t~nGZn8N z9OWP>Iv!~mytrF*3cz#+SF ze{gue?%?8}4A(;<;zwocO1G0(3t~Hx{Wi!L?t+wL3WTCpaNu~3v1JSj!0XXPOGq6& z!>$4qR!EJ%fBoPnPcNb-IYc@*nQV}XL4k~U(xRF;{+=4>9-t&kfjOnyIl!x5nn+q) ziWs4`YDX6<-35?zqIyc8{GnOIlZau7Ui*&cU#U7)kcMQJ9s3%K;WoN=mkN6Kn7>^9 Y0422Me?*6r2LJ#707*qoM6N<$f*GTIT>t<8 literal 0 HcmV?d00001 diff --git a/gfx/sprites/enby_bike.png b/gfx/sprites/enby_bike.png new file mode 100644 index 0000000000000000000000000000000000000000..b324c7196a940c06afd9ac4e45604130f81396df GIT binary patch literal 947 zcmV;k15EshP)pWdw4LzDAmXRDKqX+=6|PH+RP(ZN}knSbEo;Y3QIk4MBy|=~R?YOYdq3 zx(A}d$H(_oAJUjQs~l{FkW`sH2VoB6c>J;S*60bS({rFw3e8BlKXQz#N(7UGd-uGu z68l}~rMVb_Jhn8fEOZYlTX{)k*faooQcmuYv&!T#kC`fYp#jC?r<7dJRYyg0OGpKrEYv)@jz z{c}kMb)PlwJ&?NQd(aJtCsOm`oTmWY0E09F_dEbAvE@LB>v%kF=72T&N%ug~lYjR; z$n^*B0VRI>X_V`pMmNtQ3weC047nyZ|DMF%4QFZ~i)9PLnHEx(^~`P1i>{?hD)XgP zZ|eB(76NmI+zmK^QkHHqO)g0U@=4>ucxh-{A}?3YOEZv*)j(~ze$~Bn+##Dg zyH;gxo2&+PaeK~j^MeGMc_4`%lWfUME3qoeOr{&CRAI-}`070X1+##db6gFrJV-%` zrdDCjSE3@SNM9J$9~EV ze{jq~NHCHz)4vxW%Qo??P-nOc3T#p3zI2R3AyslW^JJ)&a@TSKrA(@zSe0S8jp<45 zno7xFAko;CGHfQX=7jMqPygS8C5i5iMcOkc*FrEc&xU}q8}<-B6MxDM@4;sol4xvv zvpFa9`!Uw@hx(x8JHZ;`l>sq1HLToShC)ha9$=I=(cPgNkZNd#$}pAAN9DTfwU1&d z!{7nvMT;@|GX@W4%J=B+fx@~w`&*$JZDT@UQpJ1Z@opB4k6qFMU12ey^yfTu43(Pp^=q=N*X}H@uml$7d4S6B^qdz zsQW4Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0|iM$K~!i%&6W$2 z8zBrt?cC8mr1y{skGNBcmQM?>lYLbbGlM`)i?QeWvvK*x{CM_X&i#JBT(8&OUIGWd zn%nL6SN}?yx0D#yv@A}-$H&K?XBCbGj!MT;Ja5iDpZpdEhiU2pB`k^%5~HzG*CM5t zgmRHkNgt0#?*+o5IIh{y$ZZ$fLBvUru64c~-hKvgA%^}dkyeRy@Fiv^PG?cbd6m3^ zeFj(MMUX_%BP5E{9H^d4tHg3}Bn%j%MIjQ+^AU_W<=#3dagfDHw8pgo?z1p$rpnQO zvBa&C<}utl5m^?fBq}9jw*)c7%UOw}Ipu}z8O(=S&M}R#SYnBfsN@m}6@gm^SxAdz zr+B^+7eSm{XO8<8mrJZ9as%QuM5iJ-&cPCxe`dHQxdg~X#%S6E31+AfmwjW z$4%*8<3`%fk-(S?xX-ZcY+gm6Rbm#Ch>oe#TqQpoBzX4CAZK zM2-Zqcoq@wb8=kHuDLEA3Dn|lc@=-+V(Bdw`EAZbcN8=FyJMYgdIVNz346~}uIY2r za|f+AqwJt|Ef@22l?@l2rFSkKzr`wD#5q$Dr^H7BMI5oLG1_FNB#?ziJ06K6 zdESVGsr=4&V)?(A@VNW<#yS+zbzT-YBmdO6FU=hkBc8^!=A2;9iU}kj z62)XzV>_%_dGT4Yl?cZ2rX1{Tkw8gK1j257L`h)#S?K+@6bMn|2uDD*%;hbu5;y{@ zE|vxE66_rM?*bhGl`x!LJ7TOm2g;xPk;2qNE|*`mNZ0b{Msmae0000