From ff35ce6d6b51e348884dd5cb325dddd4667d8dae Mon Sep 17 00:00:00 2001 From: xCrystal Date: Sat, 9 Mar 2024 16:40:21 +0100 Subject: [PATCH] Player management [Commit 2] (#38) --- constants/engine_flags.asm | 2 +- constants/player_constants.asm | 11 +- constants/sprite_data_constants.asm | 1 + constants/wram_constants.asm | 2 +- data/events/engine_flags.asm | 2 +- data/players/players.asm | 15 +- docs/usage/img/players.bmp | Bin 0 -> 69174 bytes docs/usage/img/talker.bmp | Bin 0 -> 69174 bytes docs/usage/index.md | 27 +++- engine/battle/core.asm | 2 +- engine/debug/debug_room.asm | 6 +- engine/events/fishing_gfx.asm | 2 +- engine/events/magnet_train.asm | 6 +- engine/gfx/cgb_layouts.asm | 39 ++--- engine/gfx/color.asm | 13 +- engine/gfx/player_gfx.asm | 26 ++- engine/items/pack.asm | 2 +- engine/menus/init_gender.asm | 2 +- engine/menus/intro_menu.asm | 18 ++- engine/overworld/map_objects.asm | 28 +++- engine/overworld/overworld.asm | 2 +- engine/overworld/player_object.asm | 22 +-- engine/pokegear/pokegear.asm | 6 +- engine/pokemon/caught_data.asm | 2 +- .../{background_male.pal => background.pal} | 8 +- .../background_female.pal | 152 ------------------ gfx/sprites.asm | 8 +- macros/code.asm | 7 - ram/wram.asm | 2 +- 29 files changed, 138 insertions(+), 275 deletions(-) create mode 100755 docs/usage/img/players.bmp create mode 100755 docs/usage/img/talker.bmp rename gfx/level_selection_menu/{background_male.pal => background.pal} (97%) delete mode 100755 gfx/level_selection_menu/background_female.pal diff --git a/constants/engine_flags.asm b/constants/engine_flags.asm index 890eda787..5c6bb94a7 100644 --- a/constants/engine_flags.asm +++ b/constants/engine_flags.asm @@ -97,7 +97,7 @@ endc const ENGINE_GOLDENROD_DEPT_STORE_SALE_IS_ON ; wGameTimer const ENGINE_62 -; wPlayerGender +; wPlayerCharacter const ENGINE_PLAYER_IS_FEMALE ; wCelebiEvent const ENGINE_FOREST_IS_RESTLESS diff --git a/constants/player_constants.asm b/constants/player_constants.asm index f666d458b..9d13adaa0 100755 --- a/constants/player_constants.asm +++ b/constants/player_constants.asm @@ -9,10 +9,11 @@ DEF NUM_PLAYER_CHARACTERS EQU const_value ; field ids in the Players table rsreset -DEF PLAYERDATA_STATE_SPRITES rw -DEF PLAYERDATA_NPC_PAL rb +DEF PLAYERDATA_STATE_SPRITES rw +DEF PLAYERDATA_OW_PAL rb +DEF PLAYERDATA_DEFAULT_SPRITE rw DEF PLAYERDATA_FISHING_SPRITE rw -DEF PLAYERDATA_FRONTPIC rw -DEF PLAYERDATA_BACKPIC rw -DEF PLAYERDATA_PIC_PAL rw +DEF PLAYERDATA_FRONTPIC rw +DEF PLAYERDATA_BACKPIC rw +DEF PLAYERDATA_PIC_PAL rw DEF PLAYERDATA_LENGTH EQU _RS diff --git a/constants/sprite_data_constants.asm b/constants/sprite_data_constants.asm index 2a267e987..2698b7120 100644 --- a/constants/sprite_data_constants.asm +++ b/constants/sprite_data_constants.asm @@ -27,6 +27,7 @@ DEF NUM_SPRITEDATA_FIELDS EQU _RS ; object_events set bit 3 so as not to use the sprite's default palette ; MapObjectPals indexes (see gfx/overworld/npc_sprites.pal) const_def 1 << 3 +DEF PAL_NPC EQU const_value const PAL_NPC_RED ; 8 const PAL_NPC_BLUE ; 9 const PAL_NPC_GREEN ; a diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index d43b9670c..0fc60a586 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -161,7 +161,7 @@ DEF PLAYERSPRITESETUP_CUSTOM_FACING_F EQU 5 DEF PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F EQU 6 DEF PLAYERSPRITESETUP_RESET_ACTION_F EQU 7 -; wPlayerGender:: +; wPlayerCharacter:: DEF PLAYERGENDER_FEMALE_F EQU 0 ; wMapStatus:: diff --git a/data/events/engine_flags.asm b/data/events/engine_flags.asm index bbbb80e82..8eafe9634 100644 --- a/data/events/engine_flags.asm +++ b/data/events/engine_flags.asm @@ -108,7 +108,7 @@ endc engine_flag wGameTimer, 7 ; unused - engine_flag wPlayerGender, PLAYERGENDER_FEMALE_F + engine_flag wPlayerCharacter, PLAYERGENDER_FEMALE_F engine_flag wCelebiEvent, CELEBIEVENT_FOREST_IS_RESTLESS_F diff --git a/data/players/players.asm b/data/players/players.asm index 34bad4fee..8d8d42bfd 100755 --- a/data/players/players.asm +++ b/data/players/players.asm @@ -1,13 +1,14 @@ MACRO player dw \1 ; ptr to ow state sprites db \2 ; ow sprite palette - dw \3 ; ptr to ow fishing gfx - dw \4, \5 ; ptr to (uncompressed) frontpic, ptr to (compressed) backpic - dw \6 ; ptr to pic pallete + dw \3 ; ptr to ow default gfx + dw \4 ; ptr to ow fishing gfx + dw \5, \6 ; ptr to (uncompressed) frontpic, ptr to (compressed) backpic + dw \7 ; ptr to pic palette ENDM Players:: - player ChrisStateSprites, PAL_NPC_RED, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_CHRIS - player KrisStateSprites, PAL_NPC_BLUE, KrisFishingGFX, KrisPic, KrisBackpic, KrisPalette ; PLAYER_KRIS - player GreenStateSprites, PAL_NPC_GREEN, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_GREEN - db $ff +; for each argument number across different players, all arguments that are pointers must point to something in the same bank + player ChrisStateSprites, PAL_OW_RED, ChrisSpriteGFX, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_CHRIS + player KrisStateSprites, PAL_OW_BLUE, KrisSpriteGFX, KrisFishingGFX, KrisPic, KrisBackpic, KrisPalette ; PLAYER_KRIS + player GreenStateSprites, PAL_OW_GREEN, RivalSpriteGFX, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_GREEN diff --git a/docs/usage/img/players.bmp b/docs/usage/img/players.bmp new file mode 100755 index 0000000000000000000000000000000000000000..49492a03a784237bd0460003bca59f5d92848cb6 GIT binary patch literal 69174 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 literal 0 HcmV?d00001 diff --git a/docs/usage/img/talker.bmp b/docs/usage/img/talker.bmp new file mode 100755 index 0000000000000000000000000000000000000000..786afa9be9fba659f21e7e47da09ac5dab94afb6 GIT binary patch literal 69174 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 L&*X6{#>)Q%da?LF literal 0 HcmV?d00001 diff --git a/docs/usage/index.md b/docs/usage/index.md index 49d10be2b..e2d898bc8 100755 --- a/docs/usage/index.md +++ b/docs/usage/index.md @@ -28,6 +28,7 @@ This documentation covers a mix of topics that include aspects ranging from how - [Map identifiers](#map-identifiers) - [Map environments](#map-environments) - [OAM management](#oam-management) + - [Player characters](#player-characters) - [Gameplay design aspects](#gameplay-design-aspects) - [Game currency](#game-currency) - [Time counting](#time-counting) @@ -37,7 +38,7 @@ This documentation covers a mix of topics that include aspects ranging from how The level selection menu is essentially a world map that the player navigates to select a level to play. The player can move through landmarks that correspond to unlocked levels in the level selection menu. The level seleciton menu can have multiple map pages each with their own landmarks. When the player moves from a landmark in one page to a landmark in another page, the new page is loaded during the transition. -[Level selection menu](img/level_selection_menu.bmp) +![Level selection menu](img/level_selection_menu.bmp) The usual level:landmark relation is expected to be 1:1, but 1:n is also supported, for levels that may have alternative starting points. @@ -65,7 +66,7 @@ In addition to what is covered in this section, you can find more low level stuf The board menu is shown to the player at the beginning of each turn. In allows for several choices. The only ones that are specific to the pokecrystal-board engine are "roll die", "view map", and "exit level". The other three choices point to the party menu, bag menu, and pokegear, and are placeholders from pokecrystal. The board menu can be navigated horizontally. All menu options are accessed by selecting the corresponding icon of the menu, except for "view map" which is accessible via the Select button. All menu options except for "roll die" and "exit level" eventually return back to the board menu. -[Board menu](img/board_menu.bmp) +![Board menu](img/board_menu.bmp) The implementation is located in [engine/board/menu.asm](engine/board/menu.asm). Icon tiles are drawn over the background of the textbox as if they were font characters. The current menu item is highlighted with a colored overlay using objects. This file includes also the animation logic for rolling a die when the "roll die" option is selected. These animations leverage the overworld sprite animation engine from pokecrystal. Finally, [gfx/board](gfx/board) contains GFX assets. @@ -204,6 +205,8 @@ Unlike trainer events, talker events are meant to be used for NPCs that interact The script pointer of a talker NPC points to an struct that uses the *talker* macro. Its arguments are flag, OPTIONAL/MANDATORY, TEXT/SCRIPT, 2-byte pointer to text or script. *OPTIONAL* means that the player will receive a prompt to skip this NPC's event. *SCRIPT* means that the 2-byte pointer points to an arbitrary script to be executed, while *TEXT* is a shortcut to merely make the NPC display text (it just executes a simple script enclosed in opentext/closetext). +![Talker](img/talker.bmp) + Talkers can use turn-scoped flags that are cleared at the beginning of each turn, but like level-scoped trainer flags, this is just a predefined design choice. For example: @@ -311,7 +314,7 @@ Note that the map name sign feature is not used in pokecrystal-board, and, in fa This fading engine is used in the level selection menu and in the transition from overworld to post-level screen. When designing the timing your own fading functions, be aware of the latency introduced by the engine itself: each color takes around 3.2 scanlines to fade (in normal speed mode), so up to around 10-11 palettes can be faded in a whole frame. -In addition to this engine, for manual fading you can automate the derivation of the RGB values of intermediate steps using the *rgbpals_\** macros available in [gfx/macros.asm](gfx/macros.asm), as done for example in [gfx/level_selection_menu/background_female.pal](gfx/level_selection_menu/background_female.pal). +In addition to this engine, for manual fading you can automate the derivation of the RGB values of intermediate steps using the *rgbpals_\** macros available in [gfx/macros.asm](gfx/macros.asm), as done for example in [gfx/level_selection_menu/background.pal](gfx/level_selection_menu/background.pal). # Internal design aspects @@ -371,6 +374,24 @@ To update just secondary sprites without processing NPC sprites, you can use *Up The tiles reserved for secondary sprites in the overworld are 0x20 through 0x7e in VRAM bank 0. Tiles from 0x00 through 0x1f are reserved for NPC sprites. You may want to adjust the separation point according to your needs. [charmap.asm](charmap.asm) defines the placement of secondary sprite tiles for different use cases. The start tile of 0x20 is denoted by *SECONDARY_SPRITES_FIRST_TILE*. From there, it's a matter of managing which sprites may or may not overlap to place their tiles in VRAM in the way that most optimizes the available space. +## Player characters + +Player data has been centralized into the *Players* table from [data/players/players.asm](data/players/players.asm), including overworld sprites and their states, player pictures, and their palettes. Player constants are defined in [constants/player_constants.asm](constants/player_constants.asm). When you define pointers in a *player* entry in the *Players* table, you must ensure the equivalent argument in all entries points to something in the same bank. + +For example, in: + +``` +Players:: + player ChrisStateSprites, PAL_OW_RED, ChrisSpriteGFX, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_CHRIS + player KrisStateSprites, PAL_OW_BLUE, KrisSpriteGFX, KrisFishingGFX, KrisPic, KrisBackpic, KrisPalette ; PLAYER_KRIS + player GreenStateSprites, PAL_OW_GREEN, RivalSpriteGFX, FishingGFX, ChrisPic, ChrisBackpic, PlayerPalette ; PLAYER_GREEN +``` +*ChrisSpriteGFX*, *KrisSpriteGFX*, and *RivalSpriteGFX* must point to graphics located in the same bank as each other, and so on. + +Note that for many pokecrystal features that are considered placeholder or discontinued in pokecrystal-board (e.g. player selection/naming screen, Pokegear, pack, trainer card, Magnet Train, etc.), pokecrystal-board still uses legacy *PLAYERGENDER_FEMALE_F* flag. The concept of gender is otherwise deprecated. + +![Player](img/player.bmp) + # Gameplay design aspects This section covers miscellaneous gameplay design aspects not yet fully covered in other sections. diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 786610927..0ac422a96 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -8761,7 +8761,7 @@ GetTrainerBackpic: jr z, .Decompress ; What gender are we? - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] ld e, PLAYERDATA_BACKPIC call GetPlayerField .Decompress diff --git a/engine/debug/debug_room.asm b/engine/debug/debug_room.asm index 86587f91a..6064ffcf4 100644 --- a/engine/debug/debug_room.asm +++ b/engine/debug/debug_room.asm @@ -417,10 +417,10 @@ DebugRoom_PrintBattleSkip: DebugRoomMenu_ChangeSex: ld a, BANK(sGameData) call OpenSRAM - ld a, [sGameData + (wPlayerGender - wGameData)] + ld a, [sGameData + (wPlayerCharacter - wGameData)] inc a and 1 - ld [sGameData + (wPlayerGender - wGameData)], a + ld [sGameData + (wPlayerCharacter - wGameData)], a call CloseSRAM ret @@ -430,7 +430,7 @@ DebugRoom_PrintGender: call PlaceString ld a, BANK(sGameData) call OpenSRAM - ld a, [sGameData + (wPlayerGender - wGameData)] + ld a, [sGameData + (wPlayerCharacter - wGameData)] call CloseSRAM or a ld a, "♂" diff --git a/engine/events/fishing_gfx.asm b/engine/events/fishing_gfx.asm index b4dfe727c..59d1e4675 100644 --- a/engine/events/fishing_gfx.asm +++ b/engine/events/fishing_gfx.asm @@ -4,7 +4,7 @@ LoadFishingGFX: ld a, $1 ldh [rVBK], a - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] ld e, PLAYERDATA_FISHING_SPRITE call GetPlayerField ld d, h diff --git a/engine/events/magnet_train.asm b/engine/events/magnet_train.asm index c184dc9ff..12b262902 100644 --- a/engine/events/magnet_train.asm +++ b/engine/events/magnet_train.asm @@ -131,7 +131,7 @@ MagnetTrain_LoadGFX_PlayMusic: ; Load the player sprite's standing frames ldh a, [rSVBK] push af - ld a, BANK(wPlayerGender) + ld a, BANK(wPlayerCharacter) ldh [rSVBK], a farcall GetPlayerIcon pop af @@ -295,9 +295,9 @@ MagnetTrain_Jumptable: ld b, SPRITE_ANIM_OBJ_MAGNET_TRAIN_RED ldh a, [rSVBK] push af - ld a, BANK(wPlayerGender) + ld a, BANK(wPlayerCharacter) ldh [rSVBK], a - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_gender ld b, SPRITE_ANIM_OBJ_MAGNET_TRAIN_BLUE diff --git a/engine/gfx/cgb_layouts.asm b/engine/gfx/cgb_layouts.asm index b269c1dc3..7ddf1e4fa 100644 --- a/engine/gfx/cgb_layouts.asm +++ b/engine/gfx/cgb_layouts.asm @@ -162,7 +162,7 @@ InitPartyMenuBGPal0: ret _CGB_PokegearPals: - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .male ld hl, FemalePokegearPals @@ -556,7 +556,11 @@ _CGB_LevelSelectionMenu: ld bc, 8 palettes ld hl, MapObjectPals call AddNTimes - gender_to_pal + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_OW_PAL + push hl + call GetPlayerField + pop hl ld bc, 1 palettes call AddNTimes ld de, wOBPals1 @@ -578,15 +582,8 @@ _CGB_LevelSelectionMenu: ld a, BANK(wOBPals1) call FarCopyWRAM -; load daytime and gender-based background pals - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .male - ld hl, LevelSelectionMenuFemalePals - jr .got_pals -.male - ld hl, LevelSelectionMenuMalePals -.got_pals +; load daytime background pals + ld hl, LevelSelectionMenuPals ld a, [wTimeOfDay] maskbits NUM_DAYTIMES ld bc, 6 palettes @@ -638,16 +635,8 @@ _CGB_LevelSelectionMenuToDChange: jr .loop .match - ld e, [hl] - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .male - ld hl, LevelSelectionMenuFemalePals - jr .got_pals -.male - ld hl, LevelSelectionMenuMalePals -.got_pals - ld a, e + ld a, [hl] + ld hl, LevelSelectionMenuPals ld bc, 6 palettes call AddNTimes ld de, wBGPals1 @@ -737,7 +726,7 @@ _CGB_TrainerCard: ; fill screen with opposite-gender palette for the card border hlcoord 0, 0, wAttrmap ld bc, SCREEN_WIDTH * SCREEN_HEIGHT - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] and a ld a, $1 ; kris jr z, .got_gender @@ -747,7 +736,7 @@ _CGB_TrainerCard: ; fill trainer sprite area with same-gender palette hlcoord 14, 1, wAttrmap lb bc, 7, 5 - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] and a ld a, $0 ; chris jr z, .got_gender2 @@ -786,7 +775,7 @@ _CGB_TrainerCard: ld a, $7 ; pryce call FillBoxCGB ; clair uses kris's palette - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] and a push af jr z, .got_gender3 @@ -861,7 +850,7 @@ _CGB_PackPals: cp BATTLETYPE_TUTORIAL jr z, .tutorial_male - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .tutorial_male diff --git a/engine/gfx/color.asm b/engine/gfx/color.asm index 1d519f362..d010767e0 100644 --- a/engine/gfx/color.asm +++ b/engine/gfx/color.asm @@ -503,7 +503,7 @@ GetEnemyFrontpicPalettePointer: GetPlayerOrMonPalettePointer: and a jp nz, GetMonNormalOrShinyPalettePointer - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] ld e, PLAYERDATA_PIC_PAL call GetPlayerField ret @@ -862,14 +862,9 @@ INCLUDE "gfx/beta_poker/beta_poker.pal" SlotMachinePals: INCLUDE "gfx/slots/slots.pal" -LevelSelectionMenuMalePals: - table_width PAL_COLOR_SIZE * 4 * 6, LevelSelectionMenuMalePals -INCLUDE "gfx/level_selection_menu/background_male.pal" - assert_table_length (NUM_DAYTIMES + NUM_DAYTIMES * 2) - -LevelSelectionMenuFemalePals: - table_width PAL_COLOR_SIZE * 4 * 6, LevelSelectionMenuFemalePals -INCLUDE "gfx/level_selection_menu/background_female.pal" +LevelSelectionMenuPals: + table_width PAL_COLOR_SIZE * 4 * 6, LevelSelectionMenuPals +INCLUDE "gfx/level_selection_menu/background.pal" assert_table_length (NUM_DAYTIMES + NUM_DAYTIMES * 2) LevelSelectionMenuStageTrophiesPals: diff --git a/engine/gfx/player_gfx.asm b/engine/gfx/player_gfx.asm index fbef541e5..53964eded 100644 --- a/engine/gfx/player_gfx.asm +++ b/engine/gfx/player_gfx.asm @@ -45,7 +45,7 @@ MovePlayerPic: ShowPlayerNamingChoices: ld hl, ChrisNameMenuHeader - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_header ld hl, KrisNameMenuHeader @@ -61,19 +61,17 @@ ShowPlayerNamingChoices: INCLUDE "data/players/names.asm" GetPlayerIcon: - ld de, ChrisSpriteGFX + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_DEFAULT_SPRITE + call GetPlayerField + ld d, h + ld e, l ld b, BANK(ChrisSpriteGFX) - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .got_gfx - ld de, KrisSpriteGFX - ld b, BANK(KrisSpriteGFX) -.got_gfx ret GetCardPic: ld hl, ChrisCardPic - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_pic ld hl, KrisCardPic @@ -99,7 +97,7 @@ TrainerCardGFX: INCBIN "gfx/trainer_card/trainer_card.2bpp" GetPlayerBackpic: - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] ld e, PLAYERDATA_BACKPIC call GetPlayerField ld de, vTiles2 tile $31 @@ -115,7 +113,7 @@ HOF_LoadTrainerFrontpic: ; Get class ld e, CHRIS - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_class ld e, KRIS @@ -125,7 +123,7 @@ HOF_LoadTrainerFrontpic: ; Load pic ld de, ChrisPic - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_pic ld de, KrisPic @@ -145,7 +143,7 @@ DrawIntroPlayerPic: ; Get class ld e, CHRIS - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_class ld e, KRIS @@ -155,7 +153,7 @@ DrawIntroPlayerPic: ; Load pic ld de, ChrisPic - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_pic ld de, KrisPic diff --git a/engine/items/pack.asm b/engine/items/pack.asm index 579803543..575d6ca03 100644 --- a/engine/items/pack.asm +++ b/engine/items/pack.asm @@ -1215,7 +1215,7 @@ DrawPackGFX: ld a, [wBattleType] cp BATTLETYPE_TUTORIAL jr z, .male_dude - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr nz, .female .male_dude diff --git a/engine/menus/init_gender.asm b/engine/menus/init_gender.asm index 7ccbf9448..f0d4ca64e 100644 --- a/engine/menus/init_gender.asm +++ b/engine/menus/init_gender.asm @@ -13,7 +13,7 @@ InitGender: call CloseWindow ld a, [wMenuCursorY] dec a - ld [wPlayerGender], a + ld [wPlayerCharacter], a ld c, 10 call DelayFrames ret diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm index 31b713b67..1d8282fe3 100644 --- a/engine/menus/intro_menu.asm +++ b/engine/menus/intro_menu.asm @@ -527,7 +527,7 @@ NamePlayer: ld hl, wPlayerName ld de, .Chris - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .Male ld de, .Kris @@ -682,13 +682,15 @@ Intro_PlacePlayerSprite: inc de ld [hli], a ; tile id - ld b, PAL_OW_RED - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .male - ld b, PAL_OW_BLUE -.male - ld a, b + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_OW_PAL + push hl + push de + push bc + call GetPlayerField + pop bc + pop de + pop hl ld [hli], a ; attributes dec c diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm index cf99183ab..348c494af 100644 --- a/engine/overworld/map_objects.asm +++ b/engine/overworld/map_objects.asm @@ -3233,12 +3233,12 @@ InitBranchArrowsSprites: cp BRANCH_DIRECTION_INVALID jr z, .next1 ; skip this arrow if this direction is not valid cp BRANCH_DIRECTION_UNAVAILABLE - gender_to_pal - ld b, a - jr nz, .available ld b, PAL_OW_GREY ; draw grey arrow if this direction is unavailable + jr z, .got_pal + call GetSecondarySpritesPal + ld b, a -.available +.got_pal ; draw this arrow and advance hUsedSpriteIndex ; preserve loop variables d, e, c push de @@ -3281,7 +3281,7 @@ InitBranchArrowsSprites: ; the palette byte overrides that data as it matches the player's color palette. ld e, a ld d, HIGH(wShadowOAM) - gender_to_pal + call GetSecondarySpritesPal ld b, a ld c, 8 ; number of objects ld hl, BranchLegendOAM @@ -3322,7 +3322,7 @@ InitViewMapModeSprites: ld a, [de] cp $ff jr z, .next1 ; skip this arrow if this direction is not valid - gender_to_pal + call GetSecondarySpritesPal ld b, a ; draw this arrow and advance hUsedSpriteIndex ; preserve loop variables d, e, c @@ -3366,7 +3366,7 @@ InitViewMapModeSprites: ; the palette byte overrides that data as it matches the player's color palette. ld e, a ld d, HIGH(wShadowOAM) - gender_to_pal + call GetSecondarySpritesPal ld b, a ld c, 8 ; number of objects ld hl, ViewMapModeLegendOAM @@ -3401,7 +3401,7 @@ InitTalkerEventSprites: ; the palette byte overrides that data as it matches the player's color palette. ld e, a ld d, HIGH(wShadowOAM) - gender_to_pal + call GetSecondarySpritesPal ld b, a ld c, 8 ; number of objects ld hl, TalkerEventLegendOAM @@ -3495,4 +3495,16 @@ InitGainOrLoseCoinsSprites: pop af ret +GetSecondarySpritesPal: + push hl + push de + push bc + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_OW_PAL + call GetPlayerField + pop bc + pop de + pop hl + ret + INCLUDE "data/sprites/secondary_sprites.asm" diff --git a/engine/overworld/overworld.asm b/engine/overworld/overworld.asm index 7828faf18..0d5508b22 100644 --- a/engine/overworld/overworld.asm +++ b/engine/overworld/overworld.asm @@ -54,7 +54,7 @@ RefreshSprites:: DeterminePlayerSprite: ; Return player's sprite in c and a. - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] ld e, PLAYERDATA_STATE_SPRITES call GetPlayerField ld a, [wPlayerState] diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm index d19d4fda8..637651451 100644 --- a/engine/overworld/player_object.asm +++ b/engine/overworld/player_object.asm @@ -29,14 +29,15 @@ SpawnPlayer: call GetMapObject ld hl, MAPOBJECT_PALETTE add hl, bc - ln e, PAL_NPC_RED, OBJECTTYPE_SCRIPT - ld a, [wPlayerGender] - bit PLAYERGENDER_FEMALE_F, a - jr z, .ok - ln e, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT - -.ok - ld [hl], e + push hl + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_OW_PAL + call GetPlayerField + add PAL_NPC ; convert from PAL_OW to PAL_NPC + swap a + or OBJECTTYPE_SCRIPT + pop hl + ld [hl], a ld a, PLAYER_OBJECT ldh [hMapObjectIndex], a ld bc, wMapObjects @@ -945,9 +946,10 @@ MockPlayerObject:: call CopyBytes ; adjust palette number - ld a, [wPlayerGender] - ld e, PLAYERDATA_NPC_PAL + ld a, [wPlayerCharacter] + ld e, PLAYERDATA_OW_PAL call GetPlayerField + add PAL_NPC ; convert from PAL_OW to PAL_NPC swap a or OBJECTTYPE_SCRIPT ld [wMapObject{d:LAST_OBJECT}Palette], a ; also wMapObject{d:LAST_OBJECT}Type diff --git a/engine/pokegear/pokegear.asm b/engine/pokegear/pokegear.asm index accad5315..c688abb6d 100644 --- a/engine/pokegear/pokegear.asm +++ b/engine/pokegear/pokegear.asm @@ -561,7 +561,7 @@ PokegearMap_InitPlayerIcon: push af depixel 0, 0 ld b, SPRITE_ANIM_OBJ_RED_WALK - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_gender ld b, SPRITE_ANIM_OBJ_BLUE_WALK @@ -2283,7 +2283,7 @@ Pokedex_GetArea: inc de push bc ld c, PAL_OW_RED - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .male inc c ; PAL_OW_BLUE @@ -2459,7 +2459,7 @@ TownMapPlayerIcon: ; Animation/palette depixel 0, 0 ld b, SPRITE_ANIM_OBJ_RED_WALK ; Male - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] bit PLAYERGENDER_FEMALE_F, a jr z, .got_gender ld b, SPRITE_ANIM_OBJ_BLUE_WALK ; Female diff --git a/engine/pokemon/caught_data.asm b/engine/pokemon/caught_data.asm index 58c5ae813..5e0fd4a01 100644 --- a/engine/pokemon/caught_data.asm +++ b/engine/pokemon/caught_data.asm @@ -177,7 +177,7 @@ SetBoxmonOrEggmonCaughtData: ld c, a call GetWorldMapLocation ld b, a - ld a, [wPlayerGender] + ld a, [wPlayerCharacter] rrca ; shift bit 0 (PLAYERGENDER_FEMALE_F) to bit 7 (CAUGHT_GENDER_MASK) or b ld [hl], a diff --git a/gfx/level_selection_menu/background_male.pal b/gfx/level_selection_menu/background.pal similarity index 97% rename from gfx/level_selection_menu/background_male.pal rename to gfx/level_selection_menu/background.pal index 884e58edc..8d7efd792 100755 --- a/gfx/level_selection_menu/background_male.pal +++ b/gfx/level_selection_menu/background.pal @@ -17,7 +17,7 @@ RGB 07, 31, 03 RGB 19, 11, 00 RGB 00, 00, 00 -; city (boy) +; city RGB 28, 31, 20 RGB 31, 15, 00 RGB 15, 07, 00 @@ -54,7 +54,7 @@ RGB 00, 31, 00 RGB 15, 07, 00 RGB 00, 00, 00 -; city (boy) +; city RGB 28, 31, 20 RGB 31, 15, 00 RGB 15, 07, 00 @@ -91,7 +91,7 @@ RGB 00, 15, 00 RGB 09, 05, 00 RGB 00, 00, 00 -; city (boy) +; city RGB 28, 31, 20 RGB 31, 15, 00 RGB 15, 07, 00 @@ -128,7 +128,7 @@ RGB 04, 22, 00 RGB 13, 05, 00 RGB 00, 00, 00 -; city (boy) +; city RGB 28, 31, 20 RGB 31, 15, 00 RGB 15, 07, 00 diff --git a/gfx/level_selection_menu/background_female.pal b/gfx/level_selection_menu/background_female.pal deleted file mode 100755 index e81625b41..000000000 --- a/gfx/level_selection_menu/background_female.pal +++ /dev/null @@ -1,152 +0,0 @@ -; morn - - rgbpals_fade_src "lsm_f_morn" - -; border - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 -; earth - RGB 28, 31, 20 - RGB 07, 31, 03 - RGB 05, 05, 31 - RGB 00, 00, 00 -; mountain - RGB 28, 31, 20 - RGB 07, 31, 03 - RGB 19, 11, 00 - RGB 00, 00, 00 -; city (girl) - RGB 28, 31, 20 - RGB 10, 18, 31 - RGB 13, 06, 31 - RGB 00, 00, 00 -; point of interest - RGB 28, 31, 20 - RGB 07, 31, 03 - RGB 05, 05, 31 - RGB 31, 00, 00 -; mountain point of interest - RGB 28, 31, 20 - RGB 07, 31, 03 - RGB 19, 11, 00 - RGB 31, 00, 00 - - rgbpals_fade_src_end - -; day (original) - - rgbpals_fade_src "lsm_f_day" - -; border - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 -; earth - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 00, 00, 00 -; mountain - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 00, 00, 00 -; city (girl) - RGB 28, 31, 20 - RGB 10, 18, 31 - RGB 13, 06, 31 - RGB 00, 00, 00 -; point of interest - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 00, 00, 31 - RGB 31, 00, 00 -; mountain point of interest - RGB 28, 31, 20 - RGB 00, 31, 00 - RGB 15, 07, 00 - RGB 31, 00, 00 - - rgbpals_fade_src_end - -; nite - - rgbpals_fade_src "lsm_f_nite" - -; border - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 -; earth - RGB 28, 31, 20 - RGB 00, 15, 00 - RGB 00, 00, 15 - RGB 00, 00, 00 -; mountain - RGB 28, 31, 20 - RGB 00, 15, 00 - RGB 09, 05, 00 - RGB 00, 00, 00 -; city (girl) - RGB 28, 31, 20 - RGB 10, 18, 31 - RGB 13, 06, 31 - RGB 00, 00, 00 -; point of interest - RGB 28, 31, 20 - RGB 00, 15, 00 - RGB 00, 00, 15 - RGB 31, 00, 00 -; mountain point of interest - RGB 28, 31, 20 - RGB 00, 15, 00 - RGB 09, 05, 00 - RGB 31, 00, 00 - - rgbpals_fade_src_end - -; eve - - rgbpals_fade_src "lsm_f_eve" - -; border - RGB 28, 31, 20 - RGB 21, 21, 21 - RGB 13, 13, 13 - RGB 00, 00, 00 -; earth - RGB 28, 31, 20 - RGB 04, 22, 00 - RGB 04, 00, 22 - RGB 00, 00, 00 -; mountain - RGB 28, 31, 20 - RGB 04, 22, 00 - RGB 13, 05, 00 - RGB 00, 00, 00 -; city (girl) - RGB 28, 31, 20 - RGB 10, 18, 31 - RGB 13, 06, 31 - RGB 00, 00, 00 -; point of interest - RGB 28, 31, 20 - RGB 04, 22, 00 - RGB 04, 00, 22 - RGB 31, 00, 00 -; mountain point of interest - RGB 28, 31, 20 - RGB 04, 22, 00 - RGB 13, 05, 00 - RGB 31, 00, 00 - - rgbpals_fade_src_end - - rgbpals_fade_apply "lsm_f_morn", "lsm_f_day", 2 - rgbpals_fade_apply "lsm_f_day", "lsm_f_eve", 2 - rgbpals_fade_apply "lsm_f_eve", "lsm_f_nite", 2 - rgbpals_fade_apply "lsm_f_nite", "lsm_f_morn", 2 diff --git a/gfx/sprites.asm b/gfx/sprites.asm index 8d4357423..30c3be8c9 100644 --- a/gfx/sprites.asm +++ b/gfx/sprites.asm @@ -2,6 +2,8 @@ SECTION "Sprites 1", ROMX ChrisSpriteGFX:: INCBIN "gfx/sprites/chris.2bpp" ChrisBikeSpriteGFX:: INCBIN "gfx/sprites/chris_bike.2bpp" +KrisSpriteGFX:: INCBIN "gfx/sprites/kris.2bpp" +KrisBikeSpriteGFX:: INCBIN "gfx/sprites/kris_bike.2bpp" GameboyKidSpriteGFX:: INCBIN "gfx/sprites/gameboy_kid.2bpp" RivalSpriteGFX:: INCBIN "gfx/sprites/rival.2bpp" OakSpriteGFX:: INCBIN "gfx/sprites/oak.2bpp" @@ -42,12 +44,12 @@ YoungsterSpriteGFX:: INCBIN "gfx/sprites/youngster.2bpp" LassSpriteGFX:: INCBIN "gfx/sprites/lass.2bpp" TeacherSpriteGFX:: INCBIN "gfx/sprites/teacher.2bpp" BeautySpriteGFX:: INCBIN "gfx/sprites/beauty.2bpp" -SuperNerdSpriteGFX:: INCBIN "gfx/sprites/super_nerd.2bpp" -RockerSpriteGFX:: INCBIN "gfx/sprites/rocker.2bpp" SECTION "Sprites 2", ROMX +SuperNerdSpriteGFX:: INCBIN "gfx/sprites/super_nerd.2bpp" +RockerSpriteGFX:: INCBIN "gfx/sprites/rocker.2bpp" PokefanMSpriteGFX:: INCBIN "gfx/sprites/pokefan_m.2bpp" PokefanFSpriteGFX:: INCBIN "gfx/sprites/pokefan_f.2bpp" GrampsSpriteGFX:: INCBIN "gfx/sprites/gramps.2bpp" @@ -99,8 +101,6 @@ FamicomSpriteGFX:: INCBIN "gfx/sprites/famicom.2bpp" FruitTreeSpriteGFX:: INCBIN "gfx/sprites/fruit_tree.2bpp" GoldTrophySpriteGFX:: INCBIN "gfx/sprites/gold_trophy.2bpp" SilverTrophySpriteGFX:: INCBIN "gfx/sprites/silver_trophy.2bpp" -KrisSpriteGFX:: INCBIN "gfx/sprites/kris.2bpp" -KrisBikeSpriteGFX:: INCBIN "gfx/sprites/kris_bike.2bpp" KurtOutsideSpriteGFX:: INCBIN "gfx/sprites/kurt_outside.2bpp" SuicuneSpriteGFX:: INCBIN "gfx/sprites/suicune.2bpp" EnteiSpriteGFX:: INCBIN "gfx/sprites/entei.2bpp" diff --git a/macros/code.asm b/macros/code.asm index 4e20e8c67..1fc0d0375 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -115,10 +115,3 @@ if _NARG == 0 sine_table 32 endc ENDM - -; Abstractions - -MACRO gender_to_pal -; preserve all registers but a - ld a, [wPlayerGender] -ENDM diff --git a/ram/wram.asm b/ram/wram.asm index 61b4d1d5f..260535081 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -2317,7 +2317,7 @@ wRivalName:: ds NAME_LENGTH wRedsName:: ds NAME_LENGTH wGreensName:: ds NAME_LENGTH -wPlayerGender:: +wPlayerCharacter:: ; bit 0: ; 0 male ; 1 female