とりあえずエフェクト表示が一揃いできた


2018年 2月15日
 
 
 あーしんど
 
 
 やっぱり 2ヶ月かかった、エフェクトは思ったより大変だという事が分かった。

 今回は魔法の地、光、闇と、特殊攻撃、それから麻痺やスタン、火傷なんかのエフェクトだ。
 
 


 
 
 一つ押し出してるのは、光の魔法サイキックフォースだ。

 実は光の魔法、フォースセンス(速さ上昇)、サイキックフォース、レイブレイドといった魔法でジ○ダイの騎士ごっこができるようになっているのだ、フフフ。

 バグてんこもりで、まだ挙動が 100%では無いが、とりあえず一段落。

 気に入らないエフェクトについては追々直していこう。
 
 
 
 この後、戦闘のソースを最適化、というか整理する予定なので、あんまり意味は無いが、とりあえず現時点でのソースを。
 
 

#deffunc efsx ; 座標x

	if efsn2<=3 : ef(efg+6)=bcx1(efsn2)+40		; x
	if efsn2>=4 : ef(efg+6)=bcx2(efsn2-3)+40	; x

	return


#deffunc efsm int efsmf ; 向き

	repeat 1
	 if efsmf=1 : eff(efg2+0)=1.0  : eff(efg2+1)=1.0  : break ; 正
	 if efsmf=2 : eff(efg2+0)=-1.0 : eff(efg2+1)=1.0  : break ; 左右反転
	 if efsmf=3 : eff(efg2+0)=1.0  : eff(efg2+1)=-1.0 : break ; 上下反転
	 if efsmf=4 : eff(efg2+0)=-1.0 : eff(efg2+1)=-1.0 : break ; 全反転
	loop

	if efsn2<=3 : eff(efg2+0)*=-1.0	; 左の隊の場合の反転

	return

#deffunc efs int efsf,int efsn1,int efsn3,int efsd,int efsa,int efse ; int efsx,int efsy,int dfsr,int dfsrn
; エフェクトセット(フラグ、グラ、速さ、反転、移動時間、透明か加算か); 動きx、動きy、回転、回転速度)

	if efsf=0 : return

	f=0
	repeat efb ; No,ピック
	 if ef(efd*cnt)=0 : efg=efd*cnt : efg2=4*cnt : f=1 : break
	loop
	if f=0 : return ; 空きが無い


	ef(efg)=efsf		; 表示種類
	ef(efg+1)=efsn1		; グラNo.
	ef(efg+2)=efsn2		; 表示場所
	ef(efg+3)=0			; アニメカウント
	ef(efg+4)=0			; アニメ速さカウント
	ef(efg+5)=efsn3		; アニメ速さ
	ef(efg+6)=0			; x
	ef(efg+7)=btly1+65	; y
	ef(efg+8)=0			; 動きx
	ef(efg+9)=0			; 動きy
	ef(efg+10)=efse		; 表示種類(0=通常、1=加算)
	ef(efg+11)=efsa		; 移動時間

	repeat 4
	 eff(efg2+cnt)=0.0 ; リセット
	loop


	switch efsf ; 表示種類
	 case 1 ; 敵固定
	  if fs=1 : efsn2=et+3 : else : efsn2=et ; 場所x
	   efsx		; x
	  efsm efsd	; 向き
	 swbreak
	 case 2 ; 投射
	  if fs=1 : efsn2=ut : else : efsn2=ut+3 ; 場所x
	  if efsn1=48 : if fs=1 : efsn2=4 : else : efsn2=1 ; ウインドストーム
	   efsx	; x

	  n=ut+et-1 : ef(efg+8)=(btlxk*n+btlck)/efsa : if fs=2 : ef(efg+8)*=-1 ; 距離とスピード
	  if itn=289 : ef(efg+8)=(btlxk*2)/efsa : if fs=2 : ef(efg+8)*=-1

	  efsm efsd	; 向き
	  if id(ig+19)=7 : nf1=-1.0 : nf2=1.0 : else : nf1=1.0 : nf2=-1.0 ; 弓
	  ; if fs=1 : eff(efg2+0)=nf1 : else : eff(efg2+0)=nf2	; 向きx
	  ;eff(efg2+1)=1.0	; 向きxy
	 swbreak
	 case 3 ; 自分固定
	  if fs=1 : efsn2=ut : else : efsn2=ut+3 ; 場所x
	  efsx	; x
	  efsm efsd	; 向き
	 swbreak
	 case 4 ; 全体
	  et=2 : n1=3 : n2=0
	   if itn=312 : n1=0 : n2=3
	   if fs=1 : efsn2=et+n1 : else : efsn2=et+n2 ; 場所x
	   efsx ; x
	  efsm efsd	; 向き
	 swbreak
	 case 5 ; 召還
	  if fs=1 : efsn2=smn : else : efsn2=smn+3 ; 場所x
	   efsx ; x
	  efsm efsd	; 向き
	 swbreak
	 case 6 ; リザレクション
	  if fs=1 : efsn2=rt : else : efsn2=tr+3 ; 場所x
	   efsx ; x
	  efsm efsd	; 向き
	 swbreak
	 case 7 ; 咆哮、ホーリーブレス、ポイズンブレス
	  if fs=1 : ef(efg+6)=bcx2(1)+40 : else : ef(efg+6)=bcx1(1)+40 ; 場所x
	  if efsn=78 : if fs=1 : ef(efg+6)=bcx2(1) : else : ef(efg+6)=bcx1(1) ; ポイズンブレス

	  ef(efg+8)=(btlxk*2)/efsa : if fs=2 : ef(efg+8)*=-1 ; 距離とスピード

	  if fs=1 : efsn2=1 : else : efsn2=4
	   efsm efsd	; 向き
	 swbreak
	swend


