mirror of
https://github.com/pret/pokered.git
synced 2026-05-07 13:53:15 -05:00
Some checks failed
CI / build (push) Has been cancelled
- Use `OBJ_SIZE` and `TILE_SIZE` from hardware.inc. - `SPRITESTATEDATA1_LENGTH`, `NUM_SPRITESTATEDATA_STRUCTS` and `TILE_1BPP_SIZE` are used in some places. - Highlight an oversight in `OakSpeech` where several direct MBC bank switches are requested. - Remove redundant comments in home/overworld.asm. - Add unreferenced `FillBgMap` function to avoid a byte of dead code. - Some constants added in wram.asm. - Correctly separate the commented code in `SaveMainData`.
81 lines
2.3 KiB
NASM
81 lines
2.3 KiB
NASM
; function that performs initialization for DisplayTextID
|
|
DisplayTextIDInit::
|
|
xor a
|
|
ld [wListMenuID], a
|
|
ld a, [wAutoTextBoxDrawingControl]
|
|
bit BIT_NO_AUTO_TEXT_BOX, a
|
|
jr nz, .skipDrawingTextBoxBorder
|
|
ldh a, [hTextID]
|
|
and a
|
|
jr nz, .notStartMenu
|
|
; if text ID is 0 (i.e. the start menu)
|
|
; Note that the start menu text border is also drawn in the function directly
|
|
; below this, so this seems unnecessary.
|
|
CheckEvent EVENT_GOT_POKEDEX
|
|
; start menu with pokedex
|
|
hlcoord 10, 0
|
|
ld b, $0e
|
|
ld c, $08
|
|
jr nz, .drawTextBoxBorder
|
|
; start menu without pokedex
|
|
hlcoord 10, 0
|
|
ld b, $0c
|
|
ld c, $08
|
|
jr .drawTextBoxBorder
|
|
; if text ID is not 0 (i.e. not the start menu) then do a standard dialogue text box
|
|
.notStartMenu
|
|
hlcoord 0, 12
|
|
ld b, $04
|
|
ld c, $12
|
|
.drawTextBoxBorder
|
|
call TextBoxBorder
|
|
.skipDrawingTextBoxBorder
|
|
ld hl, wFontLoaded
|
|
set BIT_FONT_LOADED, [hl]
|
|
ld hl, wMiscFlags
|
|
bit BIT_NO_SPRITE_UPDATES, [hl]
|
|
res BIT_NO_SPRITE_UPDATES, [hl]
|
|
jr nz, .skipMovingSprites
|
|
call UpdateSprites
|
|
.skipMovingSprites
|
|
; loop to copy [x#SPRITESTATEDATA1_FACINGDIRECTION] to
|
|
; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION] for each non-player sprite
|
|
; this is done because when you talk to an NPC, they turn to look your way
|
|
; the original direction they were facing must be restored after the dialogue is over
|
|
ld hl, wSprite01StateData1FacingDirection
|
|
ld c, NUM_SPRITESTATEDATA_STRUCTS - 1
|
|
ld de, SPRITESTATEDATA1_LENGTH
|
|
.spriteFacingDirectionCopyLoop
|
|
ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION
|
|
inc h
|
|
ld [hl], a ; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION]
|
|
dec h
|
|
add hl, de
|
|
dec c
|
|
jr nz, .spriteFacingDirectionCopyLoop
|
|
; loop to force all the sprites in the middle of animation to stand still
|
|
; (so that they don't like they're frozen mid-step during the dialogue)
|
|
ld hl, wSpritePlayerStateData1ImageIndex
|
|
ld de, SPRITESTATEDATA1_LENGTH
|
|
ASSERT NUM_SPRITESTATEDATA_STRUCTS == SPRITESTATEDATA1_LENGTH
|
|
ld c, e
|
|
.spriteStandStillLoop
|
|
ld a, [hl]
|
|
cp $ff ; is the sprite visible?
|
|
jr z, .nextSprite
|
|
; if it is visible
|
|
and $fc
|
|
ld [hl], a
|
|
.nextSprite
|
|
add hl, de
|
|
dec c
|
|
jr nz, .spriteStandStillLoop
|
|
ld b, HIGH(vBGMap1)
|
|
call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
|
|
xor a
|
|
ldh [hWY], a ; put the window on the screen
|
|
call LoadFontTilePatterns
|
|
ld a, $01
|
|
ldh [hAutoBGTransferEnabled], a ; enable continuous WRAM to VRAM transfer each V-blank
|
|
ret
|