Level selection menu: don't make unique palette numbers and sprite anims for male and female; instead, load either red or blue into pal0 (#12)

This commit is contained in:
xCrystal
2024-02-03 15:09:45 +01:00
parent 435d441d58
commit d3b397fd37
10 changed files with 121 additions and 203 deletions

View File

@@ -572,17 +572,20 @@ _CGB_GSTitleScreen:
ret
_CGB_LevelSelectionMenu:
; load daytime-based player sprite pals (male and female)
; load daytime-based player sprite pal (male or female)
ld a, [wTimeOfDay]
maskbits NUM_DAYTIMES
ld bc, 8 palettes
ld hl, MapObjectPals
call AddNTimes
gender_to_pal
ld bc, 1 palettes
call AddNTimes
ld de, wOBPals1
ld bc, 2 palettes
ld bc, 1 palettes
ld a, BANK(wOBPals1)
call FarCopyWRAM
; load daytime-based ToD symbol pals (pal2)
; load daytime-based ToD symbol pals (pal1)
ld a, [wTimeOfDay]
maskbits NUM_DAYTIMES
ld bc, 1 palettes
@@ -591,7 +594,7 @@ _CGB_LevelSelectionMenu:
ld bc, 1 palettes
ld a, BANK(wOBPals1)
call FarCopyWRAM
; load stage trophy pals (pal3 to pal6)
; load stage trophy pals (pal2 to pal5)
ld hl, LevelSelectionMenuStageTrophiesPals
ld bc, 4 palettes
ld a, BANK(wOBPals1)

View File

@@ -277,10 +277,10 @@ RGBFadeEffectJumptable:
table_width 2, RGBFadeEffectJumptable
dw _RGBFadeToBlack_6BGP ; RGBFADE_TO_BLACK_6BGP
dw _RGBFadeToLighter_6BGP ; RGBFADE_TO_LIGHTER_6BGP
dw _RGBFadeToWhite_6BGP_7OBP ; RGBFADE_TO_WHITE_6BGP_7OBP
dw _RGBFadeToWhite_6BGP_6OBP ; RGBFADE_TO_WHITE_6BGP_6OBP
dw _RGBFadeToWhite_8BGP_8OBP ; RGBFADE_TO_WHITE_8BGP_8OBP
dw _RGBFadeToBlack_6BGP_1OBP2 ; RGBFADE_TO_BLACK_6BGP_1OBP2
dw _RGBFadeToLighter_6BGP_1OBP2 ; RGBFADE_TO_LIGHTER_6BGP_1OBP2
dw _RGBFadeToBlack_6BGP_1OBP1 ; RGBFADE_TO_BLACK_6BGP_1OBP1
dw _RGBFadeToLighter_6BGP_1OBP1 ; RGBFADE_TO_LIGHTER_6BGP_1OBP1
assert_table_length NUM_RGB_FADE_EFFECTS
; in RGBFadeEffectJumptable functions, use DelayFrame calls appropriately
@@ -307,7 +307,7 @@ _RGBFadeToBlack_6BGP:
jr nz, .loop
ret
_RGBFadeToBlack_6BGP_1OBP2:
_RGBFadeToBlack_6BGP_1OBP1:
ld c, 32 / 2
.loop
push bc
@@ -318,7 +318,7 @@ _RGBFadeToBlack_6BGP_1OBP2:
call FadeStepColorsToBlack
; fade OBP to black
ld de, wOBPals2 + 2 palettes
ld de, wOBPals2 + 1 palettes
ld c, NUM_PAL_COLORS
call FadeStepColorsToBlack
@@ -353,7 +353,7 @@ _RGBFadeToLighter_6BGP:
jr nz, .loop
ret
_RGBFadeToLighter_6BGP_1OBP2:
_RGBFadeToLighter_6BGP_1OBP1:
ld c, 32 / 2
.loop
push bc
@@ -365,8 +365,8 @@ _RGBFadeToLighter_6BGP_1OBP2:
call FadeStepColorsToLighter
; fade OBP to lighter (towards wOBPals1)
ld de, wOBPals2 + 2 palettes
ld hl, wOBPals1 + 2 palettes
ld de, wOBPals2 + 1 palettes
ld hl, wOBPals1 + 1 palettes
ld c, NUM_PAL_COLORS
call FadeStepColorsToLighter
@@ -380,7 +380,7 @@ _RGBFadeToLighter_6BGP_1OBP2:
jr nz, .loop
ret
_RGBFadeToWhite_6BGP_7OBP:
_RGBFadeToWhite_6BGP_6OBP:
ld c, 32 / 2
.loop
push bc
@@ -392,7 +392,7 @@ _RGBFadeToWhite_6BGP_7OBP:
; fade OBP to white
ld de, wOBPals2
ld c, 7 * NUM_PAL_COLORS
ld c, 6 * NUM_PAL_COLORS
call FadeStepColorsToWhite
; commit pals

View File