; 回転
	if efsn1=5  : if efsn2<=3 : eff(efg2+2)=0.6  : else : eff(efg2+2)=-0.6	; 曲刀
	if efsn1=7  : if efsn2<=3 : eff(efg2+2)=-0.3 : else : eff(efg2+2)=0.3	; 刺突剣
	if efsn1=11 : if efsn2<=3 : eff(efg2+2)=-0.9 : else : eff(efg2+2)=0.9	; 大剣
	if efsn1=13 : if efsn2<=3 : eff(efg2+2)=0.6  : else : eff(efg2+2)=-0.6	; 槌
	;if efsn1=14 : if efsn2<=3 : eff(efg2+2)=0.3 : else : eff(efg2+2)=-0.3	; 杖
	if efsn1=19 : if efsn2<=3 : eff(efg2+2)=1.6 : else : eff(efg2+2)=-1.6	; 大砲

	if efsn1=20 : if efsn2<=3 : eff(efg2+2)=1.6 : else : eff(efg2+2)=-1.6	; フャイヤー
	if efsn1=24 : if efsn2<=3 : eff(efg2+2)=0.6 : else : eff(efg2+2)=-0.6	; フレイムアロー

	if efsn1=30 : if efsn2<=3 : eff(efg2+2)=-1.9 : else : eff(efg2+2)=1.9	; アイスニードル
	if efsn1=31 : if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6	; ウォーターストリーム
	;if efsn1=32 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ピュリファイ
	if efsn1=33 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; アイスエンチャント
	if efsn1=34 { ; アイスジャベリン
		eff(efg2+0)=0.2 : eff(efg2+1)=1.8
		ef(efg+3)=10 : ef(efg+11)=30
		if efsn2<=3 : eff(efg2+2)=-1.6  : else : eff(efg2+2)=1.6
	}
	if efsn1=35 : eff(efg2+2)=-1.7 : eff(efg2+2)=1.7	; アイスピラー
	if efsn1=38 { ; メイルシュトローム
		eff(efg2+0)=2.5 : eff(efg2+1)=1.0
		ef(efg+7)+=24
	}
	if itn=270 { ; ブリザード
	 n1=ef(efg+6)-btlxk : n2=ef(efg+6)+btlxk ; x
	 eff(efg2+0)=0.8 : eff(efg2+1)=0.8

	 repeat 2 : cnt2=cnt ; 左右のブリザード
	  repeat efb ; No,ピック
	   efg=efd*cnt : efg2=4*cnt : if ef(efg)>0 : continue 
		ef(efg)=efsf		; 表示種類
		ef(efg+1)=efsn1		; グラNo.
		ef(efg+3)=0			; アニメカウント
		ef(efg+4)=0			; アニメ速さカウント
		ef(efg+5)=efsn3		; アニメ速さ
		if cnt2=0 : ef(efg+6)=n1	; x
		if cnt2=1 : ef(efg+6)=n2	; x
		ef(efg+7)=btly1+65	; y
		ef(efg+8)=0			; 動きx
		ef(efg+9)=0			; 動きy
		ef(efg+10)=efse		; 表示種類(0=通常、1=加算)
		ef(efg+11)=efsa		; 移動時間

		repeat 4
		 eff(efg2+cnt)=0.0 ; リセット
		loop
		efsm efsd	; 向き
		eff(efg2+0)=0.8 : eff(efg2+1)=0.8
		break
	  loop
	 loop
	}

	if efsn1=40 : eff(efg2+0)=1.0 : eff(efg2+1)=0.3	; ウインドカッター
	if efsn1=41 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ウインドムーブ
	if efsn1=42 : eff(efg2+0)=0.6 : eff(efg2+1)=0.6	; サンダー
	if efsn1=43 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ウィンドエンチャント
	if efsn1=44 : eff(efg2+0)=0.8 : eff(efg2+1)=1.8	; サンダーウエポン
	if efsn1=47 { ; ライトニングボルト
		eff(efg2+0)=0.5 : eff(efg2+1)=3.0
		if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6
	}
	if efsn1=48 {
		eff(efg2+0)=1.4 : eff(efg2+1)=1.4	; ウィンドストーム}
		if fs=1 : ef(efg+6)-=40 : else : ef(efg+6)+=40 ; x
	}
	if efsn1=49 : eff(efg2+0)=1.3 : eff(efg2+1)=1.3	: ef(efg+7)-=20 ; アースキュア
	if efsn1=50 : eff(efg2+0)=1.2 : eff(efg2+1)=1.2	; ハードコーティング
	if efsn1=51 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ネイチャーヒール
	if efsn1=52 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; グラヴィティマグネット
	if efsn1=55 : if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6	; ストーンブラスト
	if efsn1=57 : eff(efg2+1)=1.3 : ef(efg+7)+=15	; アースクエイク
	if efsn1=58 : eff(efg2+0)=1.2 : eff(efg2+1)=1.2 : ef(efg+7)-=15	; ネイチャーヒール2
	if efsn1=60 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ヒール
	if efsn1=61 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8	; ターンアンデッド
	if efsn1=62 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; フォースセンス
	if efsn1=64 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ホーリーウエポン
	if efsn1=66 : eff(efg2+0)=1.0 : eff(efg2+1)=1.7	; レイアロー
	if efsn1=67 : if efsn2<=3 : eff(efg2+2)=1.6  : else : eff(efg2+2)=-1.6	; サイキックフォース
	if efsn1=68 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ブレス
	if efsn1=69 : eff(efg2+0)=1.7 : eff(efg2+1)=1.7	: ef(efg+6)-=1 : ef(efg+7)-=60	; ホーリーライトサークル
	if efsn1=70 : eff(efg2+0)*=0.9 : eff(efg2+1)*=0.9 : ef(efg+7)-=10	; レイブレイド
	if efsn1=71 : eff(efg2+0)=5.0 : eff(efg2+1)=0.7 : ;ef(efg+7)-=10	; レイブレイド
	if efsn1=73 : eff(efg2+0)=0.9 : eff(efg2+1)=0.9	; マインドブラスト
	if efsn1=74 : eff(efg2+0)=1.6 : eff(efg2+1)=1.6	; ポイズン
	if efsn1=75 : eff(efg2+0)=2.0 : eff(efg2+1)=2.0	; 邪眼
	if efsn1=80 : eff(efg2+0)=1.4 : eff(efg2+1)=1.4	; フレイムカース
	if efsn1=83 : eff(efg2+0)=0.7 : eff(efg2+1)=0.7	; ナイトメア
	if efsn1=84 or efsn1=85 {	; ファイヤーブレス、コールドブレス
		eff(efg2+0)=0.5 : eff(efg2+1)=1.8
		if fs=1 : eff(efg2+0)*=-1.0  : eff(efg2+1)*=-1.0 : eff(efg2+2)=1.5 : ef(efg+6)-=20
		if fs=2 : eff(efg2+0)*=-1.0  : eff(efg2+1)*=1.0  : eff(efg2+2)=1.6 : ef(efg+6)+=20
	}
	if efsn1=87 : eff(efg2+0)=2.0 : eff(efg2+1)=1.0	; ホーリーブレス
	if efsn1=91 : eff(efg2+0)=0.8 : eff(efg2+1)=0.8 : ef(efg+7)-=40	; スタン

	return


