DebugMenu:
IF DEF(_DEBUG)
	call ClearScreen

	; These debug names are used for TestBattle.
	; StartNewGameDebug uses the debug names from PrepareOakSpeech.
	ld hl, DebugBattlePlayerName
	ld de, wPlayerName
	ld bc, NAME_LENGTH
	call CopyData

	ld hl, DebugBattleRivalName
	ld de, wRivalName
	ld bc, NAME_LENGTH
	call CopyData

	call LoadFontTilePatterns
	call LoadHpBarAndStatusTilePatterns
	call ClearSprites
	call RunDefaultPaletteCommand

	hlcoord 5, 6
	ld b, 3
	ld c, 9
	call TextBoxBorder

	hlcoord 7, 7
	ld de, DebugMenuOptions
	call PlaceString

	ld a, TEXT_DELAY_MEDIUM
	ld [wOptions], a

	ld a, A_BUTTON | B_BUTTON | START
	ld [wMenuWatchedKeys], a
	xor a
	ld [wMenuJoypadPollCount], a
	inc a
	ld [wMaxMenuItem], a
	ld a, 7
	ld [wTopMenuItemY], a
	dec a
	ld [wTopMenuItemX], a
	xor a
	ld [wCurrentMenuItem], a
	ld [wLastMenuItem], a
	ld [wMenuWatchMovingOutOfBounds], a

	call HandleMenuInput
	bit BIT_B_BUTTON, a
	jp nz, DisplayTitleScreen

	ld a, [wCurrentMenuItem]
	and a ; FIGHT?
	jp z, TestBattle

	; DEBUG
	ld hl, wd732
	set 1, [hl]
	jp StartNewGameDebug

DebugBattlePlayerName:
	db "Tom@"

DebugBattleRivalName:
	db "Juerry@"

DebugMenuOptions:
	db   "FIGHT"
	next "DEBUG@"
ELSE
	ret
ENDC

TestBattle:
.loop
	call GBPalNormal

	; Get some debug items.
	ld hl, wNumBagItems
	ld de, BattleDebugItemsList
.items_loop
	ld a, [de]
	cp -1
	jr z, .items_end
	ld [wcf91], a
	inc de
	ld a, [de]
	inc de
	ld [wItemQuantity], a
	call AddItemToInventory
	jr .items_loop
.items_end

	; Don't mess around
	; with obedience.
	ld a, 1 << BIT_EARTHBADGE
	ld [wObtainedBadges], a

	ld hl, wFlags_D733
	set BIT_TEST_BATTLE, [hl]

	; Reset the party.
	ld hl, wPartyCount
	xor a
	ld [hli], a
	dec a
	ld [hl], a

	; Player's Pokemon.
	ld a, GENGAR
	ld [wcf91], a
	ld a, 50
	ld [wCurEnemyLVL], a
	xor a
	ld [wMonDataLocation], a
	ld [wCurMap], a
	call AddPartyMon
	
	; This function gives you a way to waste a turn, never know when you'll need it.
	; Alternatively, add a move to test.
	ld hl, wPartyMon1Moves
	ld a, UPPERCUT ; New move animation test
	ld [hli], a
	ld a, POWDER_SNOW ; New move animation test
	ld [hli], a
	ld a, FAKE_TEARS ; New move animation test
	ld [hli], a
	ld a, NASTY_PLOT ; Skip turn, New move animation test
	ld [hli], a
	
	; Opponent's Pokemon.
	ld a, NIDORINO
	ld [wCurOpponent], a
	ld a, 50 ; Set the level you want here.
	ld [wCurEnemyLVL], a

	predef InitOpponent

	; When the battle ends,
	; do it all again.
	ld a, 1
	ld [wUpdateSpritesEnabled], a
	ldh [hAutoBGTransferEnabled], a
	jr .loop

BattleDebugItemsList:
	db X_ACCURACY, 99
	db FULL_RESTORE, 99
	db MAX_ELIXER, 99
	db FULL_HEAL, 99
	db X_ATTACK, 99
	db X_SPECIAL, 99
	db X_DEFEND, 99
	db X_SPEED, 99
	db DIRE_HIT, 99
	db GUARD_SPEC, 99
	db POKE_FLUTE, 1
	db -1 ; end
