
;o^^Aj[VW[ by
;VXe`t@C

*ani_define

;őAj[V
	numalias max_ani_num,10


	numalias ani_param,0

	dim ?ani_param[max_ani_num-1][8]
	numalias ani_flag,0
	numalias ani_type,1
	numalias ani_sp,2
	numalias ani_sx,3
	numalias ani_sy,4
	numalias ani_ax,5
	numalias ani_ay,6
	numalias ani_timer,7
	numalias ani_time,8

	defsub ani_add
	defsub ani_wait
	defsub ani_delay
	defsub ani_delay2
	defsub ani_isact
	defsub ani_stop

	gosub *ani_define2

	gosub *timer_define
return



*timer_define
	defsub timer_init
	defsub timer_start
	defsub timer_end
return

*timer_init
	resettimer
return

*timer_start
	getparam i%30
	gettimer %%30
return

*timer_end
	getparam i%30
	gettimer %31
	mov %%30,%31-%%30
return



*ani_add
	getparam %0,%1,%2,%3,%4,%5,%6
	for %10=0 to max_ani_num-1 step 1
		if ?ani_param[%10][ani_flag] != 0 jumpf
		mov ?ani_param[%10][ani_flag], 1
		mov ?ani_param[%10][ani_type], %0
		mov ?ani_param[%10][ani_sp], %1
		mov ?ani_param[%10][ani_sx], %2
		mov ?ani_param[%10][ani_sy], %3
		mov ?ani_param[%10][ani_ax], %4
		mov ?ani_param[%10][ani_ay], %5
		timer_start %0
		mov ?ani_param[%10][ani_timer], %0
		mov ?ani_param[%10][ani_time], %6
		break
~
	next
return

*ani_act
	for %20=0 to max_ani_num-1 step 1
		if ?ani_param[%20][ani_flag] == 0 jumpf

		itoa $0,?ani_param[%20][ani_type]
		len %21,$0
		for %21=%21 to 3-1 step 1 mov $0,"0"+$0:next
		mov $20,"*ani_act_"+$0
		gosub $20
;		if ?ani_param[%20][ani_type] == 0 gosub *ani_act_00
;		if ?ani_param[%20][ani_type] == 1 gosub *ani_act_01
~
	next
;	print 1
return

*ani_act_end
	mov $21,$20+"_end"
	gosub $21
return

*ani_stop
	getparam %0
	for %1=0 to max_ani_num-1 step 1
		if ?ani_param[%1][ani_sp] != %0 jumpf
		if ?ani_param[%1][ani_flag] == 0 jumpf
		mov %20,%1
		itoa $0,?ani_param[%20][ani_type]
		len %21,$0
		for %21=%21 to 3-1 step 1 mov $0,"0"+$0:next
		mov $20,"*ani_act_"+$0
		gosub *ani_act_end
;		mov ?ani_param[%1][ani_flag],0
;		amsp ?ani_param[%1][ani_sp],?ani_param[%1][ani_sx]+?ani_param[%1][ani_ax],?ani_param[%1][ani_sy]+?ani_param[%1][ani_ay]
;		print 1
		break
~
	next
return

*ani_wait
	getparam %5
	timer_start %0
	for %1=0 to 1 step 0
		gosub *ani_act
		print 1
		mov %2,%0
		timer_end %2
		if %2 >= %5 break
	next
return

*ani_delay
	getparam %5
	timer_start %0
	for %1=0 to 1 step 0
		lr_trap off
		gosub *ani_act
		print 1
		lr_trap *ani_delay_break_trap
		waittimer 10
		mov %2,%0
		timer_end %2
		if %2 >= %5 break
		jumpf
*ani_delay_break_trap
break
~
	next
	lr_trap off
return

*ani_delay2
	getparam %5,i%6
	mov %%6,0
	timer_start %0
	for %1=0 to 1 step 0
;		lr_trap off
		gosub *ani_act
		lr_trap *ani_delay2_break_trap
		print 1
		waittimer 20
		lr_trap off
		mov %2,%0
		timer_end %2
		if %2 >= %5 break
		jumpf
*ani_delay2_break_trap
mov %%6,1
break
~
	next
	lr_trap off
return

*ani_isact
	getparam i%0
	for %1=0 to max_ani_num-1 step 1
		if ?ani_param[%1][ani_sp] == %%0 break
	next
	if %1 == max_ani_num mov %%0, 0:return
	mov %%0, ?ani_param[%1][ani_flag]
return