#deffunc efp ; エフェクトプット

	repeat efb
	 efg=efd*cnt : efg2=4*cnt ; データの先頭
	 if ef(efg)=0 : continue ; 無い
	 ef(efg+4)+ : if ef(efg+4)>=ef(efg+5) : ef(efg+3)+ : ef(efg+4)=0 : ; アニメウエイト処理

	 if ef(efg+10)=0 : gmode 3,,,255 : else : gmode 5,,,255 ; 透明、加算

	 pos ef(efg+6),ef(efg+7)
	  celput efw(ef(efg+1)),ef(efg+3),eff(efg2+0),eff(efg2+1),eff(efg2+2)
	 if ef(efg+3)>=efga(ef(efg+1)) : ef(efg)=0 : break ; アニメ
	 if ef(efg+3)<=ef(efg+11) : ef(efg+6)+=ef(efg+8) ; 動きx
	 ef(efg+7)+=ef(efg+9) ; 動きy
	 eff(efg2+2)+=eff(efg2+3) ; 回転
	loop

	return


#deffunc bts1 ; 素アタック

	if us=6 or us=11 or us=13 or us=33 or us=36 or us=46 or us=51 or us=72 or us=74 or us=97 or us=111 or us=167 or us=181 or us=185 or us=205 : efs 1,3,2,1 : return ; 牙
	if us=71 or us=92 or us=96 or us=118 or us=132 or us=184 : efs 1,2,2,2 : return ; 爪
	if us=7 or us=16 or us=52 or us=135 or us=168 : efs 1,4,2,2 : return ; 尾
	if us=1 or us=8 or us=12 or us=32 or us=35 or us=43 or us=50 or us=73 or us=94 or us=95 or us=112 or us=120 or us=151 or us=152 or us=153 or us=169 or us=183 or us=190 or us=192 : efs 1,9,2,1 : return ; 体当たり
	efs 1,1,2,1 ; 素手

	return


