Gnilda のページ


小技 ? — FINAL FANTASY V


  1. ホーム
  2. スーパーファミコンのサウンドドライバ
  3. FINAL FANTASY V
  4. 小技

小技 ?

小技 ?

多重ループでループ内条件ジャンプコマンドを使用し、フローを制御する

ループ内条件ジャンプコマンドでジャンプをする場合は FINAL FANTASY IV とは異なり、ループ開始位置設定コマンドで初期化されるカウントダウンカウンタの値が変化しないため、自動的に再内ループを抜けません。

外側のループ処理が存在する場合は、ループ終了コマンドでカウントダウンカウンタの値を 0 にする必要があります。

ループ終了コマンドでカウントダウンカウンタの値を 0 にして再内ループを終了する
	︙
	F0 01							;ループ開始位置 A (1 + 1 回)
		F0 01						;ループ開始位置 B (1 + 1 回)
			F0 03					;ループ開始位置 C (3 + 1 回)
				EA 20	_A4			;C 音色 $20
				EA 21				;C 音色 $21
				F9 07 L_ab7			;C F9 チェック回数 C ⇒ 1 , 3 , 5 ,"7"
						_A4			;C 音色 $21
				EA 20	_A8 _A8		;C 音色 $20
				EA 21				;C 音色 $21
				F9 04 L_ab4			;C F9 チェック回数 C ⇒ 2 ,"4", 6
						_A4			;C 音色 $21
			F1						;C ループ開始位置 C にジャンプ, カウンタ C ⇒ 3,  1
!L_ab4
						_A8			;C 音色 $21
				EA 20	_A8			;C 音色 $20
!L_ab7								;1 バイト削減
			F1						;C ループ開始位置 C にジャンプ, カウンタ C ⇒ 2
;!L_ab7
;			F1						;C ループ終了, カウンタ C ⇒ 0

					_A8				;B 音色 $21
			EA 20	_A4 _A8			;B 音色 $20
			EA 21	_A8				;B 音色 $21
			F9 02 L_a2				;B F9 チェック回数 B ⇒ 1 ,"2"
			EA 20	_A8				;B 音色 $20
!L_a2								;1 バイト削減
		F1							;B ループ開始位置 B にジャンプ, カウンタ B ⇒ 1
;!L_a2
;		F1							;B ループ終了, カウンタ B ⇒ 0
		EA 21	_A16 _A16			;A 音色 $21
	F1								;A ループ開始位置 A にジャンプ, カウンタ A ⇒ 1, 0
↑の B と C のループ処理を展開
	︙
	F0 01					;ループ開始位置 A (1 + 1 回)
		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A4			;C 音色 $21

		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A8			;C 音色 $21		L_ab4
		EA 20	_A8			;C 音色 $20

		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A4			;C 音色 $21

		EA 20	_A4			;C 音色 $20
		EA 21				;C 音色 $21
				_A8			;B 音色 $21		L_ab7
		EA 20	_A4 _A8		;B 音色 $20
		EA 21	_A8			;B 音色 $21
		EA 20	_A8			;B 音色 $20

		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A4			;C 音色 $21

		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A8			;C 音色 $21		L_ab4
		EA 20	_A8			;C 音色 $20

		EA 20	_A4			;C 音色 $20
		EA 21	_A4			;C 音色 $21
		EA 20	_A8 _A8		;C 音色 $20
		EA 21	_A4			;C 音色 $21

		EA 20	_A4			;C 音色 $20
		EA 21				;C 音色 $21
				_A8			;B 音色 $21		L_ab7
		EA 20	_A4 _A8		;B 音色 $20
		EA 21	_A8			;B 音色 $21
				_A16 _A16	;A 音色 $21		L_a2
	F1						;A ループ開始位置 A にジャンプ, カウンタ A ⇒ 1, 0