shithub: pokecrystal

ref: 6e257bc7cdab3249cc8fbdf4c808f0ebc442022e
dir: /engine/healmachineanim.asm/

View raw version
HealMachineAnim: ; 12324
	; If you have no Pokemon, don't change the buffer.  This can lead to some glitchy effects if you have no Pokemon.
	ld a, [PartyCount]
	and a
	ret z
	; The location of the healing machine relative to the player is stored in ScriptVar.
	; 0: Up and left (Pokemon Center)
	; 1: Left (Elm's Lab)
	; 2: Up (Hall of Fame)
	ld a, [ScriptVar]
	ld [Buffer1], a
	ld a, [rOBP1]
	ld [Buffer2], a
	call .DoJumptableFunctions
	ld a, [Buffer2]
	call DmgToCgbObjPal1
	ret
; 1233e

.DoJumptableFunctions: ; 1233e
	xor a
	ld [wd1ec], a
.jumpable_loop
	ld a, [Buffer1]
	ld e, a
	ld d, 0
	ld hl, .Pointers
rept 2
	add hl, de
endr
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [wd1ec]
	ld e, a
	inc a
	ld [wd1ec], a
	add hl, de
	ld a, [hl]
	cp 5
	jr z, .finish
	ld hl, .Jumptable
	rst JumpTable
	jr .jumpable_loop

.finish
	ret
; 12365

.Pointers: ; 12365
	dw .Pokecenter
	dw .ElmLab
	dw .HallOfFame
; 1236b

.Pokecenter: ; 1236b
	db 0, 1, 3, 5
.ElmLab: ; 1236f
	db 0, 1, 3, 5
.HallOfFame: ; 12373
	db 0, 2, 4, 5
; 12377

.Jumptable: ; 12377
	dw .LoadGFX
	dw .PC_LoadBallsOntoMachine
	dw .HOF_LoadBallsOntoMachine
	dw .PlayHealMusic
	dw .HOF_PlaySFX
	dw .dummy_5 ; never encountered
; 12383

.LoadGFX: ; 12383
	call .LoadPalettes
	ld de, .HealMachineGFX
	ld hl, VTiles0 tile $7c
	lb bc, BANK(.HealMachineGFX), $2
	call Request2bpp
	ret
; 12393

.PC_LoadBallsOntoMachine: ; 12393
	ld hl, Sprites + $80
	ld de, .PC_ElmsLab_TileMap
	call .PlaceHealingMachineTile
	call .PlaceHealingMachineTile
	jr .LoadBallsOntoMachine

.HOF_LoadBallsOntoMachine: ; 123a1
	ld hl, Sprites + $80
	ld de, .HOF_TileMap

.LoadBallsOntoMachine: ; 123a7
	ld a, [PartyCount]
	ld b, a
.party_loop
	call .PlaceHealingMachineTile
	push de
	ld de, SFX_SECOND_PART_OF_ITEMFINDER
	call PlaySFX
	pop de
	ld c, 30
	call DelayFrames
	dec b
	jr nz, .party_loop
	ret
; 123bf

.PlayHealMusic: ; 123bf
	ld de, MUSIC_HEAL
	call PlayMusic
	jp .FlashPalettes8Times
; 123c8

.HOF_PlaySFX: ; 123c8
	ld de, SFX_GAME_FREAK_LOGO_GS
	call PlaySFX
	call .FlashPalettes8Times
	call WaitSFX
	ld de, SFX_BOOT_PC
	call PlaySFX
	ret
; 123db

.dummy_5: ; 123db
	ret
; 123dc

.PC_ElmsLab_TileMap: ; 123dc
	db $20, $22, $7c, $16
	db $20, $26, $7c, $16
	db $26, $20, $7d, $16
	db $26, $28, $7d, $36
	db $2b, $20, $7d, $16
	db $2b, $28, $7d, $36
	db $30, $20, $7d, $16
	db $30, $28, $7d, $36
; 123fc

.HealMachineGFX: ; 123fc
INCBIN "gfx/unknown/0123fc.2bpp"
; 1241c

.HOF_TileMap: ; 1241c
	db $3c, $51, $7d, $16
	db $3c, $56, $7d, $16
	db $3b, $4d, $7d, $16
	db $3b, $5a, $7d, $16
	db $39, $49, $7d, $16
	db $39, $5d, $7d, $16
; 12434

.LoadPalettes: ; 12434
	call IsCGB
	jr nz, .cgb
	ld a, %11100000
	ld [rOBP1], a
	ret

.cgb
	ld hl, .palettes
	ld de, OBPals + 8 * 6
	ld bc, 8
	ld a, $5
	call FarCopyWRAM
	ld a, $1
	ld [hCGBPalUpdate], a
	ret
; 12451

.palettes: ; 12451
	RGB 31, 31, 31
	RGB 31, 19, 10
	RGB 31, 07, 01
	RGB 00, 00, 00
; 12459

.FlashPalettes8Times: ; 12459
	ld c, $8
.palette_loop
	push bc
	call .FlashPalettes
	ld c, 10
	call DelayFrames
	pop bc
	dec c
	jr nz, .palette_loop
	ret
; 12469

.FlashPalettes: ; 12469
	call IsCGB
	jr nz, .go
	ld a, [rOBP1]
	xor %00101000
	ld [rOBP1], a
	ret

.go
	ld a, [rSVBK]
	push af
	ld a, $5
	ld [rSVBK], a

	ld hl, OBPals + 8 * 6
	ld a, [hli]
	ld e, a
	ld a, [hli]
	ld d, a
	push de
	ld c, $3
.palette_loop_2
	ld a, [hli]
	ld e, a
	ld a, [hld]
	ld d, a
	dec hl
	ld a, d
	ld [hld], a
	ld a, e
	ld [hli], a
rept 3
	inc hl
endr
	dec c
	jr nz, .palette_loop_2
	pop de
	dec hl
	ld a, d
	ld [hld], a
	ld a, e
	ld [hl], a

	pop af
	ld [rSVBK], a
	ld a, $1
	ld [hCGBPalUpdate], a
	ret
; 124a3

.PlaceHealingMachineTile: ; 124a3
	push bc
	ld a, [Buffer1]
	lb bc, $10, $20
	cp $1 ; ElmsLab
	jr z, .okay
	lb bc, $00, $00

.okay
	ld a, [de]
	add c
	inc de
	ld [hli], a
	ld a, [de]
	add b
	inc de
	ld [hli], a
	ld a, [de]
	inc de
	ld [hli], a
	ld a, [de]
	inc de
	ld [hli], a
	pop bc
	ret
; 124c1