#deffunc bts2 ; 近接武器アタック

	if itn=10 or itn=11 or itn=16 or itn=24 : efs 1,5,1,1 : return ; 曲刀
	if itn=12 or itn=15 or itn=23 : efs 1,7,2,2 : return ; 刺突剣
	if id(ig+19)=1 : efs 1,15,2,2 : return ; 剣
	if id(ig+19)=2 : efs 1,11,2,1 : return ; 大剣
	if id(ig+19)=3 : efs 1, 8,2,1 : return ; 槍
	if id(ig+19)=4 : efs 1,12,2,2 : return ; 斧
	if id(ig+19)=5 : efs 1,13,2,2 : return ; 槌
	if id(ig+19)=6 : efs 1,14,2,4 : return ; 杖

	return


#deffunc bts3 ; 投射武器アタック

	if id(ig+19)=7	: efs 2,16,1,1,8	: return ; 弓
	if id(ig+19)=8	: efs 2,18,1,2,9	: return ; ボウ
	if itn=90		: efs 2,19,2,1,11	: return ; 大砲
	if id(ig+19)=9	: efs 1,17,1,1,0	: return ; 銃

	return


#deffunc bts4 ; 魔法

	if itn=251 : efs 2,20,2,3,17,1	: return	; ファイヤー
	if itn=252 : efs 3,21,1,1,0 ,1	: return	; ファイヤーウェポン
	if itn=253 : efs 3,22,2,1,0 ,1	: return	; バーサーク
	if itn=254 : efs 1,23,2,1,0 ,1	: return	; ファイヤーピレイム
	if itn=255 : efs 2,24,1,1,15,1	: return	; フレイムアロー
	if itn=256 : efs 3,25,1,1,0 ,1	: return	; バトルソング
	if itn=257 : efs 2,26,1,1,7 ,1	: return	; ファイアーボール
	if itn=258 : efs 4,28,3,1,0 ,1	: return	; ファイヤーウォール
	if itn=259 : efs 4,29,3,1,0 ,1	: return	; エクスプロージョン

	if itn=261 : efs 2,30,1,3,18,1	: return	; アイスニードル
	if itn=262 : efs 2,31,2,3,15,1	: return	; ウォーターストリーム
	if itn=263 : efs 3,59,1,1,0 ,1	: return	; ピュリファイ
	if itn=264 : efs 3,33,1,1,0 ,1	: return	; アイスエンチャント
	if itn=265 : efs 2,34,1,1,18,1	: return	; アイスジャベリン
	if itn=266 : efs 1,35,3,4,0 ,0	: return	; アイスピラー
	if itn=267 : efs 3,36,2,1,0 ,1	: return	; ウォータースクリーン
	if itn=268 : efs 4,37,3,1,0 ,1	: return	; 津波
	if itn=269 : efs 4,38,3,1,0 ,1	: return	; メイルシュトローム
	if itn=270 : efs 4,39,2,1,0 ,1	: return	; ブリザード

	if itn=281 : efs 2,40,1,1,8 ,1	: return	; ウインドカッター
	if itn=282 : efs 3,41,2,1,0 ,1	: return	; ウインドムーブ
	if itn=283 : efs 1,42,1,1,0 ,0	: return	; サンダー
	if itn=284 : efs 3,43,1,1,0 ,0	: return	; ウィンドエンチャント
	if itn=285 : efs 3,44,1,1,0 ,1	: return	; サンダーウエポン
	if itn=286 : efs 4,45,2,1,0 ,0	: return	; セイレーンボイス
	if itn=287 : efs 3,46,2,1,0 ,1	: return	; ウィンドウォール
	if itn=288 : efs 4,47,2,1,0 ,1	: return	; ライトニングボルト
	if itn=289 : efs 2,48,3,1,20,1	: return	; ウィンドストーム

	if itn=291 : efs 3,49,2,1,0 ,1	: return	; アースキュア
	if itn=292 : efs 3,50,2,1,0 ,1	: return	; ハードコーティング
	if itn=293 : efs 3,58,2,1,0 ,1	: return	; ネイチャーヒール
	if itn=294 : efs 1,52,1,1,0 ,1	: return	; グラヴィティマグネット
	if itn=295 : efs 3,53,2,1,0 ,1	: return	; グラビティウエポン
	if itn=296 : efs 1,54,2,1,0 ,1	: return	; バインディングブランチ
	if itn=297 : efs 2,55,2,1,14,0	: return	; ストーンブラスト
	if itn=298 : efs 5,56,2,1,0 ,1	: return	; ゴーレムクリエイト
	if itn=299 : efs 4,57,3,1,0 ,0	: return	; アースクエイク

	if itn=301 : efs 3,60,1,1,0 ,1	: return	; ヒール
	if itn=302 : efs 1,61,2,1,0 ,1	: return	; ターンアンデッド
	if itn=303 : efs 3,62,1,1,0 ,1	: return	; フォースセンス
	if itn=304 : efs 3,63,2,1,0 ,1	: return	; ホーリーライトキュア
	if itn=305 : efs 3,64,1,1,0 ,1	: return	; ホーリーウエポン
	if itn=306 : efs 3,65,2,1,0 ,1	: return	; プロテクト
	if itn=307 : efs 2,66,1,2,5 ,1	: return	; レイアロー
	if itn=308 : efs 2,67,1,3,8 ,1	: return	; サイキックフォース
	if itn=309 : efs 3,68,1,1,0 ,1	: return	; ブレス
	if itn=310 : efs 3,69,1,1,0 ,1	: return	; ホーリーライトサークル
	if itn=311 : efs 1,70,2,2,0 ,1	: return	; レイブレイド
	if itn=312 : efs 4,71,3,1,0 ,1	: return	; ホーリーライトヒール
	if itn=313 : efs 5,72,2,1,0 ,1	: return	; ウィル・オ・ウィスプ
	if itn=314 : efs 6,32,2,1,0 ,1	: return	; リザレクション

	if itn=321 : efs 1,73,1,1,0 ,1	: return	; マインドブラスト
	if itn=322 : efs 1,74,2,1,0 ,1	: return	; ポイズン
	if itn=323 : efs 1,75,2,1,0 ,0	: return	; 邪眼
	if itn=324 : efs 1,76,1,1,0 ,1	: return	; チャーム
	if itn=325 : efs 1,77,1,1,0 ,1	: return	; ウィークネス
	if itn=326 : efs 1,78,2,1,0 ,1	: return	; カース
	if itn=327 : efs 1,79,1,1,0 ,1	: return	; ダークネス
	if itn=328 : efs 1,80,2,1,0 ,1	: return	; フレイムカース
	if itn=329 : efs 5,81,2,1,0 ,1	: return	; デモンズゲート

	return


