diff options
Diffstat (limited to 'engine')
| -rwxr-xr-x | engine/crystal_intro.asm | 2531 | ||||
| -rwxr-xr-x | engine/debug.asm | 1517 | ||||
| -rw-r--r-- | engine/engine_flags.asm | 87 | ||||
| -rwxr-xr-x | engine/npctrade.asm | 620 | ||||
| -rw-r--r-- | engine/party_menu.asm | 2 | ||||
| -rwxr-xr-x | engine/printer.asm | 1493 | ||||
| -rw-r--r-- | engine/scripting.asm | 4 | ||||
| -rwxr-xr-x | engine/sprites.asm | 545 | ||||
| -rwxr-xr-x | engine/startmenu.asm | 2 | ||||
| -rwxr-xr-x | engine/time_capsule/conversion.asm | 684 | ||||
| -rwxr-xr-x | engine/variables.asm | 150 | 
11 files changed, 7627 insertions, 8 deletions
| diff --git a/engine/crystal_intro.asm b/engine/crystal_intro.asm new file mode 100755 index 000000000..7849a9f48 --- /dev/null +++ b/engine/crystal_intro.asm @@ -0,0 +1,2531 @@ +Functione455c: ; e455c +	hlcoord 1, 1 +	ld de, SCREEN_WIDTH +	ld c, $10 +.asm_e4564 +	ld [hl], $7f +	add hl, de +	dec c +	jr nz, .asm_e4564 +	hlcoord 1, 2 +	ld bc, $28 +	ld a, [wJumptableIndex] +	call AddNTimes +	ld [hl], $ed +	ret +; e4579 + + +Functione4579: ; e4579 +	ld de, MUSIC_NONE +	call PlayMusic +	call ClearBGPalettes +	call ClearTileMap +	ld a, VBGMap0 / $100 +	ld [hBGMapAddress + 1], a +	xor a +	ld [hBGMapAddress], a +	ld [hJoyDown], a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $90 +	ld [hWY], a +	call WaitBGMap +	ld b, SCGB_19 +	call GetSGBLayout +	call SetPalettes +	ld c, 10 +	call DelayFrames +	callab Copyright +	call WaitBGMap +	ld c, 100 +	call DelayFrames +	call ClearTileMap +	callba GBCOnlyScreen +	call Functione45e8 +.joy_loop +	call JoyTextDelay +	ld a, [hJoyLast] +	and BUTTONS +	jr nz, .pressed_button +	ld a, [wJumptableIndex] +	bit 7, a +	jr nz, .finish +	call PlaceGameFreakPresents +	callba Function8cf69 +	call DelayFrame +	jr .joy_loop + +.pressed_button +	call Functione465e +	scf +	ret + +.finish +	call Functione465e +	and a +	ret +; e45e8 + +Functione45e8: ; e45e8 +	ld de, GameFreakLogo +	ld hl, VTiles2 +	lb bc, BANK(GameFreakLogo), $1c +	call Get1bpp + +	ld a, [rSVBK] +	push af +	ld a, $6 +	ld [rSVBK], a + +	ld hl, IntroLogoGFX +	ld de, w6_d000 +	ld a, BANK(IntroLogoGFX) +	call FarDecompress + +	ld hl, VTiles0 +	ld de, w6_d000 +	lb bc, 1, 8 tiles +	call Request2bpp + +	ld hl, VTiles1 +	ld de, w6_d000 + $80 tiles +	lb bc, 1, 8 tiles +	call Request2bpp + +	pop af +	ld [rSVBK], a + +	callba Function8cf53 +	depixel 10, 11, 4, 0 +	ld a, SPRITE_ANIM_INDEX_03 +	call _InitSpriteAnimStruct +	ld hl, $7 +	add hl, bc +	ld [hl], $a0 +	ld hl, $c +	add hl, bc +	ld [hl], $60 +	ld hl, $d +	add hl, bc +	ld [hl], $30 +	xor a +	ld [wJumptableIndex], a +	ld [wcf64], a +	ld [wcf65], a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $1 +	ld [hBGMapMode], a +	ld a, $90 +	ld [hWY], a +	ld de, $e4e4 +	call DmgToCgbObjPals +	ret +; e465e + +Functione465e: ; e465e +	callba Function8cf53 +	call ClearTileMap +	call ClearSprites +	ld c, 16 +	call DelayFrames +	ret +; e4670 + +PlaceGameFreakPresents: ; e4670 +	ld a, [wJumptableIndex] +	ld e, a +	ld d, 0 +	ld hl, .jumptable +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; e467f + +.jumptable: ; e467f +	dw PlaceGameFreakPresents_0 +	dw PlaceGameFreakPresents_1 +	dw PlaceGameFreakPresents_2 +	dw PlaceGameFreakPresents_3 +; e4687 + +PlaceGameFreakPresents_AdvanceIndex: ; e4687 +	ld hl, wJumptableIndex +	inc [hl] +	ret +; e468c + +PlaceGameFreakPresents_0: ; e468c +	ret +; e468d + +PlaceGameFreakPresents_1: ; e468d +	ld hl, wcf65 +	ld a, [hl] +	cp $20 +	jr nc, .PlaceGameFreak +	inc [hl] +	ret + +.PlaceGameFreak +	ld [hl], 0 +	ld hl, .GAME_FREAK +	decoord 5, 10 +	ld bc, .end - .GAME_FREAK +	call CopyBytes +	call PlaceGameFreakPresents_AdvanceIndex +	ld de, SFX_GAME_FREAK_PRESENTS +	call PlaySFX +	ret +; e46af + +.GAME_FREAK +	;  G  A  M  E   _  F  R  E  A  K +	db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6 +.end +	db "@" +; e46ba + +PlaceGameFreakPresents_2: ; e46ba +	ld hl, wcf65 +	ld a, [hl] +	cp $40 +	jr nc, .place_presents +	inc [hl] +	ret + +.place_presents +	ld [hl], 0 +	ld hl, .presents +	decoord 7,11 +	ld bc, .end - .presents +	call CopyBytes +	call PlaceGameFreakPresents_AdvanceIndex +	ret +; e46d6 + +.presents +	db 7, 8, 9, 10, 11, 12 +.end +	db "@" +; e46dd + +PlaceGameFreakPresents_3: ; e46dd +	ld hl, wcf65 +	ld a, [hl] +	cp $80 +	jr nc, .finish +	inc [hl] +	ret + +.finish +	ld hl, wJumptableIndex +	set 7, [hl] +	ret +; e46ed + + + +GameFreakLogoJumper: ; e46ed (39:46ed) +	ld hl, $b +	add hl, bc +	ld e, [hl] +	ld d, 0 +	ld hl, GameFreakLogoScenes +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] + +GameFreakLogoScenes: ; e46fd (39:46fd) +	dw GameFreakLogoScene1 +	dw GameFreakLogoScene2 +	dw GameFreakLogoScene3 +	dw GameFreakLogoScene4 +	dw GameFreakLogoScene5 + + +GameFreakLogoScene1: ; e4707 (39:4707) +	ld hl, $b +	add hl, bc +	inc [hl] +	ret + +GameFreakLogoScene2: ; e470d (39:470d) +	ld hl, $c +	add hl, bc +	ld a, [hl] +	and a +	jr z, .asm_e4747 +	ld d, a +	ld hl, $d +	add hl, bc +	ld a, [hl] +	and $3f +	cp $20 +	jr nc, .asm_e4723 +	add $20 +.asm_e4723 +	ld e, a +	callba Functionce765 +	ld hl, $7 +	add hl, bc +	ld [hl], e +	ld hl, $d +	add hl, bc +	ld a, [hl] +	dec [hl] +	and $1f +	ret nz +	ld hl, $c +	add hl, bc +	ld a, [hl] +	sub $30 +	ld [hl], a +	ld de, SFX_DITTO_BOUNCE +	call PlaySFX +	ret +.asm_e4747 +	ld hl, $b +	add hl, bc +	inc [hl] +	ld hl, $d +	add hl, bc +	ld [hl], $0 +	ld de, SFX_DITTO_POP_UP +	call PlaySFX +	ret + +GameFreakLogoScene3: ; e4759 (39:4759) +	ld hl, $d +	add hl, bc +	ld a, [hl] +	cp $20 +	jr nc, .asm_e4764 +	inc [hl] +	ret +.asm_e4764 +	ld hl, $b +	add hl, bc +	inc [hl] +	ld hl, $d +	add hl, bc +	ld [hl], $0 +	ld de, SFX_DITTO_TRANSFORM +	call PlaySFX +	ret + +GameFreakLogoScene4: ; e4776 (39:4776) +	ld hl, $d +	add hl, bc +	ld a, [hl] +	cp $40 +	jr z, .asm_e47a3 +	inc [hl] +	srl a +	srl a +	ld e, a +	ld d, $0 +	ld hl, GameFreakLogoPalettes +rept 2 +	add hl, de +endr +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld a, [hli] +	ld [OBPals + 12], a +	ld a, [hli] +	ld [OBPals + 13], a +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret +.asm_e47a3 +	ld hl, $b +	add hl, bc +	inc [hl] +	call PlaceGameFreakPresents_AdvanceIndex + +GameFreakLogoScene5: ; e47ab (39:47ab) +	ret +; e47ac (39:47ac) + +GameFreakLogoPalettes: ; e47ac +; Ditto's color as it turns into the Game Freak logo. +; Fade from pink to orange. +; One color per step. +	RGB 23, 12, 28 +	RGB 23, 12, 27 +	RGB 23, 13, 26 +	RGB 23, 13, 24 +	RGB 24, 14, 22 +	RGB 24, 14, 20 +	RGB 24, 15, 18 +	RGB 24, 15, 16 +	RGB 25, 16, 14 +	RGB 25, 16, 12 +	RGB 25, 17, 10 +	RGB 25, 17, 08 +	RGB 26, 18, 06 +	RGB 26, 18, 04 +	RGB 26, 19, 02 +	RGB 26, 19, 00 +;' e47cc + +GameFreakLogo: ; e47cc +INCBIN "gfx/splash/logo.1bpp" +; e48ac + +CrystalIntro: ; e48ac +	ld a, [rSVBK] +	push af +	ld a, 5 +	ld [rSVBK], a +	ld a, [hInMenu] +	push af +	ld a, [hVBlank] +	push af +	call Functione4901 +.loop: ; e48bc +	call JoyTextDelay +	ld a, [hJoyLast] +	and BUTTONS +	jr nz, .ShutOffMusic +	ld a, [wJumptableIndex] +	bit 7, a +	jr nz, .done +	call IntroSceneJumper +	callba Function8cf69 +	call DelayFrame +	jp .loop + +.ShutOffMusic +	ld de, MUSIC_NONE +	call PlayMusic + +.done +	call ClearBGPalettes +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	pop af +	ld [hVBlank], a +	pop af +	ld [hInMenu], a +	pop af +	ld [rSVBK], a +	ret +; e4901 + +Functione4901: ; e4901 +	xor a +	ld [hVBlank], a +	ld a, $1 +	ld [hInMenu], a +	xor a +	ld [hMapAnims], a +	ld [wJumptableIndex], a +	ret +; e490f + +IntroSceneJumper: ; e490f +	ld a, [wJumptableIndex] +	ld e, a +	ld d, 0 +	ld hl, IntroScenes +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; e491e + + +IntroScenes: ; e491e (39:491e) +	dw IntroScene1 +	dw IntroScene2 +	dw IntroScene3 +	dw IntroScene4 +	dw IntroScene5 +	dw IntroScene6 +	dw IntroScene7 +	dw IntroScene8 +	dw IntroScene9 +	dw IntroScene10 +	dw IntroScene11 +	dw IntroScene12 +	dw IntroScene13 +	dw IntroScene14 +	dw IntroScene15 +	dw IntroScene16 +	dw IntroScene17 +	dw IntroScene18 +	dw IntroScene19 +	dw IntroScene20 +	dw IntroScene21 +	dw IntroScene22 +	dw IntroScene23 +	dw IntroScene24 +	dw IntroScene25 +	dw IntroScene26 +	dw IntroScene27 +	dw IntroScene28 + + +NextIntroScene: ; e4956 (39:4956) +	ld hl, wJumptableIndex +	inc [hl] +	ret + +IntroScene1: ; e495b (39:495b) +; Setup the next scene. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap001 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroUnownsGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroPulseGFX +	ld de, VTiles0 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap002 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_365ad +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_365ad +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	xor a +	ld [wIntroSceneFrameCounter], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene2: ; e49d6 (39:49d6) +; First Unown (A) fades in, pulses, then fades out. +	ld hl, wIntroSceneFrameCounter +	ld a, [hl] +	inc [hl] +	cp $80 +	jr nc, .endscene +	cp $60 +	jr nz, .DontPlaySound +	push af +	ld de, $5858 +	call Functione51dc +	ld de, SFX_INTRO_UNOWN_1 +	call PlaySFX +	pop af +.DontPlaySound +	ld [wcf65], a +	xor a +	call Functione5223 +	ret +.endscene +	call NextIntroScene +	ret + +IntroScene3: ; e49fd (39:49fd) +; More setup. Transition to the outdoor scene. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap003 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroBackgroundGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap004 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e5edd +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e5edd +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	call Functione5516 +	call Functione549e +	xor a +	ld [wIntroSceneFrameCounter], a +	call NextIntroScene +	ret + +IntroScene4: ; e4a69 (39:4a69) +; Scroll the outdoor panorama for a bit. +	call Functione552f +	ld hl, wIntroSceneFrameCounter +	ld a, [hl] +	cp $80 +	jr z, .endscene +	inc [hl] +	ret +.endscene +	call NextIntroScene +	ret + +IntroScene5: ; e4a7a (39:4a7a) +; Go back to the Unown. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld [hLCDStatCustom], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap005 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroUnownsGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroPulseGFX +	ld de, VTiles0 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap006 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_365ad +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_365ad +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene6: ; e4af7 (39:4af7) +; Two more Unown (I, H) fade in. +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $80 +	jr nc, .endscene +	cp $60 +	jr z, .SecondUnown +	cp $40 +	jr nc, .StopUnown +	cp $20 +	jr z, .FirstUnown +	jr .NoUnown +.FirstUnown +	push af +	ld de, $3878 +	call Functione51dc +	ld de, SFX_INTRO_UNOWN_2 +	call PlaySFX +	pop af +.NoUnown +	ld [wcf65], a +	xor a +	call Functione5223 +	ret +.SecondUnown +	push af +	ld de, $7030 +	call Functione51dc +	ld de, SFX_INTRO_UNOWN_1 +	call PlaySFX +	pop af +.StopUnown +	ld [wcf65], a +	ld a, $1 +	call Functione5223 +	ret +.endscene +	call NextIntroScene +	ret + +IntroScene7: ; e4b3f (39:4b3f) +; Back to the outdoor scene. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap003 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld hl, IntroPichuWooperGFX +	ld de, VTiles0 tile $00 +	call Functione54c2 +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroSuicuneRunGFX +	ld de, VTiles0 tile $00 +	call Functione54de +	ld hl, IntroBackgroundGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap004 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e5edd +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e5edd +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	call Functione5516 +	callba Function8cf53 +	depixel 13, 27, 4, 0 +	ld a, SPRITE_ANIM_INDEX_26 +	call _InitSpriteAnimStruct +	ld a, $f0 +	ld [wc3c0], a +	call Functione549e +	xor a +	ld [wIntroSceneFrameCounter], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene8: ; e4bd3 (39:4bd3) +; Scroll the scene, then show Suicune running across the screen. +	ld hl, wIntroSceneFrameCounter +	ld a, [hl] +	inc [hl] +	cp $40 +	jr z, .asm_e4be2 +	jr nc, .asm_e4be8 +	call Functione552f +	ret +.asm_e4be2 +	ld de, SFX_INTRO_SUICUNE_3 +	call PlaySFX +.asm_e4be8 +	ld a, [wc3c0] +	and a +	jr z, .asm_e4bf4 +	sub $8 +	ld [wc3c0], a +	ret +.asm_e4bf4 +	ld de, SFX_INTRO_SUICUNE_2 +	call PlaySFX +	callba Function8d03d +	call NextIntroScene +	ret + +IntroScene9: ; e4c04 (39:4c04) +; Set up the next scene (same bg). +	xor a +	ld [hLCDStatCustom], a +	call ClearSprites +	hlcoord 0, 0, AttrMap +	ld bc, $f0 +	ld a, $1 +	call ByteFill +	ld bc, $3c +	ld a, $2 +	call ByteFill +	ld bc, $3c +	ld a, $3 +	call ByteFill +	ld a, $2 +	ld [hBGMapMode], a +	call DelayFrame +	call DelayFrame +	call DelayFrame +	ld a, $c +	ld [hBGMapAddress], a +	call DelayFrame +	call DelayFrame +	call DelayFrame +	xor a +	ld [hBGMapMode], a +	ld [hBGMapAddress], a +	ld [wc3c0], a +	xor a +	ld [wcf64], a +	call NextIntroScene +	ret + +IntroScene10: ; e4c4f (39:4c4f) +; Wooper and Pichu enter. +	call Functione546d +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $c0 +	jr z, .done +	cp $20 +	jr z, .wooper +	cp $40 +	jr z, .pichu +	ret + +.pichu +	depixel 21, 16, 1, 0 +	ld a, SPRITE_ANIM_INDEX_27 +	call _InitSpriteAnimStruct +	ld de, SFX_INTRO_PICHU +	call PlaySFX +	ret + +.wooper +	depixel 22, 6 +	ld a, SPRITE_ANIM_INDEX_28 +	call _InitSpriteAnimStruct +	ld de, SFX_INTRO_PICHU +	call PlaySFX +	ret +.done +	call NextIntroScene +	ret + +IntroScene11: ; e4c86 (39:4c86) +; Back to Unown again. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld [hLCDStatCustom], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap007 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroUnownsGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap008 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_365ad +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_365ad +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	xor a +	ld [wIntroSceneFrameCounter], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene12: ; e4cfa (39:4cfa) +; Even more Unown. +	call Functione4d36 +	ld hl, wIntroSceneFrameCounter +	ld a, [hl] +	inc [hl] +	cp $c0 +	jr nc, .asm_e4d32 +	cp $80 +	jr nc, .asm_e4d1d +	ld c, a +	and $1f +	sla a +	ld [wcf65], a +	ld a, c +	and $e0 +	srl a +	swap a +	call Functione5223 +	ret +.asm_e4d1d +	ld c, a +	and $f +	sla a +	sla a +	ld [wcf65], a +	ld a, c +	and $70 +	or $40 +	swap a +	call Functione5223 +	ret +.asm_e4d32 +	call NextIntroScene +	ret + +Functione4d36: ; e4d36 (39:4d36) +	ld a, [wIntroSceneFrameCounter] +	ld c, a +	ld hl, .UnownSounds +.loop +	ld a, [hli] +	cp -1 +	ret z +	cp c +	jr z, .playsound +rept 2 +	inc hl +endr +	jr .loop +.playsound +	ld a, [hli] +	ld d, [hl] +	ld e, a +	push de +	call SFXChannelsOff +	pop de +	call PlaySFX +	ret +; e4d54 (39:4d54) + +.UnownSounds: ; e4d54 +	dbw $00, SFX_INTRO_UNOWN_3 +	dbw $20, SFX_INTRO_UNOWN_2 +	dbw $40, SFX_INTRO_UNOWN_1 +	dbw $60, SFX_INTRO_UNOWN_2 +	dbw $80, SFX_INTRO_UNOWN_3 +	dbw $90, SFX_INTRO_UNOWN_2 +	dbw $a0, SFX_INTRO_UNOWN_1 +	dbw $b0, SFX_INTRO_UNOWN_2 +	db $ff +; e4d6d + +IntroScene13: ; e4d6d (39:4d6d) +; Switch scenes again. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap003 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroSuicuneRunGFX +	ld de, VTiles0 tile $00 +	call Functione54de +	ld hl, IntroBackgroundGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap004 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e5edd +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e5edd +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	depixel 13, 11, 4, 0 +	ld a, SPRITE_ANIM_INDEX_26 +	call _InitSpriteAnimStruct +	ld de, MUSIC_CRYSTAL_OPENING +	call PlayMusic +	xor a +	ld [wc3c0], a +	call Functione549e +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene14: ; e4dfa (39:4dfa) +; Suicune runs then jumps. +	ld a, [hSCX] +	sub 10 +	ld [hSCX], a +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $80 +	jr z, .done +	cp $60 +	jr z, .jump +	jr nc, .asm_e4e1a +	cp $40 +	jr nc, .asm_e4e33 +	ret + +.jump +	ld de, SFX_INTRO_SUICUNE_4 +	call PlaySFX + +.asm_e4e1a +	ld a, $1 +	ld [wcf65], a +	ld a, [wc3c0] +	cp $88 +	jr c, .asm_e4e2c +	sub $8 +	ld [wc3c0], a +	ret + +.asm_e4e2c +	callba Function8d03d +	ret + +.asm_e4e33 +	ld a, [wc3c0] +	sub $2 +	ld [wc3c0], a +	ret + +.done +	call NextIntroScene +	ret + +IntroScene15: ; e4e40 (39:4e40) +; Transition to a new scene. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap009 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroSuicuneJumpGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroUnownBackGFX +	ld de, VTiles0 tile $00 +	call Functione54c2 +	ld de, GFX_e7a5d +	ld hl, VTiles1 tile $00 +	lb bc, BANK(GFX_e7a5d), 1 +	call Request2bpp +	ld hl, IntroTilemap010 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	call Functione541b +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e77dd +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e77dd +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld a, $90 +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	depixel 8, 5 +	ld a, SPRITE_ANIM_INDEX_2A +	call _InitSpriteAnimStruct +	depixel 12, 0 +	ld a, SPRITE_ANIM_INDEX_2B +	call _InitSpriteAnimStruct +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene16: ; e4edc (39:4edc) +; Suicune shows its face. An Unown appears in front. +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $80 +	jr nc, .done +	call Functione5441 +	ld a, [hSCY] +	and a +	ret z +	add 8 +	ld [hSCY], a +	ret +.done +	call NextIntroScene +	ret + +IntroScene17: ; e4ef5 (39:4ef5) +; ... +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap011 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroSuicuneCloseGFX +	ld de, VTiles1 tile $00 +	call Functione54de +	ld hl, IntroTilemap012 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e6d6d +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e6d6d +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene18: ; e4f67 (39:4f67) +; Suicune close up. +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $60 +	jr nc, .done +	ld a, [hSCX] +	cp $60 +	ret z +	add 8 +	ld [hSCX], a +	ret +.done +	call NextIntroScene +	ret + +IntroScene19: ; e4f7e (39:4f7e) +; More setup. +	call Functione54a3 +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap013 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroSuicuneBackGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroUnownsGFX +	ld de, VTiles1 tile $00 +	call Functione54c2 +	ld de, GFX_e7a5d +	ld hl, VTiles1 tile $7f +	lb bc, BANK(GFX_e7a5d), 1 +	call Request2bpp +	ld hl, IntroTilemap014 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	call Functione541b +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e77dd +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e77dd +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld a, $d8 +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	ld hl, wc300 +	xor a +	ld [hli], a +	ld [hl], $7f +	call Functione549e +	depixel 12, 0 +	ld a, SPRITE_ANIM_INDEX_2B +	call _InitSpriteAnimStruct +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene20: ; e5019 (39:5019) +; Suicune running away. A bunch of Unown appear. +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $98 +	jr nc, .asm_e5059 +	cp $58 +	ret nc +	cp $40 +	jr nc, .asm_e5032 +	cp $28 +	ret nc +	ld a, [hSCY] +	inc a +	ld [hSCY], a +	ret + +.asm_e5032 +	sub $18 +	ld c, a +	and $3 +	cp $3 +	ret nz +	ld a, c +	and $1c +	srl a +	srl a +	ld [wcf65], a +	xor a +	call Functione5348 +	ret +; e5049 (39:5049) + +	ld a, c +	and $1c +	srl a +	srl a +	ld [wcf65], a +	ld a, 1 +	call Functione5348 +	ret + +.asm_e5059 +	call NextIntroScene +	ret + +IntroScene21: ; e505d (39:505d) +; Suicune gets more distant and turns black. +	call Functione5451 +	ld c, 3 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene22: ; e5072 (39:5072) +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $8 +	jr nc, .done +	ret +.done +	callba Function8d03d +	call NextIntroScene +	ret + +IntroScene23: ; e5086 (39:5086) +	xor a +	ld [wcf64], a +	call NextIntroScene +	ret + +IntroScene24: ; e508e (39:508e) +; Fade to white. +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $20 +	jr nc, .done + +	ld c, a +	and $3 +	ret nz +	ld a, c +	and $1c +	sla a +	call Functione5172 +	ret + +.done +	ld a, $40 +	ld [wcf64], a +	call NextIntroScene +	ret + +IntroScene25: ; e50ad (39:50ad) +; Wait around a bit. +	ld a, [wcf64] +	dec a +	jr z, .done +	ld [wcf64], a +	ret +.done +	call NextIntroScene +	ret + +IntroScene26: ; e50bb (39:50bb) +; Load the final scene. +	call ClearBGPalettes +	call ClearSprites +	call ClearTileMap +	xor a +	ld [hBGMapMode], a +	ld a, $1 +	ld [rVBK], a +	ld hl, IntroTilemap015 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, $0 +	ld [rVBK], a +	ld hl, IntroCrystalUnownsGFX +	ld de, VTiles2 tile $00 +	call Functione54c2 +	ld hl, IntroTilemap017 +	ld de, VBGMap0 tile $00 +	call Functione54fa +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_e679d +	ld de, wMapPals +	ld bc, $80 +	call CopyBytes +	ld hl, Palette_e679d +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	pop af +	ld [rSVBK], a +	xor a +	ld [hSCX], a +	ld [hSCY], a +	ld a, $7 +	ld [hWX], a +	ld a, $90 +	ld [hWY], a +	callba Function8cf53 +	call Functione549e +	xor a +	ld [wcf64], a +	ld [wcf65], a +	call NextIntroScene +	ret + +IntroScene27: ; e512d (39:512d) +; Spell out C R Y S T A L with Unown. +	ld hl, wcf65 +	inc [hl] +	ld hl, wcf64 +	ld a, [hl] +	inc [hl] +	cp $80 +	jr nc, .done + +	ld c, a +	and $f +	ld [wcf65], a +	ld a, c +	and $70 +	swap a +	call Functione539d +	ret + +.done +	call NextIntroScene +	ld a, $80 +	ld [wcf64], a +	ret + +IntroScene28: ; e5152 (39:5152) +; Cut out when the music ends, and lead into the title screen. +	ld hl, wcf64 +	ld a, [hl] +	and a +	jr z, .done +	dec [hl] +	cp $18 +	jr z, .clear +	cp $8 +	ret nz + +	ld de, SFX_UNKNOWN_CB +	call PlaySFX +	ret + +.clear +	call ClearBGPalettes +	ret + +.done +	ld hl, wJumptableIndex +	set 7, [hl] +	ret + + +Functione5172: ; e5172 (39:5172) +	ld hl, Unknown_e519c +	add l +	ld l, a +	ld a, $0 +	adc h +	ld h, a +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld de, BGPals +	ld b, $8 +.asm_e5187 +	push hl +	ld c, $8 +.asm_e518a +	ld a, [hli] +	ld [de], a +	inc de +	dec c +	jr nz, .asm_e518a +	pop hl +	dec b +	jr nz, .asm_e5187 +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret +; e519c (39:519c) + +Unknown_e519c: ; e519c +; Fade to white. +	RGB 24, 12, 09 +	RGB 31, 31, 31 +	RGB 12, 00, 31 +	RGB 00, 00, 00 + +	RGB 31, 19, 05 +	RGB 31, 31, 31 +	RGB 15, 05, 31 +	RGB 07, 07, 07 + +	RGB 31, 21, 09 +	RGB 31, 31, 31 +	RGB 18, 09, 31 +	RGB 11, 11, 11 + +	RGB 31, 23, 13 +	RGB 31, 31, 31 +	RGB 21, 13, 31 +	RGB 15, 15, 15 + +	RGB 31, 25, 17 +	RGB 31, 31, 31 +	RGB 25, 17, 31 +	RGB 19, 19, 19 + +	RGB 31, 27, 21 +	RGB 31, 31, 31 +	RGB 27, 21, 31 +	RGB 23, 23, 23 + +	RGB 31, 29, 25 +	RGB 31, 31, 31 +	RGB 29, 26, 31 +	RGB 27, 27, 27 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +; e51dc + +Functione51dc: ; e51dc (39:51dc) +	push de +	ld a, SPRITE_ANIM_INDEX_29 +	call _InitSpriteAnimStruct +	ld hl, $c +	add hl, bc +	ld [hl], $8 +	ld a, $3c +	call Function3b3c +	pop de + +	push de +	ld a, SPRITE_ANIM_INDEX_29 +	call _InitSpriteAnimStruct +	ld hl, $c +	add hl, bc +	ld [hl], $18 +	ld a, $3b +	call Function3b3c +	pop de + +	push de +	ld a, SPRITE_ANIM_INDEX_29 +	call _InitSpriteAnimStruct +	ld hl, $c +	add hl, bc +	ld [hl], $28 +	ld a, $39 +	call Function3b3c +	pop de + +	ld a, SPRITE_ANIM_INDEX_29 +	call _InitSpriteAnimStruct +	ld hl, $c +	add hl, bc +	ld [hl], $38 +	ld a, $3a +	call Function3b3c +	ret + +Functione5223: ; e5223 (39:5223) +rept 3 +	add a +endr +	ld e, a +	ld d, $0 +	ld hl, BGPals +	add hl, de +rept 2 +	inc hl +endr +	ld a, [wcf65] +	and $3f +	cp $1f +	jr z, .asm_e523e +	jr c, .asm_e523e +	ld c, a +	ld a, $3f +	sub c +.asm_e523e +	ld c, a +	ld b, $0 +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	push hl +	push bc +	ld hl, BGPals +	ld bc, $40 +	xor a +	call ByteFill +	pop bc +	pop hl +	push hl +	ld hl, Unknown_e5288 +rept 2 +	add hl, bc +endr +	ld a, [hli] +	ld d, [hl] +	ld e, a +	pop hl +	ld a, e +	ld [hli], a +	ld a, d +	ld [hli], a +	push hl +	ld hl, Unknown_e52c8 +rept 2 +	add hl, bc +endr +	ld a, [hli] +	ld d, [hl] +	ld e, a +	pop hl +	ld a, e +	ld [hli], a +	ld a, d +	ld [hli], a +	push hl +	ld hl, Unknown_e5308 +rept 2 +	add hl, bc +endr +	ld a, [hli] +	ld d, [hl] +	ld e, a +	pop hl +	ld a, e +	ld [hli], a +	ld a, d +	ld [hli], a +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret +; e5288 (39:5288) + +Unknown_e5288: ; e5288 +; Fade between black and white. +hue = 0 +rept 32 +	RGB hue, hue, hue +hue = hue + 1 +endr +; e52c8 + +Unknown_e52c8: ; e52c8 +; Fade between black and light blue. +hue = 0 +rept 32 +	RGB 0, hue / 2, hue +hue = hue + 1 +endr +; e5308 + +Unknown_e5308: ; e5308 +; Fade between black and blue. +hue = 0 +rept 32 +	RGB 0, 0, hue +hue = hue + 1 +endr +; e5348 + +Functione5348: ; e5348 (39:5348) +	and a +	jr nz, .asm_e5350 +	ld hl, Palette_e538d +	jr .asm_e5353 +.asm_e5350 +	ld hl, Palette_e5395 +.asm_e5353 +	ld a, [wcf65] +	and $7 +rept 3 +	add a +endr +	ld c, a +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	push bc +	ld de, BGPals +	ld a, c +	add e +	ld e, a +	ld a, $0 +	adc d +	ld d, a +	ld bc, $8 +	call CopyBytes +	pop bc +	ld de, wMapPals +	ld a, c +	add e +	ld e, a +	ld a, $0 +	adc d +	ld d, a +	ld bc, $8 +	call CopyBytes +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret +; e538d (39:538d) + +Palette_e538d: ; e538d +	RGB 24, 12, 09 +	RGB 31, 31, 31 +	RGB 12, 00, 31 +	RGB 00, 00, 00 +; e5395 + +Palette_e5395: ; e5395 +	RGB 24, 12, 09 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +; e539d + +Functione539d: ; e539d (39:539d) +rept 3 +	add a +endr +	ld e, a +	ld d, $0 +	ld hl, BGPals +	add hl, de +rept 4 +	inc hl +endr +	ld a, [wcf65] +	add a +	ld c, a +	ld b, $0 +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	push hl +	ld hl, Palette_e53db +	add hl, bc +	ld a, [hli] +	ld d, [hl] +	ld e, a +	pop hl +	ld a, e +	ld [hli], a +	ld a, d +	ld [hli], a +	push hl +	ld hl, Palette_e53fb +	add hl, bc +	ld a, [hli] +	ld d, [hl] +	ld e, a +	pop hl +	ld a, e +	ld [hli], a +	ld a, d +	ld [hli], a +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret +; e53db (39:53db) + +Palette_e53db: ; e53db +hue = 31 +rept 8 +	RGB hue, hue, hue +hue = hue + -1 +	RGB hue, hue, hue +hue = hue + -2 +endr +; e53fb + +Palette_e53fb: ; e53fb +hue = 31 +rept 16 +	RGB hue, hue, hue +hue = hue + -1 +endr +; e541b + +Functione541b: ; e541b (39:541b) +	ld a, [rSVBK] +	push af +	ld a, $6 +	ld [rSVBK], a +	ld hl, w6_d000 +	decoord 0, 0 +	ld b, SCREEN_HEIGHT +.asm_e542a +	ld c, SCREEN_WIDTH +.asm_e542c +	ld a, [hli] +	ld [de], a +	inc de +	dec c +	jr nz, .asm_e542c +	ld a, $c +	add l +	ld l, a +	ld a, $0 +	adc h +	ld h, a +	dec b +	jr nz, .asm_e542a +	pop af +	ld [rSVBK], a +	ret + +Functione5441: ; e5441 (39:5441) +	ld a, [wcf64] +	and $3 +	jr z, Functione5451 +	cp $3 +	jr z, .asm_e544d +	ret +.asm_e544d +	xor a +	ld [hBGMapMode], a +	ret + +Functione5451: ; e5451 (39:5451) +	hlcoord 0, 0 +	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +.asm_e5457 +	ld a, [hl] +	and a +	jr z, .asm_e5462 +	cp $80 +	jr nc, .asm_e5462 +	xor $8 +	ld [hl], a +.asm_e5462 +	inc hl +	dec bc +	ld a, c +	or b +	jr nz, .asm_e5457 +	ld a, $1 +	ld [hBGMapMode], a +	ret + +Functione546d: ; e546d (39:546d) +	ld a, [wcf64] +	cp $24 +	ret nc +	and $c +	srl a +	ld e, a +	ld d, $0 +	ld hl, Unknown_e5496 +	add hl, de +	ld a, [hli] +	ld [Requested2bppSource], a +	ld a, [hli] +	ld [Requested2bppSource + 1], a +	ld a, (VTiles2 tile $09) % $100 +	ld [Requested2bppDest], a +	ld a, (VTiles2 tile $09) / $100 +	ld [Requested2bppDest + 1], a +	ld a, $4 +	ld [Requested2bpp], a +	ret +; e5496 (39:5496) + +Unknown_e5496: ; e5496 +	dw GFX_e799d +	dw GFX_e79dd +	dw GFX_e7a1d +	dw GFX_e79dd +; e549e + +Functione549e: ; e549e (39:549e) +	ld a, $1 +	ld [hCGBPalUpdate], a +	ret + +Functione54a3: ; e54a3 (39:54a3) +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, BGPals +	ld bc, $80 +	xor a +	call ByteFill +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	call DelayFrame +	call DelayFrame +	ret + +Functione54c2: ; e54c2 (39:54c2) +	ld a, [rSVBK] +	push af +	ld a, $6 +	ld [rSVBK], a +	push de +	ld de, w6_d000 +	call Decompress +	pop hl +	ld de, w6_d000 +	ld bc, $180 +	call Request2bpp +	pop af +	ld [rSVBK], a +	ret + +Functione54de: ; e54de (39:54de) +	ld a, [rSVBK] +	push af +	ld a, $6 +	ld [rSVBK], a +	push de +	ld de, w6_d000 +	call Decompress +	pop hl +	ld de, w6_d000 +	ld bc, $1ff +	call Request2bpp +	pop af +	ld [rSVBK], a +	ret + +Functione54fa: ; e54fa (39:54fa) +	ld a, [rSVBK] +	push af +	ld a, $6 +	ld [rSVBK], a +	push de +	ld de, w6_d000 +	call Decompress +	pop hl +	ld de, w6_d000 +	ld bc, $140 +	call Request2bpp +	pop af +	ld [rSVBK], a +	ret + +Functione5516: ; e5516 (39:5516) +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, LYOverrides +	ld bc, $90 +	xor a +	call ByteFill +	pop af +	ld [rSVBK], a +	ld a, $43 +	ld [hLCDStatCustom], a +	ret + +Functione552f: ; e552f (39:552f) +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld a, [wcf64] +	and $1 +	jr z, .asm_e5548 +	ld hl, LYOverrides +	ld a, [hl] +	inc a +	ld bc, $5f +	call ByteFill +.asm_e5548 +	ld hl, LYOverrides + $5f +	ld a, [hl] +rept 2 +	inc a +endr +	ld bc, $31 +	call ByteFill +	ld a, [LYOverrides + 0] +	ld [hSCX], a +	pop af +	ld [rSVBK], a +	ret + +IntroSuicuneRunGFX: ; e555d +INCBIN "gfx/intro/suicune_run.2bpp.lz" +; e592d + +IntroPichuWooperGFX: ; e592d +INCBIN "gfx/intro/pichu_wooper.2bpp.lz" +; e5c7d + +IntroBackgroundGFX: ; e5c7d +INCBIN "gfx/intro/background.2bpp.lz" +; e5e6d + +IntroTilemap004: ; e5e6d +INCBIN "gfx/intro/004.tilemap.lz" +; e5ecd + +IntroTilemap003: ; e5ecd +INCBIN "gfx/intro/003.tilemap.lz" +; e5edd + +Palette_e5edd: ; e5edd +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB  0,  4,  5 +	RGB  1,  8,  5 +	RGB  4, 12,  9 +	RGB 24, 12,  9 +	RGB  0,  4,  5 +	RGB  9,  6,  8 +	RGB  8, 16,  5 +	RGB  5, 10,  4 +	RGB 31, 31, 31 +	RGB  9,  6,  8 +	RGB 18,  9,  9 +	RGB 13,  8,  9 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB  2,  5, 22 +	RGB  1,  5, 12 +	RGB 31, 31, 31 +	RGB 31, 10, 25 +	RGB 31, 21,  0 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 21, 31 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 + +IntroUnownsGFX: ; e5f5d +INCBIN "gfx/intro/unowns.2bpp.lz" +; e634d + +IntroPulseGFX: ; e634d +INCBIN "gfx/intro/pulse.2bpp.lz" +; e63dd + +IntroTilemap002: ; e63dd +INCBIN "gfx/intro/002.tilemap.lz" +; e641d + +IntroTilemap001: ; e641d +INCBIN "gfx/intro/001.tilemap.lz" +; e642d + +IntroTilemap006: ; e642d +INCBIN "gfx/intro/006.tilemap.lz" +; e647d + +IntroTilemap005: ; e647d +INCBIN "gfx/intro/005.tilemap.lz" +; e649d + +IntroTilemap008: ; e649d +INCBIN "gfx/intro/008.tilemap.lz" +; e655d + +IntroTilemap007: ; e655d +INCBIN "gfx/intro/007.tilemap.lz" +; e65ad + +Palette_365ad: ; e65ad +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 10,  0, 10 +	RGB 19,  0, 19 +	RGB 31,  0, 31 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 + +IntroCrystalUnownsGFX: ; e662d +INCBIN "gfx/intro/crystal_unowns.2bpp.lz" +; e672d + +IntroTilemap017: ; e672d +INCBIN "gfx/intro/017.tilemap.lz" +; e676d + +IntroTilemap015: ; e676d +INCBIN "gfx/intro/015.tilemap.lz" +; e679d + +Palette_e679d: ; e679d +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 + +IntroSuicuneCloseGFX: ; e681d +INCBIN "gfx/intro/suicune_close.2bpp.lz" +; e6c3d + +IntroTilemap012: ; e6c3d +INCBIN "gfx/intro/012.tilemap.lz" +; e6d0d + +IntroTilemap011: ; e6d0d +INCBIN "gfx/intro/011.tilemap.lz" +; e6d6d + +Palette_e6d6d: ; e6d6d +	RGB 24, 12,  9 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 24, 12,  9 +	RGB 31, 31, 31 +	RGB  8,  9, 31 +	RGB  0,  0,  0 +	RGB 24, 12,  9 +	RGB 12, 20, 31 +	RGB 19,  8, 31 +	RGB  0,  0,  0 +	RGB 12, 20, 31 +	RGB  8,  9, 31 +	RGB 19,  8, 31 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 12, 20, 31 +	RGB  8,  9, 31 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 + +IntroSuicuneJumpGFX: ; e6ded +INCBIN "gfx/intro/suicune_jump.2bpp.lz" +; e72ad + +IntroSuicuneBackGFX: ; e72ad +INCBIN "gfx/intro/suicune_back.2bpp.lz" +; e764d + +IntroTilemap010: ; e764d +INCBIN "gfx/intro/010.tilemap.lz" +; e76ad + +IntroTilemap009: ; e76ad +INCBIN "gfx/intro/009.tilemap.lz" +; e76bd + +IntroTilemap014: ; e76bd +INCBIN "gfx/intro/014.tilemap.lz" +; e778d + +IntroTilemap013: ; e778d +INCBIN "gfx/intro/013.tilemap.lz" +; e77dd + +Palette_e77dd: ; e77dd +	RGB 24, 12,  9 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 24, 12,  9 +	RGB 31, 31, 31 +	RGB  8,  9, 31 +	RGB  0,  0,  0 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 24, 12,  9 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 12,  0, 31 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 21,  9,  0 +	RGB 21,  9,  0 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 +	RGB 31, 31, 31 +	RGB 20, 20, 20 +	RGB 11, 11, 11 +	RGB  0,  0,  0 + +IntroUnownBackGFX: ; e785d +INCBIN "gfx/intro/unown_back.2bpp.lz" +; e799d + +GFX_e799d: ; e799d +INCBIN "gfx/unknown/0e799d.2bpp" +GFX_e79dd: ; e79dd +INCBIN "gfx/unknown/0e79dd.2bpp" +GFX_e7a1d: ; e7a1d +INCBIN "gfx/unknown/0e7a1d.2bpp" + +GFX_e7a5d: ; e7a5d +INCBIN "gfx/unknown/0e7a5d.2bpp" + + diff --git a/engine/debug.asm b/engine/debug.asm new file mode 100755 index 000000000..913ea0a8d --- /dev/null +++ b/engine/debug.asm @@ -0,0 +1,1517 @@ +ColorTest: ; 818ac +; A debug menu to test monster and trainer palettes at runtime. + +	ld a, [hCGB] +	and a +	jr nz, .asm_818b5 +	ld a, [hSGB] +	and a +	ret z + +.asm_818b5 +	ld a, [hInMenu] +	push af +	ld a, $1 +	ld [hInMenu], a +	call DisableLCD +	call Function81948 +	call Function8197c +	call Function819a7 +	call Function818f4 +	call EnableLCD +	ld de, MUSIC_NONE +	call PlayMusic +	xor a +	ld [wJumptableIndex], a +	ld [wcf66], a +	ld [wd003], a +.asm_818de +	ld a, [wJumptableIndex] +	bit 7, a +	jr nz, .asm_818f0 +	call Function81a74 +	call Function81f5e +	call DelayFrame +	jr .asm_818de + +.asm_818f0 +	pop af +	ld [hInMenu], a +	ret +; 818f4 + +Function818f4: ; 818f4 +	ld a, [wd002] +	and a +	jr nz, Function81911 +	ld hl, PokemonPalettes + +Function818fd: ; 818fd +	ld de, OverworldMap +	ld c, NUM_POKEMON + 1 +.asm_81902 +	push bc +	push hl +	call Function81928 +	pop hl +	ld bc, 8 +	add hl, bc +	pop bc +	dec c +	jr nz, .asm_81902 +	ret + +Function81911: ; 81911 +	ld hl, TrainerPalettes +	ld de, OverworldMap +	ld c, NUM_TRAINER_CLASSES +.asm_81919 +	push bc +	push hl +	call Function81928 +	pop hl +	ld bc, 4 +	add hl, bc +	pop bc +	dec c +	jr nz, .asm_81919 +	ret +; 81928 + +Function81928: ; 81928 +	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) +	call GetFarByte +	ld [de], a +	inc de +	inc hl +	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) +	call GetFarByte +	ld [de], a +	inc de +	inc hl +	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) +	call GetFarByte +	ld [de], a +	inc de +	inc hl +	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes) +	call GetFarByte +	ld [de], a +	inc de +	ret +; 81948 + +Function81948: ; 81948 +	ld a, $1 +	ld [rVBK], a +	ld hl, VTiles0 +	ld bc, sScratch - VTiles0 +	xor a +	call ByteFill +	ld a, $0 +	ld [rVBK], a +	ld hl, VTiles0 +	ld bc, sScratch - VTiles0 +	xor a +	call ByteFill +	hlcoord 0, 0, AttrMap +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	xor a +	call ByteFill +	hlcoord 0, 0 +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	xor a +	call ByteFill +	call ClearSprites +	ret +; 8197c + +Function8197c: ; 8197c +	ld hl, DebugColorTestGFX + $10 +	ld de, VTiles2 tile $6a +	ld bc, $160 +	call CopyBytes +	ld hl, DebugColorTestGFX +	ld de, VTiles0 +	ld bc, $10 +	call CopyBytes +	call LoadStandardFont +	ld hl, VTiles1 +	lb bc, 8, 0 +.asm_8199d +	ld a, [hl] +	xor $ff +	ld [hli], a +	dec bc +	ld a, c +	or b +	jr nz, .asm_8199d +	ret +; 819a7 + +Function819a7: ; 819a7 +	ld a, [hCGB] +	and a +	ret z +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, Palette_819f4 +	ld de, BGPals +	ld bc, $80 +	call CopyBytes +	ld a, $80 +	ld [rBGPI], a +	ld hl, Palette_819f4 +	ld c, $40 +	xor a +.asm_819c8 +	ld [rBGPD], a +	dec c +	jr nz, .asm_819c8 +	ld a, $80 +	ld [rOBPI], a +	ld hl, Palette_81a34 +	ld c, $40 +.asm_819d6 +	ld a, [hli] +	ld [rOBPD], a +	dec c +	jr nz, .asm_819d6 +	ld a, $94 +	ld [wc608], a +	ld a, $52 +	ld [wc608 + 1], a +	ld a, $4a +	ld [wc608 + 2], a +	ld a, $29 +	ld [wc608 + 3], a +	pop af +	ld [rSVBK], a +	ret +; 819f4 + +Palette_819f4: ; 819f4 +	; white +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	; red +	RGB 31, 00, 00 +	RGB 31, 00, 00 +	RGB 31, 00, 00 +	RGB 00, 00, 00 + +	; green +	RGB 00, 31, 00 +	RGB 00, 31, 00 +	RGB 00, 31, 00 +	RGB 00, 00, 00 + +	; blue +	RGB 00, 00, 31 +	RGB 00, 00, 31 +	RGB 00, 00, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +Palette_81a34: ; 81a34 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 31, 31, 31 +	RGB 00, 00, 00 + +	; red +	RGB 31, 31, 31 +	RGB 31, 00, 00 +	RGB 31, 00, 00 +	RGB 00, 00, 00 + +	; green +	RGB 31, 31, 31 +	RGB 00, 31, 00 +	RGB 00, 31, 00 +	RGB 00, 00, 00 + +	; blue +	RGB 31, 31, 31 +	RGB 00, 00, 31 +	RGB 00, 00, 31 +	RGB 00, 00, 00 +; 81a74 + +Function81a74: ; 81a74 +	call JoyTextDelay +	ld a, [wJumptableIndex] +	cp $4 +	jr nc, .asm_81a8b +	ld hl, hJoyLast +	ld a, [hl] +	and SELECT +	jr nz, .asm_81a9a +	ld a, [hl] +	and START +	jr nz, .asm_81aab + +.asm_81a8b +	ld a, [wJumptableIndex] +	ld e, a +	ld d, 0 +	ld hl, Jumptable_81acf +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] + +.asm_81a9a +	call Function81eca +	call Function81ac3 +	ld e, a +	ld a, [wcf66] +	inc a +	cp e +	jr c, .asm_81aba +	xor a +	jr .asm_81aba + +.asm_81aab +	call Function81eca +	ld a, [wcf66] +	dec a +	cp $ff +	jr nz, .asm_81aba +	call Function81ac3 +	dec a + +.asm_81aba +	ld [wcf66], a +	ld a, $0 +	ld [wJumptableIndex], a +	ret +; 81ac3 + +Function81ac3: ; 81ac3 +; Looping back around the pic set. +	ld a, [wd002] +	and a +	jr nz, .asm_81acc +	ld a, NUM_POKEMON ; CELEBI +	ret + +.asm_81acc +	ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN +	ret +; 81acf + +Jumptable_81acf: ; 81acf +	dw Function81adb +	dw Function81c18 +	dw Function81c33 +	dw Function81cc2 +	dw Function81d8e +	dw Function81daf +; 81adb + +Function81adb: ; 81adb +	xor a +	ld [hBGMapMode], a +	hlcoord 0, 0 +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	ld a, $6f +	call ByteFill +	hlcoord 1, 3 +	lb bc, 7, 18 +	ld a, $6c +	call Bank20_FillBoxWithByte +	hlcoord 11, 0 +	lb bc, 2, 3 +	ld a, $6d +	call Bank20_FillBoxWithByte +	hlcoord 16, 0 +	lb bc, 2, 3 +	ld a, $6e +	call Bank20_FillBoxWithByte +	call Function81bc0 +	call Function81bf4 +	ld a, [wcf66] +	inc a +	ld [CurPartySpecies], a +	ld [wd265], a +	hlcoord 0, 1 +	ld de, wd265 +	lb bc, PRINTNUM_LEADINGZEROS | 1, 3 +	call PrintNum +	ld a, [wd002] +	and a +	jr nz, .asm_81b7a +	ld a, $1 +	ld [UnownLetter], a +	call GetPokemonName +	hlcoord 4, 1 +	call PlaceString +	xor a +	ld [wc2c6], a +	hlcoord 12, 3 +	call _PrepMonFrontpic +	ld de, VTiles2 tile $31 +	predef GetBackpic +	ld a, $31 +	ld [hFillBox], a +	hlcoord 2, 4 +	lb bc, 6, 6 +	predef FillBox +	ld a, [wd003] +	and a +	jr z, .asm_81b66 +	ld de, String_81baf +	jr .asm_81b69 + +.asm_81b66 +	ld de, String_81bb4 + +.asm_81b69 +	hlcoord 7, 17 +	call PlaceString +	hlcoord 0, 17 +	ld de, String_81bb9 +	call PlaceString +	jr .asm_81ba9 + +.asm_81b7a +	ld a, [wd265] +	ld [TrainerClass], a +	callab Function3957b +	ld de, StringBuffer1 +	hlcoord 4, 1 +	call PlaceString +	ld de, VTiles2 +	callab GetTrainerPic +	xor a +	ld [TempEnemyMonSpecies], a +	ld [hFillBox], a +	hlcoord 2, 3 +	lb bc, 7, 7 +	predef FillBox + +.asm_81ba9 +	ld a, $1 +	ld [wJumptableIndex], a +	ret +; 81baf + +String_81baf: db "レア", $6f, $6f, "@" ; rare (shiny) +String_81bb4: db "ノーマル@" ; normal +String_81bb9: db $7a, "きりかえ▶@" ; (A) switches +; 81bc0 + +Function81bc0: ; 81bc0 +	decoord 0, 11, AttrMap +	hlcoord 2, 11 +	ld a, $1 +	call Function81bde +	decoord 0, 13, AttrMap +	hlcoord 2, 13 +	ld a, $2 +	call Function81bde +	decoord 0, 15, AttrMap +	hlcoord 2, 15 +	ld a, $3 + +Function81bde: ; 81bde +	push af +	ld a, $6a +	ld [hli], a +	ld bc, $f +	ld a, $6b +	call ByteFill +	ld l, e +	ld h, d +	pop af +	ld bc, $28 +	call ByteFill +	ret +; 81bf4 + +Function81bf4: ; 81bf4 +	ld a, [wcf66] +	inc a +	ld l, a +	ld h, $0 +rept 2 +	add hl, hl +endr +	ld de, OverworldMap +	add hl, de +	ld de, wc608 +	ld bc, 4 +	call CopyBytes +	xor a +	ld [wcf64], a +	ld [wcf65], a +	ld de, wc608 +	call Function81ea5 +	ret +; 81c18 + +Function81c18: ; 81c18 +	ld a, [hCGB] +	and a +	jr z, .asm_81c2a +	ld a, $2 +	ld [hBGMapMode], a +	call DelayFrame +	call DelayFrame +	call DelayFrame + +.asm_81c2a +	call WaitBGMap +	ld a, $2 +	ld [wJumptableIndex], a +	ret +; 81c33 + +Function81c33: ; 81c33 +	ld a, [hCGB] +	and a +	jr z, .asm_81c69 +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, BGPals +	ld de, wc608 +	ld c, $1 +	call Function81ee3 +	hlcoord 10, 2 +	ld de, wc608 +	call Function81ca7 +	hlcoord 15, 2 +	ld de, wc608 + 2 +	call Function81ca7 +	ld a, $1 +	ld [hCGBPalUpdate], a +	ld a, $3 +	ld [wJumptableIndex], a +	pop af +	ld [rSVBK], a +	ret + +.asm_81c69 +	ld hl, wcda9 +	ld a, $1 +	ld [hli], a +	ld a, $ff +	ld [hli], a +	ld a, $7f +	ld [hli], a +	ld a, [wc608] +	ld [hli], a +	ld a, [wc608 + 1] +	ld [hli], a +	ld a, [wc608 + 2] +	ld [hli], a +	ld a, [wc608 + 3] +	ld [hli], a +	xor a +rept 2 +	ld [hli], a +endr +	ld [hl], a +	ld hl, wcda9 +	call Function81f0c +	hlcoord 10, 2 +	ld de, wc608 +	call Function81ca7 +	hlcoord 15, 2 +	ld de, wc608 + 2 +	call Function81ca7 +	ld a, $3 +	ld [wJumptableIndex], a +	ret +; 81ca7 + +Function81ca7: ; 81ca7 +rept 3 +	inc hl +endr +	ld a, [de] +	call Function81cbc +	ld a, [de] +	swap a +	call Function81cbc +	inc de +	ld a, [de] +	call Function81cbc +	ld a, [de] +	swap a + +Function81cbc: ; 81cbc +	and $f +	add $70 +	ld [hld], a +	ret +; 81cc2 + +Function81cc2: ; 81cc2 +	ld a, [hJoyLast] +	and B_BUTTON +	jr nz, .asm_81cdf +	ld a, [hJoyLast] +	and A_BUTTON +	jr nz, .asm_81ce5 +	ld a, [wcf64] +	and $3 +	ld e, a +	ld d, 0 +	ld hl, Jumptable_81d02 +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] + +.asm_81cdf +	ld a, $4 +	ld [wJumptableIndex], a +	ret + +.asm_81ce5 +	ld a, [wd002] +	and a +	ret nz +	ld a, [wd003] +	xor $4 +	ld [wd003], a +	ld c, a +	ld b, 0 +	ld hl, PokemonPalettes +	add hl, bc +	call Function818fd +	ld a, $0 +	ld [wJumptableIndex], a +	ret +; 81d02 + +Jumptable_81d02: ; 81d02 +	dw Function81d0a +	dw Function81d34 +	dw Function81d46 +	dw Function81d58 +; 81d0a + +Function81d0a: ; 81d0a +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function81d89 +	ld a, [hl] +	and D_LEFT +	jr nz, .asm_81d1d +	ld a, [hl] +	and D_RIGHT +	jr nz, .asm_81d28 +	ret + +.asm_81d1d +	xor a +	ld [wcf65], a +	ld de, wc608 +	call Function81ea5 +	ret + +.asm_81d28 +	ld a, $1 +	ld [wcf65], a +	ld de, wc608 + 2 +	call Function81ea5 +	ret + +Function81d34: ; 81d34 +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function81d89 +	ld a, [hl] +	and D_UP +	jr nz, Function81d84 +	ld hl, wc608 + 10 +	jr Function81d63 + +Function81d46: ; 81d46 +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function81d89 +	ld a, [hl] +	and D_UP +	jr nz, Function81d84 +	ld hl, wc608 + 11 +	jr Function81d63 + +Function81d58: ; 81d58 +	ld hl, hJoyLast +	ld a, [hl] +	and D_UP +	jr nz, Function81d84 +	ld hl, wc608 + 12 + +Function81d63: ; 81d63 +	ld a, [hJoyLast] +	and D_RIGHT +	jr nz, Function81d70 +	ld a, [hJoyLast] +	and D_LEFT +	jr nz, Function81d77 +	ret + +Function81d70: ; 81d70 +	ld a, [hl] +	cp $1f +	ret nc +	inc [hl] +	jr Function81d7b + +Function81d77: ; 81d77 +	ld a, [hl] +	and a +	ret z +	dec [hl] + +Function81d7b: ; 81d7b +	call Function81e67 +	ld a, $2 +	ld [wJumptableIndex], a +	ret + +Function81d84: ; 81d84 +	ld hl, wcf64 +	dec [hl] +	ret + +Function81d89: ; 81d89 +	ld hl, wcf64 +	inc [hl] +	ret +; 81d8e + +Function81d8e: ; 81d8e +	hlcoord 0, 10 +	ld bc, $a0 +	ld a, $6f +	call ByteFill +	hlcoord 2, 12 +	ld de, String_81fcd +	call PlaceString +	xor a +	ld [wd004], a +	call Function81df4 +	ld a, $5 +	ld [wJumptableIndex], a +	ret +; 81daf + +Function81daf: ; 81daf +	ld hl, hJoyPressed +	ld a, [hl] +	and B_BUTTON +	jr nz, .asm_81dbb +	call Function81dc7 +	ret + +.asm_81dbb +	ld a, $0 +	ld [wJumptableIndex], a +	ret +; 81dc1 + +Function81dc1: ; 81dc1 +	ld hl, wJumptableIndex +	set 7, [hl] +	ret +; 81dc7 + +Function81dc7: ; 81dc7 +	ld hl, hJoyLast +	ld a, [hl] +	and D_UP +	jr nz, .asm_81dd5 +	ld a, [hl] +	and D_DOWN +	jr nz, .asm_81de2 +	ret + +.asm_81dd5 +	ld a, [wd004] +	cp $3b +	jr z, .asm_81ddf +	inc a +	jr .asm_81ded + +.asm_81ddf +	xor a +	jr .asm_81ded + +.asm_81de2 +	ld a, [wd004] +	and a +	jr z, .asm_81deb +	dec a +	jr .asm_81ded + +.asm_81deb +	ld a, $3b + +.asm_81ded +	ld [wd004], a +	call Function81df4 +	ret +; 81df4 + +Function81df4: ; 81df4 +	hlcoord 10, 11 +	call Function81e5e +	hlcoord 10, 12 +	call Function81e5e +	hlcoord 10, 13 +	call Function81e5e +	hlcoord 10, 14 +	call Function81e5e +	ld a, [wd004] +	inc a +	ld [wd265], a +	predef GetTMHMMove +	ld a, [wd265] +	ld [wd262], a +	call GetMoveName +	hlcoord 10, 12 +	call PlaceString +	ld a, [wd004] +	call Function81e55 +	ld [CurItem], a +	predef CanLearnTMHMMove +	ld a, c +	and a +	ld de, String_81e46 +	jr nz, .asm_81e3f +	ld de, String_81e4d + +.asm_81e3f +	hlcoord 10, 14 +	call PlaceString +	ret +; 81e46 + +String_81e46: db "おぼえられる@" ; can be taught +String_81e4d: db "おぼえられない@" ; cannot be taught +; 81e55 + +Function81e55: ; 81e55 +	cp $32 +	jr c, .asm_81e5b +rept 2 +	inc a +endr + +.asm_81e5b +	add $bf +	ret +; 81e5e + +Function81e5e: ; 81e5e +	ld bc, $a +	ld a, $6f +	call ByteFill +	ret +; 81e67 + +Function81e67: ; 81e67 +	ld a, [wc608 + 10] +	and $1f +	ld e, a +	ld a, [wc608 + 11] +	and $7 +	sla a +	swap a +	or e +	ld e, a +	ld a, [wc608 + 11] +	and $18 +	sla a +	swap a +	ld d, a +	ld a, [wc608 + 12] +	and $1f +	sla a +	sla a +	or d +	ld d, a +	ld a, [wcf65] +	and a +	jr z, .asm_81e9c +	ld a, e +	ld [wc608 + 2], a +	ld a, d +	ld [wc608 + 3], a +	ret + +.asm_81e9c +	ld a, e +	ld [wc608], a +	ld a, d +	ld [wc608 + 1], a +	ret +; 81ea5 + +Function81ea5: ; 81ea5 +	ld a, [de] +	and $1f +	ld [wc608 + 10], a +	ld a, [de] +	and $e0 +	swap a +	srl a +	ld b, a +	inc de +	ld a, [de] +	and $3 +	swap a +	srl a +	or b +	ld [wc608 + 11], a +	ld a, [de] +	and $7c +	srl a +	srl a +	ld [wc608 + 12], a +	ret +; 81eca + +Function81eca: ; 81eca +	ld a, [wcf66] +	inc a +	ld l, a +	ld h, $0 +rept 2 +	add hl, hl +endr +	ld de, OverworldMap +	add hl, de +	ld e, l +	ld d, h +	ld hl, wc608 +	ld bc, 4 +	call CopyBytes +	ret +; 81ee3 + +Function81ee3: ; 81ee3 +.asm_81ee3 +	ld a, $ff +	ld [hli], a +	ld a, $7f +	ld [hli], a +	ld a, [de] +	inc de +	ld [hli], a +	ld a, [de] +	inc de +	ld [hli], a +	ld a, [de] +	inc de +	ld [hli], a +	ld a, [de] +	inc de +	ld [hli], a +	xor a +rept 2 +	ld [hli], a +endr +	dec c +	jr nz, .asm_81ee3 +	ret +; 81efc + +Bank20_FillBoxWithByte: ; 81efc +; For some reason, we have another copy of FillBoxWithByte here +.row +	push bc +	push hl +.col +	ld [hli], a +	dec c +	jr nz, .col +	pop hl +	ld bc, SCREEN_WIDTH +	add hl, bc +	pop bc +	dec b +	jr nz, .row +	ret +; 81f0c + +Function81f0c: ; 81f0c +	ld a, [wcfbe] +	push af +	set 7, a +	ld [wcfbe], a +	call Function81f1d +	pop af +	ld [wcfbe], a +	ret +; 81f1d + +Function81f1d: ; 81f1d +	ld a, [hl] +	and $7 +	ret z +	ld b, a +.asm_81f22 +	push bc +	xor a +	ld [rJOYP], a +	ld a, $30 +	ld [rJOYP], a +	ld b, $10 +.asm_81f2c +	ld e, $8 +	ld a, [hli] +	ld d, a +.asm_81f30 +	bit 0, d +	ld a, $10 +	jr nz, .asm_81f38 +	ld a, $20 + +.asm_81f38 +	ld [rJOYP], a +	ld a, $30 +	ld [rJOYP], a +	rr d +	dec e +	jr nz, .asm_81f30 +	dec b +	jr nz, .asm_81f2c +	ld a, $20 +	ld [rJOYP], a +	ld a, $30 +	ld [rJOYP], a +	ld de, 7000 +.asm_81f51 +	nop +	nop +	nop +	dec de +	ld a, d +	or e +	jr nz, .asm_81f51 +	pop bc +	dec b +	jr nz, .asm_81f22 +	ret +; 81f5e + +Function81f5e: ; 81f5e +	ld a, $6f +	hlcoord 10, 0 +	ld [hl], a +	hlcoord 15, 0 +	ld [hl], a +	hlcoord 1, 11 +	ld [hl], a +	hlcoord 1, 13 +	ld [hl], a +	hlcoord 1, 15 +	ld [hl], a +	ld a, [wJumptableIndex] +	cp $3 +	jr nz, .asm_81fc9 +	ld a, [wcf64] +	and a +	jr z, .asm_81f8d +	dec a +	hlcoord 1, 11 +	ld bc, 2 * SCREEN_WIDTH +	call AddNTimes +	ld [hl], $ed + +.asm_81f8d +	ld a, [wcf65] +	and a +	jr z, .asm_81f98 +	hlcoord 15, 0 +	jr .asm_81f9b + +.asm_81f98 +	hlcoord 10, 0 + +.asm_81f9b +	ld [hl], $ed +	ld b, $70 +	ld c, $5 +	ld hl, Sprites +	ld de, wc608 + 10 +	call .asm_81fb7 +	ld de, wc608 + 11 +	call .asm_81fb7 +	ld de, wc608 + 12 +	call .asm_81fb7 +	ret + +.asm_81fb7 +	ld a, b +	ld [hli], a +	ld a, [de] +rept 2 +	add a +endr +	add $18 +	ld [hli], a +	xor a +	ld [hli], a +	ld a, c +	ld [hli], a +	ld a, $10 +	add b +	ld b, a +	inc c +	ret + +.asm_81fc9 +	call ClearSprites +	ret +; 81fcd + +String_81fcd: ; 81fcd +	db   "おわりますか?" ; Are you finished? +	next "はい", $f2, $f2, $f2, $7a ; YES (A) +	next "いいえ",    $f2, $f2, $7b ; NO  (B) +	db   "@" +; 81fe3 + +DebugColorTestGFX: +INCBIN "gfx/debug/color_test.2bpp" + + +TilesetColorTest: +	ret +	xor a +	ld [wJumptableIndex], a +	ld [wcf64], a +	ld [wcf65], a +	ld [wcf66], a +	ld [hMapAnims], a +	call ClearSprites +	call OverworldTextModeSwitch +	call Function3200 +	xor a +	ld [hBGMapMode], a +	ld de, DebugColorTestGFX + $10 +	ld hl, VTiles2 tile $6a +	lb bc, BANK(DebugColorTestGFX), $16 +	call Request2bpp +	ld de, DebugColorTestGFX +	ld hl, VTiles1 +	lb bc, BANK(DebugColorTestGFX), 1 +	call Request2bpp +	ld a, VBGMap1 / $100 +	ld [hBGMapAddress + 1], a +	hlcoord 0, 0 +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	ld a, $6f +	call ByteFill +	hlcoord 0, 0, AttrMap +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	ld a, $7 +	call ByteFill +	ld de, $15 +	ld a, $6c +	call Function821d2 +	ld de, $1a +	ld a, $6d +	call Function821d2 +	ld de, $1f +	ld a, $6e +	call Function821d2 +	ld de, $24 +	ld a, $6f +	call Function821d2 +	call Function821f4 +	call Function8220f +	call Function3200 +	ld [wJumptableIndex], a +	ld a, $40 +	ld [hWY], a +	ret +; 821d2 + +Function821d2: ; 821d2 +	hlcoord 0, 0 +	call Function821de + +Function821d8: ; 821d8 +	ld a, [wcf64] +	hlcoord 0, 0, AttrMap + +Function821de: ; 821de +	add hl, de +rept 4 +	ld [hli], a +endr +	ld bc, $10 +	add hl, bc +rept 4 +	ld [hli], a +endr +	ld bc, $10 +	add hl, bc +rept 4 +	ld [hli], a +endr +	ret +; 821f4 + +Function821f4: ; 821f4 +	hlcoord 2, 4 +	call Function82203 +	hlcoord 2, 6 +	call Function82203 +	hlcoord 2, 8 + +Function82203: ; 82203 +	ld a, $6a +	ld [hli], a +	ld bc, $10 - 1 +	ld a, $6b +	call ByteFill +	ret +; 8220f + +Function8220f: ; 8220f +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld a, [wcf64] +	ld l, a +	ld h, $0 +rept 3 +	add hl, hl +endr +	ld de, wMapPals +	add hl, de +	ld de, wc608 +	ld bc, 8 +	call CopyBytes +	ld de, wc608 +	call Function81ea5 +	pop af +	ld [rSVBK], a +	ret +; 82236 + + +Function82236: ; 82236 +	ld hl, hJoyLast +	ld a, [hl] +	and SELECT +	jr nz, .loop7 +	ld a, [hl] +	and B_BUTTON +	jr nz, .asm_82299 +	call Function822f0 +	ret + +.loop7 +	ld hl, wcf64 +	ld a, [hl] +	inc a +	and $7 +	cp $7 +	jr nz, .asm_82253 +	xor a + +.asm_82253 +	ld [hl], a +	ld de, $15 +	call Function821d8 +	ld de, $1a +	call Function821d8 +	ld de, $1f +	call Function821d8 +	ld de, $24 +	call Function821d8 +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, BGPals +	ld a, [wcf64] +	ld bc, 8 +	call AddNTimes +	ld de, wc608 +	ld bc, 8 +	call CopyBytes +	pop af +	ld [rSVBK], a +	ld a, $2 +	ld [hBGMapMode], a +	ld c, 3 +	call DelayFrames +	ld a, $1 +	ld [hBGMapMode], a +	ret + +.asm_82299 +	call ClearSprites +	ld a, [hWY] +	xor $d0 +	ld [hWY], a +	ret +; 822a3 + +Function822a3: ; 822a3 +	ld a, [rSVBK] +	push af +	ld a, $5 +	ld [rSVBK], a +	ld hl, BGPals +	ld a, [wcf64] +	ld bc, 8 +	call AddNTimes +	ld e, l +	ld d, h +	ld hl, wc608 +	ld bc, 8 +	call CopyBytes +	hlcoord 1, 0 +	ld de, wc608 +	call Function81ca7 +	hlcoord 6, 0 +	ld de, wc608 + 2 +	call Function81ca7 +	hlcoord 11, 0 +	ld de, wc608 + 4 +	call Function81ca7 +	hlcoord 16, 0 +	ld de, wc608 + 6 +	call Function81ca7 +	pop af +	ld [rSVBK], a +	ld a, $1 +	ld [hCGBPalUpdate], a +	call DelayFrame +	ret +; 822f0 + +Function822f0: ; 822f0 +	ld a, [wcf65] +	and 3 +	ld e, a +	ld d, 0 +	ld hl, .jumptable +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; 82301 + +.jumptable: ; 82301 +	dw Function82309 +	dw Function82339 +	dw Function8234b +	dw Function8235d +; 82309 + +Function82309: ; 82309 +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function8238c +	ld a, [hl] +	and D_LEFT +	jr nz, .asm_8231c +	ld a, [hl] +	and D_RIGHT +	jr nz, .asm_82322 +	ret + +.asm_8231c +	ld a, [wcf66] +	dec a +	jr .asm_82326 + +.asm_82322 +	ld a, [wcf66] +	inc a + +.asm_82326 +	and $3 +	ld [wcf66], a +	ld e, a +	ld d, $0 +	ld hl, wc608 +rept 2 +	add hl, de +endr +	ld e, l +	ld d, h +	call Function81ea5 +	ret + +Function82339: ; 82338 +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function8238c +	ld a, [hl] +	and D_UP +	jr nz, Function82387 +	ld hl, wc608 + 10 +	jr Function82368 + +Function8234b: ; 8234b +	ld hl, hJoyLast +	ld a, [hl] +	and D_DOWN +	jr nz, Function8238c +	ld a, [hl] +	and D_UP +	jr nz, Function82387 +	ld hl, wc608 + 11 +	jr Function82368 + +Function8235d: ; 8235d +	ld hl, hJoyLast +	ld a, [hl] +	and D_UP +	jr nz, Function82387 +	ld hl, wc608 + 12 + +Function82368: ; 82368 +	ld a, [hJoyLast] +	and D_RIGHT +	jr nz, .asm_82375 +	ld a, [hJoyLast] +	and D_LEFT +	jr nz, .asm_8237c +	ret + +.asm_82375 +	ld a, [hl] +	cp $1f +	ret nc +	inc [hl] +	jr .asm_82380 + +.asm_8237c +	ld a, [hl] +	and a +	ret z +	dec [hl] + +.asm_82380 +	call Function82391 +	call Function822a3 +	ret + +Function82387: ; 82387 +	ld hl, wcf65 +	dec [hl] +	ret + +Function8238c: ; 8238c +	ld hl, wcf65 +	inc [hl] +	ret +; 82391 + +Function82391: ; 82391 +	ld a, [wc608 + 10] +	and $1f +	ld e, a +	ld a, [wc608 + 11] +	and $7 +	sla a +	swap a +	or e +	ld e, a +	ld a, [wc608 + 11] +	and $18 +	sla a +	swap a +	ld d, a +	ld a, [wc608 + 12] +	and $1f +	sla a +	sla a +	or d +	ld d, a +	ld a, [wcf66] +	ld c, a +	ld b, $0 +	ld hl, wc608 +rept 2 +	add hl, bc +endr +	ld a, e +	ld [hli], a +	ld [hl], d +	ret +; 823c6 + +Function823c6: ; 823c6 +	ret + +Function823c7: ; 823c7 +	ret +; 823c8 diff --git a/engine/engine_flags.asm b/engine/engine_flags.asm index 49a7d82e1..74113b4a5 100644 --- a/engine/engine_flags.asm +++ b/engine/engine_flags.asm @@ -1,3 +1,90 @@ +EngineFlagAction:: ; 80430 +; Do action b on engine flag de +; +;   b = 0: reset flag +;     = 1: set flag +;     > 1: check flag, result in c +; +; Setting/resetting does not return a result. + + +; 16-bit flag ids are considered invalid, but it's nice +; to know that the infrastructure is there. + +	ld a, d +	cp 0 +	jr z, .ceiling +	jr c, .read ; cp 0 can't set carry! +	jr .invalid + +; There are only $a2 engine flags, so +; anything beyond that is invalid too. + +.ceiling +	ld a, e +	cp NUM_ENGINE_FLAGS +	jr c, .read + +; Invalid flags are treated as flag 00. + +.invalid +	xor a +	ld e, a +	ld d, a + +; Get this flag's location. + +.read +	ld hl, EngineFlags +; location +rept 2 +	add hl, de +endr +; bit +	add hl, de + +; location +	ld e, [hl] +	inc hl +	ld d, [hl] +	inc hl +; bit +	ld c, [hl] + +; What are we doing with this flag? + +	ld a, b +	cp 1 +	jr c, .reset ; b = 0 +	jr z, .set   ; b = 1 + +; Return the given flag in c. +.check +	ld a, [de] +	and c +	ld c, a +	ret + +; Set the given flag. +.set +	ld a, [de] +	or c +	ld [de], a +	ret + +; Reset the given flag. +.reset +	ld a, c +	cpl ; AND all bits except the one in question +	ld c, a +	ld a, [de] +	and c +	ld [de], a +	ret +; 80462 + + +EngineFlags: ; 80462  ; All locations are in WRAM bank 1.  engine_flag: MACRO  	dwb \1, 1 << \2 diff --git a/engine/npctrade.asm b/engine/npctrade.asm new file mode 100755 index 000000000..97109cdd4 --- /dev/null +++ b/engine/npctrade.asm @@ -0,0 +1,620 @@ + +; Trade struct +TRADE_DIALOG  EQU 0 +TRADE_GIVEMON EQU 1 +TRADE_GETMON  EQU 2 +TRADE_NICK    EQU 3 +TRADE_DVS     EQU 14 +TRADE_ITEM    EQU 16 +TRADE_OT_ID   EQU 17 +TRADE_OT_NAME EQU 19 +TRADE_GENDER  EQU 30 +TRADE_PADDING EQU 31 + +; Trade dialogs +TRADE_INTRO    EQU 0 +TRADE_CANCEL   EQU 1 +TRADE_WRONG    EQU 2 +TRADE_COMPLETE EQU 3 +TRADE_AFTER    EQU 4 + +NPCTrade:: ; fcba8 +	ld a, e +	ld [wJumptableIndex], a +	call Functionfcc59 +	ld b, CHECK_FLAG +	call TradeFlagAction +	ld a, TRADE_AFTER +	jr nz, .done + +	ld a, TRADE_INTRO +	call PrintTradeText + +	call YesNoBox +	ld a, TRADE_CANCEL +	jr c, .done + +; Select givemon from party +	ld b, 6 +	callba Function5001d +	ld a, TRADE_CANCEL +	jr c, .done + +	ld e, TRADE_GIVEMON +	call GetTradeAttribute +	ld a, [CurPartySpecies] +	cp [hl] +	ld a, TRADE_WRONG +	jr nz, .done + +	call CheckTradeGender +	ld a, TRADE_WRONG +	jr c, .done + +	ld b, SET_FLAG +	call TradeFlagAction + +	ld hl, ConnectLinkCableText +	call PrintText + +	call Functionfcc63 +	call Functionfcc07 +	call GetTradeMonNames + +	ld hl, TradedForText +	call PrintText + +	call RestartMapMusic + +	ld a, TRADE_COMPLETE + +.done +	call PrintTradeText +	ret +; fcc07 + +Functionfcc07: ; fcc07 +	call DisableSpriteUpdates +	ld a, [wJumptableIndex] +	push af +	ld a, [wcf64] +	push af +	predef Function28f24 +	pop af +	ld [wcf64], a +	pop af +	ld [wJumptableIndex], a +	call Function2b74 +	ret +; fcc23 + +CheckTradeGender: ; fcc23 +	xor a +	ld [MonType], a + +	ld e, TRADE_GENDER +	call GetTradeAttribute +	ld a, [hl] +	and a +	jr z, .asm_fcc46 +	cp 1 +	jr z, .asm_fcc3e + +	callba GetGender +	jr nz, .asm_fcc48 +	jr .asm_fcc46 + +.asm_fcc3e +	callba GetGender +	jr z, .asm_fcc48 + +.asm_fcc46 +	and a +	ret + +.asm_fcc48 +	scf +	ret +; fcc4a + +TradeFlagAction: ; fcc4a +	ld hl, wd960 +	ld a, [wJumptableIndex] +	ld c, a +	predef FlagPredef +	ld a, c +	and a +	ret +; fcc59 + +Functionfcc59: ; fcc59 +	ld e, TRADE_DIALOG +	call GetTradeAttribute +	ld a, [hl] +	ld [wcf64], a +	ret +; fcc63 + +Functionfcc63: ; fcc63 +	ld e, TRADE_GIVEMON +	call GetTradeAttribute +	ld a, [hl] +	ld [wc6d0], a + +	ld e, TRADE_GETMON +	call GetTradeAttribute +	ld a, [hl] +	ld [wc702], a + +	ld a, [wc6d0] +	ld de, wc6d1 +	call Functionfcde8 +	call Functionfcdf4 + +	ld a, [wc702] +	ld de, wc703 +	call Functionfcde8 +	call Functionfcdf4 + +	ld hl, PartyMonOT +	ld bc, NAME_LENGTH +	call Functionfcdd7 +	ld de, wc6f2 +	call Functionfcdf4 + +	ld hl, PlayerName +	ld de, wc6e7 +	call Functionfcdf4 + +	ld hl, PartyMon1ID +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdd7 +	ld de, wc6ff +	call Functionfce0f + +	ld hl, PartyMon1DVs +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdd7 +	ld de, wc6fd +	call Functionfce0f + +	ld hl, PartyMon1Species +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdd7 +	ld b, h +	ld c, l +	callba GetCaughtGender +	ld a, c +	ld [wc701], a + +	ld e, TRADE_DIALOG +	call GetTradeAttribute +	ld a, [hl] +	cp TRADE_COMPLETE +	ld a, 1 +	jr c, .asm_fcce6 +	ld a, 2 +.asm_fcce6 +	ld [wEnemyCharging], a + +	ld hl, PartyMon1Level +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdd7 +	ld a, [hl] +	ld [CurPartyLevel], a +	ld a, [wc702] +	ld [CurPartySpecies], a +	xor a +	ld [MonType], a +	ld [wPokemonWithdrawDepositParameter], a +	callab Functione039 +	predef TryAddMonToParty + +	ld e, TRADE_DIALOG +	call GetTradeAttribute +	ld a, [hl] +	cp TRADE_COMPLETE +	ld b, 0 +	jr c, .asm_fcd1c +	ld b, 1 +.asm_fcd1c +	callba SetGiftPartyMonCaughtData + +	ld e, TRADE_NICK +	call GetTradeAttribute +	ld de, wc70e +	call Functionfcdf4 + +	ld hl, PartyMonNicknames +	ld bc, PKMN_NAME_LENGTH +	call Functionfcdde +	ld hl, wc70e +	call Functionfcdf4 + +	ld e, TRADE_OT_NAME +	call GetTradeAttribute +	push hl +	ld de, wc724 +	call Functionfcdf4 +	pop hl +	ld de, wc719 +	call Functionfcdf4 + +	ld hl, PartyMonOT +	ld bc, NAME_LENGTH +	call Functionfcdde +	ld hl, wc724 +	call Functionfcdf4 + +	ld e, TRADE_DVS +	call GetTradeAttribute +	ld de, wEnemyTrappingMove +	call Functionfce0f + +	ld hl, PartyMon1DVs +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdde +	ld hl, wEnemyTrappingMove +	call Functionfce0f + +	ld e, TRADE_OT_ID +	call GetTradeAttribute +	ld de, wPlayerCharging +	call Functionfce15 + +	ld hl, PartyMon1ID +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdde +	ld hl, wEnemyWrapCount +	call Functionfce0f + +	ld e, TRADE_ITEM +	call GetTradeAttribute +	push hl +	ld hl, PartyMon1Item +	ld bc, PARTYMON_STRUCT_LENGTH +	call Functionfcdde +	pop hl +	ld a, [hl] +	ld [de], a + +	push af +	push bc +	push de +	push hl +	ld a, [CurPartyMon] +	push af +	ld a, [PartyCount] +	dec a +	ld [CurPartyMon], a +	callba Functione134 +	pop af +	ld [CurPartyMon], a +	pop hl +	pop de +	pop bc +	pop af +	ret +; fcdc2 + + +GetTradeAttribute: ; 0xfcdc2 +	ld d, 0 +	push de +	ld a, [wJumptableIndex] +	and $f +	swap a +	ld e, a +	ld d, 0 +	ld hl, NPCTrades +rept 2 +	add hl, de +endr +	pop de +	add hl, de +	ret +; 0xfcdd7 + +Functionfcdd7: ; fcdd7 +	ld a, [CurPartyMon] +	call AddNTimes +	ret +; fcdde + +Functionfcdde: ; fcdde +	ld a, [PartyCount] +	dec a +	call AddNTimes +	ld e, l +	ld d, h +	ret +; fcde8 + +Functionfcde8: ; fcde8 +	push de +	ld [wd265], a +	call GetBasePokemonName +	ld hl, StringBuffer1 +	pop de +	ret +; fcdf4 + +Functionfcdf4: ; fcdf4 +	ld bc, NAME_LENGTH +	call CopyBytes +	ret +; fcdfb + +Functionfcdfb: ; fcdfb +	ld bc, 4 +	call CopyBytes +	ld a, $50 +	ld [de], a +	ret +; fce05 + +Functionfce05: ; fce05 +	ld bc, 3 +	call CopyBytes +	ld a, $50 +	ld [de], a +	ret +; fce0f + +Functionfce0f: ; fce0f +	ld a, [hli] +	ld [de], a +	inc de +	ld a, [hl] +	ld [de], a +	ret +; fce15 + +Functionfce15: ; fce15 +	ld a, [hli] +	ld [de], a +	dec de +	ld a, [hl] +	ld [de], a +	ret +; fce1b + +GetTradeMonNames: ; fce1b +	ld e, TRADE_GETMON +	call GetTradeAttribute +	ld a, [hl] +	call Functionfcde8 + +	ld de, StringBuffer2 +	call Functionfcdf4 + +	ld e, TRADE_GIVEMON +	call GetTradeAttribute +	ld a, [hl] +	call Functionfcde8 + +	ld de, wd050 +	call Functionfcdf4 + +	ld hl, StringBuffer1 +.loop +	ld a, [hli] +	cp "@" +	jr nz, .loop + +	dec hl +	push hl +	ld e, TRADE_GENDER +	call GetTradeAttribute +	ld a, [hl] +	pop hl +	and a +	ret z + +	cp 1 +	ld a, "♂" +	jr z, .done +	ld a, "♀" +.done +	ld [hli], a +	ld [hl], "@" +	ret +; fce58 + + +NPCTrades: ; fce58 +	db 0, ABRA,       MACHOP,     "MUSCLE@@@@@", $37, $66, GOLD_BERRY,   $54, $92, "MIKE@@@@@@@", 0, 0 +	db 0, BELLSPROUT, ONIX,       "ROCKY@@@@@@", $96, $66, BITTER_BERRY, $1e, $bf, "KYLE@@@@@@@", 0, 0 +	db 1, KRABBY,     VOLTORB,    "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, $05, $72, "TIM@@@@@@@@", 0, 0 +	db 3, DRAGONAIR,  DODRIO,     "DORIS@@@@@@", $77, $66, SMOKE_BALL,   $1b, $01, "EMY@@@@@@@@", 2, 0 +	db 2, HAUNTER,    XATU,       "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, $00, $3d, "CHRIS@@@@@@", 0, 0 +	db 3, CHANSEY,    AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY,   $7b, $67, "KIM@@@@@@@@", 0, 0 +	db 0, DUGTRIO,    MAGNETON,   "MAGGIE@@@@@", $96, $66, METAL_COAT,   $a2, $c3, "FOREST@@@@@", 0, 0 +; fcf38 + + +PrintTradeText: ; fcf38 +	push af +	call GetTradeMonNames +	pop af +	ld bc, 2 * 4 +	ld hl, TradeTexts +	call AddNTimes +	ld a, [wcf64] +	ld c, a +rept 2 +	add hl, bc +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	call PrintText +	ret +; fcf53 + +TradeTexts: ; fcf53 +; intro +	dw TradeIntroText1 +	dw TradeIntroText2 +	dw TradeIntroText3 +	dw TradeIntroText4 + +; cancel +	dw TradeCancelText1 +	dw TradeCancelText2 +	dw TradeCancelText3 +	dw TradeCancelText4 + +; wrong mon +	dw TradeWrongText1 +	dw TradeWrongText2 +	dw TradeWrongText3 +	dw TradeWrongText4 + +; completed +	dw TradeCompleteText1 +	dw TradeCompleteText2 +	dw TradeCompleteText3 +	dw TradeCompleteText4 + +; after +	dw TradeAfterText1 +	dw TradeAfterText2 +	dw TradeAfterText3 +	dw TradeAfterText4 +; fcf7b + + +ConnectLinkCableText: ; 0xfcf7b +	; OK, connect the Game Link Cable. +	text_jump UnknownText_0x1bd407 +	db "@" +; 0xfcf80 + + +TradedForText: ; 0xfcf80 +	; traded givemon for getmon +	text_jump UnknownText_0x1bd429 +	start_asm + +	ld de, MUSIC_NONE +	call PlayMusic +	call DelayFrame +	ld hl, .done +	ret + +.done +	; sound0x0A +	; interpret_data +	text_jump UnknownText_0x1bd445 +	db "@" +; 0xfcf97 + + +TradeIntroText1: ; 0xfcf97 +	; I collect #MON. Do you have @ ? Want to trade it for my @ ? +	text_jump UnknownText_0x1bd449 +	db "@" +; 0xfcf9c + +TradeCancelText1: ; 0xfcf9c +	; You don't want to trade? Aww… +	text_jump UnknownText_0x1bd48c +	db "@" +; 0xfcfa1 + +TradeWrongText1: ; 0xfcfa1 +	; Huh? That's not @ .  What a letdown… +	text_jump UnknownText_0x1bd4aa +	db "@" +; 0xfcfa6 + +TradeCompleteText1: ; 0xfcfa6 +	; Yay! I got myself @ ! Thanks! +	text_jump UnknownText_0x1bd4d2 +	db "@" +; 0xfcfab + +TradeAfterText1: ; 0xfcfab +	; Hi, how's my old @  doing? +	text_jump UnknownText_0x1bd4f4 +	db "@" +; 0xfcfb0 + + +TradeIntroText2: +TradeIntroText3: ; 0xfcfb0 +	; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ? +	text_jump UnknownText_0x1bd512 +	db "@" +; 0xfcfb5 + +TradeCancelText2: +TradeCancelText3: ; 0xfcfb5 +	; You don't have one either? Gee, that's really disappointing… +	text_jump UnknownText_0x1bd565 +	db "@" +; 0xfcfba + +TradeWrongText2: +TradeWrongText3: ; 0xfcfba +	; You don't have @ ? That's too bad, then. +	text_jump UnknownText_0x1bd5a1 +	db "@" +; 0xfcfbf + +TradeCompleteText2: ; 0xfcfbf +	; Great! Thank you! I finally got @ . +	text_jump UnknownText_0x1bd5cc +	db "@" +; 0xfcfc4 + +TradeAfterText2: ; 0xfcfc4 +	; Hi! The @ you traded me is doing great! +	text_jump UnknownText_0x1bd5f4 +	db "@" +; 0xfcfc9 + + +TradeIntroText4: ; 0xfcfc9 +	; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ? +	text_jump UnknownText_0x1bd621 +	db "@" +; 0xfcfce + +TradeCancelText4: ; 0xfcfce +	; You don't want to trade? Oh, darn… +	text_jump UnknownText_0x1bd673 +	db "@" +; 0xfcfd3 + +TradeWrongText4: ; 0xfcfd3 +	; That's not @ . Please trade with me if you get one. +	text_jump UnknownText_0x1bd696 +	db "@" +; 0xfcfd8 + +TradeCompleteText4: ; 0xfcfd8 +	; Wow! Thank you! I always wanted @ ! +	text_jump UnknownText_0x1bd6cd +	db "@" +; 0xfcfdd + +TradeAfterText4: ; 0xfcfdd +	; How is that @  I traded you doing? Your @ 's so cute! +	text_jump UnknownText_0x1bd6f5 +	db "@" +; 0xfcfe2 + + +TradeCompleteText3: ; 0xfcfe2 +	; Uh? What happened? +	text_jump UnknownText_0x1bd731 +	db "@" +; 0xfcfe7 + +TradeAfterText3: ; 0xfcfe7 +	; Trading is so odd… I still have a lot to learn about it. +	text_jump UnknownText_0x1bd745 +	db "@" +; 0xfcfec diff --git a/engine/party_menu.asm b/engine/party_menu.asm index e81355c7a..356b07f8e 100644 --- a/engine/party_menu.asm +++ b/engine/party_menu.asm @@ -41,7 +41,7 @@ Function5003f: ; 5003f  LoadPartyMenuGFX: ; 5004f  	call LoadFontsBattleExtra  	callab Function8ad1 ; engine/color.asm -	callab InefficientlyClear121BytesAtwc300 +	callab ClearSpriteAnims  	ret  ; 5005f diff --git a/engine/printer.asm b/engine/printer.asm new file mode 100755 index 000000000..9c18d42fe --- /dev/null +++ b/engine/printer.asm @@ -0,0 +1,1493 @@ +Function84000: ; 84000 +	ld hl, OverworldMap +	lb bc, 4, 12 +	xor a +	call Function842ab +	xor a +	ld [rSB], a +	ld [rSC], a +	ld [wc2d5], a +	ld hl, wc2d4 +	set 0, [hl] +	ld a, [GBPrinter] +	ld [wcbfb], a +	xor a +	ld [wJumptableIndex], a +	ret +; 84022 + +Function84022: ; 84022 +	ld a, [wJumptableIndex] +	ld e, a +	ld d, 0 +	ld hl, Jumptable_84031 +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; 84031 + + +Jumptable_84031: ; 84031 (21:4031) +	dw Function84077 +	dw Function84143 +	dw Function84120 +	dw Function84099 +	dw Function84180 +	dw Function8412e +	dw Function840c5 +	dw Function84180 +	dw Function84120 +	dw Function840de +	dw Function84180 +	dw Function84120 +	dw Function841a1 +	dw Function84063 +	dw Function8406d +	dw Function84120 +	dw Function84103 +	dw Function84071 +	dw Function841b0 +	dw Function841b3 + + +Function84059: ; 84059 (21:4059) +	ld hl, wJumptableIndex +	inc [hl] +	ret + +Function8405e: ; 8405e (21:405e) +	ld hl, wJumptableIndex +	dec [hl] +	ret + +Function84063: ; 84063 (21:4063) +	xor a +	ld [wca89], a +	ld hl, wJumptableIndex +	set 7, [hl] +	ret + +Function8406d: ; 8406d (21:406d) +	call Function84059 +	ret + +Function84071: ; 84071 (21:4071) +	ld a, $1 +	ld [wJumptableIndex], a +	ret + +Function84077: ; 84077 (21:4077) +	call Function841fb +	ld hl, Unknown_842b7 +	call Function841e2 +	xor a +	ld [wca8e], a +	ld [wca8f], a +	ld a, [wcf65] +	ld [wca81], a +	call Function84059 +	call Function841c3 +	ld a, $1 +	ld [wcbf8], a +	ret + +Function84099: ; 84099 (21:4099) +	call Function841fb +	ld hl, wca81 +	ld a, [hl] +	and a +	jr z, Function840c5 +	ld hl, Unknown_842c3 +	call Function841e2 +	call Function84260 +	ld a, $80 +	ld [wca8e], a +	ld a, $2 +	ld [wca8f], a +	call Function84219 +	call Function84059 +	call Function841c3 +	ld a, $2 +	ld [wcbf8], a +	ret + +Function840c5: ; 840c5 (21:40c5) +	ld a, $6 +	ld [wJumptableIndex], a +	ld hl, Unknown_842c9 +	call Function841e2 +	xor a +	ld [wca8e], a +	ld [wca8f], a +	call Function84059 +	call Function841c3 +	ret + +Function840de: ; 840de (21:40de) +	call Function841fb +	ld hl, Unknown_842bd +	call Function841e2 +	call Function84249 +	ld a, $4 +	ld [wca8e], a +	ld a, $0 +	ld [wca8f], a +	call Function84219 +	call Function84059 +	call Function841c3 +	ld a, $3 +	ld [wcbf8], a +	ret + +Function84103: ; 84103 (21:4103) +	call Function841fb +	ld hl, Unknown_842b7 +	call Function841e2 +	xor a +	ld [wca8e], a +	ld [wca8f], a +	ld a, [wcf65] +	ld [wca81], a +	call Function84059 +	call Function841c3 +	ret + +Function84120: ; 84120 (21:4120) +	ld hl, wca8b +	inc [hl] +	ld a, [hl] +	cp $6 +	ret c +	xor a +	ld [hl], a +	call Function84059 +	ret + +Function8412e: ; 8412e (21:412e) +	ld hl, wca8b +	inc [hl] +	ld a, [hl] +	cp $6 +	ret c +	xor a +	ld [hl], a +	ld hl, wca81 +	dec [hl] +	call Function8405e +	call Function8405e +	ret + +Function84143: ; 84143 (21:4143) +	ld a, [wc2d5] +	and a +	ret nz +	ld a, [wca88] +	cp $ff +	jr nz, .printer_connected +	ld a, [wca89] +	cp $ff +	jr z, .printer_error + +.printer_connected +	ld a, [wca88] +	cp $81 +	jr nz, .printer_error +	ld a, [wca89] +	cp $0 +	jr nz, .printer_error +	ld hl, wc2d4 +	set 1, [hl] +	ld a, $5 +	ld [wca8a], a +	call Function84059 +	ret + +.printer_error +	ld a, $ff +	ld [wca88], a +	ld [wca89], a +	ld a, $e +	ld [wJumptableIndex], a +	ret + +Function84180: ; 84180 (21:4180) +	ld a, [wc2d5] +	and a +	ret nz +	ld a, [wca89] +	and $f0 +	jr nz, .asm_8419b +	ld a, [wca89] +	and $1 +	jr nz, .asm_84197 +	call Function84059 +	ret +.asm_84197 +	call Function8405e +	ret +.asm_8419b +	ld a, $12 +	ld [wJumptableIndex], a +	ret + +Function841a1: ; 841a1 (21:41a1) +	ld a, [wc2d5] +	and a +	ret nz +	ld a, [wca89] +	and $f3 +	ret nz +	call Function84059 +	ret + +Function841b0: ; 841b0 (21:41b0) +	call Function84059 + +Function841b3: ; 841b3 (21:41b3) +	ld a, [wc2d5] +	and a +	ret nz +	ld a, [wca89] +	and $f0 +	ret nz +	xor a +	ld [wJumptableIndex], a +	ret + +Function841c3: ; 841c3 (21:41c3) +	ld a, [wc2d5] +	and a +	jr nz, Function841c3 +	xor a +	ld [wca8c], a +	ld [wca8d], a +	ld a, $1 +	ld [wc2d5], a +	ld a, $88 +	ld [rSB], a +	ld a, $1 +	ld [rSC], a +	ld a, $81 +	ld [rSC], a +	ret + +Function841e2: ; 841e2 (21:41e2) +	ld a, [hli] +	ld [wca82], a +	ld a, [hli] +	ld [wca83], a +	ld a, [hli] +	ld [wca84], a +	ld a, [hli] +	ld [wca85], a +	ld a, [hli] +	ld [wca86], a +	ld a, [hl] +	ld [wca87], a +	ret + +Function841fb: ; 841fb (21:41fb) +	xor a +	ld hl, wca82 +rept 3 +	ld [hli], a +endr +	ld [hl], a +	ld hl, wca86 +	ld [hli], a +	ld [hl], a +	xor a +	ld [wca8e], a +	ld [wca8f], a +	ld hl, OverworldMap +	ld bc, $280 +	call Function842ab +	ret + +Function84219: ; 84219 (21:4219) +	ld hl, 0 +	ld bc, $4 +	ld de, wca82 +	call Function8423c +	ld a, [wca8e] +	ld c, a +	ld a, [wca8f] +	ld b, a +	ld de, OverworldMap +	call Function8423c +	ld a, l +	ld [wca86], a +	ld a, h +	ld [wca87], a +	ret + +Function8423c: ; 8423c (21:423c) +	ld a, [de] +	inc de +	add l +	jr nc, .asm_84242 +	inc h +.asm_84242 +	ld l, a +	dec bc +	ld a, c +	or b +	jr nz, Function8423c +	ret + +Function84249: ; 84249 (21:4249) +	ld a, $1 +	ld [OverworldMap], a +	ld a, [wcbfa] +	ld [wc801], a +	ld a, $e4 +	ld [wc802], a +	ld a, [wcbfb] +	ld [wc803], a +	ret + +Function84260: ; 84260 (21:4260) +	ld a, [wca81] +	xor $ff +	ld d, a +	ld a, [wcf65] +	inc a +	add d +	ld hl, wca90 +	ld de, $28 +.asm_84271 +	and a +	jr z, .asm_84278 +	add hl, de +	dec a +	jr .asm_84271 +.asm_84278 +	ld e, l +	ld d, h +	ld hl, OverworldMap +	ld c, $28 +.asm_8427f +	ld a, [de] +	inc de +	push bc +	push de +	push hl +	swap a +	ld d, a +	and $f0 +	ld e, a +	ld a, d +	and $f +	ld d, a +	and $8 +	ld a, d +	jr nz, .asm_84297 +	or $90 +	jr .asm_84299 +.asm_84297 +	or $80 +.asm_84299 +	ld d, a +	lb bc, $21, 1 +	call Request2bpp +	pop hl +	ld de, $10 +	add hl, de +	pop de +	pop bc +	dec c +	jr nz, .asm_8427f +	ret + +Function842ab: ; 842ab +	push de +	ld e, a +.asm_842ad +	ld [hl], e +	inc hl +	dec bc +	ld a, c +	or b +	jr nz, .asm_842ad +	ld a, e +	pop de +	ret +; 842b7 + +Unknown_842b7: db  1, 0, $00, 0,  1, 0 +Unknown_842bd: db  2, 0, $04, 0,  0, 0 +Unknown_842c3: db  4, 0, $80, 2,  0, 0 +Unknown_842c9: db  4, 0, $00, 0,  4, 0 +Unknown_842cf: db  8, 0, $00, 0,  8, 0 ; unused +Unknown_842d5: db 15, 0, $00, 0, 15, 0 ; unused +; 842db + + +Function842db:: ; 842db +	ld a, [wc2d5] +	add a +	ld e, a +	ld d, 0 +	ld hl, Jumptable_842ea +	add hl, de +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; 842ea + + +Jumptable_842ea: ; 842ea (21:42ea) +	dw Function8432f +	dw Function84330 +	dw Function84339 +	dw Function84343 +	dw Function8434d +	dw Function84357 +	dw Function84361 +	dw Function8438b +	dw Function84395 +	dw Function8439f +	dw Function843a8 +	dw Function843b6 +	dw Function84330 +	dw Function843c0 +	dw Function843c9 +	dw Function843c9 +	dw Function843c9 +	dw Function843c0 +	dw Function843c9 +	dw Function8439f +	dw Function843a8 +	dw Function843e6 +	dw Function84330 +	dw Function843d2 +	dw Function843c9 +	dw Function843c9 +	dw Function843c9 +	dw Function843d2 +	dw Function843c9 +	dw Function8439f +	dw Function843a8 +	dw Function843b6 + + +Function8432a: ; 8432a (21:432a) +	ld hl, wc2d5 +	inc [hl] +	ret + +Function8432f: ; 8432f (21:432f) +	ret + +Function84330: ; 84330 (21:4330) +	ld a, $33 +	call Function843db +	call Function8432a +	ret + +Function84339: ; 84339 (21:4339) +	ld a, [wca82] +	call Function843db +	call Function8432a +	ret + +Function84343: ; 84343 (21:4343) +	ld a, [wca83] +	call Function843db +	call Function8432a +	ret + +Function8434d: ; 8434d (21:434d) +	ld a, [wca84] +	call Function843db +	call Function8432a +	ret + +Function84357: ; 84357 (21:4357) +	ld a, [wca85] +	call Function843db +	call Function8432a +	ret + +Function84361: ; 84361 (21:4361) +	ld hl, wca8e +	ld a, [hli] +	ld d, [hl] +	ld e, a +	or d +	jr z, .asm_84388 +	dec de +	ld [hl], d +	dec hl +	ld [hl], e +	ld a, [wca8c] +	ld e, a +	ld a, [wca8d] +	ld d, a +	ld hl, OverworldMap +	add hl, de +	inc de +	ld a, e +	ld [wca8c], a +	ld a, d +	ld [wca8d], a +	ld a, [hl] +	call Function843db +	ret +.asm_84388 +	call Function8432a + +Function8438b: ; 8438b (21:438b) +	ld a, [wca86] +	call Function843db +	call Function8432a +	ret + +Function84395: ; 84395 (21:4395) +	ld a, [wca87] +	call Function843db +	call Function8432a +	ret + +Function8439f: ; 8439f (21:439f) +	ld a, $0 +	call Function843db +	call Function8432a +	ret + +Function843a8: ; 843a8 (21:43a8) +	ld a, [rSB] +	ld [wca88], a +	ld a, $0 +	call Function843db +	call Function8432a +	ret + +Function843b6: ; 843b6 (21:43b6) +	ld a, [rSB] +	ld [wca89], a +	xor a +	ld [wc2d5], a +	ret + +Function843c0: ; 843c0 (21:43c0) +	ld a, $f +	call Function843db +	call Function8432a +	ret + +Function843c9: ; 843c9 (21:43c9) +	ld a, $0 +	call Function843db +	call Function8432a +	ret + +Function843d2: ; 843d2 (21:43d2) +	ld a, $8 +	call Function843db +	call Function8432a +	ret + +Function843db: ; 843db (21:43db) +	ld [rSB], a +	ld a, $1 +	ld [rSC], a +	ld a, $81 +	ld [rSC], a +	ret + +Function843e6: ; 843e6 (21:43e6) +	ld a, [rSB] +	ld [wca89], a +	xor a +	ld [wc2d5], a +	ret + +Function843f0: ; 843f0 +.asm_843f0 +	call JoyTextDelay +	call Function846f6 +	jr c, .asm_8440f +	ld a, [wJumptableIndex] +	bit 7, a +	jr nz, .asm_8440d +	call Function84022 +	call Function84757 +	call Function84785 +	call DelayFrame +	jr .asm_843f0 + +.asm_8440d +	and a +	ret + +.asm_8440f +	scf +	ret +; 84411 + +Function84411: ; 84411 +	xor a +	ld [wc2d4], a +	ld [wc2d5], a +	ret +; 84419 + +Function84419: ; 84419 +	push af +	call Function84000 +	pop af +	ld [wcbfa], a +	call Function84728 +	ret +; 84425 + +Function84425: ; 84425 +	call ReturnToMapFromSubmenu +	call Function84753 +	ret +; 8442c + +Function8442c: ; 8442c +	ld a, [wcf65] +	push af +	ld hl, VTiles1 +	ld de, FontInversed +	lb bc, BANK(FontInversed), $80 +	call Request1bpp +	xor a +	ld [$ffac], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	call Function84000 +	ld a, $10 +	ld [wcbfa], a +	callba Function1dc1b0 +	call ClearTileMap +	ld a, $e4 +	call DmgToCgbBGPals +	call DelayFrame +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	ld a, $8 +	ld [wcf65], a +	call Function84742 +	call Function843f0 +	jr c, .asm_8449d +	call Function84411 +	ld c, 12 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	call Function84000 +	ld a, $3 +	ld [wcbfa], a +	callba Function1dc213 +	call Function84742 +	ld a, $4 +	ld [wcf65], a +	call Function843f0 + +.asm_8449d +	pop af +	ld [hVBlank], a +	call Function84411 +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	call Function84425 +	ld c, $8 +.asm_844ae +	call LowVolume +	call DelayFrame +	dec c +	jr nz, .asm_844ae +	pop af +	ld [wcf65], a +	ret +; 844bc + +Function844bc: ; 844bc (21:44bc) +	ld a, [wcf65] +	push af +	ld a, $9 +	ld [wcf65], a +	ld a, e +	ld [wd004], a +	ld a, d +	ld [StartFlypoint], a +	ld a, b +	ld [EndFlypoint], a +	ld a, c +	ld [MovementBuffer], a +	xor a +	ld [$ffac], a +	ld [wd003], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	xor a +	ld [hBGMapMode], a +	call Function84817 +	ld a, $10 +	call Function84419 +	call Function84559 +	jr c, .asm_84545 +	call Function84411 +	ld c, 12 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	call Function8486f +	ld a, $0 +	call Function84419 +	call Function84559 +	jr c, .asm_84545 +	call Function84411 +	ld c, 12 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	call Function84893 +	ld a, $0 +	call Function84419 +	call Function84559 +	jr c, .asm_84545 +	call Function84411 +	ld c, 12 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	call Function848b7 +	ld a, $3 +	call Function84419 +	call Function84559 +.asm_84545 +	pop af +	ld [hVBlank], a +	call Function84411 +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	call Function84425 +	pop af +	ld [wcf65], a +	ret + +Function84559: ; 84559 (21:4559) +	call Function84742 +	call Function843f0 +	ret + +Function84560: ; 84560 +	ld a, [wcf65] +	push af +	xor a +	ld [$ffac], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	xor a +	ld [hBGMapMode], a +	call LoadTileMapToTempTileMap +	callba Function16dac +	ld a, $0 +	call Function84419 +	call Call_LoadTempTileMapToTileMap +	call Function84742 +	ld a, $9 +	ld [wcf65], a +.asm_84597 +	call JoyTextDelay +	call Function846f6 +	jr c, .asm_845c0 +	ld a, [wJumptableIndex] +	bit 7, a +	jr nz, .asm_845c0 +	call Function84022 +	ld a, [wJumptableIndex] +	cp $2 +	jr nc, .asm_845b5 +	ld a, $3 +	ld [wca81], a + +.asm_845b5 +	call Function84757 +	call Function84785 +	call DelayFrame +	jr .asm_84597 + +.asm_845c0 +	pop af +	ld [hVBlank], a +	call Function84411 +	call Call_LoadTempTileMapToTileMap +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	pop af +	ld [wcf65], a +	ret +; 845d4 + +Function845d4: ; 845d4 +	call Function845db +	call Function84425 +	ret +; 845db + +Function845db: ; 845db +	ld a, [wcf65] +	push af +	xor a +	ld [$ffac], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	xor a +	ld [hBGMapMode], a +	ld a, $13 +	call Function84419 +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	ld a, $9 +	ld [wcf65], a +	call Function843f0 +	pop af +	ld [hVBlank], a +	call Function84411 +	call Function84735 +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	pop af +	ld [wcf65], a +	ret +; 8461a + +Function8461a: ; 8461a +	ld a, [wcf65] +	push af +	xor a +	ld [$ffac], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	xor a +	ld [hBGMapMode], a +	callba Function1dc381 +	ld a, $10 +	call Function84419 +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	ld a, $8 +	ld [wcf65], a +	call Function84742 +	call Function843f0 +	jr c, .asm_84671 +	call Function84411 +	ld c, 12 +	call DelayFrames +	xor a +	ld [hBGMapMode], a +	callba Function1dc47b +	ld a, $3 +	call Function84419 +	ld a, $9 +	ld [wcf65], a +	call Function84742 +	call Function843f0 + +.asm_84671 +	pop af +	ld [hVBlank], a +	call Function84411 +	call Function84735 +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	call Function84425 +	pop af +	ld [wcf65], a +	ret +; 84688 + +_PrintDiploma: ; 84688 +	ld a, [wcf65] +	push af +	callba Function1dd709 +	xor a +	ld [$ffac], a +	call Function8474c +	ld a, [rIE] +	push af +	xor a +	ld [rIF], a +	ld a, $9 +	ld [rIE], a +	ld hl, hVBlank +	ld a, [hl] +	push af +	ld [hl], $4 +	ld a, $10 +	call Function84419 +	call Function84742 +	ld a, $9 +	ld [wcf65], a +	call Function843f0 +	jr c, .asm_846e2 +	call Function84411 +	ld c, 12 +	call DelayFrames +	call LoadTileMapToTempTileMap +	xor a +	ld [hBGMapMode], a +	callba Function1dd7ae +	ld a, $3 +	call Function84419 +	call Call_LoadTempTileMapToTileMap +	call Function84742 +	ld a, $9 +	ld [wcf65], a +	call Function843f0 + +.asm_846e2 +	pop af +	ld [hVBlank], a +	call Function84411 +	xor a +	ld [rIF], a +	pop af +	ld [rIE], a +	call Function84425 +	pop af +	ld [wcf65], a +	ret +; 846f6 + +Function846f6: ; 846f6 +	ld a, [hJoyDown] +	and B_BUTTON +	jr nz, .asm_846fe +	and a +	ret + +.asm_846fe +	ld a, [wca80] +	cp $c +	jr nz, .asm_84722 +.asm_84705 +	ld a, [wc2d5] +	and a +	jr nz, .asm_84705 +	ld a, $16 +	ld [wc2d5], a +	ld a, $88 +	ld [rSB], a +	ld a, $1 +	ld [rSC], a +	ld a, $81 +	ld [rSC], a +.asm_8471c +	ld a, [wc2d5] +	and a +	jr nz, .asm_8471c + +.asm_84722 +	ld a, $1 +	ld [$ffac], a +	scf +	ret +; 84728 + +Function84728: ; 84728 +	hlcoord 0, 0 +	ld de, wca90 +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	call CopyBytes +	ret +; 84735 + +Function84735: ; 84735 +	ld hl, wca90 +	decoord 0, 0 +	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT +	call CopyBytes +	ret +; 84742 + +Function84742: ; 84742 +	xor a +	ld [hJoyReleased], a +	ld [hJoyPressed], a +	ld [hJoyDown], a +	ld [hJoyLast], a +	ret +; 8474c + +Function8474c: ; 8474c +	ld de, MUSIC_PRINTER +	call PlayMusic2 +	ret +; 84753 + +Function84753: ; 84753 +	call RestartMapMusic +	ret +; 84757 + +Function84757: ; 84757 +	ld a, [wca88] +	cp -1 +	jr nz, .printer_connected +	ld a, [wca89] +	cp -1 +	jr z, .error_2 + +.printer_connected +	ld a, [wca89] +	and %11100000 +	ret z ; no error + +	bit 7, a +	jr nz, .error_1 +	bit 6, a +	jr nz, .error_4 +	ld a, 6 ; error 3 +	jr .load_text_index + +.error_4 +	ld a, 7 ; error 4 +	jr .load_text_index + +.error_1 +	ld a, 4 ; error 1 +	jr .load_text_index + +.error_2 +	ld a, 5 ; error 2 + +.load_text_index +	ld [wcbf8], a +	ret +; 84785 + +Function84785: ; 84785 +	ld a, [wcbf8] +	and a +	ret z +	push af +	xor a +	ld [hBGMapMode], a +	hlcoord 0, 5 +	lb bc, 10, 18 +	call TextBox +	pop af +	ld e, a +	ld d, 0 +	ld hl, PrinterStatusStringPointers +rept 2 +	add hl, de +endr +	ld e, [hl] +	inc hl +	ld d, [hl] +	hlcoord 1, 7 +	ld a, BANK(GBPrinterStrings) +	call FarString +	hlcoord 2, 15 +	ld de, String_PressBToCancel +	call PlaceString +	ld a, $1 +	ld [hBGMapMode], a +	xor a +	ld [wcbf8], a +	ret +; 847bd + +Function847bd: ; 847bd +	ld a, [wcbf8] +	and a +	ret z +	push af +	xor a +	ld [hBGMapMode], a +	hlcoord 2, 4 +	lb bc, 13, 16 +	call ClearBox +	pop af +	ld e, a +	ld d, 0 +	ld hl, PrinterStatusStringPointers +rept 2 +	add hl, de +endr +	ld e, [hl] +	inc hl +	ld d, [hl] +	hlcoord 4, 7 +	ld a, BANK(GBPrinterStrings) +	call FarString +	hlcoord 4, 15 +	ld de, String_PressBToCancel +	call PlaceString +	ld a, $1 +	ld [hBGMapMode], a +	xor a +	ld [wcbf8], a +	ret +; 847f5 + +String_PressBToCancel: +	db "Press B to Cancel@" +; 84807 + +PrinterStatusStringPointers: ; 84807 +	dw String_1dc275 ; @ +	dw String_1dc276 ; CHECKING LINK +	dw String_1dc289 ; TRANSMITTING +	dw String_1dc29c ; PRINTING +	dw String_1dc2ad ; error 1 +	dw String_1dc2e2 ; error 2 +	dw String_1dc317 ; error 3 +	dw String_1dc34c ; error 4 +; 84817 + +Function84817: ; 84817 (21:4817) +	xor a +	ld [wd002], a +	hlcoord 0, 0 +	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +	ld a, " " +	call ByteFill +	call Function84a0e +	hlcoord 0, 0 +	ld bc, 9 * SCREEN_WIDTH +	ld a, " " +	call ByteFill +	call Function849e9 +	call Function849d7 +	hlcoord 4, 3 +	ld de, String_84865 +	call PlaceString +	ld a, [wd007] +	ld bc, BOX_NAME_LENGTH +	ld hl, wBoxNames +	call AddNTimes +	ld d, h +	ld e, l +	hlcoord 6, 5 +	call PlaceString +	ld a, $1 +	call Function849c6 +	hlcoord 2, 9 +	ld c, $3 +	call Function848e7 +	ret +; 84865 (21:4865) + +String_84865: +	db "#MON LIST@" +; 8486f + +Function8486f: ; 8486f (21:486f) +	hlcoord 0, 0 +	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +	ld a, " " +	call ByteFill +	call Function84a0e +	call Function849e9 +	ld a, [wd003] +	and a +	ret nz +	ld a, $4 +	call Function849c6 +	hlcoord 2, 0 +	ld c, $6 +	call Function848e7 +	ret + +Function84893: ; 84893 (21:4893) +	hlcoord 0, 0 +	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +	ld a, " " +	call ByteFill +	call Function84a0e +	call Function849e9 +	ld a, [wd003] +	and a +	ret nz +	ld a, $a +	call Function849c6 +	hlcoord 2, 0 +	ld c, $6 +	call Function848e7 +	ret + +Function848b7: ; 848b7 (21:48b7) +	hlcoord 0, 0 +	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +	ld a, " " +	call ByteFill +	call Function84a0e +	hlcoord 1, 15 +	lb bc, 2, 18 +	call ClearBox +	call Function849e9 +	call Function849fc +	ld a, [wd003] +	and a +	ret nz +	ld a, $10 +	call Function849c6 +	hlcoord 2, 0 +	ld c, $5 +	call Function848e7 +	ret + +Function848e7: ; 848e7 (21:48e7) +	ld a, [EndFlypoint] +	call GetSRAMBank + +Function848ed: ; 848ed (21:48ed) +	ld a, c +	and a +	jp z, Function84986 +	dec c +	ld a, [de] +	cp $ff +	jp z, Function84981 +	ld [wd265], a +	ld [CurPartySpecies], a +	push bc +	push hl +	push de +	push hl +	ld bc, $10 +	ld a, " " +	call ByteFill +	pop hl +	push hl +	call GetBasePokemonName +	pop hl +	push hl +	call PlaceString +	ld a, [CurPartySpecies] +	cp $fd +	pop hl +	jr z, .ok2 +	ld bc, $b +	add hl, bc +	call Function8498a +	ld bc, $9 +	add hl, bc +	ld a, $f3 +	ld [hli], a +	push hl +	ld bc, $e +	ld a, " " +	call ByteFill +	pop hl +	push hl +	ld a, [wd004] +	ld l, a +	ld a, [StartFlypoint] +	ld h, a +	ld bc, $372 +	add hl, bc +	ld bc, $b +	ld a, [wd002] +	call AddNTimes +	ld e, l +	ld d, h +	pop hl +	push hl +	call PlaceString +	pop hl +	ld bc, $b +	add hl, bc +	push hl +	ld a, [wd004] +	ld l, a +	ld a, [StartFlypoint] +	ld h, a +	ld bc, $35 +	add hl, bc +	ld bc, $20 +	ld a, [wd002] +	call AddNTimes +	ld a, [hl] +	pop hl +	call Function383d +.ok2 +	ld hl, wd002 +	inc [hl] +	pop de +	pop hl +	ld bc, $3c +	add hl, bc +	pop bc +	inc de +	jp Function848ed + +Function84981: ; 84981 (21:4981) +	ld a, $1 +	ld [wd003], a + +Function84986: ; 84986 (21:4986) +	call CloseSRAM +	ret + +Function8498a: ; 8498a (21:498a) +	push hl +	ld a, [wd004] +	ld l, a +	ld a, [StartFlypoint] +	ld h, a +	ld bc, $2b +	add hl, bc +	ld bc, $20 +	ld a, [wd002] +	call AddNTimes +	ld de, TempMonDVs +	ld a, [hli] +	ld [de], a +	inc de +	ld a, [hli] +	ld [de], a +	ld a, [wd002] +	ld [CurPartyMon], a +	ld a, $3 +	ld [MonType], a +	callba GetGender +	ld a, $7f +	jr c, .asm_849c3 +	ld a, $ef +	jr nz, .asm_849c3 +	ld a, $f5 +.asm_849c3 +	pop hl +	ld [hli], a +	ret + +Function849c6: ; 849c6 (21:49c6) +	push hl +	ld e, a +	ld d, $0 +	ld a, [wd004] +	ld l, a +	ld a, [StartFlypoint] +	ld h, a +	add hl, de +	ld e, l +	ld d, h +	pop hl +	ret + +Function849d7: ; 849d7 (21:49d7) +	hlcoord 0, 0 +	ld a, "┌" +	ld [hli], a +	ld a, "─" +	ld c, SCREEN_WIDTH - 2 +.asm_849e1 +	ld [hli], a +	dec c +	jr nz, .asm_849e1 +	ld a, "┐" +	ld [hl], a +	ret + +Function849e9: ; 849e9 (21:49e9) +	hlcoord 0, 0 +	ld de, SCREEN_WIDTH - 1 +	ld c, SCREEN_HEIGHT +.asm_849f1 +	ld a, "│" +	ld [hl], a +	add hl, de +	ld a, "│" +	ld [hli], a +	dec c +	jr nz, .asm_849f1 +	ret + +Function849fc: ; 849fc (21:49fc) +	hlcoord 0, 17 +	ld a, "└" +	ld [hli], a +	ld a, "─" +	ld c, SCREEN_WIDTH - 2 +.asm_84a06 +	ld [hli], a +	dec c +	jr nz, .asm_84a06 +	ld a, "┘" +	ld [hl], a +	ret + +Function84a0e: ; 84a0e (21:4a0e) +	hlcoord 2, 0 +	ld c, $6 +.asm_84a13 +	push bc +	push hl +	ld de, String84a25 +	call PlaceString +	pop hl +	ld bc, $3c +	add hl, bc +	pop bc +	dec c +	jr nz, .asm_84a13 +	ret +; 84a25 (21:4a25) + +String84a25: ; 84a25 +	db "  ------@" +; 84a2e diff --git a/engine/scripting.asm b/engine/scripting.asm index 6d87c2f1b..945368e2b 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -2985,8 +2985,8 @@ Script_reloadmappart:: ; 97ae3  	xor a  	ld [hBGMapMode], a  	call OverworldTextModeSwitch -	call Function2914 -	callba Function104061 +	call GetMovementPermissions +	callba ReloadMapPart  	call UpdateSprites  	ret  ; 97af6 diff --git a/engine/sprites.asm b/engine/sprites.asm index b8b4b2a47..bf82659e8 100755 --- a/engine/sprites.asm +++ b/engine/sprites.asm @@ -174,7 +174,7 @@ endr  ; Look up the third field from the table in the wc300 array (10x2).  ; Take the value and load it in   	ld a, [de] -	call LookUpInwDict_c300 +	call LookUpInwSpriteAnimDict  	ld [hli], a  	pop de  ; Set hl to field 4.  Kinda pointless, because we're presumably already here. @@ -374,11 +374,11 @@ Function8d0ec: ; 8d0ec  	ret  ; 8d109 -LookUpInwDict_c300: ; 8d109 -; a = wDict_c300[a] if a in wDict_c300 else 0 +LookUpInwSpriteAnimDict: ; 8d109 +; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0  	push hl  	push bc -	ld hl, wDict_c300 +	ld hl, wSpriteAnimDict  	ld b, a  	ld c, 10  .loop @@ -2885,3 +2885,540 @@ endr  Unknown_8e75d: ; 8e75d  	sine_wave $100 + + +Function8e79d: ; 8e79d +	ld a, [hSGB] +	ld de, GFX_8e7f4 +	and a +	jr z, .asm_8e7a8 +	ld de, GFX_8e804 + +.asm_8e7a8 +	ld hl, VTiles0 +	lb bc, BANK(GFX_8e7f4), 1 +	call Request2bpp +	ld c, $8 +	ld d, $0 +.asm_8e7b5 +	push bc +	call Function8e7c6 +	call DelayFrame +	pop bc +rept 2 +	inc d +endr +	dec c +	jr nz, .asm_8e7b5 +	call ClearSprites +	ret +; 8e7c6 + +Function8e7c6: ; 8e7c6 +	ld hl, Sprites +	ld c, $8 +.asm_8e7cb +	ld a, c +	and a +	ret z +	dec c +	ld a, c +	sla a +	sla a +	sla a +	push af +	push de +	push hl +	call Function8e72c +	pop hl +	pop de +	add $68 +	ld [hli], a +	pop af +	push de +	push hl +	call Function8e72a +	pop hl +	pop de +	add $54 +	ld [hli], a +	ld a, $0 +	ld [hli], a +	ld a, $6 +	ld [hli], a +	jr .asm_8e7cb +; 8e7f4 + +GFX_8e7f4: ; 8e7f4 +INCBIN "gfx/unknown/08e7f4.2bpp" +GFX_8e804: ; 8e804 +INCBIN "gfx/unknown/08e804.2bpp" + +ClearSpriteAnims: ; 8e814 +	push hl +	push de +	push bc +	push af +	ld hl, wSpriteAnimDict +	ld bc, wSpriteAnimsEnd - wSpriteAnimDict +.loop +	ld [hl], $0 +	inc hl +	dec bc +	ld a, c +	or b +	jr nz, .loop +	pop af +	pop bc +	pop de +	pop hl +	ret +; 8e82b + +Function8e82b: ; 8e82b +	ld a, e +	call ReadMonMenuIcon +	ld l, a +	ld h, 0 +	add hl, hl +	ld de, IconPointers +	add hl, de +	ld a, [hli] +	ld e, a +	ld d, [hl] +	ld b, BANK(Icons) +	ld c, 8 +	ret +; 8e83f + +Function8e83f: ; 8e83f +	push hl +	push de +	push bc +	call Function8e849 +	pop bc +	pop de +	pop hl +	ret +; 8e849 + +Function8e849: ; 8e849 +	ld d, 0 +	ld hl, Jumptable_8e854 +rept 2 +	add hl, de +endr +	ld a, [hli] +	ld h, [hl] +	ld l, a +	jp [hl] +; 8e854 + + +Jumptable_8e854: ; 8e854 (23:6854) +	dw Function8e8d5 +	dw Function8e961 +	dw Function8e97d +	dw Function8e99a +	dw Function8e898 +	dw Function8e8b1 +	dw Function8e862 + + +Function8e862: ; 8e862 (23:6862) +	call Function8e908 +	call Function8e86c +	call Function8e936 +	ret + +Function8e86c: ; 8e86c (23:686c) +	push bc +	ld a, [hObjectStructIndexBuffer] +	ld hl, PartyMon1Item +	ld bc, PARTYMON_STRUCT_LENGTH +	call AddNTimes +	pop bc +	ld a, [hl] +	and a +	jr z, .asm_8e890 +	push hl +	push bc +	ld d, a +	callab ItemIsMail +	pop bc +	pop hl +	jr c, .asm_8e88e +	ld a, $6 +	jr .asm_8e892 +.asm_8e88e +	ld a, $5 +.asm_8e890 +	ld a, $4 +.asm_8e892 +	ld hl, $1 +	add hl, bc +	ld [hl], a +	ret + +Function8e898: ; 8e898 (23:6898) +	call Function8e8d5 +	ld hl, $2 +	add hl, bc +	ld a, $0 +	ld [hl], a +	ld hl, $4 +	add hl, bc +	ld a, $48 +	ld [hl], a +	ld hl, $5 +	add hl, bc +	ld a, $48 +	ld [hl], a +	ret + +Function8e8b1: ; 8e8b1 (23:68b1) +	call Function8e908 +	call Function8e936 +	ld hl, $2 +	add hl, bc +	ld a, $0 +	ld [hl], a +	ld hl, $4 +	add hl, bc +	ld a, $18 +	ld [hl], a +	ld hl, $5 +	add hl, bc +	ld a, $60 +	ld [hl], a +	ld a, c +	ld [wc608], a +	ld a, b +	ld [wc608 + 1], a +	ret + +Function8e8d5: ; 8e8d5 (23:68d5) +	call Function8e908 +	call Function8e8df +	call Function8e936 +	ret + +Function8e8df: ; 8e8df (23:68df) +	push bc +	ld a, [hObjectStructIndexBuffer] +	ld hl, PartyMon1Item +	ld bc, $30 +	call AddNTimes +	pop bc +	ld a, [hl] +	and a +	ret z +	push hl +	push bc +	ld d, a +	callab ItemIsMail +	pop bc +	pop hl +	jr c, .asm_8e900 +	ld a, $3 +	jr .asm_8e902 +.asm_8e900 +	ld a, $2 +.asm_8e902 +	ld hl, $1 +	add hl, bc +	ld [hl], a +	ret + +Function8e908: ; 8e908 (23:6908) +	ld a, [wc3b7] +	push af +	ld a, [hObjectStructIndexBuffer] +	ld hl, PartySpecies +	ld e, a +	ld d, $0 +	add hl, de +	ld a, [hl] +	call ReadMonMenuIcon +	ld [CurIcon], a +	call Function8e9db +	ld a, [hObjectStructIndexBuffer] +; y coord +rept 4 +	add a +endr +	add $1c +	ld d, a +; x coord +	ld e, $10 +; type is partymon icon +	ld a, SPRITE_ANIM_INDEX_00 +	call InitSpriteAnimStruct +	pop af +	ld hl, $3 +	add hl, bc +	ld [hl], a +	ret + +Function8e936: ; 8e936 (23:6936) +	push bc +	ld a, [hObjectStructIndexBuffer] +	ld b, a +	call Function8e94c +	ld a, b +	pop bc +	ld hl, $9 +	add hl, bc +	ld [hl], a +	rlca +	rlca +	ld hl, $d +	add hl, bc +	ld [hl], a +	ret + +Function8e94c: ; 8e94c (23:694c) +	callba PlacePartymonHPBar +	call GetHPPal +	ld e, d +	ld d, 0 +	ld hl, Unknown_8e95e +	add hl, de +	ld b, [hl] +	ret +; 8e95e (23:695e) + +Unknown_8e95e: ; 8e95e +	db $00, $40, $80 +; 8e961 + +Function8e961: ; 8e961 (23:6961) +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	xor a +	call GetIconGFX +	lb de, $24, $20 +	ld a, SPRITE_ANIM_INDEX_00 +	call InitSpriteAnimStruct +	ld hl, $2 +	add hl, bc +	ld [hl], $0 +	ret + +Function8e97d: ; 8e97d (23:697d) +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	xor a +	call GetIconGFX +	ld d, $1a +	ld e, $24 +	ld a, SPRITE_ANIM_INDEX_00 +	call InitSpriteAnimStruct +	ld hl, $2 +	add hl, bc +	ld [hl], $0 +	ret + +Function8e99a: ; 8e99a (23:699a) +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	ld a, $62 +	ld [wc3b7], a +	call Function8e9db +	ret + +GetSpeciesIcon: ; 8e9ac +; Load species icon into VRAM at tile a +	push de +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	pop de +	ld a, e +	call GetIconGFX +	ret +; 8e9bc + + +Function8e9bc: ; 8e9bc (23:69bc) +	push de +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	pop de +	ld a, e +	call GetIcon_a +	ret +; 8e9cc (23:69cc) + +Function8e9cc: ; 8e9cc +	push de +	ld a, [wd265] +	call ReadMonMenuIcon +	ld [CurIcon], a +	pop de +	call GetIcon_de +	ret +; 8e9db + +Function8e9db: ; 8e9db (23:69db) +	ld a, [wc3b7] + +GetIconGFX: ; 8e9de +	call GetIcon_a +	ld de, $80 ; 8 tiles +	add hl, de +	ld de, HeldItemIcons +	lb bc, BANK(HeldItemIcons), 2 +	call GetGFXUnlessMobile +	ld a, [wc3b7] +	add 10 +	ld [wc3b7], a +	ret + +HeldItemIcons: +INCBIN "gfx/icon/mail.2bpp" +INCBIN "gfx/icon/item.2bpp" +; 8ea17 + +GetIcon_de: ; 8ea17 +; Load icon graphics into VRAM starting from tile de. +	ld l, e +	ld h, d +	jr GetIcon + +GetIcon_a: ; 8ea1b +; Load icon graphics into VRAM starting from tile a. +	ld l, a +	ld h, 0 + +GetIcon: ; 8ea1e +; Load icon graphics into VRAM starting from tile hl. + +; One tile is 16 bytes long. +rept 4 +	add hl, hl +endr + +	ld de, VTiles0 +	add hl, de +	push hl + +; The icons are contiguous, in order and of the same +; size, so the pointer table is somewhat redundant. +	ld a, [CurIcon] +	push hl +	ld l, a +	ld h, 0 +	add hl, hl +	ld de, IconPointers +	add hl, de +	ld a, [hli] +	ld e, a +	ld d, [hl] +	pop hl + +	lb bc, BANK(Icons), 8 +	call GetGFXUnlessMobile + +	pop hl +	ret +; 8ea3f + +GetGFXUnlessMobile: ; 8ea3f +	ld a, [wLinkMode] +	cp LINK_MOBILE +	jp nz, Request2bpp +	jp Get2bpp_2 +; 8ea4a + +Function8ea4a: ; 8ea4a +	ld hl, wSpriteAnimationStructs +	ld e, $6 +	ld a, [MenuSelection2] +	ld d, a +.loop +	ld a, [hl] +	and a +	jr z, .next +	cp d +	jr z, .loadwithtwo +	ld a, $0 +	jr .ok + +.loadwithtwo +	ld a, $2 + +.ok +	push hl +	ld c, l +	ld b, h +	ld hl, $2 +	add hl, bc +	ld [hl], a +	pop hl + +.next +	ld bc, $10 +	add hl, bc +	dec e +	jr nz, .loop +	ret +; 8ea71 + +Function8ea71: ; 8ea71 +	ld hl, wSpriteAnimationStructs +	ld e, $6 +.loop +	ld a, [hl] +	and a +	jr z, .zero +	push hl +	ld c, l +	ld b, h +	ld hl, $2 +	add hl, bc +	ld [hl], $1 +	pop hl +.zero +	ld bc, $10 +	add hl, bc +	dec e +	jr nz, .loop +	ret +; 8ea8c (23:6a8c) + +Function8ea8c: ; 8ea8c +	ld hl, wSpriteAnimationStructs +	ld e, $6 +	ld a, [wd0e3] +	ld d, a +.asm_8ea95 +	ld a, [hl] +	and a +	jr z, .asm_8eaab +	cp d +	jr z, .asm_8eaa0 +	ld a, $3 +	jr .asm_8eaa2 +.asm_8eaa0 +	ld a, $2 +.asm_8eaa2 +	push hl +	ld c, l +	ld b, h +	ld hl, $2 +	add hl, bc +	ld [hl], a +	pop hl +.asm_8eaab +	ld bc, $10 +	add hl, bc +	dec e +	jr nz, .asm_8ea95 +	ret + +INCLUDE "menu/mon_icons.asm" diff --git a/engine/startmenu.asm b/engine/startmenu.asm index bcf2247af..ba5e2330c 100755 --- a/engine/startmenu.asm +++ b/engine/startmenu.asm @@ -1761,7 +1761,7 @@ SetUpMoveScreenBG: ; 13172  	xor a  	ld [hBGMapMode], a  	callba Functionfb571 -	callba InefficientlyClear121BytesAtwc300 +	callba ClearSpriteAnims  	ld a, [CurPartyMon]  	ld e, a  	ld d, $0 diff --git a/engine/time_capsule/conversion.asm b/engine/time_capsule/conversion.asm new file mode 100755 index 000000000..4b5b1ef83 --- /dev/null +++ b/engine/time_capsule/conversion.asm @@ -0,0 +1,684 @@ +; These functions seem to be related to backwards compatibility + +Functionfb57e: ; fb57e +	ld a, [wd003] +	ld hl, OTPartyMon1Species +	call GetPartyLocation +	push hl +	ld a, [wd003] +	inc a +	ld c, a +	ld b, 0 +	ld hl, OTPartyCount +	add hl, bc +	ld a, [hl] +	pop hl +	cp EGG +	jr z, .asm_fb59c +	cp [hl] +	jr nz, .asm_fb5db + +.asm_fb59c +	ld b, h +	ld c, l +	ld hl, MON_LEVEL +	add hl, bc +	ld a, [hl] +	cp 101 +	jr nc, .asm_fb5db +	ld a, [wLinkMode] +	cp LINK_TIMECAPSULE +	jr nz, .asm_fb5d9 +	ld hl, OTPartySpecies +	ld a, [wd003] +	ld c, a +	ld b, 0 +	add hl, bc +	ld a, [hl] + +	; Magnemite and Magneton's types changed +	; from Electric to Electric/Steel. +	cp MAGNEMITE +	jr z, .asm_fb5d9 +	cp MAGNETON +	jr z, .asm_fb5d9 + +	ld [CurSpecies], a +	call GetBaseData +	ld hl, wcbea +rept 2 +	add hl, bc +endr +	ld a, [BaseType1] +	cp [hl] +	jr nz, .asm_fb5db +	inc hl +	ld a, [BaseType2] +	cp [hl] +	jr nz, .asm_fb5db + +.asm_fb5d9 +	and a +	ret + +.asm_fb5db +	scf +	ret +; fb5dd + +Functionfb5dd: ; fb5dd +	ld a, [wd002] +	ld d, a +	ld a, [PartyCount] +	ld b, a +	ld c, $0 +.asm_fb5e7 +	ld a, c +	cp d +	jr z, .asm_fb5f8 +	push bc +	ld a, c +	ld hl, PartyMon1HP +	call GetPartyLocation +	pop bc +	ld a, [hli] +	or [hl] +	jr nz, .asm_fb60b + +.asm_fb5f8 +	inc c +	dec b +	jr nz, .asm_fb5e7 +	ld a, [wd003] +	ld hl, OTPartyMon1HP +	call GetPartyLocation +	ld a, [hli] +	or [hl] +	jr nz, .asm_fb60b +	scf +	ret + +.asm_fb60b +	and a +	ret +; fb60d + +Functionfb60d: ; fb60d +	hlcoord 4, 0 +	ld de, PlayerName +	call PlaceString +	ld a, $14 +	ld [bc], a +	hlcoord 4, 8 +	ld de, wd26b +	call PlaceString +	ld a, $14 +	ld [bc], a +	hlcoord 7, 1 +	ld de, PartySpecies +	call Functionfb634 +	hlcoord 7, 9 +	ld de, OTPartySpecies + +Functionfb634: ; fb634 +	ld c, $0 +.asm_fb636 +	ld a, [de] +	cp $ff +	ret z +	ld [wd265], a +	push bc +	push hl +	push de +	push hl +	ld a, c +	ld [hProduct], a +	call GetPokemonName +	pop hl +	call PlaceString +	pop de +	inc de +	pop hl +	ld bc, SCREEN_WIDTH +	add hl, bc +	pop bc +	inc c +	jr .asm_fb636 +; fb656 + +KantoMonSpecials: ; fb656 +; The original special base stat for +; each Kanto monster from Red/Blue. +	db  65 ; BULBASAUR +	db  80 ; IVYSAUR +	db 100 ; VENUSAUR +	db  50 ; CHARMANDER +	db  65 ; CHARMELEON +	db  85 ; CHARIZARD +	db  50 ; SQUIRTLE +	db  65 ; WARTORTLE +	db  85 ; BLASTOISE +	db  20 ; CATERPIE +	db  25 ; METAPOD +	db  80 ; BUTTERFREE +	db  20 ; WEEDLE +	db  25 ; KAKUNA +	db  45 ; BEEDRILL +	db  35 ; PIDGEY +	db  50 ; PIDGEOTTO +	db  70 ; PIDGEOT +	db  25 ; RATTATA +	db  50 ; RATICATE +	db  31 ; SPEAROW +	db  61 ; FEAROW +	db  40 ; EKANS +	db  65 ; ARBOK +	db  50 ; PIKACHU +	db  90 ; RAICHU +	db  30 ; SANDSHREW +	db  55 ; SANDSLASH +	db  40 ; NIDORAN_F +	db  55 ; NIDORINA +	db  75 ; NIDOQUEEN +	db  40 ; NIDORAN_M +	db  55 ; NIDORINO +	db  75 ; NIDOKING +	db  60 ; CLEFAIRY +	db  85 ; CLEFABLE +	db  65 ; VULPIX +	db 100 ; NINETALES +	db  25 ; JIGGLYPUFF +	db  50 ; WIGGLYTUFF +	db  40 ; ZUBAT +	db  75 ; GOLBAT +	db  75 ; ODDISH +	db  85 ; GLOOM +	db 100 ; VILEPLUME +	db  55 ; PARAS +	db  80 ; PARASECT +	db  40 ; VENONAT +	db  90 ; VENOMOTH +	db  45 ; DIGLETT +	db  70 ; DUGTRIO +	db  40 ; MEOWTH +	db  65 ; PERSIAN +	db  50 ; PSYDUCK +	db  80 ; GOLDUCK +	db  35 ; MANKEY +	db  60 ; PRIMEAPE +	db  50 ; GROWLITHE +	db  80 ; ARCANINE +	db  40 ; POLIWAG +	db  50 ; POLIWHIRL +	db  70 ; POLIWRATH +	db 105 ; ABRA +	db 120 ; KADABRA +	db 135 ; ALAKAZAM +	db  35 ; MACHOP +	db  50 ; MACHOKE +	db  65 ; MACHAMP +	db  70 ; BELLSPROUT +	db  85 ; WEEPINBELL +	db 100 ; VICTREEBEL +	db 100 ; TENTACOOL +	db 120 ; TENTACRUEL +	db  30 ; GEODUDE +	db  45 ; GRAVELER +	db  55 ; GOLEM +	db  65 ; PONYTA +	db  80 ; RAPIDASH +	db  40 ; SLOWPOKE +	db  80 ; SLOWBRO +	db  95 ; MAGNEMITE +	db 120 ; MAGNETON +	db  58 ; FARFETCH_D +	db  35 ; DODUO +	db  60 ; DODRIO +	db  70 ; SEEL +	db  95 ; DEWGONG +	db  40 ; GRIMER +	db  65 ; MUK +	db  45 ; SHELLDER +	db  85 ; CLOYSTER +	db 100 ; GASTLY +	db 115 ; HAUNTER +	db 130 ; GENGAR +	db  30 ; ONIX +	db  90 ; DROWZEE +	db 115 ; HYPNO +	db  25 ; KRABBY +	db  50 ; KINGLER +	db  55 ; VOLTORB +	db  80 ; ELECTRODE +	db  60 ; EXEGGCUTE +	db 125 ; EXEGGUTOR +	db  40 ; CUBONE +	db  50 ; MAROWAK +	db  35 ; HITMONLEE +	db  35 ; HITMONCHAN +	db  60 ; LICKITUNG +	db  60 ; KOFFING +	db  85 ; WEEZING +	db  30 ; RHYHORN +	db  45 ; RHYDON +	db 105 ; CHANSEY +	db 100 ; TANGELA +	db  40 ; KANGASKHAN +	db  70 ; HORSEA +	db  95 ; SEADRA +	db  50 ; GOLDEEN +	db  80 ; SEAKING +	db  70 ; STARYU +	db 100 ; STARMIE +	db 100 ; MR__MIME +	db  55 ; SCYTHER +	db  95 ; JYNX +	db  85 ; ELECTABUZZ +	db  85 ; MAGMAR +	db  55 ; PINSIR +	db  70 ; TAUROS +	db  20 ; MAGIKARP +	db 100 ; GYARADOS +	db  95 ; LAPRAS +	db  48 ; DITTO +	db  65 ; EEVEE +	db 110 ; VAPOREON +	db 110 ; JOLTEON +	db 110 ; FLAREON +	db  75 ; PORYGON +	db  90 ; OMANYTE +	db 115 ; OMASTAR +	db  45 ; KABUTO +	db  70 ; KABUTOPS +	db  60 ; AERODACTYL +	db  65 ; SNORLAX +	db 125 ; ARTICUNO +	db 125 ; ZAPDOS +	db 125 ; MOLTRES +	db  50 ; DRATINI +	db  70 ; DRAGONAIR +	db 100 ; DRAGONITE +	db 154 ; MEWTWO +	db 100 ; MEW +; fb6ed + + +INCLUDE "event/name_rater.asm" + + +PlaySlowCry: ; fb841 +	ld a, [ScriptVar] +	call LoadCryHeader +	jr c, .done + +	ld hl, CryPitch +	ld a, [hli] +	ld h, [hl] +	ld l, a +	ld bc, -$140 +	add hl, bc +	ld a, l +	ld [CryPitch], a +	ld a, h +	ld [CryPitch + 1], a +	ld hl, CryLength +	ld a, [hli] +	ld h, [hl] +	ld l, a +	ld bc, $60 +	add hl, bc +	ld a, l +	ld [CryLength], a +	ld a, h +	ld [CryLength + 1], a +	callba _PlayCryHeader +	call WaitSFX + +.done +	ret +; fb877 + +NewPokedexEntry: ; fb877 +	ld a, [hMapAnims] +	push af +	xor a +	ld [hMapAnims], a +	call LowVolume +	call ClearBGPalettes +	call ClearTileMap +	call UpdateSprites +	call ClearSprites +	ld a, [wPokedexStatus] +	push af +	ld a, [hSCX] +	add $5 +	ld [hSCX], a +	xor a +	ld [wPokedexStatus], a +	callba Function41a7f +	call WaitPressAorB_BlinkCursor +	ld a, $1 +	ld [wPokedexStatus], a +	callba Function4424d +	call WaitPressAorB_BlinkCursor +	pop af +	ld [wPokedexStatus], a +	call MaxVolume +	call FadeToWhite +	ld a, [hSCX] +	add $fb +	ld [hSCX], a +	call Functionfb8c8 +	pop af +	ld [hMapAnims], a +	ret +; fb8c8 + +Functionfb8c8: ; fb8c8 +	call ClearTileMap +	call LoadFontsExtra +	call LoadStandardFont +	callba Function40ab2 +	call Function3200 +	callba GetEnemyMonDVs +	ld a, [hli] +	ld [TempMonDVs], a +	ld a, [hl] +	ld [TempMonDVs + 1], a +	ld b, SCGB_1C +	call GetSGBLayout +	call SetPalettes +	ret +; fb8f1 + +ConvertMon_2to1: ; fb8f1 +; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265. +	push bc +	push hl +	ld a, [wd265] +	ld b, a +	ld c, 0 +	ld hl, Pokered_MonIndices +.loop +	inc c +	ld a, [hli] +	cp b +	jr nz, .loop +	ld a, c +	ld [wd265], a +	pop hl +	pop bc +	ret +; fb908 + +ConvertMon_1to2: ; fb908 +; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265. +	push bc +	push hl +	ld a, [wd265] +	dec a +	ld hl, Pokered_MonIndices +	ld b, 0 +	ld c, a +	add hl, bc +	ld a, [hl] +	ld [wd265], a +	pop hl +	pop bc +	ret +; fb91c + +Pokered_MonIndices: ; fb91c +	db RHYDON +	db KANGASKHAN +	db NIDORAN_M +	db CLEFAIRY +	db SPEAROW +	db VOLTORB +	db NIDOKING +	db SLOWBRO +	db IVYSAUR +	db EXEGGUTOR +	db LICKITUNG +	db EXEGGCUTE +	db GRIMER +	db GENGAR +	db NIDORAN_F +	db NIDOQUEEN +	db CUBONE +	db RHYHORN +	db LAPRAS +	db ARCANINE +	db MEW +	db GYARADOS +	db SHELLDER +	db TENTACOOL +	db GASTLY +	db SCYTHER +	db STARYU +	db BLASTOISE +	db PINSIR +	db TANGELA +	db SCIZOR +	db SHUCKLE +	db GROWLITHE +	db ONIX +	db FEAROW +	db PIDGEY +	db SLOWPOKE +	db KADABRA +	db GRAVELER +	db CHANSEY +	db MACHOKE +	db MR__MIME +	db HITMONLEE +	db HITMONCHAN +	db ARBOK +	db PARASECT +	db PSYDUCK +	db DROWZEE +	db GOLEM +	db HERACROSS +	db MAGMAR +	db HO_OH +	db ELECTABUZZ +	db MAGNETON +	db KOFFING +	db SNEASEL +	db MANKEY +	db SEEL +	db DIGLETT +	db TAUROS +	db TEDDIURSA +	db URSARING +	db SLUGMA +	db FARFETCH_D +	db VENONAT +	db DRAGONITE +	db MAGCARGO +	db SWINUB +	db PILOSWINE +	db DODUO +	db POLIWAG +	db JYNX +	db MOLTRES +	db ARTICUNO +	db ZAPDOS +	db DITTO +	db MEOWTH +	db KRABBY +	db CORSOLA +	db REMORAID +	db OCTILLERY +	db VULPIX +	db NINETALES +	db PIKACHU +	db RAICHU +	db DELIBIRD +	db MANTINE +	db DRATINI +	db DRAGONAIR +	db KABUTO +	db KABUTOPS +	db HORSEA +	db SEADRA +	db SKARMORY +	db HOUNDOUR +	db SANDSHREW +	db SANDSLASH +	db OMANYTE +	db OMASTAR +	db JIGGLYPUFF +	db WIGGLYTUFF +	db EEVEE +	db FLAREON +	db JOLTEON +	db VAPOREON +	db MACHOP +	db ZUBAT +	db EKANS +	db PARAS +	db POLIWHIRL +	db POLIWRATH +	db WEEDLE +	db KAKUNA +	db BEEDRILL +	db HOUNDOOM +	db DODRIO +	db PRIMEAPE +	db DUGTRIO +	db VENOMOTH +	db DEWGONG +	db KINGDRA +	db PHANPY +	db CATERPIE +	db METAPOD +	db BUTTERFREE +	db MACHAMP +	db DONPHAN +	db GOLDUCK +	db HYPNO +	db GOLBAT +	db MEWTWO +	db SNORLAX +	db MAGIKARP +	db PORYGON2 +	db STANTLER +	db MUK +	db SMEARGLE +	db KINGLER +	db CLOYSTER +	db TYROGUE +	db ELECTRODE +	db CLEFABLE +	db WEEZING +	db PERSIAN +	db MAROWAK +	db HITMONTOP +	db HAUNTER +	db ABRA +	db ALAKAZAM +	db PIDGEOTTO +	db PIDGEOT +	db STARMIE +	db BULBASAUR +	db VENUSAUR +	db TENTACRUEL +	db SMOOCHUM +	db GOLDEEN +	db SEAKING +	db ELEKID +	db MAGBY +	db MILTANK +	db BLISSEY +	db PONYTA +	db RAPIDASH +	db RATTATA +	db RATICATE +	db NIDORINO +	db NIDORINA +	db GEODUDE +	db PORYGON +	db AERODACTYL +	db RAIKOU +	db MAGNEMITE +	db ENTEI +	db SUICUNE +	db CHARMANDER +	db SQUIRTLE +	db CHARMELEON +	db WARTORTLE +	db CHARIZARD +	db LARVITAR +	db PUPITAR +	db TYRANITAR +	db LUGIA +	db ODDISH +	db GLOOM +	db VILEPLUME +	db BELLSPROUT +	db WEEPINBELL +	db VICTREEBEL +	db CHIKORITA +	db BAYLEEF +	db MEGANIUM +	db CYNDAQUIL +	db QUILAVA +	db TYPHLOSION +	db TOTODILE +	db CROCONAW +	db FERALIGATR +	db SENTRET +	db FURRET +	db HOOTHOOT +	db NOCTOWL +	db LEDYBA +	db LEDIAN +	db SPINARAK +	db ARIADOS +	db CROBAT +	db CHINCHOU +	db LANTURN +	db PICHU +	db CLEFFA +	db IGGLYBUFF +	db TOGEPI +	db TOGETIC +	db NATU +	db XATU +	db MAREEP +	db FLAAFFY +	db AMPHAROS +	db BELLOSSOM +	db MARILL +	db AZUMARILL +	db SUDOWOODO +	db POLITOED +	db HOPPIP +	db SKIPLOOM +	db JUMPLUFF +	db AIPOM +	db SUNKERN +	db SUNFLORA +	db YANMA +	db WOOPER +	db QUAGSIRE +	db ESPEON +	db UMBREON +	db MURKROW +	db SLOWKING +	db MISDREAVUS +	db UNOWN +	db WOBBUFFET +	db GIRAFARIG +	db PINECO +	db FORRETRESS +	db DUNSPARCE +	db GLIGAR +	db STEELIX +	db SNUBBULL +	db GRANBULL +	db QWILFISH +	db WOBBUFFET +	db WOBBUFFET +; fba18 diff --git a/engine/variables.asm b/engine/variables.asm new file mode 100755 index 000000000..a115e2c37 --- /dev/null +++ b/engine/variables.asm @@ -0,0 +1,150 @@ +_GetVarAction:: ; 80648 (20:4648) +	ld a, c +	cp NUM_VARS +	jr c, .valid +	xor a +.valid +	ld c, a +	ld b, 0 +	ld hl, .VarActionTable +rept 3 +	add hl, bc +endr +	ld e, [hl] +	inc hl +	ld d, [hl] +	inc hl +	ld b, [hl] +	ld a, b +	and RETVAR_EXECUTE +	jr nz, .call +	ld a, b +	and RETVAR_ADDR_DE +	ret nz +	ld a, [de] +	jr .loadstringbuffer2 + +.call +	call _de_ +	ret + +.loadstringbuffer2: ; 8066c (20:466c) +	ld de, StringBuffer2 +	ld [de], a +	ret +; 80671 (20:4671) + +.VarActionTable: ; 80671 +; $00: copy [de] to StringBuffer2 +; $40: return address in de +; $80: call function +	dwb StringBuffer2,         RETVAR_STRBUF2 +	dwb PartyCount,            RETVAR_STRBUF2 +	dwb .BattleResult,         RETVAR_EXECUTE +	dwb BattleType,            RETVAR_ADDR_DE +	dwb TimeOfDay,             RETVAR_STRBUF2 +	dwb .CountCaughtMons,      RETVAR_EXECUTE +	dwb .CountSeenMons,        RETVAR_EXECUTE +	dwb .CountBadges,          RETVAR_EXECUTE +	dwb PlayerState,           RETVAR_ADDR_DE +	dwb .PlayerFacing,         RETVAR_EXECUTE +	dwb hHours,                RETVAR_STRBUF2 +	dwb .DayOfWeek,            RETVAR_EXECUTE +	dwb MapGroup,              RETVAR_STRBUF2 +	dwb MapNumber,             RETVAR_STRBUF2 +	dwb .UnownCaught,          RETVAR_EXECUTE +	dwb wPermission,           RETVAR_STRBUF2 +	dwb .BoxFreeSpace,         RETVAR_EXECUTE +	dwb wBugContestMinsRemaining,                 RETVAR_STRBUF2 +	dwb XCoord,                RETVAR_STRBUF2 +	dwb YCoord,                RETVAR_STRBUF2 +	dwb wSpecialPhoneCallID,   RETVAR_STRBUF2 +	dwb wcf64,                 RETVAR_STRBUF2 +	dwb wKurtApricornQuantity, RETVAR_STRBUF2 +	dwb wCurrentCaller,        RETVAR_ADDR_DE +	dwb wBlueCardBalance,      RETVAR_ADDR_DE +	dwb wBuenasPassword,       RETVAR_ADDR_DE +	dwb wdc58,                 RETVAR_STRBUF2 +	dwb NULL,                  RETVAR_STRBUF2 +; 806c5 + +.CountCaughtMons: ; 806c5 +; Caught mons. +	ld hl, PokedexCaught +	ld b, EndPokedexCaught - PokedexCaught +	call CountSetBits +	ld a, [wd265] +	jp .loadstringbuffer2 +; 806d3 + +.CountSeenMons: ; 806d3 +; Seen mons. +	ld hl, PokedexSeen +	ld b, EndPokedexSeen - PokedexSeen +	call CountSetBits +	ld a, [wd265] +	jp .loadstringbuffer2 +; 806e1 + +.CountBadges: ; 806e1 +; Number of owned badges. +	ld hl, Badges +	ld b, 2 +	call CountSetBits +	ld a, [wd265] +	jp .loadstringbuffer2 +; 806ef + +.PlayerFacing: ; 806ef +; The direction the player is facing. +	ld a, [PlayerDirection] +	and $c +	rrca +	rrca +	jp .loadstringbuffer2 +; 806f9 + +.DayOfWeek: ; 806f9 +; The day of the week. +	call GetWeekday +	jp .loadstringbuffer2 +; 806ff + +.UnownCaught: ; 806ff +; Number of unique Unown caught. +	call .count +	ld a, b +	jp .loadstringbuffer2 + +.count +	ld hl, UnownDex +	ld b, 0 +.loop +	ld a, [hli] +	and a +	ret z +	inc b +	ld a, b +	cp 26 +	jr c, .loop +	ret +; 80715 + +.BoxFreeSpace: ; 80715 +; Remaining slots in the current box. +	ld a, BANK(sBoxCount) +	call GetSRAMBank +	ld hl, sBoxCount +	ld a, MONS_PER_BOX +	sub [hl] +	ld b, a +	call CloseSRAM +	ld a, b +	jp .loadstringbuffer2 +; 80728 + +.BattleResult: ; 80728 +	ld a, [wBattleResult] +	and $3f +	jp .loadstringbuffer2 +; 80730 | 