@@ -85,7 +85,7 @@ LevelSelectionMenu::
farcall ClearSpriteAnims
; fade to the next unlocked level, or to the regular level selection menu
ld b, RGBFADE_TO_BLACK_6BGP_1OBP2
ld b, RGBFADE_TO_BLACK_6BGP_1OBP1
call DoRGBFadeEffect
ld c, 30 ;
call DelayFrames ; black screen --> next landmark shown
@@ -213,7 +213,7 @@ LevelSelectionMenu::
ret
.EnterLevelFadeOut:
ld b, RGBFADE_TO_WHITE_6BGP_7OBP
ld b, RGBFADE_TO_WHITE_6BGP_6OBP
jp DoRGBFadeEffect
.exit
@@ -321,9 +321,7 @@ LevelSelectionMenu_InitPlayerSprite:
; because ClearSpriteAnims was called before, it's always loaded to wSpriteAnim1
depixel 0, 0
; all the SPRITE_ANIM_* related to the level selection menu are sorted by direction, then by gender
ld b, SPRITE_ANIM_OBJ_LEVEL_SELECTION_MENU_MALE_WALK_DOWN
ld a, [wPlayerGender]
add b
ld a, SPRITE_ANIM_OBJ_LEVEL_SELECTION_MENU_WALK_DOWN
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
@@ -514,10 +512,10 @@ LevelSelectionMenu_DrawTimeOfDaySymbol:
ret
.OAM:
db 3 * TILE_WIDTH, 2 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 0, 2
db 3 * TILE_WIDTH, 3 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 1, 2
db 4 * TILE_WIDTH, 2 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 8, 2
db 4 * TILE_WIDTH, 3 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 9, 2
db 3 * TILE_WIDTH, 2 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 0, PAL_LSM_TOD
db 3 * TILE_WIDTH, 3 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 1, PAL_LSM_TOD
db 4 * TILE_WIDTH, 2 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 8, PAL_LSM_TOD
db 4 * TILE_WIDTH, 3 * TILE_WIDTH, 24 + NUM_DIRECTIONS + NUM_LEVEL_STAGES * 2 + 9, PAL_LSM_TOD
LevelSelectionMenu_DrawDirectionalArrows:
; Draw directional arrows OAM around player sprite for the valid directions.
@@ -559,8 +557,8 @@ LevelSelectionMenu_DrawDirectionalArrows:
ld a, [hli]
ld [de], a ; tile id
inc de
gender_to_pal
ld [de], a ; attr (use the same pal as player sprite)
xor a ; PAL_LSM_PLAYER
ld [de], a ; attr (uses the same pal as player sprite)
inc de
ret
@@ -684,14 +682,14 @@ LevelSelectionMenu_DrawStageTrophies:
db 18 * TILE_WIDTH, 19 * TILE_WIDTH
.BaseOAMTilesAttrs:
db 24 + NUM_DIRECTIONS + 0, 3
db 24 + NUM_DIRECTIONS + 4, 3
db 24 + NUM_DIRECTIONS + 1, 4
db 24 + NUM_DIRECTIONS + 5, 4
db 24 + NUM_DIRECTIONS + 2, 5
db 24 + NUM_DIRECTIONS + 6, 5
db 24 + NUM_DIRECTIONS + 3, 6
db 24 + NUM_DIRECTIONS + 7, 6
db 24 + NUM_DIRECTIONS + 0, PAL_LSM_TROPHY_1
db 24 + NUM_DIRECTIONS + 4, PAL_LSM_TROPHY_1
db 24 + NUM_DIRECTIONS + 1, PAL_LSM_TROPHY_2
db 24 + NUM_DIRECTIONS + 5, PAL_LSM_TROPHY_2
db 24 + NUM_DIRECTIONS + 2, PAL_LSM_TROPHY_3
db 24 + NUM_DIRECTIONS + 6, PAL_LSM_TROPHY_3
db 24 + NUM_DIRECTIONS + 3, PAL_LSM_TROPHY_4
db 24 + NUM_DIRECTIONS + 7, PAL_LSM_TROPHY_4
LevelSelectionMenu_ClearTextboxOAM:
ld hl, wShadowOAM + $8 * SPRITEOAMSTRUCT_LENGTH
@@ -710,12 +708,8 @@ LevelSelectionMenu_SetAnimSeqAndFrameset:
ld [hl], a
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
add hl, bc
ld a, [wPlayerGender]
ld d, a
ld a, SPRITE_ANIM_FRAMESET_LEVEL_SELECTION_MENU_MALE_WALK_DOWN
add e
ld a, SPRITE_ANIM_FRAMESET_LEVEL_SELECTION_MENU_WALK_DOWN
add e ; add direction
add d ; add gender
ld [hl], a
ret
@@ -840,11 +834,11 @@ ENDM
ret
.PageChangeFadeOut:
ld b, RGBFADE_TO_BLACK_6BGP_1OBP2
ld b, RGBFADE_TO_BLACK_6BGP_1OBP1
jp DoRGBFadeEffect
.PageChangeFadeIn:
ld b, RGBFADE_TO_LIGHTER_6BGP_1OBP2
ld b, RGBFADE_TO_LIGHTER_6BGP_1OBP1
jp DoRGBFadeEffect
LevelSelectionMenu_GetLandmarkPage:
@@ -1127,10 +1121,7 @@ _LevelSelectionMenuHandleTransition:
ld [hl], a
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
add hl, bc
ld a, [wPlayerGender]
ld d, a
ld a, SPRITE_ANIM_FRAMESET_LEVEL_SELECTION_MENU_MALE_WALK_DOWN
add d
ld a, SPRITE_ANIM_FRAMESET_LEVEL_SELECTION_MENU_WALK_DOWN
ld [hl], a
; return nc to signal back not to apply a displacement during this frame
xor a