#deffunc bts5 int bts5f; その他のエフェクト

	if itn=257 : efs 1,27,1,1,0 ,1	: return	; ファイアーボールの爆発

	if bts5f=1 : efs 3,90,1,1,0 ,1	: return	; 麻痺
	if bts5f=2 : efs 3,91,2,1,0 ,0	: return	; スタン
	if bts5f=3 : efs 3,92,1,1,0 ,1	: return	; 魅惑
	if bts5f=4 : efs 3,93,2,1,0 ,1	: return	; 火傷
	if bts5f=5 : efs 3,74,2,1,0 ,1	: return	; 毒


	return

#deffunc bts6 int bts6f ; 特殊

	if bts6f=1  : efs 1,76,1,1,0 ,1	: return	; チャーム
	if bts6f=2  : efs 5,81,2,1,0 ,1	: return	; ネクロマンサー
	if bts6f=3  : efs 1,82,1,1,0 ,1	: return	; 吸血
	if bts6f=4  : efs 1,83,1,1,0 ,1	: return	; ナイトメア
	if bts6f=5  : efs 4,84,1,1,0 ,1	: return	; ファイヤーブレス
	if bts6f=6  : efs 4,85,1,1,0 ,1	: return	; コールドブレス
	if bts6f=7  : efs 4,47,2,1,0 ,1	: return	; サンダーブレス
	if bts6f=8  : efs 7,86,1,1,14,1	: return	; 咆哮
	if bts6f=9  : efs 4,87,1,1,0 ,1	: return	; ホーリーブレス
	if bts6f=10 : efs 7,78,2,1,19,1	: return	; ポイズンブレス
	if bts6f=11 : efs 4,37,3,1,0 ,1	: return	; 津波
	if bts6f=12 : efs 1,89,2,1,0 ,1	: return	; 火の息
	if bts6f=13 : efs 1,27,1,1,0 ,1	: return	; ファイアーボールの爆発
	if bts6f=14 : efs 2,26,1,1,7 ,1	: return	; ファイアーボール
	if bts6f=15 : efs 4,29,3,1,0 ,1	: return	; ファイアーストーム
	if bts6f=16 : efs 4,39,2,1,0 ,1	: return	; コールドストーム
	if bts6f=17 : efs 1,80,2,1,0 ,1	: return	; ダークスフィア
	if bts6f=18 : efs 2,48,3,1,20,1	: return	; ウィンドストーム

	return

 
 
 次はアイテムの戦闘プログラムか、続いて戦闘ソースを全部最適化(整理)する予定。

 たぶんそれだけで、1ヶ月はまたかかるんだろうなぁ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です