	;==========================
	; limit break
	;==========================
limit_break:

	; reset limit counter
	lda	#0
	sta	HERO_LIMIT

	; TODO: replace with jump table?

	lda	MENU_POSITION
	cmp	#MENU_LIMIT_DROP
	beq	do_limit_drop
	cmp	#MENU_LIMIT_SLICE
	beq	do_limit_slice
	cmp	#MENU_LIMIT_ZAP
	beq	do_limit_zap

do_limit_drop:
	jmp	limit_break_drop
do_limit_slice:
	jmp	limit_break_slice
do_limit_zap:
	jmp	limit_break_zap



	;======================
	;======================
	; Limit Break "Drop"
	; Jump into sky, drop down and slice enemy in half
	;======================
	;======================

limit_break_drop:

	lda	#$99
	sta	DAMAGE_VAL_LO
	lda	#$00
	sta	DAMAGE_VAL_HI

	lda	#34
	sta	HERO_X
	lda	#20
	sta	HERO_Y

drop_jump_loop:

	; while(ay>0) {

	jsr	gr_copy_to_current

	jsr	draw_hero_and_sword

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	jsr	draw_battle_bottom

	jsr	page_flip

	lda	#75
	jsr	WAIT

	; must be even
	dec	HERO_Y
	dec	HERO_Y

	lda	HERO_Y
	cmp	#$f6
	bne	drop_jump_loop


	lda	#10
	sta	HERO_X

	;===============
	; Falling

drop_falling_loop:
;	while(ay<=20) {

	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	; draw line
	; only if HERO_Y>0
	lda	#$dd	; yellow
	sta	COLOR

	ldx	HERO_Y
	bmi	done_drop_vlin
	stx	V2
	ldx	#0

	lda	HERO_X
	sec
	sbc	#5
	tay

	jsr	vlin	; X,V2 at Y vlin(0,ay,ax-5);

done_drop_vlin:

	jsr	page_flip

	lda	#100
	jsr	WAIT

	inc	HERO_Y
	inc	HERO_Y
	lda	HERO_Y
	cmp	#20
	bne	drop_falling_loop


	lda	#0
	sta	ANIMATE_LOOP

more_drop_loop:

	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	; draw cut line
	lda	#$CC
	sta	COLOR

	lda	HERO_Y
	clc
	adc	ANIMATE_LOOP
	sta	V2

	ldx	HERO_Y

	lda	HERO_X
	sec
	sbc	#5
	tay

	jsr	vlin	; x,v2 at Y vlin(ay,ay+i,ax-5);

	jsr	page_flip

	lda	#75
	jsr	WAIT

	inc	ANIMATE_LOOP
	lda	ANIMATE_LOOP
	cmp	#13
	bne	more_drop_loop


	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	; draw hero

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	; slice
	; FIXME: should this be ground color?

	lda	#$cc	; lightgreen
	sta	COLOR

	ldx	#33
	stx	V2
	ldx	#20
	lda	#5
	tay

	jsr	vlin	; x,v2 at Y

	jsr	damage_enemy

	lda	#2
	sta	XPOS
	lda	#10
	sta	YPOS
	jsr	gr_put_num

	jsr	page_flip

	; wait 1.5s
	ldx	#150
	jsr	long_wait

	rts

	;=========================
	;=========================
	; Limit Break "Slice"
	; Run up and slap a bunch with sword
	; TODO: cause damage value to bounce around more?
	; TODO: run up to slice, not slide in
	;=========================
	;=========================

limit_break_slice:

	lda	#34
	sta	HERO_X
	lda	#20
	sta	HERO_Y

	lda	#5
	sta	DAMAGE_VAL_LO
	lda	#0
	sta	DAMAGE_VAL_HI

slice_run_loop:

	jsr	gr_copy_to_current

	jsr	draw_hero_and_sword

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	jsr	draw_battle_bottom

	jsr	page_flip

	lda	#50
	jsr	WAIT

	dec	HERO_X
	lda	HERO_X
	cmp	#10
	bcs	slice_run_loop		; bge

	;==================
	; Slicing

	lda	#20
	sta	ANIMATE_LOOP
slicing_loop:

	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	lda	ANIMATE_LOOP
	and	#1
	bne	slice_raised

slice_down:
	jsr	draw_hero_and_sword

	jmp	done_slice_down

slice_raised:

	jsr	draw_hero_victory

done_slice_down:

	jsr	damage_enemy

	; gr_put_num(2+(i%2),10+((i%2)*2),damage);
	lda	ANIMATE_LOOP
	and	#$1
	clc
	adc	#2
	sta	XPOS

	lda	ANIMATE_LOOP
	and	#$1
	asl
	clc
	adc	#10
	sta	YPOS

	jsr	gr_put_num

	jsr	draw_battle_bottom

	jsr	page_flip

	lda	#150
	jsr	WAIT

	dec	ANIMATE_LOOP
	bne	slicing_loop



	lda	#34
	sta	HERO_X
	lda	#20
	sta	HERO_Y

	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	; draw hero

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	jsr	page_flip

	; wait 1.5s
	ldx	#150
	jsr	long_wait

	rts

	;=========================
	;========================
	; Limit Break "Zap"
	; Zap with a laser out of the LED sword */
	;=========================
	;=========================

limit_break_zap:


	lda	#34
	sta	HERO_X
	lda	#20
	sta	HERO_Y

	lda	#$55
	sta	DAMAGE_VAL_LO
	lda	#$00
	sta	DAMAGE_VAL_HI

	jsr	gr_copy_to_current

	; Draw crossed line

;	color_equals(COLOR_AQUA);
	lda	#$ee
	sta	COLOR

;	vlin(12,24,34);

	ldx	#12
	lda	#24
	sta	V2
	ldy	#34

	jsr	vlin	; X, V2 at Y

;	hlin_double(ram[DRAW_PAGE],28,38,18);

	lda	#38
	sta	V2
	lda	#18
	ldy	#28
	jsr	hlin_double	; Y, V2 AT A

	; Sword in air
	jsr	draw_hero_victory

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	jsr	draw_battle_bottom

	jsr	page_flip

	; pause 0.5s
	ldx	#50
	jsr	long_wait



	lda	#32
	sta	ANIMATE_LOOP

zap_loop:
	jsr	gr_copy_to_current

	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy

	; rotate color
;	color_equals(i%16);
;	hlin_double(ram[DRAW_PAGE],5,30,22);

	lda	ANIMATE_LOOP
	jsr	SETCOL		; set color masked * 17

	lda	#30
	sta	V2
	lda	#22
	ldy	#5
	jsr	hlin_double	; Y, V2 AT A

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	jsr	page_flip

	lda	#75
	jsr	WAIT

	dec	ANIMATE_LOOP
	bne	zap_loop



	jsr	gr_copy_to_current

	; grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
	; draw enemy
	lda	ENEMY_X
	sta	XPOS
	lda	#20
	sta	YPOS
	jsr	draw_enemy


	; draw hero

	jsr	draw_hero_and_sword

	jsr	draw_battle_bottom

	jsr	damage_enemy

	lda	#2
	sta	XPOS
	lda	#10
	sta	YPOS
	jsr	gr_put_num

	jsr	page_flip

	; wait 1.5s
	ldx	#150
	jsr	long_wait

	rts



