☆ベルトアクション作成 Beats of rageスレッド☆ (656レス)
☆ベルトアクション作成 Beats of rageスレッド☆ http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
128: 名前は開発中のものです。 [sage] 2021/05/10(月) 00:23:14.55 ID:LcOGIvvu >>116 のスクリプト中に clearspawnentry(); setspawnentry("name", "Charm"); void Ceff = spawn(); setentityvar(Ceff, 1, target); bindentity(Ceff, target, 0, 1, 0, 0, 0, 0); このような感じでMODEL.txt で設定した Entity CharmをBindentityしてあげると name Charm の親Entity(攻撃がヒットした相手)の情報がCharmに収納され 一定時間(delay 1100) frame data/chars/misc/empty.gifが実行されると Frame==3で 元のEntity、changeentityproperty(Parent,"type",openborconstant("TYPE_ENEMY")に戻ることになります。 こういう閃きが出来る方って本当に凄いと尊敬します。 私はスクリプトの中身を読んで「ほへ〜凄いなー」となって、何も考えずコピーして「動いたー!」 さっそくスレに書き込むことしかしないので、どういう経緯でこうなるのか基本全く分かりません。 世の中には凄い人が沢山いるものです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/128
129: 名前は開発中のものです。 [sage] 2021/05/10(月) 01:02:42.20 ID:LcOGIvvu >>126 さん、私は適当に人様のMOD内を覗き込んで、スゲーと思ったことを こちらに転載してるだけなので、何の取り柄もありませんが分かる範囲では、 敵同士の「重なり判定」については謎になってます。 きっと調べる手段はあると思います。 実際、画面上に存在するキャラ(TYPE_ENEMY)の数をカウントするコマンドは存在します、 カウント数からPROPERTYを取得、さらに座標を取得して、互いにぶつからない様処理することは たぶんですが、可能だとは思います。 MODのMIXMASTERSでは、そのコマンドを利用して画面上の全ての敵、味方にHPアップや 一斉攻撃などを実現していました。 プレイヤーについてはGetPlayerPropertyで1〜4プレイヤーの情報取得が簡単になってます。 しかし敵については漏れることもあり(画面端でボーっとしてたりw)、けっこう大雑把でもありました。 一番簡単なところでは、各敵キャラをSPAWNさせる際に changeentityproperty(vSpawn, "speed", (rand()%14)+6); 動くか分かりません。 こんな風に移動速度("speed")にランダム要素を組み込む感じで、 移動速度をずらす位にして置いたほうが悶絶しなくて済むかもです。 Entityの性格づけにSubtypeやAimoveなどいくつか設定できるものもありますが、 敵同士で移動の衝突判定して、それを避けるようなものは私はまだ見た事がありません。 そこまで細かく判定してないからこれだけOpenBoR Engineが軽いんじゃないかな?と想像してます。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/129
130: 名前は開発中のものです。 [sage] 2021/05/10(月) 01:16:10.44 ID:LcOGIvvu せっかくラッシュな感じで敵を大量に出現させても、 重なって団子になってしまうと興ざめな部分もありますよね。 かといって敵があまりにランダムな動きをしてしまうと、 それはそれで、、、となってしまいます。 このスレでも度々お世話になっている、kt住江氏のMODを遊んでいると、 絶妙な敵のコンビネーション(ザコは固まるし、バラける、ボスは適度に意地悪) ステージの作り方でどちらも一方的にならないように工夫されているなど、 OpenBoRの基本システムだけで表現しているので、とても参考になるかと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/130
131: 名前は開発中のものです。 [] 2021/05/10(月) 02:53:40.87 ID:snJfXwVZ >>129さん ご丁寧に返信いただきありがとうございます。 私も自分なりにマニュアルを読みましたがわからず相談させていただきました。 頂いた代替案も参考にさせて頂きつつもうちょっと粘ってみます。 ありがとうございました!! http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/131
132: 名前は開発中のものです。 [sage] 2021/05/10(月) 09:21:40.27 ID:iq7vM874 敵の動きについては昔2016年頃のMODだと AiMove1やAiMove2など思考に優先順位を付ける事ができたようす 最近のBoRエンジンでは省略されたぽい 公式でも話題になってた。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/132
133: 名前は開発中のものです。 [sage] 2021/05/10(月) 10:46:10.08 ID:iq7vM874 今ふと思いついただけなんですが 敵のidleやwalkにattackコマンドをダメージ0で記述して painにmove-1とかすれば敵同士重なったら多少ずれるかな? http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/133
134: 名前は開発中のものです。 [sage] 2021/05/11(火) 00:12:34.39 ID:W5SAA6KE やってみました。 敵のヘッダーにcandamage player enemyと記述 Anim WalkにAttack6(普段あまり使わない、MODELS.txtにMaxAttacks 99など必要)を ダメージ 0、吹っ飛び無し 0、必中 1、エフェクト無し 1、で設定 そしてAnim Pain6(Attack6がヒットしたとき専用リアクション)に適当に Delay 12くらいでMove -16とFrame 〜といった感じに。 プレイヤー側にはAnim Pain6をリアクションしないように設定 Delay 1でFrame 〜Empty.gifとか 結果、敵同士がぶつかる(Attack6がヒット)すると、敵Anim Pain6の処理のおかげで 立ち止まったり、Move分移動したりはできた。 が、OpenBoRのシステム上、攻撃がヒットするとヒットした方向を自動で向くため なんとも野暮ったい感じに(お前が先いけよ、どうぞどうぞみたいなw)、 あとCandamage player enemyのせいで、敵の通常攻撃も敵にヒットするようになり(当たりまえですが) これはこれで、同士討ちは面白いのでこういう敵(中・大型の敵味方かまわない感じの)を少々混ぜる分には良いかも。 ファンタジーの中ボスが味方を蹴散らして乱入みたいな演出に良いかも? しかし、通常の敵に仕込んでも苦労の割りに効果は「渋滞と同士討ちが発生する」なので、 適当にNPCをSPAWNさせて標的を散らすほうが簡単かも。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/134
135: 名前は開発中のものです。 [sage] 2021/05/11(火) 00:32:56.22 ID:W5SAA6KE 上のAttack6はattackコマンドの方で、Anim Attack6ではありません。 Attack6 0 0 100 100 0 0 1 1 0 15の方です。 この攻撃がヒットした際にAnim Pain6が存在すると、 このAnimが優先して実行されます。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/135
136: 名前は開発中のものです。 [] 2021/05/11(火) 21:24:05.65 ID:hyfsamfM >>134さん なんと!!私も早速試してみます。情報ありがとうございます。 同士討ちは、それはそれで面白そうなのでやってみます。 同士討ちは”Anim Walk”による判定か”Anim Attack”による判定か 判別出来れば解消するんですかね〜。やれるかわかりませんが・・ http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/136
137: 名前は開発中のものです。 [sage] 2021/05/12(水) 00:57:58.28 ID:z4QIhI5l 近くにいる敵に向かって進む @script if(frame==6) { float Velx=2, Velz=1, dx=0, dz=0; void self = getlocalvar("self"); int dir = getentityproperty(self, "direction"); float x = getentityproperty(self, "x"); float z = getentityproperty(self, "z"); if (dir == 0) { dx = -dx; } setlocalvar("T"+self, findtarget(self)); if( getlocalvar("T"+self) != NULL()) { void target = getlocalvar("T"+self); float Tx = getentityproperty(target, "x"); float Tz = getentityproperty(target, "z"); if(Tx < x){ changeentityproperty(self, "direction", 0); } else { changeentityproperty(self, "direction", 1); } 続く http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/137
138: 名前は開発中のものです。 [sage] 2021/05/12(水) 01:03:15.13 ID:z4QIhI5l 続き x = x+dx; z = z+dz; float Disx = Tx - x; float Disz = Tz - z; if(Disx < 0){ Disx = -Disx; } if(Disz < 0){ Disz = -Disz; } if(Disz < Disx) { if(Tx < x){ setlocalvar("x"+self, -Velx); } else { setlocalvar("x"+self, Velx); } setlocalvar("z"+self, Velx*(Tz-z)/Disx); } else { if(Tz < z){ setlocalvar("z"+self, -Velz); } else { setlocalvar("z"+self, Velz); } setlocalvar("x"+self, Velz*(Tx-x)/Disz); } } else { setlocalvar("z"+self, 0); if(dir==0){ setlocalvar("x"+self, -Velx); } else { setlocalvar("x"+self, Velx); } } float Vvx = getlocalvar("x"+self); float Vvz = getlocalvar("z"+self); if( Vvx!=NULL() && Vvz!=NULL() ) { changeentityproperty(self, "velocity", Vvx, Vvz); } } @end_script 近くにいる敵をFindtargetして座標を割り出し、自分の座標と比較して 向きと距離から計算して、敵のいる方向にVelocity(慣性とでもいいますか、強制移動)させるというもの http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/138
139: 名前は開発中のものです。 [sage] 2021/05/12(水) 01:15:27.65 ID:z4QIhI5l >>137 で(Frame==6)とあるようにAnim のFrame 7番目(1番は0なので)で実行されます。 frame 7番目にAttackコマンドが記述してあれば、攻撃判定を持ったまま移動します。 勢いは Velx(横方向)Velz(奥行き)dx、dzはスタート位置をずらしたりの調整(0でOK) 適当なFrameで@cmd changeentityproperty getlocalvar("self") "velocity" 0 0 0として 止めてあげます。 利点は、奥や手前の敵にホーミング攻撃できる! 問題点はFindtarget(OpenBoRに最初から用意されてるコマンド)が結構雑で思った敵に行かない所でしょうか 一対一の格闘ではないですし、現在画面内にいる敵をカウントして自分との距離を算出するなんて 想像しただけで気が遠くなるので、コマンドを用意してくれてる公式に感謝です。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/139
140: 名前は開発中のものです。 [sage] 2021/05/12(水) 01:48:22.25 ID:z4QIhI5l >>136 さん 同士討ちの原因は簡単で candamage player enemy candamage(Attackコマンドの攻撃判定が有効になる対象) player(そのままプレイヤー) enemy(TYPE_ENEMYと設定されたentity)なので これが記述されていると同士討ちになる訳です。 特別スクリプトを使わずに、OpenBoRの基本設定でなんとできるかな?と試しただけなので穴だらけです。 丁寧に処理するには、OnDoAttack(Entityが攻撃コマンド実行時に処理されるスクリプト)か AnimationScript(Entityが何かするたび処理)辺りで設定してみるか、 @scriptでうまいこと座標の重なりを検知できれば良いのですが、 攻撃対象を検知(FindTarget)するのはあるんで、きっと存在はしてる筈なのですが http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/140
141: 名前は開発中のものです。 [sage] 2021/05/12(水) 01:56:59.21 ID:z4QIhI5l >>134 で苦労の割りにと書いたのは、場合によっては全ての敵にAnim Pain6などリアクション設定しないと あまり効果が出ないので、同じ種類の敵でもSpeed(移動速度)をランダムにしてみる。 などのステータスを弄ってみたほうが楽かなと思いました。 srand(seed) set a seed for random number generator まだ使った事ないですが、こんなコマンドもあるようなので試してみようと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/141
142: 名前は開発中のものです。 [sage] 2021/05/12(水) 15:39:00.17 ID:z4QIhI5l スクリプトばっかりで意味がわからん、という方も多いかと思います。 スクリプトはあくまで味付けなので、殆どのMODはOpenBoRの基本コマンドだけで作られていますので もし、たとえばOpenBoR STATSに触れる機会があったら、+LEVELSをクリックしていってみて spawn Bob health 50 coords 500 200 at 0 こんな感じの所をコピペで増やしてみたり +PLAYERをクリックしていってHealth 100などとあったら300にしてみたり ちょっとづつ出来合いのものを変えてみてはいかがでしょう? でもちょっと味付けを変えてみようかな?と思ったら Chrono Crash 公式?サイトから OpenBOR >Help & Resources >Scripting >Scripts Index とたどっていって Bloodbane's Simple Scriptsあたりを見てみると大量に実例とファイルが用意されているので 覗いてみると泥沼に嵌るかもしれません。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/142
143: 名前は開発中のものです。 [sage] 2021/05/13(木) 01:20:35.32 ID:OoHlaO5a anim jumpattack3 ## Jump, Up + A @script if(frame==3) { float vx=3, vz=0, vy=-4; int vd=getentityproperty(getlocalvar("self"),"direction"); if(vd==0) { vx= -vx; } changeentityproperty(getlocalvar("self"), "velocity", vx, vz, vy); } @end_script jumpframe 0 2 -0.5 delay 8 offset 34 97 frame data/chars/kunagi/318.gif offset 34 95 frame data/chars/kunagi/319.gif offset 42 88 frame data/chars/kunagi/320.gif delay 30 attack 20 20 30 60 10 0 1 0 0 20 stun 1 offset 40 99 frame data/chars/kunagi/371.gif offset 65 90 frame data/chars/kunagi/372.gif 私は基本あまり使わない攻撃には強力な性能を仕込むようにしてます。 例はジャンプ中にレバー上+A で飛び込み攻撃 OpenBoRの標準コマンド JumpFrameはとても便利ですが、一つのAnim中に一回しか機能しません そこで@Scriptを使って飛び込み動作をさせています。地上でVelocityを使う時はX,Z,Yを0に 戻す手間が掛かりますが、Jump中なら着地で自動的に0に戻るので、気軽に使えます。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/143
144: 名前は開発中のものです。 [sage] 2021/05/16(日) 00:01:17.20 ID:FoJl/otl あいかわらず Paletteや ReMapについては良く分からないです。 ぐっちゃぐちゃの色になったり、Alphaがとんでもない事になったり もう色については放置です。 @cmd changeentityproperty getlocalvar("self") "animation" openborconstant("ANI_CHARGE") frame data/〜 とすることで、Animの処理中に別なAnim(例ではCHARGE)に処理を跳ばす事が出来るんですが 処理中のAnimにLoop 1(当該Animを繰り返し実行)があると、例のパターンだと一瞬だけANI_CHARGEに跳んで すぐLoop 1のAnimに戻ってしまうんですね。 そんな時、Loop 1であっても別なAnimに処理を強制的に移行させるのが @cmd executeanimation getlocalvar("self") openborconstant("ANI_CHARGE") 0 これで、Loopの呪縛から開放されます。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/144
145: 名前は開発中のものです。 [sage] 2021/05/16(日) 00:31:35.07 ID:FoJl/otl >>143 に、ジャンプ上攻撃(JumpAttack3)の中にもJumpFrame 0 2 0.5とありますが これは、元々のジャンプが降下に移っているとき攻撃を出しても、 攻撃が実行される前に着地してしまうことを避けるため、擬似2段ジャンプのような形にして JumpAttack3が降下中でも攻撃判定がでるように工夫してます。 以前に紹介した、Cancelを利用した2段ジャンプは別にFreeSpecialを用意する必要がありましたが 時には使う事が無いJumpAttack2やJumpAttack3を2段ジャンプ代わりにすることも出来るわけです。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/145
146: 名前は開発中のものです。 [sage] 2021/05/16(日) 00:43:11.17 ID:FoJl/otl >>137 の敵に向かってホーミング移動は自分だけでは無く 自分が射出する系(はどー拳みたいな)のEntityに仕込むことで、実際に誘導弾にできるので void self = getlocalvar("self"); float vX=2 , vY= 0, vZ= 0, dX= 50; int sX = getentityproperty(self, "x"); int sY = getentityproperty(self, "a"); int sZ = getentityproperty(self, "z"); int iCnt=4, iEnt, Rd= 0, dir = getentityproperty(self, "direction"); if(!dir) { dX= -dX; } for(iEnt= 0; iEnt<iCnt; iEnt++) { void vShot = projectile("Ktball", sX+dX, sZ+0, sY+60); vY += 0.5; vX -= 0.25; setdrawmethod(vShot, 1, 160, 160,0,0,0,1,0,0,0,0,0); changeentityproperty(vShot, "owner", self); changeentityproperty(vShot, "parent", self); changeentityproperty(vShot, "direction", self); changeentityproperty(vShot, "velocity", vX, vZ, vY); changeentityproperty(vShot, "speed", vX); } こんな感じのスクリプト(4発 iCnt=4 の弾 ”Ktball”をばら撒く)の ”name Ktball”Entityに >>137 の誘導スクリプトを仕込めば画面がとっても五月蝿い感じになります。 http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/146
147: 名前は開発中のものです。 [sage] 2021/05/16(日) 00:46:10.02 ID:FoJl/otl 上の setdrawmethod(vShot, 1, 160, 160,0,0,0,1,0,0,0,0,0); changeentityproperty(vShot, "owner", self); changeentityproperty(vShot, "parent", self); ここはあまり意味無い(darawmethodによる描画の変化、プレイヤーにスコアが入るかの設定)なので 気にしないでOK http://mevius.5ch.net/test/read.cgi/gamedev/1547405874/147
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 509 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s