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ヶ月はまたかかるんだろうなぁ。