12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- ; function that performs initialization for DisplayTextID
- DisplayTextIDInit:
- xor a
- ld [wListMenuID], a
- ld a, [wAutoTextBoxDrawingControl]
- bit 0, a
- jr nz, .skipDrawingTextBoxBorder
- ld a, [hSpriteIndexOrTextID] ; text ID (or sprite ID)
- 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
- coord hl, 10, 0
- ld b, $0e
- ld c, $08
- jr nz, .drawTextBoxBorder
- ; start menu without pokedex
- coord hl, 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
- coord hl, 0, 12
- ld b, $04
- ld c, $12
- .drawTextBoxBorder
- call TextBoxBorder
- .skipDrawingTextBoxBorder
- ld hl, wFontLoaded
- set 0, [hl]
- ld hl, wFlags_0xcd60
- bit 4, [hl]
- res 4, [hl]
- jr nz, .skipMovingSprites
- call UpdateSprites
- .skipMovingSprites
- ; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each 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, wSpriteStateData1 + $19
- ld c, $0f
- ld de, $0010
- .spriteFacingDirectionCopyLoop
- ld a, [hl]
- inc h
- ld [hl], a
- 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, wSpriteStateData1 + 2
- ld de, $0010
- 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, $9c ; window background address
- call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
- xor a
- ld [hWY], a ; put the window on the screen
- call LoadFontTilePatterns
- ld a, $01
- ld [H_AUTOBGTRANSFERENABLED], a ; enable continuous WRAM to VRAM transfer each V-blank
- ret
|